{"schemaVersion":1,"title":"Syidax Grid API Reference","documents":[{"path":"/docs","id":"overview","kind":"guide","title":"Grid Docs","summary":"Grid is both a table for reading data and an input interface that returns users' search, selection, and editing results to your app. This manual explains data flow and how to combine features, as well as how to enable them.","examples":[{"title":"Read-only order list","explanation":"Display product names and order quantities without allowing edits. Connect columns and rows first, then enable only sorting and searching.","source":"grid.defaultColDef = { sortable: true, editable: false };\ngrid.quickFilter = true;\ngrid.pagination = true;\ngrid.pageSize = 20;","result":"Limit how much users read on one page as row counts grow. Distinguish search and sorting, which change the view, from editing, which changes source values."},{"title":"An editing and saving workflow","explanation":"Make quantity editable, then read actual changes from cellValueChanged for saving. Your app is responsible for server saving outside the Grid.","source":"grid.addEventListener('cellValueChanged', ({ detail }) => {\n  console.log(detail.rowId, detail.field, detail.oldValue, detail.newValue);\n});","result":"The event includes the row ID and before/after values. Display save success or failure according to the server response."},{"title":"Navigate from summaries to source rows","explanation":"Choose grouping for totals by team and pivoting for comparisons across teams and regions. An individual order quantity and a summarized quantity have different meanings.","source":"// Pro: group orders by team\ngrid.groupBy = 'team';\ngrid.pagination = false;","result":"Expand team summaries to inspect individual orders. When switching to pivoting, clear regular groupBy and specify pivot row, column, and value dimensions."}],"sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"Start with installation and the data model, then visit the feature chapters you need. The API reference lets you look up individual properties, methods, and events. In examples, grid is a registered sy-grid element. Docs contain code and result explanations rather than a running Grid; connect the examples in your app."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Read-only order list","blocks":[{"kind":"paragraph","text":"Display product names and order quantities without allowing edits. Connect columns and rows first, then enable only sorting and searching."},{"kind":"code","source":"grid.defaultColDef = { sortable: true, editable: false };\ngrid.quickFilter = true;\ngrid.pagination = true;\ngrid.pageSize = 20;","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Limit how much users read on one page as row counts grow. Distinguish search and sorting, which change the view, from editing, which changes source values."}]},{"id":"example-2","title":"Example 2. An editing and saving workflow","blocks":[{"kind":"paragraph","text":"Make quantity editable, then read actual changes from cellValueChanged for saving. Your app is responsible for server saving outside the 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":"Verify the result: The event includes the row ID and before/after values. Display save success or failure according to the server response."}]},{"id":"example-3","title":"Example 3. Navigate from summaries to source rows","blocks":[{"kind":"paragraph","text":"Choose grouping for totals by team and pivoting for comparisons across teams and regions. An individual order quantity and a summarized quantity have different meanings."},{"kind":"code","source":"// Pro: group orders by team\ngrid.groupBy = 'team';\ngrid.pagination = false;","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Expand team summaries to inspect individual orders. When switching to pivoting, clear regular groupBy and specify pivot row, column, and value dimensions."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"Virtualization alone does not fix slow downloads. It reduces the number of screen elements, while remote row models reduce the scope of fetched data."},{"kind":"paragraph","text":"The Features order example is for trying functionality. App integrations such as collaboration servers, permissions, and file saving require the prerequisites described in their chapters."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"paragraph","text":"Review the shared settings together with the related documentation below."},{"kind":"links","items":[{"path":"/docs/options","title":"Grid properties","description":""},{"path":"/docs/columns","title":"Column settings","description":""},{"path":"/docs/methods","title":"Methods","description":""}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/workspace","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/guides/getting-started","id":"getting-started","kind":"guide","title":"Get started with Grid","summary":"Install the edition you need from npm, then import CSS and register sy-grid. Register only one edition, Community or Pro, on a page.","examples":[{"title":"Register Community and create your first table","explanation":"Run this in the entry file of an app with the Community package installed. First add <sy-grid id=\"orders\"></sy-grid>to your page.","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: 'en', getRowId: row => row.id,\n  defaultColDef: { sortable: true },\n  columnDefs: [\n    { field: 'id', headerName: 'Order ID', editable: false },\n    { field: 'product', headerName: 'Product' },\n    { field: 'team', headerName: 'Team' },\n    { field: 'region', headerName: 'Region' },\n    { field: 'quantity', headerName: 'Quantity', editor: 'number', editable: true },\n    { field: 'price', headerName: 'Unit price', 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":"Six columns and three orders appear, with editable quantities. Run this in an app with a bundler so package imports can be resolved for the browser."},{"title":"An app using Pro features","explanation":"Use Pro import paths consistently in apps using the Pro package. The /licenses/grid.json path below must be provided by your app to serve its issued certificate.","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('Unable to load the license.');\nconst result = await registerLicense(await response.json());\nif (!result.ok) throw new Error('Check your license.');\ndefineCustomElement();","result":"Connect the component after registration returns ok. Supply only the issued certificate; never include signing private keys in the app."},{"title":"An app that reopens views","explanation":"When tabs or routes change, clean up existing elements and event subscriptions and reference the new view's element. Avoid calls through a grid variable from another view.","source":"const controller = new AbortController();\ngrid.addEventListener('selectionChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// Call when disposing of this view.\nfunction dispose() {\n  controller.abort();\n  grid.remove();\n}","result":"Reentering the view does not duplicate event handling. Clean up app-created sockets and timers at the same time."}],"sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"The short examples in this manual assume grid has the basic setup below. Reassigning columnDefs and rowData in an example replaces their previous values."}]},{"id":"example-1","title":"Example 1. Register Community and create your first table","blocks":[{"kind":"paragraph","text":"Run this in the entry file of an app with the Community package installed. First add <sy-grid id=\"orders\"></sy-grid>to your page."},{"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: 'en', getRowId: row => row.id,\n  defaultColDef: { sortable: true },\n  columnDefs: [\n    { field: 'id', headerName: 'Order ID', editable: false },\n    { field: 'product', headerName: 'Product' },\n    { field: 'team', headerName: 'Team' },\n    { field: 'region', headerName: 'Region' },\n    { field: 'quantity', headerName: 'Quantity', editor: 'number', editable: true },\n    { field: 'price', headerName: 'Unit price', 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":"Verify the result: Six columns and three orders appear, with editable quantities. Run this in an app with a bundler so package imports can be resolved for the browser."}]},{"id":"example-2","title":"Example 2. An app using Pro features","blocks":[{"kind":"paragraph","text":"Use Pro import paths consistently in apps using the Pro package. The /licenses/grid.json path below must be provided by your app to serve its issued certificate."},{"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('Unable to load the license.');\nconst result = await registerLicense(await response.json());\nif (!result.ok) throw new Error('Check your license.');\ndefineCustomElement();","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Connect the component after registration returns ok. Supply only the issued certificate; never include signing private keys in the app."}]},{"id":"example-3","title":"Example 3. An app that reopens views","blocks":[{"kind":"paragraph","text":"When tabs or routes change, clean up existing elements and event subscriptions and reference the new view's element. Avoid calls through a grid variable from another view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('selectionChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// Call when disposing of this view.\nfunction dispose() {\n  controller.abort();\n  grid.remove();\n}","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Reentering the view does not duplicate event handling. Clean up app-created sockets and timers at the same time."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"Use HTML examples with an app build tool that resolves npm imports. See Installation for the package commands and CSS imports."},{"kind":"paragraph","text":"If the Grid is invisible, first check registration, element selection, height, and parent width. Investigate Pro permission issues separately from empty data."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"paragraph","text":"Review the shared settings together with the related documentation below."},{"kind":"links","items":[{"path":"/docs/options","title":"Grid properties","description":""},{"path":"/docs/columns","title":"Column settings","description":""},{"path":"/docs/methods","title":"Methods","description":""}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/getting-started","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/guides/concepts","id":"concepts","kind":"guide","title":"Rows, columns, and state","summary":"rowData contains actual order values; columnDefs describes the columns that display them. field is the data key, and headerName is the display heading. Changing a heading does not rename the source field.","examples":[{"title":"Localize only column headings","explanation":"Keep the product key in server data and change only the displayed heading.","source":"grid.columnDefs = [{ field: 'product', headerName: 'Product name', width: 220 }];","result":"Only the heading changes, with no data conversion. Changing field to Product name would produce empty values if rows lack that key."},{"title":"Find update targets by ID","explanation":"Even if sorting moves ORD-0002 to the top, update only the order identified by its 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":"The same order is updated despite display-order changes because the code does not assume it is the second row in the source array."},{"title":"Pass arrays and simple values","explanation":"height accepts a number or CSS length; column definitions and data are JavaScript objects.","source":"grid.height = '60vh';\ngrid.pagination = false;\ngrid.rowData = [...grid.rowData, { id: 'ORD-0004', product: 'Delta', quantity: 5 }];","result":"Passing a new array adds the order. This differs from placing serialized JSON strings in HTML attributes."}],"sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"Distinguish display positions from business IDs. Sorting, filtering, and grouping change positions. The unique ID returned by getRowId identifies the same order during updates, selection, and restoration."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Localize only column headings","blocks":[{"kind":"paragraph","text":"Keep the product key in server data and change only the displayed heading."},{"kind":"code","source":"grid.columnDefs = [{ field: 'product', headerName: 'Product name', width: 220 }];","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Only the heading changes, with no data conversion. Changing field to Product name would produce empty values if rows lack that key."}]},{"id":"example-2","title":"Example 2. Find update targets by ID","blocks":[{"kind":"paragraph","text":"Even if sorting moves ORD-0002 to the top, update only the order identified by its 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":"Verify the result: The same order is updated despite display-order changes because the code does not assume it is the second row in the source array."}]},{"id":"example-3","title":"Example 3. Pass arrays and simple values","blocks":[{"kind":"paragraph","text":"height accepts a number or CSS length; column definitions and data are JavaScript objects."},{"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":"Verify the result: Passing a new array adds the order. This differs from placing serialized JSON strings in HTML attributes."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"IDs must be unique and stable across edits. Avoid switching ID types, such as between numeric 1 and string \"1\"."},{"kind":"paragraph","text":"When defaultColDef and individual column settings coexist, inspect the individual settings. Even with editing enabled globally, editable: false can protect the order ID column."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"paragraph","text":"Review the shared settings together with the related documentation below."},{"kind":"links","items":[{"path":"/docs/options","title":"Grid properties","description":""},{"path":"/docs/columns","title":"Column settings","description":""},{"path":"/docs/methods","title":"Methods","description":""}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/concepts","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/features/column-operations","id":"column-operations","kind":"feature","group":"columns","title":"Column sizing and pinning","tier":"free","summary":"Width, order, pinning, and visibility are independent column states. Combine them to pin order IDs, hide supporting information, and widen long product names.","examples":[{"title":"Pin important columns","explanation":"Pin IDs on the left so orders remain identifiable while scrolling horizontally.","source":"await grid.setColumnPinned('id', 'left');\nawait grid.setColumnWidth('product', 280);","result":"The ID column stays on the left and the product column becomes 280px wide. Too many pinned columns reduce space for the center area."},{"title":"Compact and detailed views","explanation":"Hide price when users do not need unit prices. This does not remove the data field.","source":"await grid.hideColumn('price');\nconsole.log(await grid.getHiddenColumns());\n// Return to the detailed view\nawait grid.showColumn('price');","result":"Only column visibility changes. When values must be hidden for security, also enforce permissions and server data restrictions."},{"title":"Size columns to their content","explanation":"Autosize only the needed columns, then save the current configuration.","source":"await grid.autoSizeColumn('product');\nconst savedColumns = await grid.getColumnState();\nconsole.log(savedColumns);\n// Restore later after preparing the same column IDs\nawait grid.applyColumnState(savedColumns);","result":"Read content-based widths and column state. Some settings cannot be applied if column IDs have changed."}],"featureId":"column-operations","sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"Declare defaults in initial column definitions and use column methods for runtime changes. To preserve user choices, save getColumnState results rather than the original columnDefs."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Pin important columns","blocks":[{"kind":"paragraph","text":"Pin IDs on the left so orders remain identifiable while scrolling horizontally."},{"kind":"code","source":"await grid.setColumnPinned('id', 'left');\nawait grid.setColumnWidth('product', 280);","language":"javascript"},{"kind":"paragraph","text":"Verify the result: The ID column stays on the left and the product column becomes 280px wide. Too many pinned columns reduce space for the center area."}]},{"id":"example-2","title":"Example 2. Compact and detailed views","blocks":[{"kind":"paragraph","text":"Hide price when users do not need unit prices. This does not remove the data field."},{"kind":"code","source":"await grid.hideColumn('price');\nconsole.log(await grid.getHiddenColumns());\n// Return to the detailed view\nawait grid.showColumn('price');","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Only column visibility changes. When values must be hidden for security, also enforce permissions and server data restrictions."}]},{"id":"example-3","title":"Example 3. Size columns to their content","blocks":[{"kind":"paragraph","text":"Autosize only the needed columns, then save the current configuration."},{"kind":"code","source":"await grid.autoSizeColumn('product');\nconst savedColumns = await grid.getColumnState();\nconsole.log(savedColumns);\n// Restore later after preparing the same column IDs\nawait grid.applyColumnState(savedColumns);","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Read content-based widths and column state. Some settings cannot be applied if column IDs have changed."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"Combining width with minWidth and maxWidth can also constrain autosizing. Distinguish fixed-width columns from flex columns that share remaining space."},{"kind":"paragraph","text":"Reassigning the old columnDefs array after users reorder columns may overwrite their configuration. Decide whether initial settings or user state takes priority."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"links","items":[{"path":"/docs/options/resizableColumns","title":"resizableColumns","description":"Allows users to resize columns by dragging their boundaries."},{"path":"/docs/options/reorderableColumns","title":"reorderableColumns","description":"Allows users to reorder columns by dragging headers."},{"path":"/docs/options/columnHiding","title":"columnHiding","description":"Enables column hiding. Also provide a menu or panel for restoring hidden columns."},{"path":"/docs/options/hideableColumns","title":"hideableColumns","description":"Compatibility setting for column hiding. Keep it consistent with columnHiding."},{"path":"/docs/options/autoSizeOnDoubleClick","title":"autoSizeOnDoubleClick","description":"Autosizes a column to its content when its boundary is double-clicked."},{"path":"/docs/columns/width","title":"width","description":"Initial column width in pixels."},{"path":"/docs/columns/minWidth","title":"minWidth","description":"Minimum width allowed during user resizing and autosizing."},{"path":"/docs/columns/maxWidth","title":"maxWidth","description":"Maximum column width."},{"path":"/docs/columns/flex","title":"flex","description":"Relative share of remaining space. Review alongside fixed, minimum, and maximum widths."},{"path":"/docs/columns/resizable","title":"resizable","description":"Whether users can resize this column."},{"path":"/docs/columns/reorderable","title":"reorderable","description":"Whether users can move this column."},{"path":"/docs/columns/pinned","title":"pinned","description":"Pins the column left/right, or unpins it with null."},{"path":"/docs/columns/hidden","title":"hidden","description":"Whether the column starts hidden. Does not revoke read permission."},{"path":"/docs/columns/hide","title":"hide","description":"Compatibility alias for column hiding. Do not assign conflicting values to hidden."},{"path":"/docs/methods/setColumnWidth","title":"setColumnWidth","description":"Sets the current column width. Review minimum and maximum constraints too."},{"path":"/docs/methods/resetColumnWidth","title":"resetColumnWidth","description":"Resets the specified column's user-adjusted width to its initial setting."},{"path":"/docs/methods/getColumnWidth","title":"getColumnWidth","description":"Reads the current column width, or null if the column is absent."},{"path":"/docs/methods/setColumnPinned","title":"setColumnPinned","description":"Pins a column left/right or unpins it."},{"path":"/docs/methods/getColumnPinned","title":"getColumnPinned","description":"Reads the column's current pinning direction."},{"path":"/docs/methods/setColumnOrder","title":"setColumnOrder","description":"Sets display order using column IDs."},{"path":"/docs/methods/getColumnOrder","title":"getColumnOrder","description":"Reads column IDs in current display order."},{"path":"/docs/methods/hideColumn","title":"hideColumn","description":"Hides a column without deleting source data or revoking read permission."},{"path":"/docs/methods/showColumn","title":"showColumn","description":"Shows a hidden column."},{"path":"/docs/methods/toggleColumnVisibility","title":"toggleColumnVisibility","description":"Toggles column visibility and returns the resulting state."},{"path":"/docs/methods/setHiddenColumns","title":"setHiddenColumns","description":"Sets the list of hidden columns at once."},{"path":"/docs/methods/resetColumnVisibility","title":"resetColumnVisibility","description":"Resets column visibility to initial settings."},{"path":"/docs/methods/getHiddenColumns","title":"getHiddenColumns","description":"Reads IDs of currently hidden columns."},{"path":"/docs/methods/autoSizeColumn","title":"autoSizeColumn","description":"Measures currently available content and applies an appropriate width to one column."},{"path":"/docs/methods/autoSizeAllColumns","title":"autoSizeAllColumns","description":"Autosizes all columns. Do not assume unloaded server values can be measured."},{"path":"/docs/methods/getColumnState","title":"getColumnState","description":"Reads serializable column width, order, visibility, sorting, and pinning state."},{"path":"/docs/methods/applyColumnState","title":"applyColumnState","description":"Restores saved column state. Verify that IDs match current columns."},{"path":"/docs/events/columnResized","title":"columnResized","description":"Emitted when column width changes. Include the current width in saved view state."},{"path":"/docs/events/columnReordered","title":"columnReordered","description":"Emitted when column order changes."},{"path":"/docs/events/columnVisibilityChanged","title":"columnVisibilityChanged","description":"Emitted when column visibility changes."}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/column-operations","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/features/column-groups","id":"column-groups","kind":"feature","group":"columns","title":"Multi-level headers","summary":"Multi-level headers place related columns under a shared heading. Unlike row grouping, they do not change data counts or aggregate values.","examples":[{"title":"Separate order and pricing information","explanation":"Group product and quantity under one heading and display unit price separately.","source":"grid.columnDefs = [\n  { groupId: 'order', headerName: 'Order details', children: [\n    { field: 'product', headerName: 'Product' },\n    { field: 'quantity', headerName: 'Quantity' }\n  ] },\n  { field: 'price', headerName: 'Unit price' }\n];","result":"Two columns appear under Order details. Source order objects can retain their flat structure."},{"title":"Control expansion","explanation":"Configure some groups to collapse when screen space is limited.","source":"await grid.setColumnGroupOpened('order', false);\n// After the user chooses to show details\nawait grid.setColumnGroupOpened('order', true);","result":"The specified group's expansion state changes. columnGroupShow also determines which child columns are actually hidden."},{"title":"Query live groups","explanation":"Query the connected group object to display group information in a settings view.","source":"const group = await grid.getColumnGroup('order');\nconst groups = await grid.getColumnGroups();\nconsole.log(group, groups);","result":"A missing group may return null. Distinguish serializable settings JSON from a live group reference."}],"featureId":"column-groups","sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"Specify groupId and children on parent groups, and field or colId on leaf columns that read values. Keeping group and column IDs distinct makes persistence and control clearer."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Separate order and pricing information","blocks":[{"kind":"paragraph","text":"Group product and quantity under one heading and display unit price separately."},{"kind":"code","source":"grid.columnDefs = [\n  { groupId: 'order', headerName: 'Order details', children: [\n    { field: 'product', headerName: 'Product' },\n    { field: 'quantity', headerName: 'Quantity' }\n  ] },\n  { field: 'price', headerName: 'Unit price' }\n];","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Two columns appear under Order details. Source order objects can retain their flat structure."}]},{"id":"example-2","title":"Example 2. Control expansion","blocks":[{"kind":"paragraph","text":"Configure some groups to collapse when screen space is limited."},{"kind":"code","source":"await grid.setColumnGroupOpened('order', false);\n// After the user chooses to show details\nawait grid.setColumnGroupOpened('order', true);","language":"javascript"},{"kind":"paragraph","text":"Verify the result: The specified group's expansion state changes. columnGroupShow also determines which child columns are actually hidden."}]},{"id":"example-3","title":"Example 3. Query live groups","blocks":[{"kind":"paragraph","text":"Query the connected group object to display group information in a settings view."},{"kind":"code","source":"const group = await grid.getColumnGroup('order');\nconst groups = await grid.getColumnGroups();\nconsole.log(group, groups);","language":"javascript"},{"kind":"paragraph","text":"Verify the result: A missing group may return null. Distinguish serializable settings JSON from a live group reference."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"A group with children is not itself a cell that reads row data. Assigning field to a group heading does not create a calculated column."},{"kind":"paragraph","text":"Combining pinning and hiding changes the visible group structure. Verify that headers remain readable in both pinned and regular areas."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"links","items":[{"path":"/docs/columns/columnGroupShow","title":"columnGroupShow","description":"Chooses whether the column appears when its parent group is expanded or collapsed."},{"path":"/docs/methods/setColumnGroupOpened","title":"setColumnGroupOpened","description":"Expands or collapses the specified column group header."},{"path":"/docs/events/columnGroupToggled","title":"columnGroupToggled","description":"Emitted when a column group header expands or collapses. Read groupId and open for its state."}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/column-groups","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/features/column-api","id":"column-api","kind":"feature","group":"columns","title":"Live column API","tier":"free","summary":"Live column objects are references connected to the current Grid. They differ from serializable column-state arrays: references suit UI controls for individual columns, while state arrays suit saved preferences.","examples":[{"title":"Compare one column with all columns","explanation":"Find the product column and query the complete column list.","source":"const product = await grid.getColumn('product');\nconst columns = await grid.getColumns();\nconsole.log(product, columns);","result":"Receive one reference and an array of references. Query using field or colId, not the title."},{"title":"Connect APIs to the current view","explanation":"Show the current width in your app immediately after users drag it.","source":"grid.addEventListener('columnResized', async () => {\n  console.log(await grid.getColumnWidth('product'));\n});","result":"Read the applied width rather than the initial width declaration. Clean up event subscriptions when disposing of the view."},{"title":"Read serializable state","explanation":"Read dedicated state instead of serializing live objects.","source":"const state = await grid.getColumnState();\nconst json = JSON.stringify(state);\nawait grid.applyColumnState(JSON.parse(json));","result":"Store width, order, visibility, and pinning as serializable values. Use getState if you also need complete filter and selection state."}],"featureId":"column-api","sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"getColumn accepts a unique column name and may return null for missing names. Do not assume an old reference remains valid after columns are replaced or a view is removed."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Compare one column with all columns","blocks":[{"kind":"paragraph","text":"Find the product column and query the complete column list."},{"kind":"code","source":"const product = await grid.getColumn('product');\nconst columns = await grid.getColumns();\nconsole.log(product, columns);","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Receive one reference and an array of references. Query using field or colId, not the title."}]},{"id":"example-2","title":"Example 2. Connect APIs to the current view","blocks":[{"kind":"paragraph","text":"Show the current width in your app immediately after users drag it."},{"kind":"code","source":"grid.addEventListener('columnResized', async () => {\n  console.log(await grid.getColumnWidth('product'));\n});","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Read the applied width rather than the initial width declaration. Clean up event subscriptions when disposing of the view."}]},{"id":"example-3","title":"Example 3. Read serializable state","blocks":[{"kind":"paragraph","text":"Read dedicated state instead of serializing live objects."},{"kind":"code","source":"const state = await grid.getColumnState();\nconst json = JSON.stringify(state);\nawait grid.applyColumnState(JSON.parse(json));","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Store width, order, visibility, and pinning as serializable values. Use getState if you also need complete filter and selection state."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"Component methods return Promises. const column = grid.getColumn(...) yields a Promise, not a column; use await."},{"kind":"paragraph","text":"In views with multiple Grids, track which element supplied a reference. Matching column IDs in different Grids do not identify the same column object."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"links","items":[{"path":"/docs/methods/getColumn","title":"getColumn","description":"Finds a current column object by ID. Returns null for missing columns and reflects live state rather than an initial columnDefs copy."},{"path":"/docs/methods/getColumns","title":"getColumns","description":"Reads current column objects to connect widths, order, and visibility to your app."},{"path":"/docs/methods/getColumnGroup","title":"getColumnGroup","description":"Finds a current column group by ID. Returns null if absent."},{"path":"/docs/methods/getColumnGroups","title":"getColumnGroups","description":"Reads current column group objects."}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/column-api","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/features/value-getter-formatter","id":"value-getter-formatter","kind":"feature","group":"columns","title":"Separate calculation and display","tier":"free","summary":"valueGetter produces a calculated value, while valueFormatter produces readable display text. Return numbers from getters when totals, sorting, or comparisons require numeric values.","examples":[{"title":"Calculate totals from quantity and unit price","explanation":"Add a calculated column even when the source data has no total field.","source":"grid.columnDefs = [...grid.columnDefs, {\n  field: 'amount', colId: 'amount', headerName: 'Total', editable: false,\n  valueGetter: ({ data }) => Number(data.quantity) * Number(data.price)\n}];","result":"10 × 120 produces numeric 1200. Editing quantity to 20 changes the result to 2400."},{"title":"Add currency formatting","explanation":"Preserve the actual number while formatting amounts for the user's language.","source":"grid.columnDefs = [{ field: 'price', headerName: 'Unit price',\n  valueFormatter: ({ value }) => new Intl.NumberFormat('en-US', {\n    style: 'currency', currency: 'KRW'\n  }).format(Number(value))\n}];","result":"Users see currency symbols and separators, while the source price remains numeric. Formatting does not convert the source currency."},{"title":"Distinguish empty values from zero","explanation":"Choose a separate empty-value display so a missing price is not incorrectly shown as zero.","source":"grid.columnDefs = [{ field: 'price', headerName: 'Unit price',\n  valueFormatter: ({ value }) => value == null ? 'Not entered' : Number(value).toLocaleString('en-US')\n}];","result":"null and undefined display as Not entered; numeric zero displays as 0. Handle invalid numbers during validation."}],"featureId":"value-getter-formatter","sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"Distinguish display-only formatters from valueParser and valueSetter, which change actual data. Reusing formatted text as calculation input can produce unexpected results because of units or separators."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Calculate totals from quantity and unit price","blocks":[{"kind":"paragraph","text":"Add a calculated column even when the source data has no total field."},{"kind":"code","source":"grid.columnDefs = [...grid.columnDefs, {\n  field: 'amount', colId: 'amount', headerName: 'Total', editable: false,\n  valueGetter: ({ data }) => Number(data.quantity) * Number(data.price)\n}];","language":"javascript"},{"kind":"paragraph","text":"Verify the result: 10 × 120 produces numeric 1200. Editing quantity to 20 changes the result to 2400."}]},{"id":"example-2","title":"Example 2. Add currency formatting","blocks":[{"kind":"paragraph","text":"Preserve the actual number while formatting amounts for the user's language."},{"kind":"code","source":"grid.columnDefs = [{ field: 'price', headerName: 'Unit price',\n  valueFormatter: ({ value }) => new Intl.NumberFormat('en-US', {\n    style: 'currency', currency: 'KRW'\n  }).format(Number(value))\n}];","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Users see currency symbols and separators, while the source price remains numeric. Formatting does not convert the source currency."}]},{"id":"example-3","title":"Example 3. Distinguish empty values from zero","blocks":[{"kind":"paragraph","text":"Choose a separate empty-value display so a missing price is not incorrectly shown as zero."},{"kind":"code","source":"grid.columnDefs = [{ field: 'price', headerName: 'Unit price',\n  valueFormatter: ({ value }) => value == null ? 'Not entered' : Number(value).toLocaleString('en-US')\n}];","language":"javascript"},{"kind":"paragraph","text":"Verify the result: null and undefined display as Not entered; numeric zero displays as 0. Handle invalid numbers during validation."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"Do not make network requests or mutate rowData inside a getter. Repeated calls during scrolling, sorting, and recalculation must return the same result for the same input."},{"kind":"paragraph","text":"If users need to enter formulas themselves, consider the formula feature instead of valueGetter. The two approaches differ in how results are stored and edited."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"links","items":[{"path":"/docs/columns/valueGetter","title":"valueGetter","description":"Returns a cell value calculated from the source row. Use valueFormatter for display-text changes only."},{"path":"/docs/columns/valueFormatter","title":"valueFormatter","description":"Displays values as readable currency, dates, or other strings without changing the stored source type."}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/value-getter-formatter","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/features/data-updates","id":"data-updates","kind":"feature","group":"rows","title":"Data updates","tier":"free","summary":"Replace rowData when receiving a complete query result. For partial changes, pass add, update, and remove to applyTransaction. Updates match through getRowId, not display positions.","examples":[{"title":"Replace the full query result","explanation":"Replace the list with orders queried for another period. Pass the array returned by your app's query API all at once.","source":"const response = await fetch('/api/orders?month=2026-10');\nif (!response.ok) throw new Error('Query failed');\nconst rows = await response.json();\ngrid.rowData = rows;","result":"Only the new query result appears. /api/orders is an example endpoint your app must implement; if its response is an object, extract the actual rows array."},{"title":"Increase one order's quantity","explanation":"Change the first order's quantity from 10 to 20. Pass a new row object that includes the other fields too.","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":"The matching order's quantity increases by 10. A total column calculated with valueGetter recalculates from the new quantity."},{"title":"Handle additions and removals together","explanation":"Remove a cancelled order while adding a new one. Find the removal target in the current data before passing it.","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":"Additions and removals appear in the same result report. Batching high-frequency incoming changes at intervals also reduces call volume."}],"featureId":"data-updates","sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"Transaction returns describe what actually happened. Inspect updated, rejected, and other results instead of assuming requested values were applied. Browser changes do not imply server persistence."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Replace the full query result","blocks":[{"kind":"paragraph","text":"Replace the list with orders queried for another period. Pass the array returned by your app's query API all at once."},{"kind":"code","source":"const response = await fetch('/api/orders?month=2026-10');\nif (!response.ok) throw new Error('Query failed');\nconst rows = await response.json();\ngrid.rowData = rows;","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Only the new query result appears. /api/orders is an example endpoint your app must implement; if its response is an object, extract the actual rows array."}]},{"id":"example-2","title":"Example 2. Increase one order's quantity","blocks":[{"kind":"paragraph","text":"Change the first order's quantity from 10 to 20. Pass a new row object that includes the other fields too."},{"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":"Verify the result: The matching order's quantity increases by 10. A total column calculated with valueGetter recalculates from the new quantity."}]},{"id":"example-3","title":"Example 3. Handle additions and removals together","blocks":[{"kind":"paragraph","text":"Remove a cancelled order while adding a new one. Find the removal target in the current data before passing it."},{"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":"Verify the result: Additions and removals appear in the same result report. Batching high-frequency incoming changes at intervals also reduces call volume."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"Do not assume how missing fields in update objects are handled; spread the existing row and override changed values. Manage request order so stale responses cannot overwrite recent edits."},{"kind":"paragraph","text":"For large changes, collect the delta instead of reassigning all rowData for every row. Server row models have their own transaction APIs, distinct from client transactions."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"links","items":[{"path":"/docs/options/rowData","title":"rowData","description":"The source row array for the table. Pass a new array to replace a complete query result, or use applyTransaction for partial updates."},{"path":"/docs/options/columnDefs","title":"columnDefs","description":"Defines column data fields, headings, sizes, visibility, and editing. Include column groups to create multi-level headers."},{"path":"/docs/options/defaultColDef","title":"defaultColDef","description":"Defaults shared by all columns. Override individual values in columnDefs for specific columns."},{"path":"/docs/columns/field","title":"field","description":"Required field path for reading a value from source rows. Use the data key, not a display heading."},{"path":"/docs/columns/colId","title":"colId","description":"Stable column ID for APIs and state persistence. Keep it unchanged when headings change."},{"path":"/docs/columns/headerName","title":"headerName","description":"User-facing column heading. Can differ from the source data key."},{"path":"/docs/methods/applyTransaction","title":"applyTransaction","description":"Adds, updates, and removes source rows by stable ID. Inspect results separately from app server saving."},{"path":"/docs/events/rowDataChanged","title":"rowDataChanged","description":"Emitted when source row data changes. Different from a change in display sorting."},{"path":"/docs/events/cellValueChanged","title":"cellValueChanged","description":"Emitted when an actual cell value changes. Use the row, field, and before/after values for saving or activity history."}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/data-updates","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/features/infinite-row-model","id":"infinite-row-model","kind":"feature","group":"rows","title":"Request only needed blocks","tier":"free","summary":"When downloading every order at once is impractical, request only the ranges needed for scrolling. datasource supplies data based on starting and ending rows and search conditions.","examples":[{"title":"Connect a range-query API","explanation":"This example assumes the server returns rows from startRow inclusive to endRow exclusive and a total count. Always report response failures to the 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('Query failed');\n    const { rows, total } = await response.json();\n    params.success(rows, total);\n  } catch { params.fail(); }\n}};","result":"Rows populate the range the user navigates to. Implement the example query endpoint in your app."},{"title":"Tune request size and caching","explanation":"If server round trips are slow, adjust block size to avoid frequent requests for small blocks.","source":"grid.cacheBlockSize = 100;\ngrid.maxBlocksInCache = 5;","result":"Limit rows per request and the number of retained blocks. Smaller caches reduce memory but may increase queries when revisiting earlier ranges."},{"title":"Refresh after server data changes","explanation":"Loaded cache data may be stale after an order is edited elsewhere.","source":"await grid.refreshInfiniteCache();","result":"Read the latest server values after the refresh request completes. A local cell transaction and a server requery are separate operations."}],"featureId":"infinite-row-model","sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"The Grid creates requests and your app interprets server responses. Report the final data position or total count accurately to prevent repeated empty requests or incorrect scroll lengths."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Connect a range-query API","blocks":[{"kind":"paragraph","text":"This example assumes the server returns rows from startRow inclusive to endRow exclusive and a total count. Always report response failures to the 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('Query failed');\n    const { rows, total } = await response.json();\n    params.success(rows, total);\n  } catch { params.fail(); }\n}};","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Rows populate the range the user navigates to. Implement the example query endpoint in your app."}]},{"id":"example-2","title":"Example 2. Tune request size and caching","blocks":[{"kind":"paragraph","text":"If server round trips are slow, adjust block size to avoid frequent requests for small blocks."},{"kind":"code","source":"grid.cacheBlockSize = 100;\ngrid.maxBlocksInCache = 5;","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Limit rows per request and the number of retained blocks. Smaller caches reduce memory but may increase queries when revisiting earlier ranges."}]},{"id":"example-3","title":"Example 3. Refresh after server data changes","blocks":[{"kind":"paragraph","text":"Loaded cache data may be stale after an order is edited elsewhere."},{"kind":"code","source":"await grid.refreshInfiniteCache();","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Read the latest server values after the refresh request completes. A local cell transaction and a server requery are separate operations."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"Call a success or failure callback only once per request. Finish validating the response before calling success, so a later exception does not also trigger failure."},{"kind":"paragraph","text":"Apply server search to the full data set before slicing a range. Searching only 100 downloaded rows misses matching rows elsewhere on the server."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"links","items":[{"path":"/docs/options/datasource","title":"datasource","description":"Data provider for the infinite row model. Complete each requested range through its success or failure callback."},{"path":"/docs/options/cacheBlockSize","title":"cacheBlockSize","description":"Block size for requesting and caching remote rows."},{"path":"/docs/options/maxBlocksInCache","title":"maxBlocksInCache","description":"Maximum cached blocks in the infinite row model. Balances memory use against repeat queries."},{"path":"/docs/methods/refreshInfiniteCache","title":"refreshInfiniteCache","description":"Refetches the infinite row model's cache. Prepare updated server conditions and the data provider first."}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/infinite-row-model","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/features/server-query","id":"server-query","kind":"feature","group":"rows","title":"Sort and search on the server","tier":"free","summary":"Server queries send row ranges, sorting, and filtering together as conditions. Use the Infinite model for simple lists and consider the Server-Side model for server grouping and pivoting.","examples":[{"title":"Request sorting by responsible team","explanation":"The sort model is an array of field and direction entries. Earlier entries take precedence in multi-column sorting.","source":"await grid.setSortModel([\n  { field: 'team', direction: 'asc' },\n  { field: 'quantity', direction: 'desc' }\n]);","result":"The server must apply the requested conditions to keep order consistent across pages. Sorting within one page does not guarantee a global order."},{"title":"Handle search and paging together","explanation":"For a request with search term Platform, startRow 0, and endRow 100, the server searches, sorts, then slices the range. It also calculates the total after filtering.","source":null,"result":"The response total is the number of all matching orders, not the count before filtering. Keep the same conditions for subsequent pages."},{"title":"Handle late responses","explanation":"After a user changes a search from A to AB, the A request may finish later. Use request IDs or cancellation signals so stale responses cannot overwrite newer queries.","source":null,"result":"Only results for the latest user conditions should remain visible. Distinguish cancelled requests from actual server errors in your messages."}],"featureId":"server-query","sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"Do not insert client-supplied field names directly into SQL. Interpret only allowed fields and operators, and calculate rows and total from the same conditions."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Request sorting by responsible team","blocks":[{"kind":"paragraph","text":"The sort model is an array of field and direction entries. Earlier entries take precedence in multi-column sorting."},{"kind":"code","source":"await grid.setSortModel([\n  { field: 'team', direction: 'asc' },\n  { field: 'quantity', direction: 'desc' }\n]);","language":"javascript"},{"kind":"paragraph","text":"Verify the result: The server must apply the requested conditions to keep order consistent across pages. Sorting within one page does not guarantee a global order."}]},{"id":"example-2","title":"Example 2. Handle search and paging together","blocks":[{"kind":"paragraph","text":"For a request with search term Platform, startRow 0, and endRow 100, the server searches, sorts, then slices the range. It also calculates the total after filtering."},{"kind":"paragraph","text":"Verify the result: The response total is the number of all matching orders, not the count before filtering. Keep the same conditions for subsequent pages."}]},{"id":"example-3","title":"Example 3. Handle late responses","blocks":[{"kind":"paragraph","text":"After a user changes a search from A to AB, the A request may finish later. Use request IDs or cancellation signals so stale responses cannot overwrite newer queries."},{"kind":"paragraph","text":"Verify the result: Only results for the latest user conditions should remain visible. Distinguish cancelled requests from actual server errors in your messages."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"New orders added between offset-based page queries may cause duplicates or omissions. Use a stable secondary sort key or a server snapshot boundary."},{"kind":"paragraph","text":"A short response is not necessarily an error. It may be the final range; evaluate it together with the total count."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"paragraph","text":"Review the shared settings together with the related documentation below."},{"kind":"links","items":[{"path":"/docs/options","title":"Grid properties","description":""},{"path":"/docs/columns","title":"Column settings","description":""},{"path":"/docs/methods","title":"Methods","description":""}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/server-query","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/features/server-side-row-model","id":"server-side-row-model","kind":"feature","group":"rows","title":"Server-side row model","tier":"pro","summary":"In this model, the server calculates grouping and pivots and supplies rows for each expanded group path. Its data responsibilities differ from grouping already loaded local rows with groupBy.","examples":[{"title":"Connect group requests","explanation":"Prepare the server to interpret group paths, filters, and sorting and return rows and 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('Query failed');\n    success(await response.json());\n  } catch { fail(); }\n}};","result":"Initially the server supplies top-level data; expanding a group requests data for that path. Review ServerSideGetRowsParams and Result as part of the server contract."},{"title":"Selection with partially loaded data","explanation":"Use server selection state to include orders that have not yet been downloaded.","source":"console.log(await grid.getServerSideSelectionState());\nconsole.log(await grid.getServerGroupSelectionState());","result":"Distinguish displayed row IDs from server-wide selection rules. Your app's bulk-operation API must understand those rules too."},{"title":"Inspect caches and processing results","explanation":"When an expanded group looks empty, inspect which stores have loaded.","source":"console.log(await grid.getServerSideStoreState());\nconsole.log(await grid.getServerPivotResultColumns());","result":"Inspect group store state separately from server-supplied pivot columns. Also check that server aggregate column names match the response data keys."}],"featureId":"server-side-row-model","sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"serverSideDatasource.getRows receives the request and success/failure callbacks as separate arguments. Do not confuse it with params.success in the Infinite datasource."},{"kind":"paragraph","text":"Using this feature in a product requires the Pro package and a valid license. Matching setting names do not enable Pro features in Community."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Connect group requests","blocks":[{"kind":"paragraph","text":"Prepare the server to interpret group paths, filters, and sorting and return rows and 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('Query failed');\n    success(await response.json());\n  } catch { fail(); }\n}};","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Initially the server supplies top-level data; expanding a group requests data for that path. Review ServerSideGetRowsParams and Result as part of the server contract."}]},{"id":"example-2","title":"Example 2. Selection with partially loaded data","blocks":[{"kind":"paragraph","text":"Use server selection state to include orders that have not yet been downloaded."},{"kind":"code","source":"console.log(await grid.getServerSideSelectionState());\nconsole.log(await grid.getServerGroupSelectionState());","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Distinguish displayed row IDs from server-wide selection rules. Your app's bulk-operation API must understand those rules too."}]},{"id":"example-3","title":"Example 3. Inspect caches and processing results","blocks":[{"kind":"paragraph","text":"When an expanded group looks empty, inspect which stores have loaded."},{"kind":"code","source":"console.log(await grid.getServerSideStoreState());\nconsole.log(await grid.getServerPivotResultColumns());","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Inspect group store state separately from server-supplied pivot columns. Also check that server aggregate column names match the response data keys."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"Do not use regular client applyTransaction to change all unloaded server rows. Use server changes and the server-specific transaction or requery flow."},{"kind":"paragraph","text":"Distinguish group counts from leaf order counts and pivot result columns from source columns. An incorrect rowCount for an expanded path also affects loading and selection."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"links","items":[{"path":"/docs/options/serverSideDatasource","title":"serverSideDatasource","description":"Data provider for a row model where the server handles sorting, filtering, grouping, and related requests."},{"path":"/docs/options/serverSideGroupCols","title":"serverSideGroupCols","description":"Columns grouped on the server, ordered from outermost group inward. An empty array represents flat data."},{"path":"/docs/options/serverSideTransactionWaitMs","title":"serverSideTransactionWaitMs","description":"Delay for batching asynchronous server row transactions."},{"path":"/docs/methods/getServerSideSelectionState","title":"getServerSideSelectionState","description":"Reads select-all conditions and exception IDs for the flat server row model. Reports a model mismatch for grouped models."},{"path":"/docs/methods/getServerGroupSelectionState","title":"getServerGroupSelectionState","description":"Reads hierarchical select-all and exception state for the grouped server row model."},{"path":"/docs/methods/setServerSideSelectionState","title":"setServerSideSelectionState","description":"Replaces select-all conditions and exception IDs in the flat server row model."},{"path":"/docs/methods/setServerGroupSelectionState","title":"setServerGroupSelectionState","description":"Replaces hierarchical selection state in the grouped server row model."},{"path":"/docs/methods/selectAllServerSide","title":"selectAllServerSide","description":"Sets server-wide selection conditions without materializing every server row in memory."},{"path":"/docs/methods/selectServerGroupChildren","title":"selectServerGroupChildren","description":"Selects or deselects server descendants beneath a group-key path."},{"path":"/docs/methods/refreshServerSide","title":"refreshServerSide","description":"Refetches the specified server store scope and returns the result."},{"path":"/docs/methods/applyServerSideTransaction","title":"applyServerSideTransaction","description":"Applies row changes to the server row model's cache, separately from saving server source data."},{"path":"/docs/methods/applyServerSideTransactionAsync","title":"applyServerSideTransactionAsync","description":"Queues a server row transaction asynchronously. Queue acceptance differs from final application."},{"path":"/docs/methods/flushServerSideAsyncTransactions","title":"flushServerSideAsyncTransactions","description":"Processes pending server row transactions and returns a completion report."},{"path":"/docs/methods/getServerSideStoreState","title":"getServerSideStoreState","description":"Reads server store paths, states, and block caches. Assess loading through block counts and complete as well as state names."},{"path":"/docs/methods/getServerPivotResultColumns","title":"getServerPivotResultColumns","description":"Reads the server-supplied pivot result column model. Distinguish stale metadata from absent metadata."},{"path":"/docs/methods/auditServerPivotResultColumns","title":"auditServerPivotResultColumns","description":"Checks whether server pivot column IDs used for charts, export, or restoration still exist in the current model."},{"path":"/docs/events/serverStoreUpdated","title":"serverStoreUpdated","description":"Emitted when a server row store refreshes. Inspect its path and cache state."}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/server-side-row-model","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/features/viewport-row-model","id":"viewport-row-model","kind":"feature","group":"rows","title":"Stream the visible range","tier":"pro","summary":"This suits price feeds and monitoring views where the total count is known but only visible rows need continuous updates. Adjusting the subscription to the scroll range is essential.","examples":[{"title":"Supply a static remote range","explanation":"This example uses an app API that accepts start/end ranges and returns { 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":"Only the most recently requested range is populated. Connect failure states to your app's error UI."},{"title":"Subscribe only to visible prices","explanation":"When setViewportRange changes, unsubscribe from the old socket range and subscribe to product IDs in the new range. Supply updated data at the corresponding row positions when server messages arrive.","source":null,"result":"Keep the visible range current without continuously sending the entire market data set to the browser."},{"title":"Clean up and update the total count","explanation":"When the data set changes, update both the total row count and range data. On view closure, clean up sockets, timers, and pending requests in destroy.","source":null,"result":"Messages from the previous view will not overwrite a new Grid. If the row count decreases, also verify that the current scroll position remains valid."}],"featureId":"viewport-row-model","sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"Retain setRowCount and setRowData from init and respond to setViewportRange requests. Check both request order and whether the view has been destroyed before applying remote responses."},{"kind":"paragraph","text":"Using this feature in a product requires the Pro package and a valid license. Matching setting names do not enable Pro features in Community."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Supply a static remote range","blocks":[{"kind":"paragraph","text":"This example uses an app API that accepts start/end ranges and returns { 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":"Verify the result: Only the most recently requested range is populated. Connect failure states to your app's error UI."}]},{"id":"example-2","title":"Example 2. Subscribe only to visible prices","blocks":[{"kind":"paragraph","text":"When setViewportRange changes, unsubscribe from the old socket range and subscribe to product IDs in the new range. Supply updated data at the corresponding row positions when server messages arrive."},{"kind":"paragraph","text":"Verify the result: Keep the visible range current without continuously sending the entire market data set to the browser."}]},{"id":"example-3","title":"Example 3. Clean up and update the total count","blocks":[{"kind":"paragraph","text":"When the data set changes, update both the total row count and range data. On view closure, clean up sockets, timers, and pending requests in destroy."},{"kind":"paragraph","text":"Verify the result: Messages from the previous view will not overwrite a new Grid. If the row count decreases, also verify that the current scroll position remains valid."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"Viewport row positions are not business IDs. Sorting can place a different product at the same position, so also manage the server-defined order."},{"kind":"paragraph","text":"Tune update frequency and change highlighting in frequently changing views. There is no need to create DOM elements for every invisible row."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"links","items":[{"path":"/docs/options/viewportDatasource","title":"viewportDatasource","description":"Viewport model supplying data for visible row ranges. Implement initialization, range changes, and cleanup."}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/viewport-row-model","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/features/row-layout","id":"row-layout","kind":"feature","group":"rows","title":"Row height and pinned rows","summary":"Row height, top/bottom pinned rows, full-width rows, and merged cells are separate layout features. Choose based on whether you need persistent summaries or wide detail content.","examples":[{"title":"Pin a bottom summary row","explanation":"Calculate total quantity across the current data and display it in a separate row.","source":"const quantity = grid.rowData.reduce((sum, row) => sum + Number(row.quantity || 0), 0);\ngrid.pinnedBottomRowData = [{ id: 'SUMMARY', product: 'Total quantity', quantity }];","result":"The summary row remains while scrolling. This calculation uses all rowData, not the filtered result."},{"title":"Readable row heights","explanation":"Offer a setting in your app for users to change row density.","source":"grid.rowHeight = 44;\nawait grid.refreshRowHeights();","result":"The layout reflects the new row heights. With automatic height, also inspect wrapping and cell content."},{"title":"Diagnose spans, full-width rows, and pinning together","explanation":"When combining structural features on the same data, query the actual applied result.","source":"console.log(await grid.getPinnedRows());\nconsole.log(await grid.getFullWidthRowInfo());","result":"Inspect which data uses full-width rows and pinned areas. For detailed span behavior, follow the argument contracts of getCellSpan and getSpanInteraction."}],"featureId":"row-layout","sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"Pinned rows use separate data. They are not automatic totals; to update totals after filtering or editing, supply newly calculated values from your app."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Pin a bottom summary row","blocks":[{"kind":"paragraph","text":"Calculate total quantity across the current data and display it in a separate row."},{"kind":"code","source":"const quantity = grid.rowData.reduce((sum, row) => sum + Number(row.quantity || 0), 0);\ngrid.pinnedBottomRowData = [{ id: 'SUMMARY', product: 'Total quantity', quantity }];","language":"javascript"},{"kind":"paragraph","text":"Verify the result: The summary row remains while scrolling. This calculation uses all rowData, not the filtered result."}]},{"id":"example-2","title":"Example 2. Readable row heights","blocks":[{"kind":"paragraph","text":"Offer a setting in your app for users to change row density."},{"kind":"code","source":"grid.rowHeight = 44;\nawait grid.refreshRowHeights();","language":"javascript"},{"kind":"paragraph","text":"Verify the result: The layout reflects the new row heights. With automatic height, also inspect wrapping and cell content."}]},{"id":"example-3","title":"Example 3. Diagnose spans, full-width rows, and pinning together","blocks":[{"kind":"paragraph","text":"When combining structural features on the same data, query the actual applied result."},{"kind":"code","source":"console.log(await grid.getPinnedRows());\nconsole.log(await grid.getFullWidthRowInfo());","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Inspect which data uses full-width rows and pinned areas. For detailed span behavior, follow the argument contracts of getCellSpan and getSpanInteraction."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"Merged boundaries change with sorting and filtering. Review both displayed ranges and merge handling during copying and export."},{"kind":"paragraph","text":"Do not assume regular column editing applies unchanged to full-width rows. If a layout is rejected, read reports such as rowLayoutRefused and resolve the cause."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"links","items":[{"path":"/docs/options/spanExportMode","title":"spanExportMode","description":"Chooses whether merged-cell copying and output include the origin value once or repeat it at every position."},{"path":"/docs/options/alignedGrids","title":"alignedGrids","description":"Specifies linked Grids for synchronized column layouts and related state. Inspect connection results and cycle restrictions in aligned Grid reports."},{"path":"/docs/options/isFullWidthRow","title":"isFullWidthRow","description":"Determines whether a row uses a full-width layout instead of individual column cells."},{"path":"/docs/options/fullWidthCellRenderer","title":"fullWidthCellRenderer","description":"Renderer for full-width row content. Uses a different input contract from regular cell renderers."},{"path":"/docs/options/fullWidthRowHeight","title":"fullWidthRowHeight","description":"Fixed height or per-row height function for full-width rows."},{"path":"/docs/options/pinnedTopRowData","title":"pinnedTopRowData","description":"Row data pinned above the scrolling table."},{"path":"/docs/options/pinnedBottomRowData","title":"pinnedBottomRowData","description":"Row data pinned below the scrolling table."},{"path":"/docs/columns/rowSpan","title":"rowSpan","description":"Returns the vertical row span from cell context. Inspect span reports for conflicts and display-model restrictions."},{"path":"/docs/columns/colSpan","title":"colSpan","description":"Returns the horizontal column span from cell context. Account for pinned boundaries and hidden columns."},{"path":"/docs/methods/setAlignedGrids","title":"setAlignedGrids","description":"Configures aligned Grid connections and returns the result."},{"path":"/docs/methods/getAlignedGrids","title":"getAlignedGrids","description":"Reads connected Grids and alignment state."},{"path":"/docs/methods/getFullWidthRowInfo","title":"getFullWidthRowInfo","description":"Reads one full-width row's information, or the complete layout report when no argument is supplied."},{"path":"/docs/methods/setPinnedRows","title":"setPinnedRows","description":"Sets top/bottom pinned row data and returns the application result."},{"path":"/docs/methods/getPinnedRows","title":"getPinnedRows","description":"Reads current pinned row data as a report."},{"path":"/docs/methods/getPinnedRowInfo","title":"getPinnedRowInfo","description":"Reads details of a specified pinned row."},{"path":"/docs/methods/getRowSpan","title":"getRowSpan","description":"Reads calculated vertical span ranges."},{"path":"/docs/methods/getCellSpan","title":"getCellSpan","description":"Reads horizontal and vertical span information for a cell."},{"path":"/docs/methods/getSpanInteraction","title":"getSpanInteraction","description":"Inspects how merged cells interact with selection, copying, and related actions."},{"path":"/docs/events/spanConflict","title":"spanConflict","description":"Emitted when cell spans conflict with other ranges or layouts."},{"path":"/docs/events/pinnedRowsChanged","title":"pinnedRowsChanged","description":"Emitted when top/bottom pinned row data changes."},{"path":"/docs/events/rowLayoutRefused","title":"rowLayoutRefused","description":"Emitted when a requested row layout cannot be applied. Adjust the combination according to the rejection reason."}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/row-layout","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/features/row-drag","id":"row-drag","kind":"feature","group":"rows","title":"Row dragging","tier":"free","summary":"Managed row dragging applies user-defined order to Grid data. Manual reordering can conflict with display order determined by sorting.","examples":[{"title":"Provide a drag handle","explanation":"Allow users to grab rows from the product column.","source":"grid.rowDragManaged = true;\ngrid.columnDefs = grid.columnDefs.map(col => ({ ...col, rowDrag: col.field === 'product' }));\nawait grid.setSortModel([]);\nawait grid.setFilterModel(null);","result":"Test manual ordering in an unsorted, unfiltered list. Header-moving handles and row-moving handles are different."},{"title":"Connect move results to saving","explanation":"Handle rowMoved in your app to persist the updated order on the server.","source":"grid.addEventListener('rowMoved', event => console.log(event.detail));\nconsole.log(await grid.getDragSafetyReport());","result":"Check eligibility before a move and the result afterward. A successful visual move is not automatically saved to the server."},{"title":"Distribute orders between two tables","explanation":"To move orders from an unassigned table to an assignee's table, register the target drop area and inspect the rowsTransferred report.","source":"console.log(await grid.getDropZones());\ngrid.addEventListener('rowsTransferred', event => console.log(event.detail));","result":"Your app decides whether to allow copying or moving. Also verify behavior when both tables already contain the same ID."}],"featureId":"row-drag","sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"Before dragging, check allowed data models and group/pivot states. Moving to another Grid additionally requires drop-target registration and transfer-result handling."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Provide a drag handle","blocks":[{"kind":"paragraph","text":"Allow users to grab rows from the product column."},{"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":"Verify the result: Test manual ordering in an unsorted, unfiltered list. Header-moving handles and row-moving handles are different."}]},{"id":"example-2","title":"Example 2. Connect move results to saving","blocks":[{"kind":"paragraph","text":"Handle rowMoved in your app to persist the updated order on the server."},{"kind":"code","source":"grid.addEventListener('rowMoved', event => console.log(event.detail));\nconsole.log(await grid.getDragSafetyReport());","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Check eligibility before a move and the result afterward. A successful visual move is not automatically saved to the server."}]},{"id":"example-3","title":"Example 3. Distribute orders between two tables","blocks":[{"kind":"paragraph","text":"To move orders from an unassigned table to an assignee's table, register the target drop area and inspect the rowsTransferred report."},{"kind":"code","source":"console.log(await grid.getDropZones());\ngrid.addEventListener('rowsTransferred', event => console.log(event.detail));","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Your app decides whether to allow copying or moving. Also verify behavior when both tables already contain the same ID."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"Do not interpret dragging a filtered subset as reordering the entire source data set. Read getDragSafetyReport and rowDragCancel reasons to understand rejection."},{"kind":"paragraph","text":"Changing a parent in a hierarchy has more constraints than reordering a flat list. Inspect treeReparented and reparentRows results and avoid cycles."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"links","items":[{"path":"/docs/options/rowDragManaged","title":"rowDragManaged","description":"Lets the Grid manage reordering from row dragging. Review restrictions with sorting, filtering, and other row models."},{"path":"/docs/options/rowDragMultiRow","title":"rowDragMultiRow","description":"Allows dragging multiple selected rows together. Also configure rowDrag on a column and row selection."},{"path":"/docs/options/rowDragText","title":"rowDragText","description":"Builds drag feedback text from the row count and default label."},{"path":"/docs/columns/rowDrag","title":"rowDrag","description":"Provides a row drag handle in this column. Use with the Grid's drag policy."},{"path":"/docs/methods/startRowDrag","title":"startRowDrag","description":"Starts a row drag session through the public input contract. Check whether it started and any rejection reason."},{"path":"/docs/methods/getRowDragSession","title":"getRowDragSession","description":"Reads current row drag session progress."},{"path":"/docs/methods/registerDropZone","title":"registerDropZone","description":"Registers a drop area for receiving rows and returns the registration result."},{"path":"/docs/methods/unregisterDropZone","title":"unregisterDropZone","description":"Unregisters a drop area and returns success."},{"path":"/docs/methods/getDropZones","title":"getDropZones","description":"Reads current drop-area registration state."},{"path":"/docs/methods/getDragSafetyReport","title":"getDragSafetyReport","description":"Reports whether row dragging is safe under current settings and describes restrictions."},{"path":"/docs/events/rowMoved","title":"rowMoved","description":"Emitted when row order changes. Read the affected row and before/after indices."},{"path":"/docs/events/rowDragEnter","title":"rowDragEnter","description":"Emitted when a row drag enters a target area."},{"path":"/docs/events/rowDragMove","title":"rowDragMove","description":"Emitted during row dragging. Avoid expensive save operations on every high-frequency event."},{"path":"/docs/events/rowDragLeave","title":"rowDragLeave","description":"Emitted when a row drag leaves an area. Different from drag completion."},{"path":"/docs/events/rowDragEnd","title":"rowDragEnd","description":"Emitted when row dragging ends. Inspect the applied result and drop position."},{"path":"/docs/events/rowDragCancel","title":"rowDragCancel","description":"Emitted when row dragging is cancelled. Do not run completion actions or save server ordering."},{"path":"/docs/events/rowsTransferred","title":"rowsTransferred","description":"Reports row transfers between drop areas. Inspect actual move, copy, and rejection results."}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/row-drag","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/features/pagination","id":"pagination","kind":"feature","group":"rows","title":"Page navigation","tier":"free","summary":"Pagination controls the number of displayed rows and the current page position. Total data size and page size are separate settings.","examples":[{"title":"Display 20 rows per page","explanation":"Provide choices below the table so users can change the page size.","source":"grid.pagination = true;\ngrid.pageSize = 20;\ngrid.pageSizeOptions = [20, 50, 100];","result":"120 rows can be browsed across six pages of 20. Changing the choice recalculates the displayed range."},{"title":"Use a continuous scrolling list","explanation":"For many rows where continuous browsing matters, disable pagination and use virtual scrolling.","source":"grid.pagination = false;\ngrid.virtualScroll = true;","result":"Users navigate with the Grid's internal scrollbar instead of page numbers. Downloaded data volume depends on whether a remote row model is used."},{"title":"Display navigation results elsewhere","explanation":"Use page-change events to update your app's guidance or analytics logs.","source":"grid.addEventListener('paginationChanged', event => console.log(event.detail));","result":"The updated page information is emitted. Also verify whether the total count reflects displayed results after filtering and grouping."}],"featureId":"pagination","sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"Distinguish client paging with all rows in the browser from server queries that fetch one range at a time. Enabling pagination does not create a server query API."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Display 20 rows per page","blocks":[{"kind":"paragraph","text":"Provide choices below the table so users can change the page size."},{"kind":"code","source":"grid.pagination = true;\ngrid.pageSize = 20;\ngrid.pageSizeOptions = [20, 50, 100];","language":"javascript"},{"kind":"paragraph","text":"Verify the result: 120 rows can be browsed across six pages of 20. Changing the choice recalculates the displayed range."}]},{"id":"example-2","title":"Example 2. Use a continuous scrolling list","blocks":[{"kind":"paragraph","text":"For many rows where continuous browsing matters, disable pagination and use virtual scrolling."},{"kind":"code","source":"grid.pagination = false;\ngrid.virtualScroll = true;","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Users navigate with the Grid's internal scrollbar instead of page numbers. Downloaded data volume depends on whether a remote row model is used."}]},{"id":"example-3","title":"Example 3. Display navigation results elsewhere","blocks":[{"kind":"paragraph","text":"Use page-change events to update your app's guidance or analytics logs."},{"kind":"code","source":"grid.addEventListener('paginationChanged', event => console.log(event.detail));","language":"javascript"},{"kind":"paragraph","text":"Verify the result: The updated page information is emitted. Also verify whether the total count reflects displayed results after filtering and grouping."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"Searching may shrink results enough to invalidate the previous page. Follow the state emitted by the Grid instead of retaining a page number independently."},{"kind":"paragraph","text":"Group row counts can differ from source order counts, so do not always compare pagination totals directly with source orders."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"links","items":[{"path":"/docs/options/pagination","title":"pagination","description":"Displays the table across multiple pages. Does not change the server data query strategy itself."},{"path":"/docs/options/pageSize","title":"pageSize","description":"Rows displayed per page. Distinguish the displayed row model, including group rows, from source data counts."},{"path":"/docs/options/pageSizeOptions","title":"pageSizeOptions","description":"The numeric choices available in the page-size selector."},{"path":"/docs/events/paginationChanged","title":"paginationChanged","description":"Emitted when the page or page size changes. Synchronize external page indicators."}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/pagination","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/features/sorting","id":"sorting","kind":"feature","group":"sort-filter","title":"Single and multiple sorting","tier":"free","summary":"Sorting changes display order without modifying data values. Single sorting uses one criterion; multiple sorting uses prioritized criteria.","examples":[{"title":"Show the largest quantities first","explanation":"Explicitly apply descending sorting to the quantity column.","source":"await grid.sortBy('quantity', 'desc');\nconsole.log(await grid.getSortModel());","result":"A descending quantity model is applied. Distinguish cycling without direction from explicitly setting desc."},{"title":"Compare quantities within teams","explanation":"Sort by team first, then compare quantities within each team.","source":"grid.multiSort = true;\nawait grid.setSortModel([{ field: 'team', direction: 'asc' }, { field: 'quantity', direction: 'desc' }]);","result":"The first array entry has priority. Source row IDs and values remain unchanged; only display positions change."},{"title":"Clear sorting and observe user changes","explanation":"Return to the original order, then read the model when users click headers.","source":"await grid.setSortModel([]);\ngrid.addEventListener('sortChanged', event => console.log(event.detail));","result":"An empty model clears sorting. To remove one of several criteria, distinguish sortBy with null from replacing the entire model."}],"featureId":"sorting","sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"Numbers stored as strings may sort differently from numeric expectations. Handle display formatting in a formatter and prepare sorting for the actual data type."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Show the largest quantities first","blocks":[{"kind":"paragraph","text":"Explicitly apply descending sorting to the quantity column."},{"kind":"code","source":"await grid.sortBy('quantity', 'desc');\nconsole.log(await grid.getSortModel());","language":"javascript"},{"kind":"paragraph","text":"Verify the result: A descending quantity model is applied. Distinguish cycling without direction from explicitly setting desc."}]},{"id":"example-2","title":"Example 2. Compare quantities within teams","blocks":[{"kind":"paragraph","text":"Sort by team first, then compare quantities within each team."},{"kind":"code","source":"grid.multiSort = true;\nawait grid.setSortModel([{ field: 'team', direction: 'asc' }, { field: 'quantity', direction: 'desc' }]);","language":"javascript"},{"kind":"paragraph","text":"Verify the result: The first array entry has priority. Source row IDs and values remain unchanged; only display positions change."}]},{"id":"example-3","title":"Example 3. Clear sorting and observe user changes","blocks":[{"kind":"paragraph","text":"Return to the original order, then read the model when users click headers."},{"kind":"code","source":"await grid.setSortModel([]);\ngrid.addEventListener('sortChanged', event => console.log(event.detail));","language":"javascript"},{"kind":"paragraph","text":"Verify the result: An empty model clears sorting. To remove one of several criteria, distinguish sortBy with null from replacing the entire model."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"With remote models, the server must apply the same sorting rules. Browser-only sorting within each page can produce inconsistent ordering between pages."},{"kind":"paragraph","text":"For stable results when values are equal, manage source ordering or a server secondary key. Do not store business targets as rowIndex after sorting."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"links","items":[{"path":"/docs/options/multiSort","title":"multiSort","description":"Enables sorting by multiple columns. The sort model order defines priority."},{"path":"/docs/options/enableMultiSort","title":"enableMultiSort","description":"Compatibility alias for multiple sorting. Keep it consistent with multiSort."},{"path":"/docs/columns/sortable","title":"sortable","description":"Determines whether users can sort this column."},{"path":"/docs/columns/sort","title":"sort","description":"Initial ascending/descending sort or cleared sort for this column."},{"path":"/docs/columns/sortIndex","title":"sortIndex","description":"This column's priority among multiple initial sort criteria."},{"path":"/docs/columns/comparator","title":"comparator","description":"Compares two values and rows for sorting. Negative, zero, and positive results mean before, equal, and after."},{"path":"/docs/methods/sortBy","title":"sortBy","description":"Sets one column's sorting. Omitted direction cycles sorting; null clears that column. Use setSortModel for the full multi-column model."},{"path":"/docs/methods/setSortModel","title":"setSortModel","description":"Replaces sort criteria and priorities together. An empty array clears all sorting."},{"path":"/docs/methods/getSortModel","title":"getSortModel","description":"Reads current sort columns, directions, and priorities."},{"path":"/docs/events/sortChanged","title":"sortChanged","description":"Emitted when sorting changes. Reflect the current model in app query conditions or saved view state."}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/sorting","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/features/column-filters","id":"column-filters","kind":"feature","group":"sort-filter","title":"Conditions for each column","tier":"free","summary":"Column filters apply conditions to individual columns. Text, numbers, and dates use different inputs and comparisons; conditions across columns narrow results together.","examples":[{"title":"Product name and quantity inputs","explanation":"Enable basic filters appropriate to each column type.","source":"grid.headerFilterRow = true;\ngrid.columnDefs = [{ field: 'product', headerName: 'Product', filter: 'text' },\n  { field: 'quantity', headerName: 'Quantity', filter: 'number' }];","result":"Search product names with text conditions and quantities with numeric conditions. Verify source types so string 100 and numeric 100 do not produce unintended differences."},{"title":"Save user filters","explanation":"Store the applied model and restore it with the same column definitions.","source":"const saved = await grid.getFilterModel();\nconst report = await grid.setFilterModel(saved);\nconsole.log(report);","result":"Restoration requires compatible model structure and column types. Inspect unapplied entries in the returned report."},{"title":"Reset conditions","explanation":"Clear all filter families when search results are empty.","source":"await grid.setFilterModel(null);\ngrid.addEventListener('filterChanged', event => console.log(event.detail));","result":"null clears the global filter model. To clear one column while preserving other conditions, use the setColumnFilterModel contract."}],"featureId":"column-filters","sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"Distinguish filter UI drafts from the applied model. For asynchronous behavior such as custom filters, await the report returned by setFilterModel."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Product name and quantity inputs","blocks":[{"kind":"paragraph","text":"Enable basic filters appropriate to each column type."},{"kind":"code","source":"grid.headerFilterRow = true;\ngrid.columnDefs = [{ field: 'product', headerName: 'Product', filter: 'text' },\n  { field: 'quantity', headerName: 'Quantity', filter: 'number' }];","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Search product names with text conditions and quantities with numeric conditions. Verify source types so string 100 and numeric 100 do not produce unintended differences."}]},{"id":"example-2","title":"Example 2. Save user filters","blocks":[{"kind":"paragraph","text":"Store the applied model and restore it with the same column definitions."},{"kind":"code","source":"const saved = await grid.getFilterModel();\nconst report = await grid.setFilterModel(saved);\nconsole.log(report);","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Restoration requires compatible model structure and column types. Inspect unapplied entries in the returned report."}]},{"id":"example-3","title":"Example 3. Reset conditions","blocks":[{"kind":"paragraph","text":"Clear all filter families when search results are empty."},{"kind":"code","source":"await grid.setFilterModel(null);\ngrid.addEventListener('filterChanged', event => console.log(event.detail));","language":"javascript"},{"kind":"paragraph","text":"Verify the result: null clears the global filter model. To clear one column while preserving other conditions, use the setColumnFilterModel contract."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"Test handling of empty strings, null, and numeric strings. Date conditions also require consistent time zones and storage formats."},{"kind":"paragraph","text":"Column filters, quick search, external filters, and advanced conditions may overlap. When results are sparse, inspect each remaining condition."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"links","items":[{"path":"/docs/options/headerFilterRow","title":"headerFilterRow","description":"Displays a row of per-column filter controls below the headers."},{"path":"/docs/columns/filter","title":"filter","description":"Built-in filter type or custom filter definition for this column."},{"path":"/docs/columns/floatingFilterComponent","title":"floatingFilterComponent","description":"Custom filter input component displayed below the header."},{"path":"/docs/methods/getFilterModel","title":"getFilterModel","description":"Reads combined state across current filter families."},{"path":"/docs/methods/setFilterModel","title":"setFilterModel","description":"Applies a validated combined filter model. null clears all filter families; inspect reports for invalid models."},{"path":"/docs/methods/getColumnFilterInstance","title":"getColumnFilterInstance","description":"Queries a column's custom filter instance. May return null if absent or not yet created."},{"path":"/docs/methods/getColumnFilterModel","title":"getColumnFilterModel","description":"Reads one column's current filter model."},{"path":"/docs/methods/setColumnFilterModel","title":"setColumnFilterModel","description":"Sets one column's filter model and returns the result. Separate from setFilterModel, which changes combined filter state."},{"path":"/docs/methods/onFilterChanged","title":"onFilterChanged","description":"Signals changed filter conditions and recalculates current row filtering."},{"path":"/docs/methods/destroyColumnFilter","title":"destroyColumnFilter","description":"Destroys a column's filter instance."},{"path":"/docs/methods/recreateColumnFilter","title":"recreateColumnFilter","description":"Recreates a column's filter instance."},{"path":"/docs/events/filterChanged","title":"filterChanged","description":"Emitted when applied filters change. Distinguish from filterModified, which describes input changes."},{"path":"/docs/events/filterModified","title":"filterModified","description":"Emitted when filter input changes. Filters with an Apply button may not yet have updated result rows."}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/column-filters","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/features/quick-filter","id":"quick-filter","kind":"feature","group":"sort-filter","title":"Search across columns","tier":"free","summary":"Quick search looks for text across searchable columns without specifying a column. It is a useful starting point when users do not know whether a term is a product name or a region.","examples":[{"title":"Pass a global search term","explanation":"Connect your app's search input to quickFilterText.","source":"grid.quickFilter = true;\ngrid.quickFilterText = 'Platform';","result":"Only matching rows remain in the current data. To search data not yet loaded, pass the term in remote requests."},{"title":"Multiple-word conditions","explanation":"Compare searches requiring both words with searches allowing either word.","source":"grid.quickFilterMode = 'and';\ngrid.quickFilterText = 'Platform APAC';\n// To show rows matching either word:\n// grid.quickFilterMode = 'or';","result":"Word combinations change the results. Explain the condition relationship in the search input's guidance."},{"title":"Tune input frequency and clear search","explanation":"Adjust the delay to avoid expensive calculations or server requests on every keystroke.","source":"grid.quickFilterDebounce = 200;\ngrid.quickFilterText = '';","result":"An empty string clears the search term. If your app enables regular expressions, also test invalid and overly broad patterns."}],"featureId":"quick-filter","sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"Find navigates to matching cells; Quick filter hides nonmatching rows. Present them according to these distinct purposes."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Pass a global search term","blocks":[{"kind":"paragraph","text":"Connect your app's search input to quickFilterText."},{"kind":"code","source":"grid.quickFilter = true;\ngrid.quickFilterText = 'Platform';","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Only matching rows remain in the current data. To search data not yet loaded, pass the term in remote requests."}]},{"id":"example-2","title":"Example 2. Multiple-word conditions","blocks":[{"kind":"paragraph","text":"Compare searches requiring both words with searches allowing either word."},{"kind":"code","source":"grid.quickFilterMode = 'and';\ngrid.quickFilterText = 'Platform APAC';\n// To show rows matching either word:\n// grid.quickFilterMode = 'or';","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Word combinations change the results. Explain the condition relationship in the search input's guidance."}]},{"id":"example-3","title":"Example 3. Tune input frequency and clear search","blocks":[{"kind":"paragraph","text":"Adjust the delay to avoid expensive calculations or server requests on every keystroke."},{"kind":"code","source":"grid.quickFilterDebounce = 200;\ngrid.quickFilterText = '';","language":"javascript"},{"kind":"paragraph","text":"Verify the result: An empty string clears the search term. If your app enables regular expressions, also test invalid and overly broad patterns."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"Do not assume search includes every property of the source object. Check column configuration, display rules, and access rules together."},{"kind":"paragraph","text":"Previous results may remain briefly between search changes and server responses. Distinguish loading from no results."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"links","items":[{"path":"/docs/options/quickFilter","title":"quickFilter","description":"Displays a global search input. Use quickFilterText for an initial term or an external input."},{"path":"/docs/options/quickFilterText","title":"quickFilterText","description":"The quick-filter search string. Assign a new string from an external app search input too."},{"path":"/docs/options/quickFilterPlaceholder","title":"quickFilterPlaceholder","description":"Guidance for the quick-filter input. Describe the searchable data scope clearly."},{"path":"/docs/options/quickFilterMode","title":"quickFilterMode","description":"Combines terms with and, requiring all matches, or or, requiring any match."},{"path":"/docs/options/quickFilterRegex","title":"quickFilterRegex","description":"Interprets quick-filter input as a regular expression rather than ordinary text."},{"path":"/docs/options/quickFilterDebounce","title":"quickFilterDebounce","description":"Delay before applying quick-filter input. Balances continuous typing throughput and responsiveness."},{"path":"/docs/events/quickFilterChanged","title":"quickFilterChanged","description":"Emitted when quick-filter conditions change. Synchronize external search input values if needed."}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/quick-filter","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/features/external-filter","id":"external-filter","kind":"feature","group":"sort-filter","title":"Filter by business conditions","tier":"free","summary":"Connect business conditions outside the Grid through a row predicate. Use this when external UI choices, such as incomplete items or items assigned to you, control the table.","examples":[{"title":"Show only large-quantity orders","explanation":"Connect a business switch that shows quantities of at least 100.","source":"let largeOnly = true;\ngrid.externalFilter = {\n  isExternalFilterPresent: () => largeOnly,\n  doesExternalFilterPass: row => Number(row.quantity) >= 100\n};\nawait grid.refreshExternalFilter();","result":"Apply the predicate only when the switch is on. The function must return a boolean without mutating the source row."},{"title":"Clear an external condition","explanation":"Keep the same filter object and change only the external variable.","source":"largeOnly = false;\nawait grid.refreshExternalFilter();","result":"The external filter is cleared, but column filters and quick search may remain active."},{"title":"Change the app context","explanation":"When the signed-in user changes, update the user information read by the external filter and recalculate. Lifecycle instances can clean up resources through refresh and destroy.","source":null,"result":"Conditions from the previous user do not remain. The server must also withhold source values the new user is not authorized to view."}],"featureId":"external-filter","sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"The Grid cannot automatically detect changes to external condition variables. Call refreshExternalFilter to recalculate."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Show only large-quantity orders","blocks":[{"kind":"paragraph","text":"Connect a business switch that shows quantities of at least 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":"Verify the result: Apply the predicate only when the switch is on. The function must return a boolean without mutating the source row."}]},{"id":"example-2","title":"Example 2. Clear an external condition","blocks":[{"kind":"paragraph","text":"Keep the same filter object and change only the external variable."},{"kind":"code","source":"largeOnly = false;\nawait grid.refreshExternalFilter();","language":"javascript"},{"kind":"paragraph","text":"Verify the result: The external filter is cleared, but column filters and quick search may remain active."}]},{"id":"example-3","title":"Example 3. Change the app context","blocks":[{"kind":"paragraph","text":"When the signed-in user changes, update the user information read by the external filter and recalculate. Lifecycle instances can clean up resources through refresh and destroy."},{"kind":"paragraph","text":"Verify the result: Conditions from the previous user do not remain. The server must also withhold source values the new user is not authorized to view."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"Do not return an asynchronous network response as if it were a boolean predicate. Prepare the required information first, then recalculate the filter."},{"kind":"paragraph","text":"Conditions requiring a search of the full server data set must also be sent to the server. An external filter cannot derive complete results from loaded client rows alone."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"links","items":[{"path":"/docs/options/externalFilter","title":"externalFilter","description":"Determines whether each row passes conditions outside the Grid. Supply activation and row predicates or a lifecycle instance."},{"path":"/docs/methods/refreshExternalFilter","title":"refreshExternalFilter","description":"Runs the external filter refresh lifecycle and returns success."}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/external-filter","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/features/set-filter","id":"set-filter","kind":"feature","group":"sort-filter","title":"Choose values from a list","tier":"pro","summary":"This filter lets users choose from distinct, recurring values such as regions or statuses. It presents the available choices more clearly than a Text filter that matches part of a name.","examples":[{"title":"Region selection list","explanation":"Declare a Set filter on the region column and display its filter UI.","source":"grid.headerFilterRow = true;\ngrid.columnDefs = grid.columnDefs.map(col => col.field === 'region' ? { ...col, filter: 'set' } : col);","result":"Select values by region. Check whether empty values and whitespace-only strings should be treated as the same value."},{"title":"Restore frequently used selections","explanation":"Save and restore a model in which the user selected APAC and EMEA.","source":"const saved = await grid.getFilterModel();\nconsole.log(saved);\nawait grid.setFilterModel(saved);","result":"Restore the selection after preparing the same columns and data structure. Selecting all values and selecting none can have different meanings."},{"title":"Data with changing list values","explanation":"When regions are added or removed, compare the saved selection with the current value list. Check whether selecting values that no longer exist is causing empty results.","source":null,"result":"This helps explain why users see no results. Consistently decide in your app whether to clear or retain selections after data updates."}],"featureId":"set-filter","sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"The distinct-value list and the full filtered data scope are separate. With remote data, decide in your data provider whether to include values that have not loaded yet."},{"kind":"paragraph","text":"Using this feature in a product requires the Pro package and a valid license. Matching setting names do not enable Pro features in Community."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Region selection list","blocks":[{"kind":"paragraph","text":"Declare a Set filter on the region column and display its 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":"Verify the result: Select values by region. Check whether empty values and whitespace-only strings should be treated as the same value."}]},{"id":"example-2","title":"Example 2. Restore frequently used selections","blocks":[{"kind":"paragraph","text":"Save and restore a model in which the user selected APAC and EMEA."},{"kind":"code","source":"const saved = await grid.getFilterModel();\nconsole.log(saved);\nawait grid.setFilterModel(saved);","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Restore the selection after preparing the same columns and data structure. Selecting all values and selecting none can have different meanings."}]},{"id":"example-3","title":"Example 3. Data with changing list values","blocks":[{"kind":"paragraph","text":"When regions are added or removed, compare the saved selection with the current value list. Check whether selecting values that no longer exist is causing empty results."},{"kind":"paragraph","text":"Verify the result: This helps explain why users see no results. Consistently decide in your app whether to clear or retain selections after data updates."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"Set filter checkboxes and rowSelection checkboxes are separate. Filter checks choose what is displayed; row checks choose targets for operations."},{"kind":"paragraph","text":"For server filtering, the server must interpret conditions with the same string and empty-value rules to return consistent counts."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"links","items":[{"path":"/docs/columns/filter","title":"filter","description":"Built-in filter type or custom filter definition for this column."}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/set-filter","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/features/multi-filter","id":"multi-filter","kind":"feature","group":"sort-filter","title":"Combine multiple filters","tier":"pro","summary":"Combine multiple filters, such as text search and a value list, within one column. This differs from enabling separate filters on different columns.","examples":[{"title":"Combine a name search with an allowed-value list","explanation":"Add both a partial-name condition and a product-list selection to the product column. Follow the multi declaration and parts structure in ColumnFilterDecl.","source":null,"result":"Find rows containing Sensor that also belong to the selected products. Clearing one condition leaves the other child conditions active."},{"title":"Inspect and reuse filter models","explanation":"Read the compound conditions users create in the UI, inspect their structure, then save them.","source":"const model = await grid.getFilterModel();\nconsole.log(model);\nconst report = await grid.setFilterModel(model);\nconsole.log(report);","result":"A valid model with the same configuration is reapplied. Follow the type contract instead of assembling the input model from arbitrary strings."},{"title":"Diagnose conditions incrementally","explanation":"If conditions narrow results more than expected, clear each child filter in turn and compare row counts. Distinguish this from setFilterModel(null), which clears all filter families.","source":null,"result":"Identify which condition excluded a row. Also compare the saved model with the model actually applied."}],"featureId":"multi-filter","sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"Manage the declared order of child filters together with the saved model structure. Restoring an old model after changing column definitions may leave conditions incompatible."},{"kind":"paragraph","text":"Using this feature in a product requires the Pro package and a valid license. Matching setting names do not enable Pro features in Community."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Combine a name search with an allowed-value list","blocks":[{"kind":"paragraph","text":"Add both a partial-name condition and a product-list selection to the product column. Follow the multi declaration and parts structure in ColumnFilterDecl."},{"kind":"paragraph","text":"Verify the result: Find rows containing Sensor that also belong to the selected products. Clearing one condition leaves the other child conditions active."}]},{"id":"example-2","title":"Example 2. Inspect and reuse filter models","blocks":[{"kind":"paragraph","text":"Read the compound conditions users create in the UI, inspect their structure, then save them."},{"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":"Verify the result: A valid model with the same configuration is reapplied. Follow the type contract instead of assembling the input model from arbitrary strings."}]},{"id":"example-3","title":"Example 3. Diagnose conditions incrementally","blocks":[{"kind":"paragraph","text":"If conditions narrow results more than expected, clear each child filter in turn and compare row counts. Distinguish this from setFilterModel(null), which clears all filter families."},{"kind":"paragraph","text":"Verify the result: Identify which condition excluded a row. Also compare the saved model with the model actually applied."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"Do not confuse AND/OR relationships between child filters with AND/OR in an advanced condition tree. Supported combinations depend on the filter type."},{"kind":"paragraph","text":"Too many hidden conditions in one column make results hard to understand. Show a summary of active conditions."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"links","items":[{"path":"/docs/columns/filter","title":"filter","description":"Built-in filter type or custom filter definition for this column."}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/multi-filter","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/features/advanced-filter","id":"advanced-filter","kind":"feature","group":"sort-filter","title":"Condition trees","tier":"pro","summary":"Combine conditions across columns in an AND/OR tree to express business rules, such as large APAC orders or orders for a particular product.","examples":[{"title":"Provide a condition builder","explanation":"Enable a tool that lets users choose columns and comparisons without writing code.","source":"grid.conditionBuilder = true;","result":"The condition builder appears. Regular column filters and quick search may also apply, so inspect all active conditions."},{"title":"Save and reapply conditions","explanation":"Read a user-created condition tree and restore the same structure.","source":"const condition = await grid.getConditionFilter();\nconsole.log(condition);\nawait grid.setConditionFilter(condition);","result":"Preserve the grouping of AND and OR expressions. (A AND B) OR C produces different results from A AND (B OR C)."},{"title":"Clear only advanced conditions","explanation":"Remove the advanced condition tree without clearing every filter.","source":"await grid.setConditionFilter(null);\ngrid.addEventListener('conditionFilterChanged', event => console.log(event.detail));","result":"Advanced conditions are cleared, but other search conditions may remain. Show remaining conditions alongside the empty-results state."}],"featureId":"advanced-filter","sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"Condition trees differ from UI input values. ConditionGroup has op and children, while leaf conditions contain rules appropriate to their filter type. Invalid models may not be applied."},{"kind":"paragraph","text":"Using this feature in a product requires the Pro package and a valid license. Matching setting names do not enable Pro features in Community."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Provide a condition builder","blocks":[{"kind":"paragraph","text":"Enable a tool that lets users choose columns and comparisons without writing code."},{"kind":"code","source":"grid.conditionBuilder = true;","language":"javascript"},{"kind":"paragraph","text":"Verify the result: The condition builder appears. Regular column filters and quick search may also apply, so inspect all active conditions."}]},{"id":"example-2","title":"Example 2. Save and reapply conditions","blocks":[{"kind":"paragraph","text":"Read a user-created condition tree and restore the same structure."},{"kind":"code","source":"const condition = await grid.getConditionFilter();\nconsole.log(condition);\nawait grid.setConditionFilter(condition);","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Preserve the grouping of AND and OR expressions. (A AND B) OR C produces different results from A AND (B OR C)."}]},{"id":"example-3","title":"Example 3. Clear only advanced conditions","blocks":[{"kind":"paragraph","text":"Remove the advanced condition tree without clearing every filter."},{"kind":"code","source":"await grid.setConditionFilter(null);\ngrid.addEventListener('conditionFilterChanged', event => console.log(event.detail));","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Advanced conditions are cleared, but other search conditions may remain. Show remaining conditions alongside the empty-results state."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"For server queries, the server must interpret the condition tree with the same meaning. Client callbacks cannot simply be serialized and sent to the server."},{"kind":"paragraph","text":"Give saved conditions readable names to make them easier to reuse. Inspect restoration results when saved conditions reference deleted columns."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"links","items":[{"path":"/docs/options/conditionBuilder","title":"conditionBuilder","description":"Displays a condition builder combining conditions with AND and OR."},{"path":"/docs/methods/setConditionFilter","title":"setConditionFilter","description":"Applies an advanced AND/OR condition tree. null clears it; inspect results for invalid models."},{"path":"/docs/methods/getConditionFilter","title":"getConditionFilter","description":"Reads the current advanced condition tree or null."},{"path":"/docs/methods/setConditionPresets","title":"setConditionPresets","description":"Sets advanced condition presets containing names and JSON."},{"path":"/docs/methods/getConditionPresets","title":"getConditionPresets","description":"Reads saved advanced condition presets."},{"path":"/docs/events/conditionFilterChanged","title":"conditionFilterChanged","description":"Emitted when the AND/OR condition tree changes. A null model means advanced conditions were cleared."},{"path":"/docs/events/conditionPresetsChanged","title":"conditionPresetsChanged","description":"Emitted when advanced condition presets change. Connect presets to user preference storage."}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/advanced-filter","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/features/find","id":"find","kind":"feature","group":"sort-filter","title":"Find cell content","tier":"pro","summary":"Find highlights matching cells and moves between results without reducing the row list. Use it when users need to keep reading surrounding rows.","examples":[{"title":"Enable the Find tool","explanation":"Provide a search input and result navigation inside the Grid.","source":"grid.find = true;","result":"Enter Atlas to move between matching cells while retaining surrounding rows. Unlike quick search, this does not filter the whole list."},{"title":"Find within filtered results","explanation":"Filter by the responsible team first, then use Find to locate a particular product.","source":"grid.quickFilter = true;\ngrid.quickFilterText = 'Platform';\ngrid.find = true;","result":"Filtering narrows the data scope; Find helps navigate within it. Label the two inputs to distinguish their purposes."},{"title":"Check restricted columns","explanation":"Hide sensitive columns or apply canReadCell in your app, then search for their values. Verify that highlights, counts, and tooltips do not reveal hidden values.","source":null,"result":"Find must operate only on values the user can read. Provide a separate server search for remote rows that have not loaded."}],"featureId":"find","sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"Find searches loaded rows and readable, displayed columns. It differs from a global search covering hidden columns or data that exists only on the server."},{"kind":"paragraph","text":"Using this feature in a product requires the Pro package and a valid license. Matching setting names do not enable Pro features in Community."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Enable the Find tool","blocks":[{"kind":"paragraph","text":"Provide a search input and result navigation inside the Grid."},{"kind":"code","source":"grid.find = true;","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Enter Atlas to move between matching cells while retaining surrounding rows. Unlike quick search, this does not filter the whole list."}]},{"id":"example-2","title":"Example 2. Find within filtered results","blocks":[{"kind":"paragraph","text":"Filter by the responsible team first, then use Find to locate a particular product."},{"kind":"code","source":"grid.quickFilter = true;\ngrid.quickFilterText = 'Platform';\ngrid.find = true;","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Filtering narrows the data scope; Find helps navigate within it. Label the two inputs to distinguish their purposes."}]},{"id":"example-3","title":"Example 3. Check restricted columns","blocks":[{"kind":"paragraph","text":"Hide sensitive columns or apply canReadCell in your app, then search for their values. Verify that highlights, counts, and tooltips do not reveal hidden values."},{"kind":"paragraph","text":"Verify the result: Find must operate only on values the user can read. Provide a separate server search for remote rows that have not loaded."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"No Find results does not necessarily mean the value is absent from the full data set. Explain the loaded scope and filter state."},{"kind":"paragraph","text":"Do not distinguish results through highlight color alone. Provide keyboard focus and previous/next navigation as well."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"links","items":[{"path":"/docs/options/find","title":"find","description":"Finds and navigates matching positions in loaded, readable cells. This is not a search of the complete server data set."}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/find","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/features/row-selection","id":"row-selection","kind":"feature","group":"selection","title":"Row selection","tier":"free","summary":"Row selection chooses targets for bulk actions such as approval, export, or assignment. Unlike cell range selection, it selects an entire order.","examples":[{"title":"Select multiple orders","explanation":"Configure checkboxes so users can select multiple orders at once.","source":"grid.rowSelection = 'multi';\ngrid.selectionCheckbox = true;\nawait grid.selectRows(['ORD-0001', 'ORD-0003']);","result":"Two orders are selected. Distinguish the displayed scope affected by the header checkbox from selecting all server data."},{"title":"Read bulk-action targets","explanation":"Read selected IDs and pass them to your app's confirmation screen.","source":"const selectedIds = await grid.getSelectedRowIds();\nconsole.log(selectedIds);","result":"The same order IDs remain identifiable after sorting. Connect your UI accordingly, for example by disabling the action button when selection is empty."},{"title":"Respond to selection changes","explanation":"Update the selection count and details panel whenever a checkbox changes.","source":"grid.addEventListener('selectionChanged', event => console.log(event.detail));\n// Clear selection\nawait grid.selectRows([]);","result":"Verify that clearing selection produces an empty result. Do not retain missing IDs or deleted orders as action targets."}],"featureId":"row-selection","sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"Store selections as IDs, not display positions. Selecting a row does not itself delete an order or trigger server processing."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Select multiple orders","blocks":[{"kind":"paragraph","text":"Configure checkboxes so users can select multiple orders at once."},{"kind":"code","source":"grid.rowSelection = 'multi';\ngrid.selectionCheckbox = true;\nawait grid.selectRows(['ORD-0001', 'ORD-0003']);","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Two orders are selected. Distinguish the displayed scope affected by the header checkbox from selecting all server data."}]},{"id":"example-2","title":"Example 2. Read bulk-action targets","blocks":[{"kind":"paragraph","text":"Read selected IDs and pass them to your app's confirmation screen."},{"kind":"code","source":"const selectedIds = await grid.getSelectedRowIds();\nconsole.log(selectedIds);","language":"javascript"},{"kind":"paragraph","text":"Verify the result: The same order IDs remain identifiable after sorting. Connect your UI accordingly, for example by disabling the action button when selection is empty."}]},{"id":"example-3","title":"Example 3. Respond to selection changes","blocks":[{"kind":"paragraph","text":"Update the selection count and details panel whenever a checkbox changes."},{"kind":"code","source":"grid.addEventListener('selectionChanged', event => console.log(event.detail));\n// Clear selection\nawait grid.selectRows([]);","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Verify that clearing selection produces an empty result. Do not retain missing IDs or deleted orders as action targets."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"Selecting loaded rows cannot represent selection of the entire server data set. Identify when you need the server row model's selection state API."},{"kind":"paragraph","text":"Read permission and selectability are different policies. Recheck authorization on the server when submitting operations for selected IDs."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"links","items":[{"path":"/docs/options/rowSelection","title":"rowSelection","description":"Disables row selection or enables single/multiple selection. Independent of cell range selection."},{"path":"/docs/options/getRowId","title":"getRowId","description":"Returns a stable, unique row ID. The same business row must retain its ID after sorting, filtering, and editing."},{"path":"/docs/options/selectionCheckbox","title":"selectionCheckbox","description":"Displays row selection checkboxes."},{"path":"/docs/options/showSelectionCheckbox","title":"showSelectionCheckbox","description":"Compatibility alias for selection checkboxes. Avoid conflicts with selectionCheckbox."},{"path":"/docs/options/shiftClickAdditive","title":"shiftClickAdditive","description":"Chooses whether Shift-click range selection adds to the existing selection."},{"path":"/docs/methods/selectRows","title":"selectRows","description":"Sets selection for specified row IDs. Use stable IDs, not display indices."},{"path":"/docs/methods/getSelectedRowIds","title":"getSelectedRowIds","description":"Reads selected row IDs. Use dedicated server selection state APIs for server-wide selection."},{"path":"/docs/events/selectionChanged","title":"selectionChanged","description":"Emitted when row selection changes. Use selected IDs to define bulk-operation targets."}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/row-selection","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/features/range-selection","id":"range-selection","kind":"feature","group":"selection","title":"Cell range selection","tier":"pro","summary":"A cell range is a rectangle spanning rows and columns. It defines the scope for copying, pasting, filling, and chart creation; selecting it does not change values.","examples":[{"title":"Select a range programmatically","explanation":"This example selects the first two visible rows and columns.","source":"grid.rangeSelection = true;\nconsole.log(await grid.setCanonicalRanges([{ anchorRow: 0, anchorCol: 0, focusRow: 1, focusCol: 1 }]));","result":"The specified rectangle is highlighted. Verify that the columns at those positions are appropriate for the intended operation."},{"title":"Read the current range","explanation":"After users drag a selection, read and compare its normalized range with the original range.","source":"console.log(await grid.getCanonicalRanges());\nconsole.log(await grid.getCellRanges());","result":"Interpret the range even when the anchor and endpoint run in opposite directions. Follow each API's coordinate and ID contract."},{"title":"Clear the range after an operation","explanation":"Clear the selection when switching to a data set where the range is no longer valid.","source":"await grid.clearCellRanges();\ngrid.addEventListener('rangeSelectionChanged', event => console.log(event.detail));","result":"A range from previous orders will not remain an editing target in the new data. Row checkbox selection is a separate state."}],"featureId":"range-selection","sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"Range API row and column indices are display coordinates. Do not assume the same coordinates refer to the same data after sorting or hiding columns."},{"kind":"paragraph","text":"Using this feature in a product requires the Pro package and a valid license. Matching setting names do not enable Pro features in Community."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Select a range programmatically","blocks":[{"kind":"paragraph","text":"This example selects the first two visible rows and columns."},{"kind":"code","source":"grid.rangeSelection = true;\nconsole.log(await grid.setCanonicalRanges([{ anchorRow: 0, anchorCol: 0, focusRow: 1, focusCol: 1 }]));","language":"javascript"},{"kind":"paragraph","text":"Verify the result: The specified rectangle is highlighted. Verify that the columns at those positions are appropriate for the intended operation."}]},{"id":"example-2","title":"Example 2. Read the current range","blocks":[{"kind":"paragraph","text":"After users drag a selection, read and compare its normalized range with the original range."},{"kind":"code","source":"console.log(await grid.getCanonicalRanges());\nconsole.log(await grid.getCellRanges());","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Interpret the range even when the anchor and endpoint run in opposite directions. Follow each API's coordinate and ID contract."}]},{"id":"example-3","title":"Example 3. Clear the range after an operation","blocks":[{"kind":"paragraph","text":"Clear the selection when switching to a data set where the range is no longer valid."},{"kind":"code","source":"await grid.clearCellRanges();\ngrid.addEventListener('rangeSelectionChanged', event => console.log(event.detail));","language":"javascript"},{"kind":"paragraph","text":"Verify the result: A range from previous orders will not remain an editing target in the new data. Row checkbox selection is a separate state."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"Ranges containing merged cells, group rows, or pinned rows may follow different rules from regular data cells. Inspect excluded targets in the result report."},{"kind":"paragraph","text":"If data order changes after saving state, ranges stored only as display coordinates may point to the wrong targets. Inspect the restore report."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"links","items":[{"path":"/docs/options/rangeSelection","title":"rangeSelection","description":"Enables rectangular cell selection, independently of row selection. Supplies ranges for copying, filling, and chart integration."},{"path":"/docs/methods/getCellRanges","title":"getCellRanges","description":"Reads current cell selection boundaries. Review the meaning of display row/column coordinates."},{"path":"/docs/methods/clearCellRanges","title":"clearCellRanges","description":"Clears all cell selection ranges. Row selection is separate."},{"path":"/docs/methods/getCanonicalRanges","title":"getCanonicalRanges","description":"Reads current selection as normalized ranges including stable row and column IDs."},{"path":"/docs/methods/setCanonicalRanges","title":"setCanonicalRanges","description":"Changes cell selection from normalized range input and returns the change result."},{"path":"/docs/events/rangeSelectionChanged","title":"rangeSelectionChanged","description":"Emitted when cell selection ranges change. Use the boundaries for copying or summaries."}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/range-selection","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/features/fill-handle","id":"fill-handle","kind":"feature","group":"selection","title":"Fill values","tier":"pro","summary":"The fill handle copies values or extends a pattern from a source range. Both the drag UI and fillRange API account for editability, validation, and history.","examples":[{"title":"Enable user filling","explanation":"Provide a fill handle with range selection and an editable quantity column.","source":"grid.rangeSelection = true;\ngrid.enableFillHandle = true;\ngrid.columnDefs = grid.columnDefs.map(col => col.field === 'quantity' ? { ...col, editable: true } : col);","result":"Drag the handle at the selection edge to fill cells. Copying and sequence results depend on numeric or string values and fillHandleMode."},{"title":"Repeat a quantity","explanation":"Fill the next three cells from a cell containing quantity 5. First verify whether the operation repeats the value or extends a numeric pattern.","source":null,"result":"Each target quantity and the total should update together. Undo the operation if the fill result is incorrect."},{"title":"Ranges containing restricted cells","explanation":"Inspect results when a range contains noneditable columns or targets that fail validation.","source":"grid.addEventListener('fillStart', event => console.log('Start', event.detail));\ngrid.addEventListener('fillEnd', event => console.log('End', event.detail));","result":"A start event alone does not indicate success. Inspect the end report and changed cells to distinguish cancellation, exclusion, and rejection."}],"featureId":"fill-handle","sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"Help users distinguish copying one number down from extending a sequence based on the difference between two numbers."},{"kind":"paragraph","text":"Using this feature in a product requires the Pro package and a valid license. Matching setting names do not enable Pro features in Community."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Enable user filling","blocks":[{"kind":"paragraph","text":"Provide a fill handle with range selection and an editable quantity column."},{"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":"Verify the result: Drag the handle at the selection edge to fill cells. Copying and sequence results depend on numeric or string values and fillHandleMode."}]},{"id":"example-2","title":"Example 2. Repeat a quantity","blocks":[{"kind":"paragraph","text":"Fill the next three cells from a cell containing quantity 5. First verify whether the operation repeats the value or extends a numeric pattern."},{"kind":"paragraph","text":"Verify the result: Each target quantity and the total should update together. Undo the operation if the fill result is incorrect."}]},{"id":"example-3","title":"Example 3. Ranges containing restricted cells","blocks":[{"kind":"paragraph","text":"Inspect results when a range contains noneditable columns or targets that fail validation."},{"kind":"code","source":"grid.addEventListener('fillStart', event => console.log('Start', event.detail));\ngrid.addEventListener('fillEnd', event => console.log('End', event.detail));","language":"javascript"},{"kind":"paragraph","text":"Verify the result: A start event alone does not indicate success. Inspect the end report and changed cells to distinguish cancellation, exclusion, and rejection."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"Group headings, detail panels, and unloaded placeholders are not stable data rows and cannot be write targets. Do not assume the entire range was written."},{"kind":"paragraph","text":"Autofill does not save changes to your server. One fill operation can produce many change events, so choose a strategy for batching save requests."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"links","items":[{"path":"/docs/options/enableFillHandle","title":"enableFillHandle","description":"Enables the fill handle at the corner of a selected range."},{"path":"/docs/options/fillHandleAxes","title":"fillHandleAxes","description":"Allows horizontal, vertical, or bidirectional filling."},{"path":"/docs/options/fillHandleMode","title":"fillHandleMode","description":"Chooses copying existing values or extending a sequence when filling."},{"path":"/docs/methods/fillRange","title":"fillRange","description":"Fills a target range from source values or patterns and reports applied and rejected results."},{"path":"/docs/events/fillStart","title":"fillStart","description":"Emitted when range filling starts."},{"path":"/docs/events/fillEnd","title":"fillEnd","description":"Emitted when range filling ends. Explain applied, skipped, and rejected results to users."}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/fill-handle","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/features/single-cell-copy","id":"single-cell-copy","kind":"feature","group":"selection","title":"Copy cells","tier":"free","summary":"Copy one cell's display text to the system clipboard. Selected text inside a cell editor and a focused Grid cell are different copy targets.","examples":[{"title":"Copy the first displayed product","explanation":"Connect the following call to the user's Copy button click.","source":"const copied = await grid.copyCellAt(0, 'product');\nconsole.log(copied);","result":"true indicates successful copying. If the table has been sorted, the target is the product in the current first displayed row."},{"title":"Copy calculated or formatted cells","explanation":"Apply currency formatting to an amount, then inspect the copied text. Do not assume the copied value equals the original number.","source":null,"result":"Paste into the target input to verify the intended representation. For machine-readable numbers, reading the source data API may be more appropriate."},{"title":"Permissions and failure handling","explanation":"Try copying both restricted and regular cells, and display appropriate guidance for rejected operations.","source":"grid.clipboardEscapeFormulae = true;","result":"Also review protection settings for strings that spreadsheet apps may interpret as formulas. Distinguish this protection from changing the meaning of business values."}],"featureId":"single-cell-copy","sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"Clipboard access depends on the browser environment and user activation. Request copying from a button click or keyboard action and check the return value."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Copy the first displayed product","blocks":[{"kind":"paragraph","text":"Connect the following call to the user's Copy button click."},{"kind":"code","source":"const copied = await grid.copyCellAt(0, 'product');\nconsole.log(copied);","language":"javascript"},{"kind":"paragraph","text":"Verify the result: true indicates successful copying. If the table has been sorted, the target is the product in the current first displayed row."}]},{"id":"example-2","title":"Example 2. Copy calculated or formatted cells","blocks":[{"kind":"paragraph","text":"Apply currency formatting to an amount, then inspect the copied text. Do not assume the copied value equals the original number."},{"kind":"paragraph","text":"Verify the result: Paste into the target input to verify the intended representation. For machine-readable numbers, reading the source data API may be more appropriate."}]},{"id":"example-3","title":"Example 3. Permissions and failure handling","blocks":[{"kind":"paragraph","text":"Try copying both restricted and regular cells, and display appropriate guidance for rejected operations."},{"kind":"code","source":"grid.clipboardEscapeFormulae = true;","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Also review protection settings for strings that spreadsheet apps may interpret as formulas. Distinguish this protection from changing the meaning of business values."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"Browsers may reject clipboard requests from asynchronous timers unrelated to user activation. Do not report clipboard permission failures as Grid data errors."},{"kind":"paragraph","text":"If source values are restricted, tooltips, copying, and export must follow the same access policy. Merely removing visible text is insufficient."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"links","items":[{"path":"/docs/options/clipboardEscapeFormulae","title":"clipboardEscapeFormulae","description":"Escapes spreadsheet formula prefixes in outgoing clipboard text."},{"path":"/docs/methods/copyCellAt","title":"copyCellAt","description":"Copies the value at a displayed row and field and returns success."}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/single-cell-copy","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/features/row-copy","id":"row-copy","kind":"feature","group":"selection","title":"Copy rows","tier":"free","summary":"Copy a row's displayed columns as tab-separated text. Spreadsheet apps paste each column into a separate cell, making it useful for transferring several values from one order.","examples":[{"title":"Copy the current first row","explanation":"Connect row copying to a user button click.","source":"console.log(await grid.copyRowAt(0));","result":"Displayed column values are copied as TSV. Hidden columns are excluded from copying based on displayed columns."},{"title":"Copy from a compact view","explanation":"Hide the unit price column, then copy the same row.","source":"await grid.hideColumn('price');\n// Call from the user's Copy button\nconsole.log(await grid.copyRowAt(0));","result":"Paste into a spreadsheet to compare the order and count of the displayed columns."},{"title":"Compare with copying multiple rows","explanation":"To transfer multiple orders, choose range copying or CSV export instead of repeatedly copying individual rows.","source":null,"result":"Offer clear choices for transferring a single row once and transferring a batch through a file."}],"featureId":"row-copy","sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"copyRowAt accepts the current display position. If your app selects rows by business ID, locate that ID in the displayed view before copying."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Copy the current first row","blocks":[{"kind":"paragraph","text":"Connect row copying to a user button click."},{"kind":"code","source":"console.log(await grid.copyRowAt(0));","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Displayed column values are copied as TSV. Hidden columns are excluded from copying based on displayed columns."}]},{"id":"example-2","title":"Example 2. Copy from a compact view","blocks":[{"kind":"paragraph","text":"Hide the unit price column, then copy the same row."},{"kind":"code","source":"await grid.hideColumn('price');\n// Call from the user's Copy button\nconsole.log(await grid.copyRowAt(0));","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Paste into a spreadsheet to compare the order and count of the displayed columns."}]},{"id":"example-3","title":"Example 3. Compare with copying multiple rows","blocks":[{"kind":"paragraph","text":"To transfer multiple orders, choose range copying or CSV export instead of repeatedly copying individual rows."},{"kind":"paragraph","text":"Verify the result: Offer clear choices for transferring a single row once and transferring a batch through a file."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"Tabs, line breaks, and formula-like text inside cells may be interpreted differently by the receiving app. Verify behavior in the actual destination app."},{"kind":"paragraph","text":"A selection checkbox does not make copyRowAt automatically target the selected row. Explicitly pass the displayed row position."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"links","items":[{"path":"/docs/methods/copyRowAt","title":"copyRowAt","description":"Copies a displayed row and returns success."}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/row-copy","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/features/range-clipboard","id":"range-clipboard","kind":"feature","group":"selection","title":"Copy and paste ranges","tier":"pro","summary":"Copy values from a rectangular range and paste them in the same row and column arrangement. Targets are determined from the starting cell and remain subject to editability, permissions, and validation.","examples":[{"title":"Copy a selected range","explanation":"Select a range, then copy it from a user button action.","source":"grid.rangeSelection = true;\nconsole.log(await grid.copyRangeToClipboard());","result":"The selected cell layout is placed on the clipboard. Check the result for an absent selection or browser rejection."},{"title":"Paste quantities from a spreadsheet","explanation":"Paste two or three copied numbers into the starting cell of the quantity column.","source":"// Call from the user's Paste button\nconsole.log(await grid.pasteFromClipboard());","result":"Target quantities and calculated columns update. Invalid formats and noneditable targets may not all be applied in the same way."},{"title":"Undo a paste","explanation":"Read the result and undo unintended changes.","source":"grid.addEventListener('clipboardPasted', event => console.log(event.detail));\n// When the user requests Undo\nawait grid.undo();","result":"Distinguish changed cells from excluded cells. If changes have already been saved to the server, your app must handle reverting them there separately."}],"featureId":"range-clipboard","sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"Even with the same clipboard format, results depend on target columns' number, date, and selection-value contracts. Test a small range first."},{"kind":"paragraph","text":"Using this feature in a product requires the Pro package and a valid license. Matching setting names do not enable Pro features in Community."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Copy a selected range","blocks":[{"kind":"paragraph","text":"Select a range, then copy it from a user button action."},{"kind":"code","source":"grid.rangeSelection = true;\nconsole.log(await grid.copyRangeToClipboard());","language":"javascript"},{"kind":"paragraph","text":"Verify the result: The selected cell layout is placed on the clipboard. Check the result for an absent selection or browser rejection."}]},{"id":"example-2","title":"Example 2. Paste quantities from a spreadsheet","blocks":[{"kind":"paragraph","text":"Paste two or three copied numbers into the starting cell of the quantity column."},{"kind":"code","source":"// Call from the user's Paste button\nconsole.log(await grid.pasteFromClipboard());","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Target quantities and calculated columns update. Invalid formats and noneditable targets may not all be applied in the same way."}]},{"id":"example-3","title":"Example 3. Undo a paste","blocks":[{"kind":"paragraph","text":"Read the result and undo unintended changes."},{"kind":"code","source":"grid.addEventListener('clipboardPasted', event => console.log(event.detail));\n// When the user requests Undo\nawait grid.undo();","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Distinguish changed cells from excluded cells. If changes have already been saved to the server, your app must handle reverting them there separately."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"Ranges with merged cells or pinned rows may behave differently from regular areas. Use the returned report instead of deriving applied row counts from range dimensions."},{"kind":"paragraph","text":"Verify that protected columns reject copying and pasting through both UI and API paths."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"links","items":[{"path":"/docs/methods/copyRangeToClipboard","title":"copyRangeToClipboard","description":"Copies the selected range and returns success. Check browser permissions and user activation requirements."},{"path":"/docs/methods/pasteFromClipboard","title":"pasteFromClipboard","description":"Pastes clipboard content into the current target. Inspect applied and skipped cells in the result event."},{"path":"/docs/events/clipboardCopied","title":"clipboardCopied","description":"Emitted after clipboard copying completes. Output text and ranges are available, so avoid logging sensitive values."},{"path":"/docs/events/clipboardPasted","title":"clipboardPasted","description":"Reports paste results. Inspect applied/skipped counts, starting position, and actual changes together."}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/range-clipboard","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/features/cell-editing","id":"cell-editing","kind":"feature","group":"editing","title":"Cell and row editing","tier":"free","summary":"Cell editing changes one value immediately; full-row editing commits multiple fields as one row operation. editor specifies the input UI, while editable controls write access.","examples":[{"title":"Number and basic Select editing","explanation":"Enter quantities as nonnegative numbers and statuses from a predefined list.","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: 'In progress' }, { value: 'done', label: 'Complete' }\n  ] }\n];","result":"Distinguish display labels from stored values. Selecting Complete stores done in the source data."},{"title":"Commit a row","explanation":"Start editing a displayed order, temporarily change its quantity, then commit.","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":"If starting row editing is rejected, do not proceed. Read the commit report to determine what was actually applied."},{"title":"Cancel editing and subscribe to results","explanation":"Discard uncommitted values when users cancel, and use only actual change results for saving.","source":"await grid.stopRowEdit('cancel');\ngrid.addEventListener('cellValueChanged', event => console.log(event.detail));\ngrid.addEventListener('rowValueChanged', event => console.log(event.detail));","result":"Assign clear roles to cell-change and full-row commit events so they do not cause duplicate server saves."}],"featureId":"cell-editing","sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"Define stored value types for number, date, select, and checkbox editors. Parsers convert input into values, and validation checks allowed limits."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Number and basic Select editing","blocks":[{"kind":"paragraph","text":"Enter quantities as nonnegative numbers and statuses from a predefined list."},{"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: 'In progress' }, { value: 'done', label: 'Complete' }\n  ] }\n];","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Distinguish display labels from stored values. Selecting Complete stores done in the source data."}]},{"id":"example-2","title":"Example 2. Commit a row","blocks":[{"kind":"paragraph","text":"Start editing a displayed order, temporarily change its quantity, then commit."},{"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":"Verify the result: If starting row editing is rejected, do not proceed. Read the commit report to determine what was actually applied."}]},{"id":"example-3","title":"Example 3. Cancel editing and subscribe to results","blocks":[{"kind":"paragraph","text":"Discard uncommitted values when users cancel, and use only actual change results for saving."},{"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":"Verify the result: Assign clear roles to cell-change and full-row commit events so they do not cause duplicate server saves."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"Group headings, detail rows, and unloaded placeholders differ from editable data rows. You need a stable ID and editable columns."},{"kind":"paragraph","text":"Validation failure may leave the editing session active. Clicking Commit alone is not a reason to display a success message."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"links","items":[{"path":"/docs/options/editType","title":"editType","description":"Selects single-cell editing or editing multiple cells as one row operation."},{"path":"/docs/columns/cellEditor","title":"cellEditor","description":"Declares a custom cell editor. Use editor to select a built-in editor type."},{"path":"/docs/columns/editable","title":"editable","description":"Allows editing this column. Row permissions and validation still apply."},{"path":"/docs/columns/editor","title":"editor","description":"Built-in editor type, such as text, number, date, select, or checkbox."},{"path":"/docs/columns/valueParser","title":"valueParser","description":"Converts input text to the stored type, for example by normalizing numbers or dates."},{"path":"/docs/columns/valueSetter","title":"valueSetter","description":"Custom logic for writing a converted value into the source row. Follow the return contract indicating whether a change occurred."},{"path":"/docs/columns/options","title":"options","description":"Values and display labels for select editors. Individual options can be disabled."},{"path":"/docs/columns/min","title":"min","description":"Minimum allowed value for number or date editing."},{"path":"/docs/columns/max","title":"max","description":"Maximum allowed value for number or date editing."},{"path":"/docs/columns/step","title":"step","description":"Increment/decrement step for numeric input."},{"path":"/docs/columns/decimals","title":"decimals","description":"Decimal precision for numeric editing."},{"path":"/docs/columns/nullable","title":"nullable","description":"Whether null is accepted as an edited value."},{"path":"/docs/columns/allowEmpty","title":"allowEmpty","description":"Whether empty values are allowed while editing. Review together with required-value validation."},{"path":"/docs/columns/storeAs","title":"storeAs","description":"Whether date edits are stored as Date objects or ISO strings."},{"path":"/docs/columns/rows","title":"rows","description":"Default visible line count for a multiline text editor."},{"path":"/docs/columns/maxRows","title":"maxRows","description":"Maximum line count to which a multiline editor can grow."},{"path":"/docs/columns/cols","title":"cols","description":"Display width basis for a multiline text editor."},{"path":"/docs/columns/maxLength","title":"maxLength","description":"Maximum text editing length."},{"path":"/docs/methods/startRowEdit","title":"startRowEdit","description":"Starts full-row editing for a row ID."},{"path":"/docs/methods/stopRowEdit","title":"stopRowEdit","description":"Commits or cancels current row editing and returns a report."},{"path":"/docs/methods/stageRowEditCell","title":"stageRowEditCell","description":"Sets a pending value for a column in the row currently being edited."},{"path":"/docs/methods/getActiveEditTransaction","title":"getActiveEditTransaction","description":"Reads the active cell editing transaction, or null when not editing."},{"path":"/docs/methods/commitActiveEdit","title":"commitActiveEdit","description":"Commits current cell editing and returns success."},{"path":"/docs/methods/cancelActiveEdit","title":"cancelActiveEdit","description":"Cancels current cell editing and returns whether it ran."},{"path":"/docs/methods/getCellEditorInstance","title":"getCellEditorInstance","description":"Reads the mounted cell editor instance and context, or null if no editor exists."},{"path":"/docs/events/cellEditingRequested","title":"cellEditingRequested","description":"Emitted when cell editing is requested. Distinguish later cancellation, commit, and value-change events."},{"path":"/docs/events/cellEditingCancelled","title":"cellEditingCancelled","description":"Emitted when cell editing is cancelled. Do not treat it as a successful server save."},{"path":"/docs/events/cellEditingCommitted","title":"cellEditingCommitted","description":"Emitted when cell editing is committed. Also inspect cellValueChanged for actual value changes."},{"path":"/docs/events/rowValueChanged","title":"rowValueChanged","description":"Reports full-row value changes. Use when defining a save unit for an entire row."},{"path":"/docs/events/rowEditStart","title":"rowEditStart","description":"Emitted when full-row editing starts."},{"path":"/docs/events/rowEditStop","title":"rowEditStop","description":"Emitted when full-row editing ends. Distinguish commit from cancellation."}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/cell-editing","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/features/batch-editing","id":"batch-editing","kind":"feature","group":"editing","title":"Batch editing","tier":"pro","summary":"Batch editing stages changes to multiple cells for a single commit or cancellation. Distinguish staged values from committed rowData to make the Save action clear.","examples":[{"title":"Stage edits to two orders","explanation":"Prepare changes until the user clicks Save.","source":"await grid.startBatchEdit();\nawait grid.stageBatchCell('ORD-0001', 'quantity', 25);\nawait grid.stageBatchCell('ORD-0002', 'quantity', 50);\nconsole.log(await grid.getPendingBatchCells());","result":"Read the list of staged changes. Staging alone does not mean a server save has completed."},{"title":"Review and commit","explanation":"Inspect the batch result during the Save action.","source":"console.log(await grid.commitBatchEdit());\nconsole.log(await grid.isBatchEditing());","result":"Read the application report for validation and permission results before continuing with server saving. Also check whether the session remains active."},{"title":"Cancel all changes and show built-in tools","explanation":"Discard staged batch changes when users cancel. You can also display the built-in tools.","source":"await grid.cancelBatchEdit();\ngrid.batchEditToolbar = true;","result":"Uncommitted changes are cancelled, preserving the values from before the commit. This does not erase previously committed operations."}],"featureId":"batch-editing","sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"Start batch editing, then pass a row ID, column ID, and new value to stageBatchCell. Missing targets and noneditable columns may not be applied."},{"kind":"paragraph","text":"Using this feature in a product requires the Pro package and a valid license. Matching setting names do not enable Pro features in Community."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Stage edits to two orders","blocks":[{"kind":"paragraph","text":"Prepare changes until the user clicks Save."},{"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":"Verify the result: Read the list of staged changes. Staging alone does not mean a server save has completed."}]},{"id":"example-2","title":"Example 2. Review and commit","blocks":[{"kind":"paragraph","text":"Inspect the batch result during the Save action."},{"kind":"code","source":"console.log(await grid.commitBatchEdit());\nconsole.log(await grid.isBatchEditing());","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Read the application report for validation and permission results before continuing with server saving. Also check whether the session remains active."}]},{"id":"example-3","title":"Example 3. Cancel all changes and show built-in tools","blocks":[{"kind":"paragraph","text":"Discard staged batch changes when users cancel. You can also display the built-in tools."},{"kind":"code","source":"await grid.cancelBatchEdit();\ngrid.batchEditToolbar = true;","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Uncommitted changes are cancelled, preserving the values from before the commit. This does not erase previously committed operations."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"New server data arriving during a batch may conflict with the editing baseline. Choose a policy to temporarily buffer updates or explain conflicts."},{"kind":"paragraph","text":"A batch commit is not a server transaction. If server saving fails, offer retry and revert choices."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"links","items":[{"path":"/docs/options/batchEditToolbar","title":"batchEditToolbar","description":"Displays tools for starting, committing, and cancelling batch edits."},{"path":"/docs/methods/startBatchEdit","title":"startBatchEdit","description":"Starts batch editing to collect multiple cell changes for a single commit."},{"path":"/docs/methods/isBatchEditing","title":"isBatchEditing","description":"Checks whether batch editing is active."},{"path":"/docs/methods/stageBatchCell","title":"stageBatchCell","description":"Stages a batch value by row and column ID. Does not immediately persist final data."},{"path":"/docs/methods/getPendingBatchCells","title":"getPendingBatchCells","description":"Reads uncommitted batch editing cells."},{"path":"/docs/methods/cancelBatchEdit","title":"cancelBatchEdit","description":"Cancels pending batch edits and returns the cancelled item count."},{"path":"/docs/methods/commitBatchEdit","title":"commitBatchEdit","description":"Validates and commits staged changes, reporting per-cell results."},{"path":"/docs/events/batchEditStart","title":"batchEditStart","description":"Emitted when batch editing starts. Open a staged-changes UI if needed."},{"path":"/docs/events/batchEditEnd","title":"batchEditEnd","description":"Emitted when batch editing commits or cancels. Inspect the end reason and results."}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/batch-editing","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/features/rich-select","id":"rich-select","kind":"feature","group":"editing","title":"Searchable selection editor","tier":"pro","summary":"This Pro editor narrows a large candidate list through search. Basic Select suits short, fixed lists; Rich Select helps users quickly find an item among many candidates.","examples":[{"title":"Searchable product editor","explanation":"Provide products whose codes differ from their names.","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":"Users search and select by name, but a product code such as P-001 is stored. Align data and label display policies."},{"title":"Cancel selection and retain the existing value","explanation":"Start editing, browse other candidates, and press Escape to cancel. Verify that an uncommitted candidate does not remain in the source data.","source":null,"result":"The user's last committed value should remain. Also verify focus movement and committing with Enter."},{"title":"Update the candidate list","explanation":"To disable an out-of-stock product, supply columnDefs with new options. Decide whether to retain the displayed historical product code on existing orders or remove it.","source":null,"result":"Handle availability for new input separately from historical data display. Keep labels readable for values no longer in the candidate list."}],"featureId":"rich-select","sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"In options, label is the readable name and value is the stored value. Define how disabled candidates and empty values are handled too."},{"kind":"paragraph","text":"Using this feature in a product requires the Pro package and a valid license. Matching setting names do not enable Pro features in Community."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Searchable product editor","blocks":[{"kind":"paragraph","text":"Provide products whose codes differ from their names."},{"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":"Verify the result: Users search and select by name, but a product code such as P-001 is stored. Align data and label display policies."}]},{"id":"example-2","title":"Example 2. Cancel selection and retain the existing value","blocks":[{"kind":"paragraph","text":"Start editing, browse other candidates, and press Escape to cancel. Verify that an uncommitted candidate does not remain in the source data."},{"kind":"paragraph","text":"Verify the result: The user's last committed value should remain. Also verify focus movement and committing with Enter."}]},{"id":"example-3","title":"Example 3. Update the candidate list","blocks":[{"kind":"paragraph","text":"To disable an out-of-stock product, supply columnDefs with new options. Decide whether to retain the displayed historical product code on existing orders or remove it."},{"kind":"paragraph","text":"Verify the result: Handle availability for new input separately from historical data display. Keep labels readable for values no longer in the candidate list."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"The status column in Features may use basic Select. Specify editor: autocomplete or the relevant custom editor to use searchable editing."},{"kind":"paragraph","text":"If typing candidates triggers server queries, implement cancellation, late-response handling, and empty lists according to your app's editor contract."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"links","items":[{"path":"/docs/columns/cellEditor","title":"cellEditor","description":"Declares a custom cell editor. Use editor to select a built-in editor type."},{"path":"/docs/columns/editor","title":"editor","description":"Built-in editor type, such as text, number, date, select, or checkbox."}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/rich-select","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/features/undo-redo","id":"undo-redo","kind":"feature","group":"editing","title":"Edit history","tier":"free","summary":"Undo or redo recorded editing transactions. One operation may contain multiple cell changes, so cell counts and history counts are not necessarily equal.","examples":[{"title":"Undo an accidental value change","explanation":"Edit and commit a quantity, then restore its previous value.","source":"console.log(await grid.getUndoRedoDepth());\nconsole.log(await grid.undo());","result":"The last recorded operation returns to its previous values. Disable the button when there is nothing to undo."},{"title":"Redo an undone operation","explanation":"Call this when redo history is available.","source":"console.log(await grid.redo());","result":"The same operation is reapplied. If a new edit followed undo, read redo availability again."},{"title":"Clear history when switching work contexts","explanation":"This policy clears the previous view's history before opening a different order data set.","source":"await grid.clearHistory();\ngrid.addEventListener('historyChanged', event => console.log(event.detail));","result":"Prevent changes from a previous context from being undone against new data. This does not delete data snapshots or server records."}],"featureId":"undo-redo","sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"New edits after undo may alter the redo path. Also define history retention when resetting the view or replacing data."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Undo an accidental value change","blocks":[{"kind":"paragraph","text":"Edit and commit a quantity, then restore its previous value."},{"kind":"code","source":"console.log(await grid.getUndoRedoDepth());\nconsole.log(await grid.undo());","language":"javascript"},{"kind":"paragraph","text":"Verify the result: The last recorded operation returns to its previous values. Disable the button when there is nothing to undo."}]},{"id":"example-2","title":"Example 2. Redo an undone operation","blocks":[{"kind":"paragraph","text":"Call this when redo history is available."},{"kind":"code","source":"console.log(await grid.redo());","language":"javascript"},{"kind":"paragraph","text":"Verify the result: The same operation is reapplied. If a new edit followed undo, read redo availability again."}]},{"id":"example-3","title":"Example 3. Clear history when switching work contexts","blocks":[{"kind":"paragraph","text":"This policy clears the previous view's history before opening a different order data set."},{"kind":"code","source":"await grid.clearHistory();\ngrid.addEventListener('historyChanged', event => console.log(event.detail));","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Prevent changes from a previous context from being undone against new data. This does not delete data snapshots or server records."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"Undoing a value in the browser does not automatically undo it on the server. Decide whether to save the reversal or handle it through a separate compensating operation."},{"kind":"paragraph","text":"Keep history counts and button states synchronized, and test operations with multiple changes such as batch editing and filling."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"links","items":[{"path":"/docs/methods/undo","title":"undo","description":"Undoes one recorded editing step and returns whether it ran."},{"path":"/docs/methods/redo","title":"redo","description":"Redoes one undone step and returns whether it ran."},{"path":"/docs/methods/clearHistory","title":"clearHistory","description":"Clears undo/redo history without resetting current data values."},{"path":"/docs/methods/getUndoRedoDepth","title":"getUndoRedoDepth","description":"Reads the number of available undo and redo steps."},{"path":"/docs/events/historyChanged","title":"historyChanged","description":"Emitted when undo/redo history changes. Update button availability and current depths."}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/undo-redo","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/features/validation-rules","id":"validation-rules","kind":"feature","group":"editing","title":"Data validation","summary":"Use declarative rules to check required values, numeric ranges, string formats, and custom conditions. The default mode may only mark invalid values, so explicitly set invalidEditMode to block saving when required.","examples":[{"title":"Required nonnegative integer quantity","explanation":"Restrict empty values, decimals, and negative numbers separately.","source":"grid.validationRules = [\n  { field: 'quantity', type: 'required', message: 'Enter a quantity.' },\n  { field: 'quantity', type: 'integer', message: 'Enter a whole number.' },\n  { field: 'quantity', type: 'min', value: 0, message: 'Must be at least 0.' }\n];\ngrid.invalidEditMode = 'block';","result":"Block commits of invalid input. A browser number editor's min restriction and business validation may be different stages."},{"title":"Summarize errors before saving","explanation":"Show the full table's error list in your app's review area.","source":"const errors = await grid.getValidationErrors();\nconsole.log(errors);\nif (errors.length) console.warn('Some cells still need correction.');","result":"Read row IDs, columns, values, and error messages. Visible red indicators alone do not describe validation across the full data set."},{"title":"Track failed input","explanation":"Explain validation rejections and verify that the server also rejects the same values.","source":"grid.addEventListener('cellValidationFailed', event => console.log(event.detail));","result":"Identify which input in which cell caused the problem. Avoid exposing sensitive values when recording user input to reproduce errors."}],"featureId":"validation-rules","sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"Empty values may pass rules other than required. For mandatory quantities, combine required with numeric rules."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Required nonnegative integer quantity","blocks":[{"kind":"paragraph","text":"Restrict empty values, decimals, and negative numbers separately."},{"kind":"code","source":"grid.validationRules = [\n  { field: 'quantity', type: 'required', message: 'Enter a quantity.' },\n  { field: 'quantity', type: 'integer', message: 'Enter a whole number.' },\n  { field: 'quantity', type: 'min', value: 0, message: 'Must be at least 0.' }\n];\ngrid.invalidEditMode = 'block';","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Block commits of invalid input. A browser number editor's min restriction and business validation may be different stages."}]},{"id":"example-2","title":"Example 2. Summarize errors before saving","blocks":[{"kind":"paragraph","text":"Show the full table's error list in your app's review area."},{"kind":"code","source":"const errors = await grid.getValidationErrors();\nconsole.log(errors);\nif (errors.length) console.warn('Some cells still need correction.');","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Read row IDs, columns, values, and error messages. Visible red indicators alone do not describe validation across the full data set."}]},{"id":"example-3","title":"Example 3. Track failed input","blocks":[{"kind":"paragraph","text":"Explain validation rejections and verify that the server also rejects the same values."},{"kind":"code","source":"grid.addEventListener('cellValidationFailed', event => console.log(event.detail));","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Identify which input in which cell caused the problem. Avoid exposing sensitive values when recording user input to reproduce errors."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"Clearly choose an allow, block, or revert policy. allow applies the value while showing an error, so invalid values can remain in the data."},{"kind":"paragraph","text":"Distinguish invalid source data from errors in new user input. The server save API must enforce business rules too."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"links","items":[{"path":"/docs/options/validationRules","title":"validationRules","description":"Defines required values, ranges, lists, patterns, custom validation, and other input checks."},{"path":"/docs/options/invalidEditMode","title":"invalidEditMode","description":"Selects allow to apply invalid values with errors, revert to restore previous values, or block to prevent commits."},{"path":"/docs/methods/getValidationErrors","title":"getValidationErrors","description":"Reads row, field, value, and message information for current validation errors. Connect to save guidance or an error list."},{"path":"/docs/events/cellValidationFailed","title":"cellValidationFailed","description":"Emitted when validation fails. Use the target cell, input, and message to guide corrections."}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/validation-rules","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/features/cell-notes","id":"cell-notes","kind":"feature","group":"editing","title":"Cell notes","tier":"pro","summary":"Cell notes add review context or explanations without changing the value. Standalone notes and collaboration comment threads use different storage and APIs, so choose the appropriate workflow first.","examples":[{"title":"Connect standalone note storage","explanation":"A server adapter implements load(cell) and save(cell,text,expectedRevision). load must return a note or null, and save must return the GridNoteSaveResult contract.","source":null,"result":"Assign the adapter and configure getRowId before enabling cellNotes. The server must save atomically only when the expected revision matches, preventing another user's edits from being lost."},{"title":"Add a collaboration comment","explanation":"Add a comment to an existing order cell in a Grid that has already joined collaborationRoom.","source":"const commentId = await grid.addCellComment('ORD-0001', 'quantity', 'Please verify the quantity.');\nif (commentId) {\n  await grid.openCellCommentPanel('ORD-0001', 'quantity');\n}","result":"Without an active collaboration session, the comment API does not substitute for standalone note storage. Check that an ID was returned."},{"title":"Read and resolve comments","explanation":"Use an actual ID from the collaboration comment list to change a thread's status.","source":"const comments = await grid.getCellComments('ORD-0001', 'quantity');\nconsole.log(comments);\n// Use the selected comment's actual commentId to call\n// setCellCommentResolved(rowId, field, commentId, true).","result":"Deleting a note, resolving a comment, and changing a cell value are separate operations. Do not expose notes separately in your app for cells the user cannot read."}],"featureId":"cell-notes","sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"cellNotes is a Pro feature for cells with stable identities and read access. Connect persistent storage through cellNotesAdapter; it does not automatically fall back to browser storage or a collaboration room."},{"kind":"paragraph","text":"Using this feature in a product requires the Pro package and a valid license. Matching setting names do not enable Pro features in Community."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Connect standalone note storage","blocks":[{"kind":"paragraph","text":"A server adapter implements load(cell) and save(cell,text,expectedRevision). load must return a note or null, and save must return the GridNoteSaveResult contract."},{"kind":"paragraph","text":"Verify the result: Assign the adapter and configure getRowId before enabling cellNotes. The server must save atomically only when the expected revision matches, preventing another user's edits from being lost."}]},{"id":"example-2","title":"Example 2. Add a collaboration comment","blocks":[{"kind":"paragraph","text":"Add a comment to an existing order cell in a Grid that has already joined collaborationRoom."},{"kind":"code","source":"const commentId = await grid.addCellComment('ORD-0001', 'quantity', 'Please verify the quantity.');\nif (commentId) {\n  await grid.openCellCommentPanel('ORD-0001', 'quantity');\n}","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Without an active collaboration session, the comment API does not substitute for standalone note storage. Check that an ID was returned."}]},{"id":"example-3","title":"Example 3. Read and resolve comments","blocks":[{"kind":"paragraph","text":"Use an actual ID from the collaboration comment list to change a thread's status."},{"kind":"code","source":"const comments = await grid.getCellComments('ORD-0001', 'quantity');\nconsole.log(comments);\n// Use the selected comment's actual commentId to call\n// setCellCommentResolved(rowId, field, commentId, true).","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Deleting a note, resolving a comment, and changing a cell value are separate operations. Do not expose notes separately in your app for cells the user cannot read."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"Row indices can change after sorting or filtering, so do not use them as note storage keys. Use stable rowId and column identifiers."},{"kind":"paragraph","text":"Do not overwrite a save conflict through blind retries. Read the latest server revision and let users compare the content."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"links","items":[{"path":"/docs/options/cellNotes","title":"cellNotes","description":"Provides standalone notes for readable cells with stable IDs. Requires a storage adapter and Pro entitlement."},{"path":"/docs/options/cellNotesAdapter","title":"cellNotesAdapter","description":"Implements standalone note loading and atomic revision-based saving. Does not automatically fall back to temporary built-in storage."},{"path":"/docs/methods/openCellCommentPanel","title":"openCellCommentPanel","description":"Opens a collaboration comment panel for a row ID and field. Separate from standalone cell note adapters."},{"path":"/docs/methods/closeCellCommentPanel","title":"closeCellCommentPanel","description":"Closes the collaboration comment panel without deleting comment data."},{"path":"/docs/methods/addCellComment","title":"addCellComment","description":"Adds a cell comment in an active collaboration session and returns its ID or null."},{"path":"/docs/methods/getCellComments","title":"getCellComments","description":"Reads collaboration comments associated with a row ID and field."},{"path":"/docs/methods/setCellCommentResolved","title":"setCellCommentResolved","description":"Changes a comment's resolved state and returns success."},{"path":"/docs/methods/deleteCellComment","title":"deleteCellComment","description":"Deletes a collaboration comment and returns success."},{"path":"/docs/events/cellCommentsChanged","title":"cellCommentsChanged","description":"Emitted when cell collaboration comments change. Read the row ID, field, and latest comments."},{"path":"/docs/events/commentMentioned","title":"commentMentioned","description":"Reports a mention in collaboration comments. Connect app notifications using the target cell and comment."}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/cell-notes","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/features/row-grouping","id":"row-grouping","kind":"feature","group":"analysis","title":"Grouping and aggregation","tier":"pro","summary":"Row grouping collects source rows with the same region or team into expandable groups. Unlike column groups, which organize headers, row groups change displayed rows and aggregation results.","examples":[{"title":"Total quantity by region","explanation":"Group orders by region and show a sum in the Quantity column.","source":"grid.columnDefs = [\n  { field: 'region', headerName: 'Region' },\n  { field: 'quantity', headerName: 'Quantity', aggFunc: 'sum' },\n];\ngrid.groupBy = 'region';","result":"Collapse region groups for summaries and expand them for individual orders."},{"title":"Group by team within each region","explanation":"Open the grouping panel so users can inspect and change criteria.","source":"grid.groupBy = ['region', 'team'];\ngrid.groupPanel = true;\nawait grid.collapseAllRowGroups();","result":"This creates Region → Team levels. Use expandAllRowGroups() to reveal all detail rows again."},{"title":"Combine filtering and pagination","explanation":"First filter to completed orders, then expand groups. Reduce the page size to inspect whether group headers count toward displayed rows.","source":null,"result":"Show active filters so users do not confuse aggregation scope with the full source order count. Check rejection reasons in getGroupCheckStates() when reading group selection."}],"featureId":"row-grouping","sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"Do not add group rows directly to source data. Set grouping fields in groupBy and numeric aggregation through aggFunc. With multiple grouping fields, earlier array entries form outer groups."},{"kind":"paragraph","text":"Using this feature in a product requires the Pro package and a valid license. Matching setting names do not enable Pro features in Community."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Total quantity by region","blocks":[{"kind":"paragraph","text":"Group orders by region and show a sum in the Quantity column."},{"kind":"code","source":"grid.columnDefs = [\n  { field: 'region', headerName: 'Region' },\n  { field: 'quantity', headerName: 'Quantity', aggFunc: 'sum' },\n];\ngrid.groupBy = 'region';","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Collapse region groups for summaries and expand them for individual orders."}]},{"id":"example-2","title":"Example 2. Group by team within each region","blocks":[{"kind":"paragraph","text":"Open the grouping panel so users can inspect and change criteria."},{"kind":"code","source":"grid.groupBy = ['region', 'team'];\ngrid.groupPanel = true;\nawait grid.collapseAllRowGroups();","language":"javascript"},{"kind":"paragraph","text":"Verify the result: This creates Region → Team levels. Use expandAllRowGroups() to reveal all detail rows again."}]},{"id":"example-3","title":"Example 3. Combine filtering and pagination","blocks":[{"kind":"paragraph","text":"First filter to completed orders, then expand groups. Reduce the page size to inspect whether group headers count toward displayed rows."},{"kind":"paragraph","text":"Verify the result: Show active filters so users do not confuse aggregation scope with the full source order count. Check rejection reasons in getGroupCheckStates() when reading group selection."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"Do not build nested group keys by concatenating display labels. Call setRowGroupExpanded() with the actual key supplied by events."},{"kind":"paragraph","text":"Grouping, pivoting, and trees cannot all produce the same row list simultaneously. Choose the intended analysis mode and inspect the combination report."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"links","items":[{"path":"/docs/options/groupBy","title":"groupBy","description":"Groups rows with equal values. A string array creates nested groups in array order."},{"path":"/docs/options/groupPanel","title":"groupPanel","description":"Displays a panel where users drag columns to configure row grouping."},{"path":"/docs/columns/aggFunc","title":"aggFunc","description":"Built-in or registered custom aggregate function name for grouping and analysis."},{"path":"/docs/methods/registerAggFunc","title":"registerAggFunc","description":"Registers a named custom aggregate function. Use unique names because an existing function with the same name can be replaced."},{"path":"/docs/methods/unregisterAggFunc","title":"unregisterAggFunc","description":"Removes a registered custom aggregate function. Also update aggFunc settings in columns using it."},{"path":"/docs/methods/getRegisteredAggFuncNames","title":"getRegisteredAggFuncNames","description":"Reads currently registered aggregate function names."},{"path":"/docs/methods/setRowGroupExpanded","title":"setRowGroupExpanded","description":"Expands or collapses a row group by its actual group key. Missing groups and unchanged states are ignored."},{"path":"/docs/methods/expandAllRowGroups","title":"expandAllRowGroups","description":"Expands all current row groups. Each changed group emits a toggle event."},{"path":"/docs/methods/collapseAllRowGroups","title":"collapseAllRowGroups","description":"Collapses all collapsible row groups in the current data."},{"path":"/docs/methods/getDisplayRowInfo","title":"getDisplayRowInfo","description":"Reads the displayed row kind, such as data, group, or detail."},{"path":"/docs/methods/getGroupCheckStates","title":"getGroupCheckStates","description":"Calculates group selection state. Returns rejection reasons when collapsed groups, missing row IDs, or other row models prevent a reliable result."},{"path":"/docs/events/rowGroupToggled","title":"rowGroupToggled","description":"Emitted when a row group expands or collapses. Reuse the actual key in detail, not the display label."},{"path":"/docs/events/rowGroupChanged","title":"rowGroupChanged","description":"Emitted when row grouping changes. Inspect group fields and whether grouping was cleared."}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/row-grouping","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/features/pivot","id":"pivot","kind":"feature","group":"analysis","title":"Pivot analysis","tier":"pro","summary":"Pivoting divides source orders into row, column, and value axes to create a cross-tabulation. Unlike collapsible row groups, unique values such as statuses become new result columns.","examples":[{"title":"Quantity by team × region","explanation":"Apply to a table whose source data contains team, region, and quantity.","source":"grid.pivotRowGroupColumns = ['team'];\ngrid.pivotColumns = ['region'];\ngrid.pivotValueColumns = ['quantity'];\ngrid.pivotAggFuncs = { quantity: 'sum' };\ngrid.pivotMode = true;","result":"A result column appears for each region, containing each team's quantity total. Source order rows are not modified."},{"title":"Position subtotals and grand totals","explanation":"With multiple row-axis levels, choose where intermediate and overall totals appear.","source":"grid.pivotRowGroupColumns = ['region', 'team'];\ngrid.pivotSubtotals = 'bottom';\ngrid.pivotGrandTotal = 'top';\ngrid.pivotPanelShow = 'always';","result":"Read subtotals below expanded child groups and see the grand total at the top."},{"title":"Inspect generated result columns","explanation":"Before connecting charts or export, read the actual result-column identifiers and current combination state.","source":"console.log(await grid.getPivotSecondaryColumns());\nconsole.log(await grid.getPivotCombinationReport());","result":"Use returned identifiers instead of region labels as column IDs. Server pivoting uses getServerPivotResultColumns() and a separate server-response contract."}],"featureId":"pivot","sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"For example, teams form rows, regions form columns, and quantities are summed. Prepare all three axes before enabling pivotMode and choose aggregation for each numeric field."},{"kind":"paragraph","text":"Using this feature in a product requires the Pro package and a valid license. Matching setting names do not enable Pro features in Community."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Quantity by team × region","blocks":[{"kind":"paragraph","text":"Apply to a table whose source data contains team, region, and 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":"Verify the result: A result column appears for each region, containing each team's quantity total. Source order rows are not modified."}]},{"id":"example-2","title":"Example 2. Position subtotals and grand totals","blocks":[{"kind":"paragraph","text":"With multiple row-axis levels, choose where intermediate and overall totals appear."},{"kind":"code","source":"grid.pivotRowGroupColumns = ['region', 'team'];\ngrid.pivotSubtotals = 'bottom';\ngrid.pivotGrandTotal = 'top';\ngrid.pivotPanelShow = 'always';","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Read subtotals below expanded child groups and see the grand total at the top."}]},{"id":"example-3","title":"Example 3. Inspect generated result columns","blocks":[{"kind":"paragraph","text":"Before connecting charts or export, read the actual result-column identifiers and current combination state."},{"kind":"code","source":"console.log(await grid.getPivotSecondaryColumns());\nconsole.log(await grid.getPivotCombinationReport());","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Use returned identifiers instead of region labels as column IDs. Server pivoting uses getServerPivotResultColumns() and a separate server-response contract."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"Do not guess precedence among row grouping, trees, and pivoting. Check active features and restrictions in the combination report first."},{"kind":"paragraph","text":"Do not assume source filters affect pivot aggregation identically. Verify the current aggregation scope and results, and prepare pivot input data first if needed."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"links","items":[{"path":"/docs/options/pivotMode","title":"pivotMode","description":"Enables pivot aggregation across row, column, and value axes. Configure all three axes too."},{"path":"/docs/options/pivotRowGroupColumns","title":"pivotRowGroupColumns","description":"Fields forming the left-hand row axis of pivot results."},{"path":"/docs/options/pivotColumns","title":"pivotColumns","description":"Fields whose distinct values expand into pivot result columns at the top."},{"path":"/docs/options/pivotValueColumns","title":"pivotValueColumns","description":"Value fields aggregated at each pivot intersection."},{"path":"/docs/options/pivotAggFuncs","title":"pivotAggFuncs","description":"Aggregate function names for each value field. Supports built-in and registered custom functions."},{"path":"/docs/options/pivotSubtotals","title":"pivotSubtotals","description":"Hides nested pivot subtotals or positions them above or below expanded groups."},{"path":"/docs/options/pivotGrandTotal","title":"pivotGrandTotal","description":"Hides pivot grand totals or positions them at the top or bottom."},{"path":"/docs/options/pivotPanelShow","title":"pivotPanelShow","description":"Shows the pivot panel always, only in pivot mode, or never."},{"path":"/docs/options/pivotPanel","title":"pivotPanel","description":"Compatibility boolean for the pivot panel. true corresponds to pivotPanelShow: always."},{"path":"/docs/methods/getPivotCombinationReport","title":"getPivotCombinationReport","description":"Reads activation, priority, and restriction decisions for the current combination of pivoting and other features."},{"path":"/docs/methods/getPivotSecondaryColumns","title":"getPivotSecondaryColumns","description":"Reads the identity model of result columns created by the active client pivot, or null when no pivot is active."},{"path":"/docs/methods/setPivotColumns","title":"setPivotColumns","description":"Replaces the pivot column axis through the validated update path and returns success."},{"path":"/docs/methods/setValueColumns","title":"setValueColumns","description":"Replaces the pivot value axis through the validated update path and returns success."},{"path":"/docs/events/pivotPanelChanged","title":"pivotPanelChanged","description":"Emitted when axes change in the pivot panel. Inspect the changed axis and current pivot state."},{"path":"/docs/events/pivotChanged","title":"pivotChanged","description":"Reports pivot configuration changes. Avoid duplicate saves from subscribing to both compatibility and panel events."},{"path":"/docs/events/pivotModeChanged","title":"pivotModeChanged","description":"Emitted when pivot mode is enabled or disabled."},{"path":"/docs/events/pivotCombinationConflict","title":"pivotCombinationConflict","description":"Emitted when pivot settings conflict with other features. Adjust app options based on the actual compatibility decision."},{"path":"/docs/events/pivotColumnsChanged","title":"pivotColumnsChanged","description":"Emitted when the pivot result column model changes. Update chart and export code using previous result column IDs."}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/pivot","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/features/tree-data","id":"tree-data","kind":"feature","group":"analysis","title":"Tree data","tier":"pro","summary":"Trees display parent-child data, such as folders or organizations, with indentation and expansion controls. Unlike grouping equal values, the parent relationship already exists in the data.","examples":[{"title":"Show an organization with path arrays","explanation":"Put the path from the root to the current item in each row's path array.","source":"grid.rowData = [\n  { id: 'eng', name: 'Engineering', path: ['Company', 'Engineering'] },\n  { id: 'web', name: 'Web', path: ['Company', 'Engineering', 'Web'] },\n];\ngrid.getRowId = row => row.id;\ngrid.columnDefs = [{ field: 'name', headerName: 'Organization' }];\ngrid.getDataPath = row => row.path;","result":"Web appears beneath Engineering. Changing path labels is different from changing stable row IDs."},{"title":"Connect through parent IDs","explanation":"For flat server lists, specify relationship fields instead of converting data into path arrays.","source":"grid.getDataPath = undefined;\ngrid.rowData = [\n  { id: 'root', parentId: null, name: 'Head office' },\n  { id: 'sales', parentId: 'root', name: 'Sales' },\n];\ngrid.treeIdField = 'id';\ngrid.treeParentField = 'parentId';\ngrid.treeLabelField = 'name';","result":"id and parentId relationships build the tree. Validate duplicate IDs, cycles, and missing parents before supplying data."},{"title":"Start with a summary","explanation":"After applying initial data, collapse all branches and expand only the paths you need.","source":"await grid.collapseAllTreeNodes();\n// For the path-based example:\nawait grid.setTreeNodeExpanded(['Company', 'Engineering'], true);","result":"Leaf nodes have no children to expand. Confirm that the path exists before calling."}],"featureId":"tree-data","sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"Use getDataPath returning a path array, or ID and parent-ID fields. Paths take precedence when both are configured, so choose one rule for each view."},{"kind":"paragraph","text":"Using this feature in a product requires the Pro package and a valid license. Matching setting names do not enable Pro features in Community."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Show an organization with path arrays","blocks":[{"kind":"paragraph","text":"Put the path from the root to the current item in each row's path array."},{"kind":"code","source":"grid.rowData = [\n  { id: 'eng', name: 'Engineering', path: ['Company', 'Engineering'] },\n  { id: 'web', name: 'Web', path: ['Company', 'Engineering', 'Web'] },\n];\ngrid.getRowId = row => row.id;\ngrid.columnDefs = [{ field: 'name', headerName: 'Organization' }];\ngrid.getDataPath = row => row.path;","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Web appears beneath Engineering. Changing path labels is different from changing stable row IDs."}]},{"id":"example-2","title":"Example 2. Connect through parent IDs","blocks":[{"kind":"paragraph","text":"For flat server lists, specify relationship fields instead of converting data into path arrays."},{"kind":"code","source":"grid.getDataPath = undefined;\ngrid.rowData = [\n  { id: 'root', parentId: null, name: 'Head office' },\n  { id: 'sales', parentId: 'root', name: 'Sales' },\n];\ngrid.treeIdField = 'id';\ngrid.treeParentField = 'parentId';\ngrid.treeLabelField = 'name';","language":"javascript"},{"kind":"paragraph","text":"Verify the result: id and parentId relationships build the tree. Validate duplicate IDs, cycles, and missing parents before supplying data."}]},{"id":"example-3","title":"Example 3. Start with a summary","blocks":[{"kind":"paragraph","text":"After applying initial data, collapse all branches and expand only the paths you need."},{"kind":"code","source":"await grid.collapseAllTreeNodes();\n// For the path-based example:\nawait grid.setTreeNodeExpanded(['Company', 'Engineering'], true);","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Leaf nodes have no children to expand. Confirm that the path exists before calling."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"Do not reconstruct server parent IDs from tree display order or indentation. Preserve the source relationships separately."},{"kind":"paragraph","text":"When switching to a non-tree view, clear getDataPath and relationship fields together so previous hierarchy settings do not remain."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"links","items":[{"path":"/docs/options/getDataPath","title":"getDataPath","description":"Builds a tree from a path array from root to the current node. Takes precedence over ID-based tree settings."},{"path":"/docs/options/treeIdField","title":"treeIdField","description":"Node ID field in a parent-ID tree. Configure together with treeParentField."},{"path":"/docs/options/treeParentField","title":"treeParentField","description":"Parent node ID field in a parent-ID tree."},{"path":"/docs/options/treeLabelField","title":"treeLabelField","description":"Display label field in a parent-ID tree. Defaults to the ID when omitted."},{"path":"/docs/methods/setTreeNodeExpanded","title":"setTreeNodeExpanded","description":"Expands or collapses a tree node by path. Leaf nodes and missing paths cannot be expanded."},{"path":"/docs/methods/expandAllTreeNodes","title":"expandAllTreeNodes","description":"Expands all expandable nodes in the current tree."},{"path":"/docs/methods/collapseAllTreeNodes","title":"collapseAllTreeNodes","description":"Collapses all branch nodes in the current tree."},{"path":"/docs/methods/reparentRows","title":"reparentRows","description":"Reparents tree rows and reports applied/rejected results. Check cycle, permission, and row-model restrictions."},{"path":"/docs/events/treeNodeToggled","title":"treeNodeToggled","description":"Emitted when tree expansion changes. Inspect the path and expanded state."},{"path":"/docs/events/treeReparented","title":"treeReparented","description":"Reports tree reparenting results. Connect to parent-relationship saving on your app server."}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/tree-data","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/features/master-detail","id":"master-detail","kind":"feature","group":"analysis","title":"Row details","tier":"pro","summary":"Master/detail expands an order to show its line items or shipping history. The parent row is a summary, and a full-width panel beneath it holds details.","examples":[{"title":"Text detail panel","explanation":"Render simple notes as safe text when no line-item table is needed.","source":"grid.masterDetail = true;\ngrid.detailRowHeight = 120;\ngrid.detailCellRenderer = ({ row }) => ({\n  kind: 'text', text: String(row.memo ?? 'No notes available.'),\n});","result":"Expand an order to display its notes. The panel does not count as another source order or a row on the page."},{"title":"Display order items in a nested table","explanation":"Use this when each source row has an items array. Remove the custom renderer before configuring the nested table.","source":"grid.detailCellRenderer = undefined;\ngrid.detailGridOptions = {\n  columnDefs: [\n    { field: 'product', headerName: 'Item' },\n    { field: 'quantity', headerName: 'Quantity' },\n  ], height: '180px',\n};\ngrid.getDetailRowData = ({ row }) => row.items ?? [];\ngrid.detailRowHeight = 200;","result":"Only the items belonging to each parent order are passed to its nested Grid. Parent settings are not all copied to the child automatically."},{"title":"Fetch details on expansion","explanation":"Return a Promise from getDetailRowData to show a loading state while fetching the nested table. Connect your server's detail endpoint and design failure messages and retries in your app.","source":null,"result":"Results are reused while a row remains expanded; collapsing it clears the cache. Expanding all rows can trigger many requests, so consider your data volume."}],"featureId":"master-detail","sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"Use detailCellRenderer for a simple explanation, or detailGridOptions and getDetailRowData for a nested table. Provide stable IDs through getRowId to retain expansion state."},{"kind":"paragraph","text":"Using this feature in a product requires the Pro package and a valid license. Matching setting names do not enable Pro features in Community."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Text detail panel","blocks":[{"kind":"paragraph","text":"Render simple notes as safe text when no line-item table is needed."},{"kind":"code","source":"grid.masterDetail = true;\ngrid.detailRowHeight = 120;\ngrid.detailCellRenderer = ({ row }) => ({\n  kind: 'text', text: String(row.memo ?? 'No notes available.'),\n});","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Expand an order to display its notes. The panel does not count as another source order or a row on the page."}]},{"id":"example-2","title":"Example 2. Display order items in a nested table","blocks":[{"kind":"paragraph","text":"Use this when each source row has an items array. Remove the custom renderer before configuring the nested table."},{"kind":"code","source":"grid.detailCellRenderer = undefined;\ngrid.detailGridOptions = {\n  columnDefs: [\n    { field: 'product', headerName: 'Item' },\n    { field: 'quantity', headerName: 'Quantity' },\n  ], height: '180px',\n};\ngrid.getDetailRowData = ({ row }) => row.items ?? [];\ngrid.detailRowHeight = 200;","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Only the items belonging to each parent order are passed to its nested Grid. Parent settings are not all copied to the child automatically."}]},{"id":"example-3","title":"Example 3. Fetch details on expansion","blocks":[{"kind":"paragraph","text":"Return a Promise from getDetailRowData to show a loading state while fetching the nested table. Connect your server's detail endpoint and design failure messages and retries in your app."},{"kind":"paragraph","text":"Verify the result: Results are reused while a row remains expanded; collapsing it clears the cache. Expanding all rows can trigger many requests, so consider your data volume."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"detailCellRenderer takes precedence over a declarative nested Grid. Enabling both does not create a nested table alongside the renderer."},{"kind":"paragraph","text":"Nested details have a depth limit. Avoid recursive, self-referencing options and configure only the levels your workflow needs."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"links","items":[{"path":"/docs/options/masterDetail","title":"masterDetail","description":"Expands source rows into full-width detail panels, such as items beneath orders."},{"path":"/docs/options/detailRowHeight","title":"detailRowHeight","description":"Height of expanded detail panels in pixels."},{"path":"/docs/options/detailCellRenderer","title":"detailCellRenderer","description":"Builds detail content using the text, html, or vnode contract. Takes precedence over declarative nested Grids."},{"path":"/docs/options/detailGridOptions","title":"detailGridOptions","description":"Columns and options for an automatically generated nested Grid in the detail panel. Use with getDetailRowData."},{"path":"/docs/options/getDetailRowData","title":"getDetailRowData","description":"Returns detail rows for the expanded parent as an array or Promise. Reuses the result while the row remains expanded."},{"path":"/docs/options/detailNestingLevel","title":"detailNestingLevel","description":"Depth of nested detail Grids. Set by the parent for generated children and used to enforce recursion limits."},{"path":"/docs/methods/setDetailRowExpanded","title":"setDetailRowExpanded","description":"Expands or collapses a detail panel by stable parent row ID."},{"path":"/docs/methods/expandAllDetailRows","title":"expandAllDetailRows","description":"Expands detail rows across all pages passing the current filter. Consider request volume with lazy loading."},{"path":"/docs/methods/collapseAllDetailRows","title":"collapseAllDetailRows","description":"Collapses all open detail rows and cleans up their panel resources."},{"path":"/docs/events/detailRowToggled","title":"detailRowToggled","description":"Emitted when a parent row's detail expansion changes."},{"path":"/docs/events/detailRowCreated","title":"detailRowCreated","description":"Emitted when a detail panel is created. Connect app resources using its row ID and parent data."},{"path":"/docs/events/detailRowDestroyed","title":"detailRowDestroyed","description":"Emitted when a detail panel is destroyed. Clean up app resources associated with its rowId too."}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/master-detail","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/features/formulas","id":"formulas","kind":"feature","group":"analysis","title":"Formula calculation","tier":"pro","summary":"Formulas evaluate strings beginning with = and display the result in a cell. For example, =SUM(A1:A3) references the first column in the original column definitions and the first three source rows.","examples":[{"title":"Calculate an amount from price and quantity","explanation":"Start with three columns that make formula coordinates easy to follow.","source":"grid.columnDefs = [\n  { field: 'quantity', headerName: 'Quantity', editable: true, editor: 'number' },\n  { field: 'price', headerName: 'Unit price', editable: true, editor: 'number' },\n  { field: 'amount', headerName: 'Amount' },\n];\ngrid.rowData = [{ id: 'a', quantity: 3, price: 100, amount: '=A1*B1' }];\ngrid.formulas = true;","result":"The amount displays 300. Editing the quantity recalculates the dependent amount."},{"title":"Compare results with formula text","explanation":"Show the formula text and formula bar when calculations differ from your expectations.","source":"grid.showFormulas = true;\ngrid.formulaBar = true;","result":"The formula cell displays =A1*B1. Set showFormulas back to false after reviewing it to display the result."},{"title":"Review multiple sheets and dynamic arrays","explanation":"When connecting multiple Grids as a workbook, use getWorkbookPropagationState() and getWorkbookSnapshotReport() to inspect connections and propagation. Before using dynamic arrays, review the dedicated applySpillFormula() input contract and conflict results.","source":null,"result":"If existing values occupy the spill area, do not force the array result over them. Distinguish rejected operations, conflicts, and unrendered cells when explaining the result to users."}],"featureId":"formulas","sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"A1 coordinates do not follow the sorted display order. Formulas use the original data order and columnDefs order even after users sort rows or move columns."},{"kind":"paragraph","text":"Using this feature in a product requires the Pro package and a valid license. Matching setting names do not enable Pro features in Community."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Calculate an amount from price and quantity","blocks":[{"kind":"paragraph","text":"Start with three columns that make formula coordinates easy to follow."},{"kind":"code","source":"grid.columnDefs = [\n  { field: 'quantity', headerName: 'Quantity', editable: true, editor: 'number' },\n  { field: 'price', headerName: 'Unit price', editable: true, editor: 'number' },\n  { field: 'amount', headerName: 'Amount' },\n];\ngrid.rowData = [{ id: 'a', quantity: 3, price: 100, amount: '=A1*B1' }];\ngrid.formulas = true;","language":"javascript"},{"kind":"paragraph","text":"Verify the result: The amount displays 300. Editing the quantity recalculates the dependent amount."}]},{"id":"example-2","title":"Example 2. Compare results with formula text","blocks":[{"kind":"paragraph","text":"Show the formula text and formula bar when calculations differ from your expectations."},{"kind":"code","source":"grid.showFormulas = true;\ngrid.formulaBar = true;","language":"javascript"},{"kind":"paragraph","text":"Verify the result: The formula cell displays =A1*B1. Set showFormulas back to false after reviewing it to display the result."}]},{"id":"example-3","title":"Example 3. Review multiple sheets and dynamic arrays","blocks":[{"kind":"paragraph","text":"When connecting multiple Grids as a workbook, use getWorkbookPropagationState() and getWorkbookSnapshotReport() to inspect connections and propagation. Before using dynamic arrays, review the dedicated applySpillFormula() input contract and conflict results."},{"kind":"paragraph","text":"Verify the result: If existing values occupy the spill area, do not force the array result over them. Distinguish rejected operations, conflicts, and unrendered cells when explaining the result to users."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"Formula text and calculated results are separate. Decide which you need for saving, copying, and exporting, then verify the output."},{"kind":"paragraph","text":"Do not assume every Excel function is supported. Test the function names and error results in the formulas you use, and avoid circular references."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"links","items":[{"path":"/docs/options/formulas","title":"formulas","description":"Evaluates cell strings beginning with = as formulas. A1 references use original column and row order, not display sorting."},{"path":"/docs/options/showFormulas","title":"showFormulas","description":"Displays formula text instead of calculated results for review in a table with formulas enabled."},{"path":"/docs/options/formulaBar","title":"formulaBar","description":"Shows a formula bar for inspecting and editing the active cell's source value or formula. Enter commits; Escape cancels."},{"path":"/docs/options/workbookId","title":"workbookId","description":"Identifies the workbook connecting multiple Grid sheets. Set it together with sheetName for cross-sheet references."},{"path":"/docs/options/sheetName","title":"sheetName","description":"Identifies this Grid sheet within a workbook. Review the effect of renaming it on formulas in other sheets."},{"path":"/docs/columns/formula","title":"formula","description":"Formula string applied to this column. Review formula support and original-coordinate rules."},{"path":"/docs/methods/getWorkbookBinding","title":"getWorkbookBinding","description":"Reads current workbook and sheet connection information, or null when disconnected."},{"path":"/docs/methods/reconnectWorkbook","title":"reconnectWorkbook","description":"Rebuilds the connection from current workbook settings and returns the result."},{"path":"/docs/methods/disconnectWorkbook","title":"disconnectWorkbook","description":"Disconnects the workbook. Review the effect on cross-sheet formula propagation."},{"path":"/docs/methods/getWorkbookPropagationState","title":"getWorkbookPropagationState","description":"Reads cross-sheet formula propagation connections, registrations, rejections, and latest publication information."},{"path":"/docs/methods/flushWorkbookPropagation","title":"flushWorkbookPropagation","description":"Processes pending workbook value propagation and returns the result."},{"path":"/docs/methods/getWorkbookSnapshotReport","title":"getWorkbookSnapshotReport","description":"Reads the last published workbook cells, hashes, and generations. Do not assume all Grid data was published."},{"path":"/docs/methods/getWorkbookIntegrityReport","title":"getWorkbookIntegrityReport","description":"Reads consistency checks for workbook connections and value propagation."},{"path":"/docs/methods/applySpillFormula","title":"applySpillFormula","description":"Atomically applies a dynamic array formula under the conflict policy. Inspect conflicts, rejections, and unrendered areas in the report."},{"path":"/docs/methods/clearSpillFormula","title":"clearSpillFormula","description":"Clears a dynamic array formula's anchor cell and releases its occupied range."},{"path":"/docs/methods/undoSpillTransaction","title":"undoSpillTransaction","description":"Undoes a dynamic array formula transaction and returns the result."},{"path":"/docs/methods/getSpillReport","title":"getSpillReport","description":"Inspects current dynamic array formulas and their occupied ranges."},{"path":"/docs/events/formulaEvaluated","title":"formulaEvaluated","description":"Emitted when a formula result is calculated. Distinguish formula text from its result."},{"path":"/docs/events/formulaError","title":"formulaError","description":"Emitted when formula evaluation fails. Connect target and error information to a review UI."},{"path":"/docs/events/workbookBindingChanged","title":"workbookBindingChanged","description":"Emitted when the Grid's workbook/sheet connection changes."},{"path":"/docs/events/workbookBindingError","title":"workbookBindingError","description":"Emitted when a workbook connection cannot be configured. Inspect identifiers and connection errors."},{"path":"/docs/events/workbookValuesPropagated","title":"workbookValuesPropagated","description":"Emitted after cross-sheet value propagation. Inspect results and generation information."}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/formulas","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/features/integrated-charts","id":"integrated-charts","kind":"feature","group":"analysis","title":"Chart selected data","tier":"pro","summary":"Connect a Grid range to a chart to view the same data as both a table and a graph. Select category and value columns appropriate to the chart type, rather than simply selecting numeric values.","examples":[{"title":"Create a bar chart from a selected range","explanation":"First select a range containing a category column and a numeric column.","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":"On success, a chart appears in a panel managed by the Grid. If there is no selection or the data combination is unsupported, read the rejection reason."},{"title":"Sync with the current table","explanation":"After filtering or changing data, inspect active charts and read the synchronization result.","source":"console.log(await grid.getChartRefs());\nconsole.log(await grid.syncCharts());","result":"Chart data is rebuilt from the current view. Avoid repeatedly creating the same chart unnecessarily."},{"title":"Restore and clean up charts","explanation":"Save user-created chart settings and restore them later in a Grid with the same data contract.","source":"const saved = await grid.getChartModels();\nconsole.log(saved);\n// Restore the saved envelope:\nconsole.log(await grid.restoreChartModels(saved.envelope));","result":"Check the capture result's issues and pass only envelope to restoration. Inspect applied and rejected results. Call destroyChart(chartId) to close an individual chart and clean up any external containers your app created."}],"featureId":"integrated-charts","sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"Creation returns a report that distinguishes success from rejection. Check success before using chartId to update, export, or destroy the chart. Register the chart components and configure Pro first."},{"kind":"paragraph","text":"Using this feature in a product requires the Pro package and a valid license. Matching setting names do not enable Pro features in Community."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Create a bar chart from a selected range","blocks":[{"kind":"paragraph","text":"First select a range containing a category column and a numeric column."},{"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":"Verify the result: On success, a chart appears in a panel managed by the Grid. If there is no selection or the data combination is unsupported, read the rejection reason."}]},{"id":"example-2","title":"Example 2. Sync with the current table","blocks":[{"kind":"paragraph","text":"After filtering or changing data, inspect active charts and read the synchronization result."},{"kind":"code","source":"console.log(await grid.getChartRefs());\nconsole.log(await grid.syncCharts());","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Chart data is rebuilt from the current view. Avoid repeatedly creating the same chart unnecessarily."}]},{"id":"example-3","title":"Example 3. Restore and clean up charts","blocks":[{"kind":"paragraph","text":"Save user-created chart settings and restore them later in a Grid with the same data contract."},{"kind":"code","source":"const saved = await grid.getChartModels();\nconsole.log(saved);\n// Restore the saved envelope:\nconsole.log(await grid.restoreChartModels(saved.envelope));","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Check the capture result's issues and pass only envelope to restoration. Inspect applied and rejected results. Call destroyChart(chartId) to close an individual chart and clean up any external containers your app created."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"Group and pivot result columns have different identifiers from source columns. Inspect the current result column model and use a supported chart projection."},{"kind":"paragraph","text":"Distinguish chart cross-filter ownership from external filters set by your app. resetChartCrossFilter() clears filters managed by charts."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"links","items":[{"path":"/docs/methods/createRangeChart","title":"createRangeChart","description":"Creates an integrated chart from a selection or explicit source. Read chartId on success or the rejection reason on failure."},{"path":"/docs/methods/updateChart","title":"updateChart","description":"Changes an existing chart's type, source range, or properties and returns the result."},{"path":"/docs/methods/destroyChart","title":"destroyChart","description":"Closes the specified chart and releases its resources."},{"path":"/docs/methods/getChartRefs","title":"getChartRefs","description":"Reads IDs and states of active integrated charts."},{"path":"/docs/methods/syncCharts","title":"syncCharts","description":"Recalculates integrated chart data projections from the current Grid view."},{"path":"/docs/methods/getChartMenuModel","title":"getChartMenuModel","description":"Reads the chart menu model available for the current selection and permissions."},{"path":"/docs/methods/openChartToolPanel","title":"openChartToolPanel","description":"Opens the tool panel for choosing an available chart."},{"path":"/docs/methods/closeChartToolPanel","title":"closeChartToolPanel","description":"Closes the chart creation panel and cleans up its selection flow."},{"path":"/docs/methods/getChartToolPanelReport","title":"getChartToolPanelReport","description":"Reads chart panel open, focus, and accessibility state."},{"path":"/docs/methods/activateChartToolPanelItem","title":"activateChartToolPanelItem","description":"Creates a chart by activating the currently focused chart panel item."},{"path":"/docs/methods/getChartModels","title":"getChartModels","description":"Captures active charts in a versioned envelope with capture issues. Pass the result's envelope to restoration."},{"path":"/docs/methods/restoreChartModels","title":"restoreChartModels","description":"Restores a saved chart envelope against the current Grid data contract and returns results."},{"path":"/docs/methods/exportChartImage","title":"exportChartImage","description":"Requests image export for an integrated chart and returns the result."},{"path":"/docs/methods/applyChartCrossFilter","title":"applyChartCrossFilter","description":"Applies chart selection actions to the Grid filter model."},{"path":"/docs/methods/resetChartCrossFilter","title":"resetChartCrossFilter","description":"Clears chart-owned cross-filters while retaining the app's external filters."},{"path":"/docs/methods/getChartAccessibleSummary","title":"getChartAccessibleSummary","description":"Reads chart data summaries and accessibility checks."},{"path":"/docs/methods/getChartFleetReport","title":"getChartFleetReport","description":"Reports the current chart set, open resources, and cleanup state."},{"path":"/docs/events/chartCreated","title":"chartCreated","description":"Emitted when an integrated Grid chart is created. Manage your app's chart list by chart ID."},{"path":"/docs/events/chartRangeChanged","title":"chartRangeChanged","description":"Emitted when an integrated chart's source range changes."},{"path":"/docs/events/chartOptionsChanged","title":"chartOptionsChanged","description":"Emitted when integrated chart settings change. Update saved chart models if needed."},{"path":"/docs/events/chartDestroyed","title":"chartDestroyed","description":"Emitted when an integrated chart is destroyed. Clean up app-held references and external resources."}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/integrated-charts","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/features/custom-cells","id":"custom-cells","kind":"feature","group":"appearance","title":"Customize cell appearance","tier":"free","summary":"Cell renderers change how data is displayed. Use them for status badges, links, and action buttons while retaining the original values for sorting and filtering.","examples":[{"title":"Safe text and supporting descriptions","explanation":"Display a string without interpreting it as HTML.","source":"grid.columnDefs = [{\n  field: 'status', headerName: 'Status',\n  cellRenderer: params => ({ kind: 'text', text: String(params.value ?? '-'), title: 'Current order processing status' }),\n}];","result":"Angle brackets in user input appear as characters rather than executable HTML."},{"title":"Separate display from editing","explanation":"Use valueFormatter for currency display and the number editor for amount edits. Adding a renderer does not require implementing a custom editor.","source":null,"result":"Keep the displayed currency symbol separate from the stored number. After editing, verify that sorting and totals use numeric values."},{"title":"Cells with actions","explanation":"Use a vnode renderer in your framework to create a details button. Include a row-identifying description in its accessible name and open your app's detail view on click.","source":null,"result":"Virtual scrolling may reuse cells, so reference the row in the current params. Clean up event listeners and external resources with the renderer's lifecycle."}],"featureId":"custom-cells","sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"valueFormatter is simpler for basic number formatting. Choose cellRenderer when you need structure or interaction, and return a value conforming to the text, html, or vnode contract."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Safe text and supporting descriptions","blocks":[{"kind":"paragraph","text":"Display a string without interpreting it as HTML."},{"kind":"code","source":"grid.columnDefs = [{\n  field: 'status', headerName: 'Status',\n  cellRenderer: params => ({ kind: 'text', text: String(params.value ?? '-'), title: 'Current order processing status' }),\n}];","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Angle brackets in user input appear as characters rather than executable HTML."}]},{"id":"example-2","title":"Example 2. Separate display from editing","blocks":[{"kind":"paragraph","text":"Use valueFormatter for currency display and the number editor for amount edits. Adding a renderer does not require implementing a custom editor."},{"kind":"paragraph","text":"Verify the result: Keep the displayed currency symbol separate from the stored number. After editing, verify that sorting and totals use numeric values."}]},{"id":"example-3","title":"Example 3. Cells with actions","blocks":[{"kind":"paragraph","text":"Use a vnode renderer in your framework to create a details button. Include a row-identifying description in its accessible name and open your app's detail view on click."},{"kind":"paragraph","text":"Verify the result: Virtual scrolling may reuse cells, so reference the row in the current params. Clean up event listeners and external resources with the renderer's lifecycle."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"Use kind: html only with trusted, sanitized HTML. Do not assume the Grid automatically makes arbitrary app HTML safe."},{"kind":"paragraph","text":"Server requests or expensive calculations on every render slow scrolling. Compute or cache values while preparing the data."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"links","items":[{"path":"/docs/options/components","title":"components","description":"Registers local custom renderers, editors, filters, and other components for this Grid."},{"path":"/docs/options/componentTimeoutMs","title":"componentTimeoutMs","description":"Maximum wait for preparing asynchronous user components. Handle delays and failures with componentError."},{"path":"/docs/columns/cellRenderer","title":"cellRenderer","description":"Displays cells through text, html, vnode, or a registered custom renderer."},{"path":"/docs/columns/cellRendererMeta","title":"cellRendererMeta","description":"Additional metadata passed to the cell renderer."},{"path":"/docs/columns/cellClass","title":"cellClass","description":"CSS classes for the cell or a callback returning classes."},{"path":"/docs/columns/cellClassRules","title":"cellClassRules","description":"Rules for applying CSS classes conditionally."},{"path":"/docs/columns/cellStyle","title":"cellStyle","description":"Inline style object, callback, or array of these for the cell."},{"path":"/docs/methods/registerCellRenderer","title":"registerCellRenderer","description":"Registers a named cell renderer and returns the result."},{"path":"/docs/methods/listRegisteredCellRenderers","title":"listRegisteredCellRenderers","description":"Reads available registered cell renderer names."},{"path":"/docs/methods/unregisterCellRenderer","title":"unregisterCellRenderer","description":"Unregisters a named cell renderer."},{"path":"/docs/methods/registerGridComponent","title":"registerGridComponent","description":"Registers a custom Grid component under the public component contract."},{"path":"/docs/methods/replaceGridComponent","title":"replaceGridComponent","description":"Replaces a registered custom component definition."},{"path":"/docs/methods/unregisterGridComponent","title":"unregisterGridComponent","description":"Unregisters a custom component and returns success."},{"path":"/docs/methods/getRegisteredGridComponentNames","title":"getRegisteredGridComponentNames","description":"Reads registered custom Grid component names."},{"path":"/docs/methods/getCellRendererInstance","title":"getCellRendererInstance","description":"Queries mounted cell renderer instances. Offscreen cells may be unmounted because of virtualization."},{"path":"/docs/methods/destroyCellRendererInstance","title":"destroyCellRendererInstance","description":"Destroys a specified mounted cell renderer instance."},{"path":"/docs/methods/focusCellRendererInstance","title":"focusCellRendererInstance","description":"Moves focus into a mounted cell renderer and returns the result."},{"path":"/docs/events/componentError","title":"componentError","description":"Reports custom component initialization or invocation errors. Handle them by target and phase rather than ignoring them."}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/custom-cells","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/features/tooltip","id":"tooltip","kind":"feature","group":"appearance","title":"Cell tooltips","tier":"free","summary":"Tooltips help users briefly inspect truncated names or long descriptions. Do not hide essential errors or guidance exclusively inside tooltips.","examples":[{"title":"Display a separate description field","explanation":"Include both a short product name and a longer description in the source data.","source":"grid.columnDefs = [{ field: 'product', headerName: 'Product', tooltipField: 'description' }];","result":"Hover over a product name to inspect that row's description. Supply the description field from your server alongside the other data."},{"title":"Generate a dynamic description","explanation":"Calculate supporting text from the current cell value.","source":"grid.columnDefs = [{\n  field: 'quantity', headerName: 'Quantity',\n  tooltipValueGetter: params => 'Order quantity: ' + String(params.value ?? 0),\n}];","result":"Each row displays a description of its own quantity. Keep currency, units, and the actual data type consistent."},{"title":"Inspect tooltip results in your app","explanation":"Use the public API to read the computed text for the product cell in the first displayed row.","source":"console.log(await grid.getCellTooltipText({ rowIndex: 0, field: 'product' }));","result":"Do not expose confidential values through tooltips on cells the user cannot read. Also reduce the actual column width to test truncation."}],"featureId":"tooltip","sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"Tooltip content can differ from the displayed cell value. Use tooltipField or tooltipValueGetter on the column, taking read permissions and actual overflow into account."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Display a separate description field","blocks":[{"kind":"paragraph","text":"Include both a short product name and a longer description in the source data."},{"kind":"code","source":"grid.columnDefs = [{ field: 'product', headerName: 'Product', tooltipField: 'description' }];","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Hover over a product name to inspect that row's description. Supply the description field from your server alongside the other data."}]},{"id":"example-2","title":"Example 2. Generate a dynamic description","blocks":[{"kind":"paragraph","text":"Calculate supporting text from the current cell value."},{"kind":"code","source":"grid.columnDefs = [{\n  field: 'quantity', headerName: 'Quantity',\n  tooltipValueGetter: params => 'Order quantity: ' + String(params.value ?? 0),\n}];","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Each row displays a description of its own quantity. Keep currency, units, and the actual data type consistent."}]},{"id":"example-3","title":"Example 3. Inspect tooltip results in your app","blocks":[{"kind":"paragraph","text":"Use the public API to read the computed text for the product cell in the first displayed row."},{"kind":"code","source":"console.log(await grid.getCellTooltipText({ rowIndex: 0, field: 'product' }));","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Do not expose confidential values through tooltips on cells the user cannot read. Also reduce the actual column width to test truncation."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"Do not make important functionality accessible only through hover. Provide the same information in the body or detail view for touch and keyboard users."},{"kind":"paragraph","text":"Do not mutate values inside tooltip callbacks. Return display text and use editing APIs to save changes."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"links","items":[{"path":"/docs/columns/headerTooltip","title":"headerTooltip","description":"Supporting description for the header."},{"path":"/docs/columns/tooltipField","title":"tooltipField","description":"Source data field used for tooltips."},{"path":"/docs/columns/tooltipValueGetter","title":"tooltipValueGetter","description":"Calculates tooltip content from the current cell context. Do not expose unauthorized values indirectly."},{"path":"/docs/methods/getCellTooltipText","title":"getCellTooltipText","description":"Calculates actual tooltip text from the target cell and overflow context."}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/tooltip","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/features/conditional-formats","id":"conditional-formats","kind":"feature","group":"appearance","title":"Conditional formatting","summary":"Conditional formatting changes visual properties such as background and text color based on a value's meaning. Use it to identify low stock or exceeded targets without changing source values or validation results.","examples":[{"title":"Highlight quantities above a threshold","explanation":"Distinguish cells with quantities greater than 100.","source":"grid.conditionalFormats = [{\n  field: 'quantity', condition: { type: 'greaterThan', value: 100 },\n  style: { backgroundColor: '#fff1cc' },\n}];","result":"100 is excluded; highlighting starts at 101. Choose greaterThanOrEqual to include the boundary value."},{"title":"Distinguish multiple states","explanation":"Create separate rules for completed status and empty quantities. First decide whether blank and numeric zero mean the same thing in your workflow.","source":null,"result":"Use different target columns or set priorities so completion colors and missing-value warnings do not conflict. Retain text labels too."},{"title":"Let users adjust rules","explanation":"Open the formatting settings UI and connect its change event to your app's save functionality.","source":"grid.conditionalFormatUi = true;\ngrid.addEventListener('conditionalFormatsChanged', event => {\n  console.log(event.detail.rules);\n});","result":"Read the updated rule array and save it as a user preference. Assign a new array when the user returns to the page."}],"featureId":"conditional-formats","sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"Specify the target field, comparison condition, and style for each rule. Review rule order and stopIfTrue when multiple rules match the same cell."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Highlight quantities above a threshold","blocks":[{"kind":"paragraph","text":"Distinguish cells with quantities greater than 100."},{"kind":"code","source":"grid.conditionalFormats = [{\n  field: 'quantity', condition: { type: 'greaterThan', value: 100 },\n  style: { backgroundColor: '#fff1cc' },\n}];","language":"javascript"},{"kind":"paragraph","text":"Verify the result: 100 is excluded; highlighting starts at 101. Choose greaterThanOrEqual to include the boundary value."}]},{"id":"example-2","title":"Example 2. Distinguish multiple states","blocks":[{"kind":"paragraph","text":"Create separate rules for completed status and empty quantities. First decide whether blank and numeric zero mean the same thing in your workflow."},{"kind":"paragraph","text":"Verify the result: Use different target columns or set priorities so completion colors and missing-value warnings do not conflict. Retain text labels too."}]},{"id":"example-3","title":"Example 3. Let users adjust rules","blocks":[{"kind":"paragraph","text":"Open the formatting settings UI and connect its change event to your app's save functionality."},{"kind":"code","source":"grid.conditionalFormatUi = true;\ngrid.addEventListener('conditionalFormatsChanged', event => {\n  console.log(event.detail.rules);\n});","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Read the updated rule array and save it as a user preference. Assign a new array when the user returns to the page."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"Do not distinguish errors and completion through color alone. Include status text and validation messages, and choose readable contrast in both light and dark themes."},{"kind":"paragraph","text":"Formatting does not block input. Use validationRules and invalidEditMode to prevent invalid values from being saved."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"links","items":[{"path":"/docs/options/conditionalFormats","title":"conditionalFormats","description":"Rules changing matching cells' visual properties, such as backgrounds and text. Does not mutate source values."},{"path":"/docs/options/conditionalFormatUi","title":"conditionalFormatUi","description":"Provides a UI for adjusting conditional formatting rules."},{"path":"/docs/events/conditionalFormatsChanged","title":"conditionalFormatsChanged","description":"Emitted when conditional formatting rules change. Save rules as user preferences."}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/conditional-formats","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/features/cell-change-flash","id":"cell-change-flash","kind":"feature","group":"appearance","title":"Highlight changes","summary":"Cell change flashing briefly highlights cells changed by editing, pasting, or data transactions. It helps users locate recent changes in tables with many live prices or quantities.","examples":[{"title":"Enable cell change flashing","explanation":"Enable change flashing in a Grid with editable columns.","source":"grid.cellChangeFlash = true;","result":"Edit a quantity cell and finish editing to see a temporary highlight on the changed cell."},{"title":"Highlight server updates","explanation":"Update a row with an existing ID through a transaction.","source":"const row = grid.rowData[0];\nif (row) await grid.applyTransaction({ update: [{ ...row, quantity: Number(row.quantity) + 1 }] });","result":"This makes changed cells easier to identify than replacing the entire data set. getRowId must remain consistent before and after updates."},{"title":"Configure a high-frequency view","explanation":"For many updates per second, batch incoming changes in your app and apply them at suitable intervals. If highlights appear continuously, reconsider the update interval or which cells use flashing.","source":null,"result":"Keep current values accurate while giving users time to see where changes occurred. Do not treat flashing itself as a success notification."}],"featureId":"cell-change-flash","sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"Unlike persistent conditional formatting, this indicator fades away. Provide an audit log if users need to review change history later."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Enable cell change flashing","blocks":[{"kind":"paragraph","text":"Enable change flashing in a Grid with editable columns."},{"kind":"code","source":"grid.cellChangeFlash = true;","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Edit a quantity cell and finish editing to see a temporary highlight on the changed cell."}]},{"id":"example-2","title":"Example 2. Highlight server updates","blocks":[{"kind":"paragraph","text":"Update a row with an existing ID through a transaction."},{"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":"Verify the result: This makes changed cells easier to identify than replacing the entire data set. getRowId must remain consistent before and after updates."}]},{"id":"example-3","title":"Example 3. Configure a high-frequency view","blocks":[{"kind":"paragraph","text":"For many updates per second, batch incoming changes in your app and apply them at suitable intervals. If highlights appear continuously, reconsider the update interval or which cells use flashing."},{"kind":"paragraph","text":"Verify the result: Keep current values accurate while giving users time to see where changes occurred. Do not treat flashing itself as a success notification."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"Do not assign conflicting values to cellChangeFlash and its compatibility option enableCellChangeFlash. Use one configuration path."},{"kind":"paragraph","text":"Test the distinction between supplying a similar new object and actually changing a cell value."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"links","items":[{"path":"/docs/options/cellChangeFlash","title":"cellChangeFlash","description":"Briefly highlights cells changed by editing, pasting, or transactions."},{"path":"/docs/options/enableCellChangeFlash","title":"enableCellChangeFlash","description":"Compatibility alias for cell change flashing. Do not assign a value that conflicts with cellChangeFlash."}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/cell-change-flash","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/features/row-hover","id":"row-hover","kind":"feature","group":"appearance","title":"Follow rows","summary":"Row hover highlights the row under the pointer to help users read wide tables. It differs from row selection and does not automatically select a row for business operations.","examples":[{"title":"Lightweight visual highlighting","explanation":"Choose a basic reading aid.","source":"grid.rowHover = 'css-only';","result":"Only the row under the pointer changes appearance, without relying on app-level row hover event handling."},{"title":"Connect row enter events","explanation":"Use this when a supporting area in your app describes the row under the pointer.","source":"grid.rowHover = 'stateful';\ngrid.addEventListener('rowHoverChanged', event => console.log(event.detail));","result":"Use the row information in the event. Build supporting descriptions from existing data instead of making a server request for every row."},{"title":"Disable highlighting","explanation":"In colorful analytical tables, remove hover highlighting while retaining selection and focus.","source":"grid.rowHover = 'off';","result":"This reduces confusion when pointer movement would otherwise keep changing the appearance of row status colors or conditional formatting."}],"featureId":"row-hover","sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"Use css-only for visual styling, stateful for row enter/leave events, or off for no highlighting. Avoid the cost of state updates when you do not need events."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Lightweight visual highlighting","blocks":[{"kind":"paragraph","text":"Choose a basic reading aid."},{"kind":"code","source":"grid.rowHover = 'css-only';","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Only the row under the pointer changes appearance, without relying on app-level row hover event handling."}]},{"id":"example-2","title":"Example 2. Connect row enter events","blocks":[{"kind":"paragraph","text":"Use this when a supporting area in your app describes the row under the pointer."},{"kind":"code","source":"grid.rowHover = 'stateful';\ngrid.addEventListener('rowHoverChanged', event => console.log(event.detail));","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Use the row information in the event. Build supporting descriptions from existing data instead of making a server request for every row."}]},{"id":"example-3","title":"Example 3. Disable highlighting","blocks":[{"kind":"paragraph","text":"In colorful analytical tables, remove hover highlighting while retaining selection and focus."},{"kind":"code","source":"grid.rowHover = 'off';","language":"javascript"},{"kind":"paragraph","text":"Verify the result: This reduces confusion when pointer movement would otherwise keep changing the appearance of row status colors or conditional formatting."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"Do not interpret hover as a click or selection event. Read bulk-operation targets from the actual selection API."},{"kind":"paragraph","text":"Touch screens have no persistent hover state. Essential information and controls must also be accessible through clicks and focus."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"links","items":[{"path":"/docs/options/rowHover","title":"rowHover","description":"Selects CSS-only hover highlighting, stateful hover with events, or no hover."},{"path":"/docs/methods/setHoveredRow","title":"setHoveredRow","description":"Sets the row targeted by stateful hover. Does not change actual row selection."},{"path":"/docs/methods/getHoveredRowId","title":"getHoveredRowId","description":"Reads the current hovered row ID or null."},{"path":"/docs/events/rowHoverChanged","title":"rowHoverChanged","description":"Emitted when the stateful hovered row changes. Unlike CSS-only hover, the app can read this state."}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/row-hover","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/features/overlays","id":"overlays","kind":"feature","group":"appearance","title":"Loading and empty results","summary":"Loading and empty-data messages explain why the table has no visible content. Pending requests, no results, and failures are distinct states and should not share one empty screen.","examples":[{"title":"Initial query","explanation":"Assume readOrders is a data-fetching function implemented by your app.","source":"grid.loading = true;\ngrid.loadingMessage = 'Loading orders.';\ntry {\n  grid.rowData = await readOrders();\n} finally {\n  grid.loading = false;\n}","result":"The table appears on success, and loading clears even on failure. The calling app must explain errors."},{"title":"When a query returns no results","explanation":"An empty array can be a valid query result.","source":"grid.showEmptyState = true;\ngrid.emptyMessage = 'No matching orders. Check your search criteria.';\ngrid.rowData = [];","result":"Users can understand whether to change their search criteria. While a request is pending, show loading instead of an empty state."},{"title":"Fast refreshes and flicker","explanation":"For repeated short requests, adjust display duration with minLoadingDuration. Decide whether to retain existing data based on the app workflow.","source":null,"result":"When filters change rapidly, implement cancellation or request ordering so an older response cannot overwrite the latest result."}],"featureId":"overlays","sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"Enable loading while the app fetches data and clear it when the request ends, whether it succeeds or fails. Configure empty results with showEmptyState and emptyMessage, and provide error retries in the app."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Initial query","blocks":[{"kind":"paragraph","text":"Assume readOrders is a data-fetching function implemented by your app."},{"kind":"code","source":"grid.loading = true;\ngrid.loadingMessage = 'Loading orders.';\ntry {\n  grid.rowData = await readOrders();\n} finally {\n  grid.loading = false;\n}","language":"javascript"},{"kind":"paragraph","text":"Verify the result: The table appears on success, and loading clears even on failure. The calling app must explain errors."}]},{"id":"example-2","title":"Example 2. When a query returns no results","blocks":[{"kind":"paragraph","text":"An empty array can be a valid query result."},{"kind":"code","source":"grid.showEmptyState = true;\ngrid.emptyMessage = 'No matching orders. Check your search criteria.';\ngrid.rowData = [];","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Users can understand whether to change their search criteria. While a request is pending, show loading instead of an empty state."}]},{"id":"example-3","title":"Example 3. Fast refreshes and flicker","blocks":[{"kind":"paragraph","text":"For repeated short requests, adjust display duration with minLoadingDuration. Decide whether to retain existing data based on the app workflow."},{"kind":"paragraph","text":"Verify the result: When filters change rapidly, implement cancellation or request ordering so an older response cannot overwrite the latest result."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"Use distinct messages for empty data and server errors. Explain failure causes and whether retry is possible."},{"kind":"paragraph","text":"For long tasks, provide necessary actions such as progress, cancellation, and retry instead of relying only on a loading screen."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"links","items":[{"path":"/docs/options/showEmptyState","title":"showEmptyState","description":"Shows an empty-state message when no data exists. Distinguish request failures from valid empty results in your app."},{"path":"/docs/options/emptyMessage","title":"emptyMessage","description":"Message displayed when source data is empty."},{"path":"/docs/options/noMatchesMessage","title":"noMatchesMessage","description":"Message displayed when data exists but no rows match current search or filters."},{"path":"/docs/options/clearFiltersLabel","title":"clearFiltersLabel","description":"Label for the clear-filters action in an empty-results view."},{"path":"/docs/options/loading","title":"loading","description":"Displays app data-request progress. Clear it after both success and failure."},{"path":"/docs/options/loadingMessage","title":"loadingMessage","description":"Description shown while loading."},{"path":"/docs/options/loadingMode","title":"loadingMode","description":"Selects the Grid loading indicator. See LoadingMode for supported values."},{"path":"/docs/options/minLoadingDuration","title":"minLoadingDuration","description":"Minimum loading-indicator duration to avoid brief flashes."},{"path":"/docs/events/emptyStateActionClicked","title":"emptyStateActionClicked","description":"Emitted when an empty-state action button is clicked. Connect the app flow appropriate to the action type."}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/overlays","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/guides/theming","id":"theming","kind":"guide","title":"Themes for your app","tier":"free","summary":"Grid themes coordinate backgrounds, lines, text, and selection states inside the table. They define the table's reading environment without replacing the page background.","examples":[{"title":"Light and dark views","explanation":"Explicitly update the Grid theme when the app theme changes.","source":"grid.theme = 'alpine';\n// When the app switches to a dark theme:\ngrid.theme = 'alpine-dark';","result":"Table text, lines, and backgrounds change together. Manage colors outside the table through app styles."},{"title":"Adjust density","explanation":"Balance the amount of visible data against readable spacing.","source":"grid.theme = 'balham';\ngrid.rowHeight = 36;\ngrid.height = 480;","result":"Changing Grid height and row height changes the visible row count. Also test touch interaction and long text."},{"title":"Extend with brand tokens","explanation":"Pass {extends: baseTheme, tokens: tokenObject} to theme. Check GridTokenOverrides for available keys and adjust app accent colors, selection colors, and contrast.","source":null,"result":"Do not guess CSS variable names. After changes, verify that selected rows, editing errors, menus, and tooltips remain readable."}],"featureId":"theming","sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"Use alpine, balham, or their dark presets. Choose a base preset first, then override only the tokens you need to preserve contrast for hover, selection, errors, and other states."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Light and dark views","blocks":[{"kind":"paragraph","text":"Explicitly update the Grid theme when the app theme changes."},{"kind":"code","source":"grid.theme = 'alpine';\n// When the app switches to a dark theme:\ngrid.theme = 'alpine-dark';","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Table text, lines, and backgrounds change together. Manage colors outside the table through app styles."}]},{"id":"example-2","title":"Example 2. Adjust density","blocks":[{"kind":"paragraph","text":"Balance the amount of visible data against readable spacing."},{"kind":"code","source":"grid.theme = 'balham';\ngrid.rowHeight = 36;\ngrid.height = 480;","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Changing Grid height and row height changes the visible row count. Also test touch interaction and long text."}]},{"id":"example-3","title":"Example 3. Extend with brand tokens","blocks":[{"kind":"paragraph","text":"Pass {extends: baseTheme, tokens: tokenObject} to theme. Check GridTokenOverrides for available keys and adjust app accent colors, selection colors, and contrast."},{"kind":"paragraph","text":"Verify the result: Do not guess CSS variable names. After changes, verify that selected rows, editing errors, menus, and tooltips remain readable."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"Renderer content taller than the fixed row height may be clipped. Design row layout and theme density together."},{"kind":"paragraph","text":"Mutating only the theme object's contents may not trigger an update. Pass new theme and tokens objects."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"links","items":[{"path":"/docs/options/theme","title":"theme","description":"Sets Grid colors and appearance with a light/dark preset or a token object extending a preset."},{"path":"/docs/events/themeChanged","title":"themeChanged","description":"Emitted when the Grid theme changes. Check it alongside the surrounding app theme."}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/theming","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/features/context-menu","id":"context-menu","kind":"feature","group":"panels","title":"Cell context menus","tier":"pro","summary":"A cell's context menu offers actions such as Copy, Copy row, and Export for the current location. Also provide toolbar or keyboard access to frequently used features.","examples":[{"title":"Default context menu","explanation":"Enable the option to use the default items.","source":"grid.contextMenu = true;","result":"Right-click a cell to inspect the default actions for that cell or row."},{"title":"Business-specific menu","explanation":"Menu labels describe the task; action performs the actual work.","source":"grid.contextMenuItemsCallback = () => [{\n  id: 'inspect-order', label: 'Inspect order',\n  action: context => console.log(context),\n}];","result":"One business action replaces the default items. Read the row and column from context to open the app's detail view."},{"title":"Inspect menu configuration in advance","explanation":"Read the menu for the product cell in the first displayed row.","source":"console.log(await grid.getContextMenuItems({ rowIndex: 0, field: 'product' }));","result":"Check which items appear and which are conditionally disabled. Hiding a menu does not replace server authorization checks."}],"featureId":"context-menu","sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"contextMenuItemsCallback replaces the default menu rather than appending to it. If default actions are needed, include them in the returned list or offer separate buttons."},{"kind":"paragraph","text":"Using this feature in a product requires the Pro package and a valid license. Matching setting names do not enable Pro features in Community."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Default context menu","blocks":[{"kind":"paragraph","text":"Enable the option to use the default items."},{"kind":"code","source":"grid.contextMenu = true;","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Right-click a cell to inspect the default actions for that cell or row."}]},{"id":"example-2","title":"Example 2. Business-specific menu","blocks":[{"kind":"paragraph","text":"Menu labels describe the task; action performs the actual work."},{"kind":"code","source":"grid.contextMenuItemsCallback = () => [{\n  id: 'inspect-order', label: 'Inspect order',\n  action: context => console.log(context),\n}];","language":"javascript"},{"kind":"paragraph","text":"Verify the result: One business action replaces the default items. Read the row and column from context to open the app's detail view."}]},{"id":"example-3","title":"Example 3. Inspect menu configuration in advance","blocks":[{"kind":"paragraph","text":"Read the menu for the product cell in the first displayed row."},{"kind":"code","source":"console.log(await grid.getContextMenuItems({ rowIndex: 0, field: 'product' }));","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Check which items appear and which are conditionally disabled. Hiding a menu does not replace server authorization checks."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"Do not retain display indices for later use in custom menu actions. Read a stable row ID when starting the action."},{"kind":"paragraph","text":"Provide access to essential actions in environments without right-click."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"links","items":[{"path":"/docs/options/contextMenu","title":"contextMenu","description":"Displays a cell context menu. Use built-in copy, row copy, and CSV actions or replace the list through a callback."},{"path":"/docs/options/contextMenuItemsCallback","title":"contextMenuItemsCallback","description":"Returns cell context-menu items. Replaces the entire default list rather than appending to it."},{"path":"/docs/methods/getContextMenuItems","title":"getContextMenuItems","description":"Calculates context-menu items for a displayed row and field."},{"path":"/docs/events/contextMenuItemClicked","title":"contextMenuItemClicked","description":"Emitted when a cell context-menu item runs. Read its item ID and target cell position."}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/context-menu","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/features/column-menu","id":"column-menu","kind":"feature","group":"panels","title":"Column menu","tier":"pro","summary":"Column menus place sorting, filtering, and visibility controls near the current column. Keep them distinct from row actions in cell context menus and whole-column-list management in tool panels.","examples":[{"title":"Enable column header menus","explanation":"Add column menus to a table with sorting and resizing enabled.","source":"grid.columnMenu = true;\ngrid.defaultColDef = { sortable: true, resizable: true };","result":"Open a header menu, such as Product or Quantity, to act on that column."},{"title":"Offer only administrator-approved actions","explanation":"Read GridColumnMenuContext in columnMenuItems and return a GridColumnMenuItem array. For read-only reports, omit unnecessary modifications and focus on filtering and sorting.","source":null,"result":"Check that menu settings and actual API restrictions agree. APIs remain callable after a menu is removed, so validate permissions separately."},{"title":"Find hidden columns again","explanation":"If users can hide columns through menus, also provide the sideBar columns panel or a reset button.","source":"grid.sideBar = 'columns';","result":"Users then have a way to restore hidden columns. Define defaults so hiding essential identifying columns does not make the table unclear."}],"featureId":"column-menu","sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"Enable menus with columnMenu and configure items through columnMenuItems. Also set each column's sorting, filtering, and pinning capabilities so selected actions actually apply."},{"kind":"paragraph","text":"Using this feature in a product requires the Pro package and a valid license. Matching setting names do not enable Pro features in Community."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Enable column header menus","blocks":[{"kind":"paragraph","text":"Add column menus to a table with sorting and resizing enabled."},{"kind":"code","source":"grid.columnMenu = true;\ngrid.defaultColDef = { sortable: true, resizable: true };","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Open a header menu, such as Product or Quantity, to act on that column."}]},{"id":"example-2","title":"Example 2. Offer only administrator-approved actions","blocks":[{"kind":"paragraph","text":"Read GridColumnMenuContext in columnMenuItems and return a GridColumnMenuItem array. For read-only reports, omit unnecessary modifications and focus on filtering and sorting."},{"kind":"paragraph","text":"Verify the result: Check that menu settings and actual API restrictions agree. APIs remain callable after a menu is removed, so validate permissions separately."}]},{"id":"example-3","title":"Example 3. Find hidden columns again","blocks":[{"kind":"paragraph","text":"If users can hide columns through menus, also provide the sideBar columns panel or a reset button."},{"kind":"code","source":"grid.sideBar = 'columns';","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Users then have a way to restore hidden columns. Define defaults so hiding essential identifying columns does not make the table unclear."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"Test with keyboard and mouse that header-click sorting does not conflict with opening the menu."},{"kind":"paragraph","text":"Read current menu state from actual column objects and column-state APIs. The initial columnDefs alone do not describe the current view."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"links","items":[{"path":"/docs/options/columnMenu","title":"columnMenu","description":"Enables a column action menu in column headers."},{"path":"/docs/options/columnMenuItems","title":"columnMenuItems","description":"Builds column menu items from the current column context."}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/column-menu","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/features/tool-panels","id":"tool-panels","kind":"feature","group":"panels","title":"Tool panel","tier":"pro","summary":"Tool panels collect cross-column tasks such as visibility and filter settings. They separate data space from settings space and open only when needed.","examples":[{"title":"Start with column management","explanation":"Useful for reports where column visibility changes frequently.","source":"grid.sideBar = 'columns';","result":"Users can review the full column list and choose which columns to show."},{"title":"Open filter tools","explanation":"Open the panel from the app's search-settings button.","source":"grid.sideBar = true;\nconst opened = await grid.openToolPanel('filters');\nconsole.log(opened, await grid.getOpenedToolPanel());","result":"Check the return value to confirm it opened. Passing an unknown panel ID does not create a panel."},{"title":"Recover space on narrow screens","explanation":"Close the panel after configuration to return space to the table.","source":"await grid.closeToolPanel();","result":"Closing a panel does not clear its filters. Indicate active filters separately."}],"featureId":"tool-panels","sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"Set sideBar to true for panel tabs, or to columns or filters to open that panel initially. The app can also open and close panels through public methods."},{"kind":"paragraph","text":"Using this feature in a product requires the Pro package and a valid license. Matching setting names do not enable Pro features in Community."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Start with column management","blocks":[{"kind":"paragraph","text":"Useful for reports where column visibility changes frequently."},{"kind":"code","source":"grid.sideBar = 'columns';","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Users can review the full column list and choose which columns to show."}]},{"id":"example-2","title":"Example 2. Open filter tools","blocks":[{"kind":"paragraph","text":"Open the panel from the app's search-settings button."},{"kind":"code","source":"grid.sideBar = true;\nconst opened = await grid.openToolPanel('filters');\nconsole.log(opened, await grid.getOpenedToolPanel());","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Check the return value to confirm it opened. Passing an unknown panel ID does not create a panel."}]},{"id":"example-3","title":"Example 3. Recover space on narrow screens","blocks":[{"kind":"paragraph","text":"Close the panel after configuration to return space to the table."},{"kind":"code","source":"await grid.closeToolPanel();","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Closing a panel does not clear its filters. Indicate active filters separately."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"Synchronize through state-change events so external app settings and Grid panels do not overwrite each other."},{"kind":"paragraph","text":"Check that mobile users can see how to close the panel and return to the table."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"links","items":[{"path":"/docs/options/sideBar","title":"sideBar","description":"Configures column/filter tool panels and the initially open panel. true provides tabs; a string opens the specified panel."},{"path":"/docs/methods/openToolPanel","title":"openToolPanel","description":"Opens a column/filter tool panel by ID and returns success."},{"path":"/docs/methods/closeToolPanel","title":"closeToolPanel","description":"Closes the open column/filter panel without clearing applied settings."},{"path":"/docs/methods/getOpenedToolPanel","title":"getOpenedToolPanel","description":"Reads the open tool panel ID or null."},{"path":"/docs/events/toolPanelToggled","title":"toolPanelToggled","description":"Emitted when column/filter tool panel visibility changes."}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/tool-panels","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/features/status-bar","id":"status-bar","kind":"feature","group":"panels","title":"Status and aggregates","tier":"pro","summary":"The status bar briefly summarizes results such as row counts or range calculations. It helps users understand the visible scope rather than editing data.","examples":[{"title":"Default row-count display","explanation":"Show basic status information below the table.","source":"grid.statusBar = true;","result":"The current row-count summary appears. true does not enable every aggregation panel."},{"title":"Separate totals from filtered results","explanation":"Show total and filtered row counts separately.","source":"grid.statusBar = { panels: [\n  { panel: 'totalRows', align: 'left' },\n  { panel: 'filteredRows', align: 'right' },\n] };","result":"Compare counts after searching to understand why fewer rows are visible."},{"title":"Explain remote data scope","explanation":"With server row models, total server rows, loaded rows, and current-page counts may differ. Distinguish confirmed server rowCount from the loaded range in the app.","source":null,"result":"Do not present cached-row calculations as server-wide totals. Use separate server aggregation results when complete totals are needed."}],"featureId":"status-bar","sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"true enables the default row-count display. Use supported names for explicit panels, and distinguish total, filtered, and selected row counts."},{"kind":"paragraph","text":"Using this feature in a product requires the Pro package and a valid license. Matching setting names do not enable Pro features in Community."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Default row-count display","blocks":[{"kind":"paragraph","text":"Show basic status information below the table."},{"kind":"code","source":"grid.statusBar = true;","language":"javascript"},{"kind":"paragraph","text":"Verify the result: The current row-count summary appears. true does not enable every aggregation panel."}]},{"id":"example-2","title":"Example 2. Separate totals from filtered results","blocks":[{"kind":"paragraph","text":"Show total and filtered row counts separately."},{"kind":"code","source":"grid.statusBar = { panels: [\n  { panel: 'totalRows', align: 'left' },\n  { panel: 'filteredRows', align: 'right' },\n] };","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Compare counts after searching to understand why fewer rows are visible."}]},{"id":"example-3","title":"Example 3. Explain remote data scope","blocks":[{"kind":"paragraph","text":"With server row models, total server rows, loaded rows, and current-page counts may differ. Distinguish confirmed server rowCount from the loaded range in the app."},{"kind":"paragraph","text":"Verify the result: Do not present cached-row calculations as server-wide totals. Use separate server aggregation results when complete totals are needed."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"The status bar does not replace validation or save-success feedback. Provide a separate message when the result matters."},{"kind":"paragraph","text":"Define numeric column types and empty-value handling before showing sums or averages."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"links","items":[{"path":"/docs/options/statusBar","title":"statusBar","description":"Displays a basic row count or specified status panels below the table. true does not enable every aggregation panel."}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/status-bar","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/features/csv-import","id":"csv-import","kind":"feature","group":"import-export","title":"Import CSV","summary":"CSV import converts delimited text into new columns and rows. Unlike a transaction that appends rows, importCsvText replaces columnDefs and rowData.","examples":[{"title":"CSV with headers","explanation":"Run on a new Grid whose data may be replaced.","source":"const result = await grid.importCsvText('product,quantity\\nAtlas,24\\nBeacon,36', { hasHeader: true });\nconsole.log(result.rowCount, result.columnCount);","result":"Product and Quantity columns and two data rows are created. Reapply column widths and editor settings to the new columns if needed."},{"title":"Tab-delimited files","explanation":"Pass tab-delimited text copied from a spreadsheet.","source":"await grid.importCsvText('product\\tquantity\\nAtlas\\t24', { delimiter: '\\t', hasHeader: true });","result":"Match the delimiter to the file format to avoid incorrectly splitting text containing commas."},{"title":"Confirm before replacing","explanation":"After file selection, show the filename, expected columns, and required-field errors first. If work already exists, finish a data snapshot or app save before replacement.","source":null,"result":"Read row and column counts from csvImported to explain the result. For append-only imports, build a separate flow that parses and validates rows before applyTransaction({add: …})."}],"featureId":"csv-import","sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"First identify the header and delimiter. Design required-column validation and the business types of numeric and date strings as part of import."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. CSV with headers","blocks":[{"kind":"paragraph","text":"Run on a new Grid whose data may be replaced."},{"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":"Verify the result: Product and Quantity columns and two data rows are created. Reapply column widths and editor settings to the new columns if needed."}]},{"id":"example-2","title":"Example 2. Tab-delimited files","blocks":[{"kind":"paragraph","text":"Pass tab-delimited text copied from a spreadsheet."},{"kind":"code","source":"await grid.importCsvText('product\\tquantity\\nAtlas\\t24', { delimiter: '\\t', hasHeader: true });","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Match the delimiter to the file format to avoid incorrectly splitting text containing commas."}]},{"id":"example-3","title":"Example 3. Confirm before replacing","blocks":[{"kind":"paragraph","text":"After file selection, show the filename, expected columns, and required-field errors first. If work already exists, finish a data snapshot or app save before replacement."},{"kind":"paragraph","text":"Verify the result: Read row and column counts from csvImported to explain the result. For append-only imports, build a separate flow that parses and validates rows before applyTransaction({add: …})."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"Importing does not save to a server. Build a separate approval or save step to persist the displayed data."},{"kind":"paragraph","text":"Duplicate row IDs from unvalidated imports can make later selection, editing, and comment associations unreliable."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"links","items":[{"path":"/docs/options/csvImport","title":"csvImport","description":"Provides a CSV import button and column mapping flow. Explain whether importing replaces existing columns and data."},{"path":"/docs/methods/importCsvText","title":"importCsvText","description":"Parses CSV text and replaces columns and source data. For appending rows, parse separately and use transactions."},{"path":"/docs/events/csvImported","title":"csvImported","description":"Emitted after CSV import completes. Report the actual applied row and column counts to users."}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/csv-import","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/features/xlsx-import","id":"xlsx-import","kind":"feature","group":"import-export","title":"Excel import","summary":"XLSX import reads a workbook and converts the selected sheet into a Grid column-and-row snapshot. The full parsed workbook and the display snapshot are different data.","examples":[{"title":"Read the selected file","explanation":"file is a File object selected through a file input.","source":"const parsed = await grid.importDataFromXlsx(await file.arrayBuffer());\nconsole.log(parsed.workbook, parsed.sheets);","result":"Inspect the source workbook and sheets in the return value. There is no parsed.snapshot return field."},{"title":"Apply the converted sheet to Grid","explanation":"Subscribe to the completion event before starting the import.","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":"Pass the converted result as new arrays to display it. Activate this subscription only after deciding whether existing work may be replaced."},{"title":"Choose a named sheet","explanation":"Select the Orders sheet if it exists in the workbook.","source":"await grid.importDataFromXlsx(await file.arrayBuffer(), { sheetName: 'Orders' });","result":"Only the selected sheet is converted to a display snapshot. Check sheet existence, column structure, and supported formula/style conversion for each file."}],"featureId":"xlsx-import","sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"importDataFromXlsx returns XlsxImportResult. Read the Grid snapshot from xlsxImported's detail. Apply it explicitly in your app to avoid overwriting existing edits accidentally."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Read the selected file","blocks":[{"kind":"paragraph","text":"file is a File object selected through a file input."},{"kind":"code","source":"const parsed = await grid.importDataFromXlsx(await file.arrayBuffer());\nconsole.log(parsed.workbook, parsed.sheets);","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Inspect the source workbook and sheets in the return value. There is no parsed.snapshot return field."}]},{"id":"example-2","title":"Example 2. Apply the converted sheet to Grid","blocks":[{"kind":"paragraph","text":"Subscribe to the completion event before starting the import."},{"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":"Verify the result: Pass the converted result as new arrays to display it. Activate this subscription only after deciding whether existing work may be replaced."}]},{"id":"example-3","title":"Example 3. Choose a named sheet","blocks":[{"kind":"paragraph","text":"Select the Orders sheet if it exists in the workbook."},{"kind":"code","source":"await grid.importDataFromXlsx(await file.arrayBuffer(), { sheetName: 'Orders' });","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Only the selected sheet is converted to a display snapshot. Check sheet existence, column structure, and supported formula/style conversion for each file."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"Do not assume all Excel formatting, formulas, and merges are reproduced identically. Inspect the converted result and reapply necessary column settings."},{"kind":"paragraph","text":"Provide loading and error states for large files, and clean up duplicate subscriptions so one import is not applied multiple times."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"links","items":[{"path":"/docs/methods/importDataFromXlsx","title":"importDataFromXlsx","description":"Parses file bytes into a workbook and returns XlsxImportResult. Read the Grid snapshot from the xlsxImported event."},{"path":"/docs/events/xlsxImported","title":"xlsxImported","description":"Emits the selected sheet's Grid snapshot after XLSX parsing. Apply snapshot.columnDefs and snapshot.rowData in your app if needed."}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/xlsx-import","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/features/csv-export","id":"csv-export","kind":"feature","group":"import-export","title":"CSV export","tier":"free","summary":"CSV export creates a text file for exchanging table data with other tools. It does not preserve cell colors, column widths, detail panels, or other visual layout.","examples":[{"title":"Download a file","explanation":"Call from a user button interaction in the browser.","source":"const result = await grid.exportDataAsCsv({ fileName: 'orders.csv' });\nconsole.log(result.rowCount, result.columnCount);","result":"The CSV download starts, and you can inspect the actual output row and column counts."},{"title":"Preview text","explanation":"Use an app preview or approval step instead of downloading.","source":"const result = await grid.getDataAsCsv();\nconsole.log(result.csv);","result":"Read the generated CSV text. Converting the entire result object to a string does not produce a CSV file."},{"title":"Review export scope","explanation":"For reports combining filters, hidden columns, and selected rows, specify the desired scope in CsvExportOptions. Compare row counts and content against a small known dataset.","source":null,"result":"Do not assume unloaded server rows are included automatically. Implement a separate server export using the same query conditions for complete server data."}],"featureId":"csv-export","sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"Use exportDataAsCsv to download, or getDataAsCsv to process text in the app. The latter returns an object containing csv and row/column counts, not a plain string."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Download a file","blocks":[{"kind":"paragraph","text":"Call from a user button interaction in the browser."},{"kind":"code","source":"const result = await grid.exportDataAsCsv({ fileName: 'orders.csv' });\nconsole.log(result.rowCount, result.columnCount);","language":"javascript"},{"kind":"paragraph","text":"Verify the result: The CSV download starts, and you can inspect the actual output row and column counts."}]},{"id":"example-2","title":"Example 2. Preview text","blocks":[{"kind":"paragraph","text":"Use an app preview or approval step instead of downloading."},{"kind":"code","source":"const result = await grid.getDataAsCsv();\nconsole.log(result.csv);","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Read the generated CSV text. Converting the entire result object to a string does not produce a CSV file."}]},{"id":"example-3","title":"Example 3. Review export scope","blocks":[{"kind":"paragraph","text":"For reports combining filters, hidden columns, and selected rows, specify the desired scope in CsvExportOptions. Compare row counts and content against a small known dataset."},{"kind":"paragraph","text":"Verify the result: Do not assume unloaded server rows are included automatically. Implement a separate server export using the same query conditions for complete server data."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"Check output-protection behavior when user input begins with spreadsheet formula characters such as =. CSV does not preserve the screen renderer's appearance."},{"kind":"paragraph","text":"Check download permissions, sensitive-column access policy, and the actual file contents together."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"links","items":[{"path":"/docs/methods/getDataAsCsv","title":"getDataAsCsv","description":"Returns an object with CSV text and output row/column counts. Read the string from its csv field."},{"path":"/docs/methods/exportDataAsCsv","title":"exportDataAsCsv","description":"Downloads CSV using current export conditions and returns the export result."}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/csv-export","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/features/excel-export","id":"excel-export","kind":"feature","group":"import-export","title":"Excel export","tier":"pro","summary":"Excel export generates XLSX bytes or downloads a file. This Pro feature suits exchanges requiring sheet names and workbook format beyond CSV.","examples":[{"title":"Download an orders file","explanation":"Choose clear file and sheet names.","source":"await grid.exportDataAsExcel({ fileName: 'orders.xlsx', sheetName: 'Orders' });","result":"Inspect the result in the XLSX file's Orders sheet."},{"title":"Send selected orders only","explanation":"Select rows first, then limit the scope.","source":"await grid.exportDataAsExcel({ onlySelected: true, columnKeys: ['product', 'quantity'] });","result":"Only specified columns from selected rows are exported. Also check the no-selection result and the app's explanation."},{"title":"Use file bytes","explanation":"Connect the result to attachment previews or app uploads.","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":"Create a File object without downloading. Implement external uploads in your app."}],"featureId":"excel-export","sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"exportDataAsExcel downloads a file; getDataAsExcel returns Uint8Array. Use the bytes for uploads or attachments without interpreting them as text."},{"kind":"paragraph","text":"Using this feature in a product requires the Pro package and a valid license. Matching setting names do not enable Pro features in Community."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Download an orders file","blocks":[{"kind":"paragraph","text":"Choose clear file and sheet names."},{"kind":"code","source":"await grid.exportDataAsExcel({ fileName: 'orders.xlsx', sheetName: 'Orders' });","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Inspect the result in the XLSX file's Orders sheet."}]},{"id":"example-2","title":"Example 2. Send selected orders only","blocks":[{"kind":"paragraph","text":"Select rows first, then limit the scope."},{"kind":"code","source":"await grid.exportDataAsExcel({ onlySelected: true, columnKeys: ['product', 'quantity'] });","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Only specified columns from selected rows are exported. Also check the no-selection result and the app's explanation."}]},{"id":"example-3","title":"Example 3. Use file bytes","blocks":[{"kind":"paragraph","text":"Connect the result to attachment previews or app uploads."},{"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":"Verify the result: Create a File object without downloading. Implement external uploads in your app."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"Do not expect arbitrary HTML renderers or app buttons to become equivalent Excel cells. Check the supported data and formatting scope."},{"kind":"paragraph","text":"Exporting all server data has a different scope from exporting the current Grid. Consider server-generated reports for large datasets."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"links","items":[{"path":"/docs/methods/getDataAsExcel","title":"getDataAsExcel","description":"Generates XLSX content as Uint8Array bytes for app attachments, uploads, and similar uses."},{"path":"/docs/methods/exportDataAsExcel","title":"exportDataAsExcel","description":"Downloads an XLSX file using the specified sheet name, columns, and selection conditions."}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/excel-export","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/features/pdf-export","id":"pdf-export","kind":"feature","group":"import-export","title":"PDF export","tier":"pro","summary":"PDF export fixes the table into a shareable document. Choose CSV or XLSX for further calculation in other apps, and PDF for reading and distribution.","examples":[{"title":"Connect a Korean font","explanation":"Replace the URL below with the path to a font file your app actually hosts.","source":"grid.pdfFontUrl = '/fonts/NotoSansKR-Regular.ttf';\nawait grid.exportDataAsPdf({ fileName: 'orders.pdf' });","result":"Inspect the generated PDF to ensure Korean titles and values do not appear as missing-glyph squares."},{"title":"Inspect results before downloading","explanation":"Get the PDF result object without downloading.","source":"const result = await grid.getDataAsPdf();\nconsole.log(result);","result":"Handle the result according to PdfExportResult. Do not assume it has the same type as a string or XLSX bytes."},{"title":"Reading order in wide tables","explanation":"Choose columns and page options in SyGridPdfExportOptions. Review samples containing long product names, Korean text, negative numbers, empty values, and multiple pages.","source":null,"result":"In a PDF viewer, check that headers and data remain readable across page boundaries and required columns are not clipped. Document export differs from a screenshot."}],"featureId":"pdf-export","sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"Korean and other CJK characters require a supporting font. Provide a hosted TTF/OTF URL or explicit fontBytes rather than relying only on access to local browser fonts."},{"kind":"paragraph","text":"Using this feature in a product requires the Pro package and a valid license. Matching setting names do not enable Pro features in Community."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Connect a Korean font","blocks":[{"kind":"paragraph","text":"Replace the URL below with the path to a font file your app actually hosts."},{"kind":"code","source":"grid.pdfFontUrl = '/fonts/NotoSansKR-Regular.ttf';\nawait grid.exportDataAsPdf({ fileName: 'orders.pdf' });","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Inspect the generated PDF to ensure Korean titles and values do not appear as missing-glyph squares."}]},{"id":"example-2","title":"Example 2. Inspect results before downloading","blocks":[{"kind":"paragraph","text":"Get the PDF result object without downloading."},{"kind":"code","source":"const result = await grid.getDataAsPdf();\nconsole.log(result);","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Handle the result according to PdfExportResult. Do not assume it has the same type as a string or XLSX bytes."}]},{"id":"example-3","title":"Example 3. Reading order in wide tables","blocks":[{"kind":"paragraph","text":"Choose columns and page options in SyGridPdfExportOptions. Review samples containing long product names, Korean text, negative numbers, empty values, and multiple pages."},{"kind":"paragraph","text":"Verify the result: In a PDF viewer, check that headers and data remain readable across page boundaries and required columns are not clipped. Document export differs from a screenshot."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"Configure font URL access, CORS, and licensing in your app. Do not use development-only paths in deployed documents."},{"kind":"paragraph","text":"Also test environments where automatic font discovery fails, and explain errors or alternatives to the user."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"links","items":[{"path":"/docs/options/pdfFontUrl","title":"pdfFontUrl","description":"An app-hosted TTF/OTF URL for characters absent from the default PDF font, such as Korean characters."},{"path":"/docs/options/pdfAutoFont","title":"pdfAutoFont","description":"Automatically resolves a PDF font when fontBytes is absent. Tries pdfFontUrl first, then local font access where available."},{"path":"/docs/methods/getDataAsPdf","title":"getDataAsPdf","description":"Returns PDF generation results without downloading. Prepare a suitable font for characters such as Korean text."},{"path":"/docs/methods/exportDataAsPdf","title":"exportDataAsPdf","description":"Downloads the table as PDF and returns generation results."}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/pdf-export","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/features/collaboration","id":"collaboration","kind":"feature","group":"application","title":"Real-time collaboration","tier":"pro","summary":"Collaboration shares edits, cursors, and presence among users in the same room. A room name alone does not automatically connect devices over the internet.","examples":[{"title":"Test connections on the same page","explanation":"Give two Grids the same room name and matching data-ID rules.","source":"grid.collaborationRoom = 'orders-review';\ngrid.collabUserName = 'Reviewer A';\ngrid.collabUserColor = '#2459d3';","result":"Check edit synchronization with another participant on the same page. Do not describe this as a connection to a real remote service."},{"title":"Connect remote collaboration","explanation":"Set realtimeUrl to the app's authenticated WebSocket endpoint and implement joining and leaving. Enforce room permissions on the server so users cannot read other rooms' data.","source":null,"result":"Use syncStatusChanged to communicate disconnection and reconnection, and distinguish persistent saving from message delivery."},{"title":"Read synchronization results","explanation":"Connect remote edits and conflict-resolution results to the app's activity history.","source":"grid.addEventListener('remoteEditApplied', event => console.log(event.detail));\ngrid.addEventListener('collabConflictResolved', event => console.log(event.detail));","result":"Inspect actual detail when users edit the same cell concurrently. Track the change source to avoid retransmission loops."}],"featureId":"collaboration","sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"Without realtimeUrl, the feature serves demos within the same process or page. Multi-user deployments need an app-provided WebSocket service, authentication, room permissions, and persistence policy."},{"kind":"paragraph","text":"Using this feature in a product requires the Pro package and a valid license. Matching setting names do not enable Pro features in Community."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Test connections on the same page","blocks":[{"kind":"paragraph","text":"Give two Grids the same room name and matching data-ID rules."},{"kind":"code","source":"grid.collaborationRoom = 'orders-review';\ngrid.collabUserName = 'Reviewer A';\ngrid.collabUserColor = '#2459d3';","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Check edit synchronization with another participant on the same page. Do not describe this as a connection to a real remote service."}]},{"id":"example-2","title":"Example 2. Connect remote collaboration","blocks":[{"kind":"paragraph","text":"Set realtimeUrl to the app's authenticated WebSocket endpoint and implement joining and leaving. Enforce room permissions on the server so users cannot read other rooms' data."},{"kind":"paragraph","text":"Verify the result: Use syncStatusChanged to communicate disconnection and reconnection, and distinguish persistent saving from message delivery."}]},{"id":"example-3","title":"Example 3. Read synchronization results","blocks":[{"kind":"paragraph","text":"Connect remote edits and conflict-resolution results to the app's activity history."},{"kind":"code","source":"grid.addEventListener('remoteEditApplied', event => console.log(event.detail));\ngrid.addEventListener('collabConflictResolved', event => console.log(event.detail));","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Inspect actual detail when users edit the same cell concurrently. Track the change source to avoid retransmission loops."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"All participants must use the same rowId and column-identifier rules. Do not associate remote edits with display indices."},{"kind":"paragraph","text":"Collaboration status does not confirm persistent storage or audit retention. Connect persistence policy to the app server."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"links","items":[{"path":"/docs/options/collaborationRoom","title":"collaborationRoom","description":"Collaboration room ID for sharing edits and presence. Connecting multiple devices requires remote service configuration."},{"path":"/docs/options/realtimeUrl","title":"realtimeUrl","description":"WebSocket URL for remote collaboration. When omitted, collaboration is limited to a same-page/process demo scope."},{"path":"/docs/options/collabUserName","title":"collabUserName","description":"User name shown to other collaboration participants."},{"path":"/docs/options/collabUserColor","title":"collabUserColor","description":"Distinctive color for the participant's cursor and presence indicators."},{"path":"/docs/options/collabPresence","title":"collabPresence","description":"Configures participant position and presence indicators."},{"path":"/docs/options/collabConflictUi","title":"collabConflictUi","description":"Configures user-facing conflict guidance for concurrent edits."},{"path":"/docs/options/collabPersistence","title":"collabPersistence","description":"Disables local collaboration persistence or uses IndexedDB. Does not replace server backups."},{"path":"/docs/methods/connectCollabRoom","title":"connectCollabRoom","description":"Starts the configured collaboration room connection and returns synchronization state."},{"path":"/docs/methods/disconnectCollabRoom","title":"disconnectCollabRoom","description":"Disconnects from the current collaboration room."},{"path":"/docs/methods/getSyncStatus","title":"getSyncStatus","description":"Reads current collaboration connection and synchronization state."},{"path":"/docs/methods/getCollaborators","title":"getCollaborators","description":"Reads current collaboration participant information."},{"path":"/docs/events/remoteEditApplied","title":"remoteEditApplied","description":"Emitted when a collaborator's edit is applied. Track its origin to avoid resending it as a local edit and creating a loop."},{"path":"/docs/events/presenceChanged","title":"presenceChanged","description":"Emitted when participant positions or presence change."},{"path":"/docs/events/collabConflictResolved","title":"collabConflictResolved","description":"Emitted when a concurrent editing conflict is resolved. Read the actual outcome before explaining it to users."},{"path":"/docs/events/collaboratorJoined","title":"collaboratorJoined","description":"Emitted when a participant joins the collaboration room."},{"path":"/docs/events/collaboratorLeft","title":"collaboratorLeft","description":"Emitted when a participant leaves. Update the app's participant list by ID."},{"path":"/docs/events/syncStatusChanged","title":"syncStatusChanged","description":"Emitted when collaboration synchronization changes. Distinguish connection state from completed persistent server saving."}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/collaboration","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/features/audit-log","id":"audit-log","kind":"feature","group":"application","title":"View change history","summary":"The audit log tracks row, cell, and selection changes and undo/redo transitions. Use it to inspect change history that current values alone cannot reveal.","examples":[{"title":"Start recording","explanation":"Enable logging and set retention before editing begins.","source":"grid.auditLog = true;\ngrid.auditLogMax = 1000;","result":"Supported changes are recorded from then on. Earlier work is not reconstructed."},{"title":"Read cell changes only","explanation":"Use filters to narrow the records being inspected.","source":"const entries = await grid.getAuditLog({ kind: 'cell' });\nconsole.log(entries);","result":"Inspect each record's seq, time, source, and before/after values."},{"title":"Share review records as JSON","explanation":"Use JSON to preserve the structure.","source":"const json = await grid.getAuditLogAsJson(undefined, true);\nconsole.log(json);\n// From a user download button:\nawait grid.exportAuditLogAsJson('order-audit.json');","result":"Choose a workflow for file review or app-server upload. Logs may contain sensitive previous values."}],"featureId":"audit-log","sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"The log is an in-memory record with a retention limit. Services requiring long-term or legal audit records need separate server storage, access control, and retention policies."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Start recording","blocks":[{"kind":"paragraph","text":"Enable logging and set retention before editing begins."},{"kind":"code","source":"grid.auditLog = true;\ngrid.auditLogMax = 1000;","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Supported changes are recorded from then on. Earlier work is not reconstructed."}]},{"id":"example-2","title":"Example 2. Read cell changes only","blocks":[{"kind":"paragraph","text":"Use filters to narrow the records being inspected."},{"kind":"code","source":"const entries = await grid.getAuditLog({ kind: 'cell' });\nconsole.log(entries);","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Inspect each record's seq, time, source, and before/after values."}]},{"id":"example-3","title":"Example 3. Share review records as JSON","blocks":[{"kind":"paragraph","text":"Use JSON to preserve the structure."},{"kind":"code","source":"const json = await grid.getAuditLogAsJson(undefined, true);\nconsole.log(json);\n// From a user download button:\nawait grid.exportAuditLogAsJson('order-audit.json');","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Choose a workflow for file review or app-server upload. Logs may contain sensitive previous values."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"clearAuditLog() clears the local record, not persistent server records. seq values are not reused."},{"kind":"paragraph","text":"Older entries are removed when the retention limit is exceeded. For complete long-term records, design event collection and server storage."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"links","items":[{"path":"/docs/options/auditLog","title":"auditLog","description":"Records row, cell, selection, and edit-history transitions in an audit log. Disabled by default and separate from long-term server retention."},{"path":"/docs/options/auditLogMax","title":"auditLogMax","description":"Maximum audit records retained in memory. Oldest records are removed when exceeded."},{"path":"/docs/methods/getAuditLog","title":"getAuditLog","description":"Reads audit records as an array, optionally filtered by type, sequence, or time. Returns an empty array when recording is disabled."},{"path":"/docs/methods/clearAuditLog","title":"clearAuditLog","description":"Clears retained audit records. Sequence numbers continue increasing and are not reused."},{"path":"/docs/methods/getAuditLogAsCsv","title":"getAuditLogAsCsv","description":"Converts audit records to CSV text for inspection or transfer without downloading a file."},{"path":"/docs/methods/getAuditLogAsJson","title":"getAuditLogAsJson","description":"Reads audit records as a structured JSON array string. Use pretty for readable indentation."},{"path":"/docs/methods/exportAuditLogAsCsv","title":"exportAuditLogAsCsv","description":"Downloads selected audit records as a CSV file."},{"path":"/docs/methods/exportAuditLogAsJson","title":"exportAuditLogAsJson","description":"Downloads selected audit records as a JSON file."},{"path":"/docs/events/auditLogChanged","title":"auditLogChanged","description":"Emitted when an audit record is added. Read entry to connect your app's retention flow."}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/audit-log","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/features/rbac","id":"rbac","kind":"feature","group":"application","title":"Cell access control","summary":"Cell read and edit policies restrict visible and editable values according to user roles. Hiding a column is different from enforcing data access.","examples":[{"title":"Restrict sensitive-column reads","explanation":"canSeePrice is a boolean obtained from the app's authentication result.","source":"grid.canReadCell = params => params.field !== 'price' || canSeePrice;","result":"Check that read restrictions apply consistently across the table, tooltips, copying, export, and other value-exposure paths."},{"title":"Restrict editing completed orders","explanation":"Determine editability from the business state.","source":"grid.canEditCell = params => params.data?.status !== 'Complete';","result":"The policy restricts editing completed orders even when the column is editable. Combine it with app role rules."},{"title":"Update views after permission changes","explanation":"When a role changes, assign new policy functions and check that open menus, editors, and detail views do not retain confidential values.","source":null,"result":"The server must recheck every read and update request independently of browser policies. UI restrictions cannot safely retract secrets already sent to the browser."}],"featureId":"rbac","sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"Provide pure, synchronous callbacks to canReadCell and canEditCell. Load permissions first and evaluate known permissions in callbacks instead of making server requests."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Restrict sensitive-column reads","blocks":[{"kind":"paragraph","text":"canSeePrice is a boolean obtained from the app's authentication result."},{"kind":"code","source":"grid.canReadCell = params => params.field !== 'price' || canSeePrice;","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Check that read restrictions apply consistently across the table, tooltips, copying, export, and other value-exposure paths."}]},{"id":"example-2","title":"Example 2. Restrict editing completed orders","blocks":[{"kind":"paragraph","text":"Determine editability from the business state."},{"kind":"code","source":"grid.canEditCell = params => params.data?.status !== 'Complete';","language":"javascript"},{"kind":"paragraph","text":"Verify the result: The policy restricts editing completed orders even when the column is editable. Combine it with app role rules."}]},{"id":"example-3","title":"Example 3. Update views after permission changes","blocks":[{"kind":"paragraph","text":"When a role changes, assign new policy functions and check that open menus, editors, and detail views do not retain confidential values."},{"kind":"paragraph","text":"Verify the result: The server must recheck every read and update request independently of browser policies. UI restrictions cannot safely retract secrets already sent to the browser."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"Do not return an asynchronous Promise where a boolean policy is expected. Use a restrictive policy until permission loading completes."},{"kind":"paragraph","text":"Also inspect surrounding code so unauthorized values do not appear in app consoles, logs, or event panels."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"links","items":[{"path":"/docs/options/canReadCell","title":"canReadCell","description":"Synchronous permission callback determining whether a cell can be read. Use alongside server access control."},{"path":"/docs/options/maskedCellValue","title":"maskedCellValue","description":"Masking text displayed in place of restricted cells."},{"path":"/docs/options/canEditCell","title":"canEditCell","description":"Determines edit permission from the row, column, current value, and app permissions."}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/rbac","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/features/snapshots","id":"snapshots","kind":"feature","group":"application","title":"Data snapshot","summary":"Snapshots retain rowData at a point in time for comparison with current data or another snapshot. They differ from view-state APIs that save column widths, filters, and focus.","examples":[{"title":"Create a baseline before editing","explanation":"Save a named snapshot before starting a bulk operation.","source":"grid.maxSnapshots = 10;\nconst before = await grid.captureSnapshot('Before quantity adjustment');\nconsole.log(before);","result":"An ID is returned for later comparison or restoration."},{"title":"Compare with current data","explanation":"Inspect changes after editing from the baseline.","source":"console.log(await grid.diffSnapshots(before));","result":"Omitting the second ID compares against current data. Pass a second snapshot ID to compare two saved points."},{"title":"Restore and clean up","explanation":"Check the actual result when the user chooses to restore.","source":"const restored = await grid.restoreSnapshot(before);\nconsole.log(restored, await grid.listSnapshots());","result":"Restoration changes current data values. Remove unnecessary baselines with deleteSnapshot(id). Perform a separate save if server changes must also be reversed."}],"featureId":"snapshots","sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"Use them to create a baseline before bulk edits and compare additions, changes, and removals afterward. Retention is limited; snapshots are not persistent server backups after leaving the page."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Create a baseline before editing","blocks":[{"kind":"paragraph","text":"Save a named snapshot before starting a bulk operation."},{"kind":"code","source":"grid.maxSnapshots = 10;\nconst before = await grid.captureSnapshot('Before quantity adjustment');\nconsole.log(before);","language":"javascript"},{"kind":"paragraph","text":"Verify the result: An ID is returned for later comparison or restoration."}]},{"id":"example-2","title":"Example 2. Compare with current data","blocks":[{"kind":"paragraph","text":"Inspect changes after editing from the baseline."},{"kind":"code","source":"console.log(await grid.diffSnapshots(before));","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Omitting the second ID compares against current data. Pass a second snapshot ID to compare two saved points."}]},{"id":"example-3","title":"Example 3. Restore and clean up","blocks":[{"kind":"paragraph","text":"Check the actual result when the user chooses to restore."},{"kind":"code","source":"const restored = await grid.restoreSnapshot(before);\nconsole.log(restored, await grid.listSnapshots());","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Restoration changes current data values. Remove unnecessary baselines with deleteSnapshot(id). Perform a separate save if server changes must also be reversed."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"Keep row IDs stable to compare additions, modifications, and removals meaningfully."},{"kind":"paragraph","text":"Snapshot restoration does not restore column layout or filters. Use getState()/setState() for view configuration."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"links","items":[{"path":"/docs/options/maxSnapshots","title":"maxSnapshots","description":"Maximum data snapshots retained in memory. Older snapshots may be removed."},{"path":"/docs/methods/captureSnapshot","title":"captureSnapshot","description":"Creates a named snapshot of current source data and returns its ID. Separate from saving column layouts."},{"path":"/docs/methods/listSnapshots","title":"listSnapshots","description":"Reads metadata for retained data snapshots."},{"path":"/docs/methods/deleteSnapshot","title":"deleteSnapshot","description":"Deletes a data snapshot and returns success without changing current data."},{"path":"/docs/methods/diffSnapshots","title":"diffSnapshots","description":"Compares two snapshots or a snapshot with current data. Omit the second ID to compare against current data."},{"path":"/docs/methods/restoreSnapshot","title":"restoreSnapshot","description":"Restores source data from a snapshot. Does not automatically save to the server or restore view state."},{"path":"/docs/events/snapshotCaptured","title":"snapshotCaptured","description":"Emitted when a data snapshot is created. Display the saved point using its ID, name, and row count."},{"path":"/docs/events/snapshotRestored","title":"snapshotRestored","description":"Emitted when snapshot restoration completes. Does not indicate completed server saving."}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/snapshots","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/guides/keyboard-a11y-i18n","id":"keyboard-a11y-i18n","kind":"guide","title":"Keyboard and localization","tier":"free","summary":"Grid is a workspace for navigating many rows and columns with a keyboard. Cell navigation, editing, menus, and paths to app buttons outside the table must all be understandable.","examples":[{"title":"Korean and keyboard navigation","explanation":"Configure a basic environment with Korean messages and keyboard navigation.","source":"grid.locale = 'ko';\ngrid.keyboardNavigation = true;","result":"Built-in messages appear in Korean, and keyboard navigation is available. Test every button and editor with Tab, arrow keys, Enter, and Escape."},{"title":"Switch supported languages","explanation":"Pass the app's selected language to Grid.","source":"grid.locale = 'ja';","result":"Grid's built-in messages switch to Japanese. Source values such as order statuses are not translated automatically."},{"title":"Accessible business cells","explanation":"Give renderer buttons names that identify their row, and show text beside status colors. Outside the table, provide a readable status area for result counts and save outcomes.","source":null,"result":"Screen-reader and keyboard users should understand their location and next action. Avoid announcing every cell through a live region on each large data update."}],"featureId":"keyboard-a11y-i18n","sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"The locale changes Grid's built-in text. Translate column names, source data, and app guidance in the app, and format numbers and dates through valueFormatter."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Korean and keyboard navigation","blocks":[{"kind":"paragraph","text":"Configure a basic environment with Korean messages and keyboard navigation."},{"kind":"code","source":"grid.locale = 'ko';\ngrid.keyboardNavigation = true;","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Built-in messages appear in Korean, and keyboard navigation is available. Test every button and editor with Tab, arrow keys, Enter, and Escape."}]},{"id":"example-2","title":"Example 2. Switch supported languages","blocks":[{"kind":"paragraph","text":"Pass the app's selected language to Grid."},{"kind":"code","source":"grid.locale = 'ja';","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Grid's built-in messages switch to Japanese. Source values such as order statuses are not translated automatically."}]},{"id":"example-3","title":"Example 3. Accessible business cells","blocks":[{"kind":"paragraph","text":"Give renderer buttons names that identify their row, and show text beside status colors. Outside the table, provide a readable status area for result counts and save outcomes."},{"kind":"paragraph","text":"Verify the result: Screen-reader and keyboard users should understand their location and next action. Avoid announcing every cell through a live region on each large data update."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"Intercepting every keydown in the app can break Grid editing and navigation. Limit shortcut targets and the scope of preventDefault."},{"kind":"paragraph","text":"Row virtualization keeps only some DOM nodes. Do not assume off-DOM rows are inaccessible; verify navigation and announcements with assistive technology."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"links","items":[{"path":"/docs/options/locale","title":"locale","description":"A Korean, English, or Japanese preset, or an object overriding default messages. Translate source data and column headings in your app."},{"path":"/docs/options/keyboardNavigation","title":"keyboardNavigation","description":"Configures keyboard navigation across cells and internal Grid features."},{"path":"/docs/events/activeCellChanged","title":"activeCellChanged","description":"Emitted when keyboard or pointer input changes the active cell. Separate from range or row selection."},{"path":"/docs/events/localeChanged","title":"localeChanged","description":"Emitted when the Grid locale changes."}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/keyboard-a11y-i18n","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/guides/data-event-access","id":"data-event-access","kind":"guide","title":"Data and events","tier":"free","summary":"Grid APIs read or change the current state; events report the results of user interactions or data changes. Combine them to build save buttons, detail panels, and change histories.","examples":[{"title":"Read editing results","explanation":"Check the actual event type for the edited cell and its before/after values.","source":"const controller = new AbortController();\ngrid.addEventListener('cellValueChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });","result":"Build the app's save payload from actual changes rather than counting events."},{"title":"Check call results","explanation":"Read selected rows through the API instead of assuming they are the first items in the source array.","source":"const selectedIds = await grid.getSelectedRowIds();\nconsole.log(selectedIds);","result":"Use selected IDs to determine approval or export targets. Calling a method and completing a server save are separate steps."},{"title":"Clean up on view disposal","explanation":"Use the first example's AbortController to remove subscriptions together.","source":"controller.abort();","result":"Events will not run twice when the view reopens. Also clean up app-created WebSockets, timers, and requests."}],"featureId":"data-event-access","sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"Most public methods return Promises, so use await to read completion results. Event names are case-sensitive, and payloads are carried in CustomEvent.detail."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Read editing results","blocks":[{"kind":"paragraph","text":"Check the actual event type for the edited cell and its before/after values."},{"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":"Verify the result: Build the app's save payload from actual changes rather than counting events."}]},{"id":"example-2","title":"Example 2. Check call results","blocks":[{"kind":"paragraph","text":"Read selected rows through the API instead of assuming they are the first items in the source array."},{"kind":"code","source":"const selectedIds = await grid.getSelectedRowIds();\nconsole.log(selectedIds);","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Use selected IDs to determine approval or export targets. Calling a method and completing a server save are separate steps."}]},{"id":"example-3","title":"Example 3. Clean up on view disposal","blocks":[{"kind":"paragraph","text":"Use the first example's AbortController to remove subscriptions together."},{"kind":"code","source":"controller.abort();","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Events will not run twice when the view reopens. Also clean up app-created WebSockets, timers, and requests."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"Writing the same value after receiving an event can create an event loop. Distinguish user changes from app-applied updates."},{"kind":"paragraph","text":"Do not confuse an event's rowIndex with a stable rowId. Use IDs for persistent keys."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"links","items":[{"path":"/docs/options/context","title":"context","description":"Passes shared app context to callbacks and the Grid API, such as app-managed permissions and services."},{"path":"/docs/methods/getApi","title":"getApi","description":"Accesses the current Grid's typed API and app context. Read from a fully initialized element."},{"path":"/docs/methods/getRow","title":"getRow","description":"Finds a row object by stable row ID, rather than display index."},{"path":"/docs/methods/getDisplayedRowAtIndex","title":"getDisplayedRowAtIndex","description":"Finds a row object by its current display index. Sorting, filtering, and grouping can change the row at an index."},{"path":"/docs/methods/forEachRow","title":"forEachRow","description":"Runs a callback for each row object. Use forEachDisplayedRow when display order matters."},{"path":"/docs/methods/forEachDisplayedRow","title":"forEachDisplayedRow","description":"Iterates current displayed rows for app features that distinguish source order from display order."},{"path":"/docs/events/cellClicked","title":"cellClicked","description":"Emitted on a cell click. Read the row, field, and input context from detail."},{"path":"/docs/events/cellDoubleClicked","title":"cellDoubleClicked","description":"Emitted on a cell double-click. Avoid conflicts between starting editing and opening app details."},{"path":"/docs/events/rowClicked","title":"rowClicked","description":"Emitted on a row click. Distinguish the click itself from the resulting selection."},{"path":"/docs/events/gridObjectChanged","title":"gridObjectChanged","description":"Emitted when public objects such as rows and columns change. Read the target and changes from detail."}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/data-event-access","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/features/virtualization","id":"virtualization","kind":"feature","group":"application","title":"Large data sets","tier":"free","summary":"Virtualization renders only row and column DOM needed near the viewport. It is separate from row models that fetch only part of the data from a server.","examples":[{"title":"Display many rows within a fixed height","explanation":"Limit the rendered range independently of data loading.","source":"grid.height = 520;\ngrid.virtualScroll = true;","result":"Rows at the current position appear as you scroll. Not all rows exist in the DOM at once."},{"title":"Reports with many columns","explanation":"Explicitly enable horizontal column virtualization.","source":"grid.virtualizeColumns = true;","result":"Reduce offscreen rendering cost in tables with hundreds of columns. Verify it alongside column movement, pinning, and resizing."},{"title":"Separate performance bottlenecks","explanation":"Compare plain-text cells with complex renderers using the same data. Measure request, parsing, sorting, and scroll-frame times separately.","source":null,"result":"Virtualization does not eliminate data downloads or expensive formatter calculations. Adjust the row model, processing engine, and renderers to address the bottleneck."}],"featureId":"virtualization","sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"Vertical virtualization works well with a bounded Grid height. Consider column virtualization for wide tables, while also checking custom-cell rendering cost and the number of pinned columns."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Display many rows within a fixed height","blocks":[{"kind":"paragraph","text":"Limit the rendered range independently of data loading."},{"kind":"code","source":"grid.height = 520;\ngrid.virtualScroll = true;","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Rows at the current position appear as you scroll. Not all rows exist in the DOM at once."}]},{"id":"example-2","title":"Example 2. Reports with many columns","blocks":[{"kind":"paragraph","text":"Explicitly enable horizontal column virtualization."},{"kind":"code","source":"grid.virtualizeColumns = true;","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Reduce offscreen rendering cost in tables with hundreds of columns. Verify it alongside column movement, pinning, and resizing."}]},{"id":"example-3","title":"Example 3. Separate performance bottlenecks","blocks":[{"kind":"paragraph","text":"Compare plain-text cells with complex renderers using the same data. Measure request, parsing, sorting, and scroll-frame times separately."},{"kind":"paragraph","text":"Verify the result: Virtualization does not eliminate data downloads or expensive formatter calculations. Adjust the row model, processing engine, and renderers to address the bottleneck."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"A table initialized in a hidden tab may have different container dimensions. Check its height and layout when actually visible."},{"kind":"paragraph","text":"Do not calculate the total dataset size from DOM row counts. Use data APIs, displayed-row APIs, or the server's total count."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"links","items":[{"path":"/docs/options/height","title":"height","description":"Sets the Grid container height as a number or CSS length. Account for virtual scrolling and bottom tools."},{"path":"/docs/options/rowHeight","title":"rowHeight","description":"Default row height in pixels. Choose a size suitable for text, cell editors, and touch targets."},{"path":"/docs/options/rowHeightFn","title":"rowHeightFn","description":"Calculates individual row heights from row indices and data. Call refreshRowHeights when relevant data changes."},{"path":"/docs/options/virtualScroll","title":"virtualScroll","description":"Enables vertical virtualization, rendering rows near the viewport. Does not reduce total data downloads."},{"path":"/docs/options/virtualizeColumns","title":"virtualizeColumns","description":"Enables horizontal virtualization, rendering columns near the viewport."},{"path":"/docs/columns/wrapText","title":"wrapText","description":"Allows cell text wrapping. Content may clip without sufficient height."},{"path":"/docs/columns/autoHeight","title":"autoHeight","description":"Calculates row height from cell content. Review costs with virtualization and large data sets."},{"path":"/docs/methods/refreshRowHeights","title":"refreshRowHeights","description":"Recalculates row heights after content or height callback inputs change."},{"path":"/docs/methods/scrollToTop","title":"scrollToTop","description":"Scrolls the Grid to the top."}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/virtualization","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/features/wasm-acceleration","id":"wasm-acceleration","kind":"feature","group":"application","title":"Choose a processing engine","tier":"pro","summary":"Pro engines accelerate supported sorting, filtering, and aggregation. The actual execution path depends on the browser, package, license, and current feature combination.","examples":[{"title":"Select automatically for the environment","explanation":"Use the default selection and fallback policy.","source":"grid.engine = 'auto';\ngrid.unavailable = 'fallback';\nconsole.log(await grid.getActiveTier());","result":"Check the selected tier after initialization. Where fallback is allowed, the result may differ from the requested mode."},{"title":"Views requiring Pro execution","explanation":"Use in an app that already has the package and license configured.","source":"grid.engine = 'pro';\ngrid.unavailable = 'error';","result":"When the required engine is unavailable, inspect the error path instead of silently falling back."},{"title":"Compare acceleration benefits","explanation":"Benchmark standard and Pro repeatedly using the same data, filters, and sorting. Separate initial download and initialization from repeated processing time.","source":null,"result":"Do not promise acceleration based only on row count. Check support and equivalent results for actual feature combinations, including callbacks, formulas, and pivoting."}],"featureId":"wasm-acceleration","sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"engine requests a mode; getActiveTier() reports the active engine. Requesting Pro does not mean every operation uses the same accelerated path."},{"kind":"paragraph","text":"Using this feature in a product requires the Pro package and a valid license. Matching setting names do not enable Pro features in Community."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Select automatically for the environment","blocks":[{"kind":"paragraph","text":"Use the default selection and fallback policy."},{"kind":"code","source":"grid.engine = 'auto';\ngrid.unavailable = 'fallback';\nconsole.log(await grid.getActiveTier());","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Check the selected tier after initialization. Where fallback is allowed, the result may differ from the requested mode."}]},{"id":"example-2","title":"Example 2. Views requiring Pro execution","blocks":[{"kind":"paragraph","text":"Use in an app that already has the package and license configured."},{"kind":"code","source":"grid.engine = 'pro';\ngrid.unavailable = 'error';","language":"javascript"},{"kind":"paragraph","text":"Verify the result: When the required engine is unavailable, inspect the error path instead of silently falling back."}]},{"id":"example-3","title":"Example 3. Compare acceleration benefits","blocks":[{"kind":"paragraph","text":"Benchmark standard and Pro repeatedly using the same data, filters, and sorting. Separate initial download and initialization from repeated processing time."},{"kind":"paragraph","text":"Verify the result: Do not promise acceleration based only on row count. Check support and equivalent results for actual feature combinations, including callbacks, formulas, and pivoting."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"Changing engines does not automatically speed up server requests, networking, or custom renderers. Measure the bottleneck first."},{"kind":"paragraph","text":"For features rejected on a particular path, such as dynamic array formulas, read the returned report and switch to a supported configuration."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"links","items":[{"path":"/docs/options/engine","title":"engine","description":"Requests automatic selection, standard JavaScript, or Pro processing. Inspect the actual result with getActiveTier."},{"path":"/docs/options/proThreshold","title":"proThreshold","description":"Data-size threshold for considering the Pro path during automatic engine selection."},{"path":"/docs/options/unavailable","title":"unavailable","description":"Chooses fallback execution or an error when the requested engine is unavailable."},{"path":"/docs/methods/getActiveTier","title":"getActiveTier","description":"Reads the actual active processing tier, which may differ from the requested engine mode."}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/wasm-acceleration","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/guides/grid-state","id":"grid-state","kind":"guide","title":"Save and restore view state","summary":"View state saves user configuration such as column widths, order, sorting, filters, and selection. Distinguish it from data snapshots that back up original order values.","examples":[{"title":"Save views per user","explanation":"Read state from a Grid whose data and columns are ready.","source":"const state = await grid.getState();\nlocalStorage.setItem('orders-grid-state', JSON.stringify(state));","result":"Save the current configuration in the browser. Include user and view identifiers in the storage key to keep states separate."},{"title":"Restore an existing view","explanation":"Handle failures to parse the saved JSON in your app.","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":"If columns were removed or some state is unsupported, read the report and tell the user about the partial restore."},{"title":"Initial rendering and column-only state","explanation":"Pass initialState before mounting to restore from the first render. If only column layout is needed, use getColumnState()/applyColumnState() to reduce the saved scope.","source":null,"result":"Initial state is applied once. Use setState() to restore a running Grid. Callback functions and source data are not recreated from JSON state."}],"sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"getState() returns a versioned state object. setState() reports applied portions and problems, so do not assume every restore succeeds completely."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Save views per user","blocks":[{"kind":"paragraph","text":"Read state from a Grid whose data and columns are ready."},{"kind":"code","source":"const state = await grid.getState();\nlocalStorage.setItem('orders-grid-state', JSON.stringify(state));","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Save the current configuration in the browser. Include user and view identifiers in the storage key to keep states separate."}]},{"id":"example-2","title":"Example 2. Restore an existing view","blocks":[{"kind":"paragraph","text":"Handle failures to parse the saved JSON in your app."},{"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":"Verify the result: If columns were removed or some state is unsupported, read the report and tell the user about the partial restore."}]},{"id":"example-3","title":"Example 3. Initial rendering and column-only state","blocks":[{"kind":"paragraph","text":"Pass initialState before mounting to restore from the first render. If only column layout is needed, use getColumnState()/applyColumnState() to reduce the saved scope."},{"kind":"paragraph","text":"Verify the result: Initial state is applied once. Use setState() to restore a running Grid. Callback functions and source data are not recreated from JSON state."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"Selection and focus restoration require stable row IDs and column identifiers for the same data. Do not force selection of deleted rows."},{"kind":"paragraph","text":"Check getStateCaptureReport() and the restore report for omitted information. Use snapshots to restore original values."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"paragraph","text":"Review the shared settings together with the related documentation below."},{"kind":"links","items":[{"path":"/docs/options","title":"Grid properties","description":""},{"path":"/docs/columns","title":"Column settings","description":""},{"path":"/docs/methods","title":"Methods","description":""}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/grid-state","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/guides/api-reference","id":"api-reference","kind":"guide","title":"Grid API reference","summary":"Grid APIs cover Grid-wide properties, individual column settings, callable methods, result events, and shared types. Each entry links the current public contract by name.","examples":[{"title":"Grid properties versus column settings","explanation":"Set pagination on Grid; set editable on individual columns or defaultColDef.","source":"grid.pagination = true;\ngrid.defaultColDef = { editable: true };\ngrid.columnDefs = [{ field: 'id', editable: false }, { field: 'quantity', editor: 'number' }];","result":"Quantity is editable, while an individual column setting prevents ID editing. Options do not all belong in the same place."},{"title":"Read method result types","explanation":"Check applyTransaction's argument and return types for supported changes and report fields. With Promise<T>, awaiting the result yields T.","source":null,"result":"Open the return-type link to understand status, reason, and issue lists, then handle success and rejection separately in your app."},{"title":"Connect results through events","explanation":"Open cellValueChanged in the event list and inspect its detail type. Do not reference fields absent from the type; also read related feature examples.","source":null,"result":"Find copyable subscription examples and lifecycle cleanup instructions. Use the exact case of API names."}],"sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"Start with the feature manuals when configuring a feature. Open API entries for exact arguments, return values, and defaults. Search by purpose or API name."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Grid properties versus column settings","blocks":[{"kind":"paragraph","text":"Set pagination on Grid; set editable on individual columns or 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":"Verify the result: Quantity is editable, while an individual column setting prevents ID editing. Options do not all belong in the same place."}]},{"id":"example-2","title":"Example 2. Read method result types","blocks":[{"kind":"paragraph","text":"Check applyTransaction's argument and return types for supported changes and report fields. With Promise<T>, awaiting the result yields T."},{"kind":"paragraph","text":"Verify the result: Open the return-type link to understand status, reason, and issue lists, then handle success and rejection separately in your app."}]},{"id":"example-3","title":"Example 3. Connect results through events","blocks":[{"kind":"paragraph","text":"Open cellValueChanged in the event list and inspect its detail type. Do not reference fields absent from the type; also read related feature examples."},{"kind":"paragraph","text":"Verify the result: Find copyable subscription examples and lifecycle cleanup instructions. Use the exact case of API names."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"The type reference is not a list of JavaScript import paths. Distinguish type definitions from runtime package exports."},{"kind":"paragraph","text":"Pro labels indicate usage requirements. Matching names or readable types do not enable Pro features in Community."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"paragraph","text":"Review the shared settings together with the related documentation below."},{"kind":"links","items":[{"path":"/docs/options","title":"Grid properties","description":""},{"path":"/docs/columns","title":"Column settings","description":""},{"path":"/docs/methods","title":"Methods","description":""}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/api-reference","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/guides/branding","id":"branding","kind":"guide","title":"Logos and positioning","tier":"pro","summary":"Grid's default logo is right-aligned in a dedicated footer area. It is separate from the data area so it does not cover cells, pagination, or scrolling controls.","examples":[{"title":"Keep the default logo","explanation":"Use the default value or an empty string for the Syidax logo.","source":"grid.brandLogo = '';","result":"The default mark appears at the table's bottom right. Do not clip this area in the app layout."},{"title":"Remove the logo with a license","explanation":"Set this after registering the Pro package and branding entitlement.","source":"grid.brandLogo = 'none';","result":"With permission, the logo is removed. Without it, the default remains. Check the rendered result and license-rejection events."},{"title":"Use a company logo","explanation":"Pass a PNG, JPEG, or WebP image up to 100KB as a base64 data URL in brandLogo. External URLs, SVG, and HTML are not accepted.","source":null,"result":"A valid branding entitlement and supported image format are both required. Check readability in light and dark themes."}],"featureId":"branding","sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"No setting is needed for the default display. Removing or customizing the logo requires a valid grid.branding entitlement. Grid does not offer brandPosition for arbitrary placement."},{"kind":"paragraph","text":"Using this feature in a product requires the Pro package and a valid license. Matching setting names do not enable Pro features in Community."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Keep the default logo","blocks":[{"kind":"paragraph","text":"Use the default value or an empty string for the Syidax logo."},{"kind":"code","source":"grid.brandLogo = '';","language":"javascript"},{"kind":"paragraph","text":"Verify the result: The default mark appears at the table's bottom right. Do not clip this area in the app layout."}]},{"id":"example-2","title":"Example 2. Remove the logo with a license","blocks":[{"kind":"paragraph","text":"Set this after registering the Pro package and branding entitlement."},{"kind":"code","source":"grid.brandLogo = 'none';","language":"javascript"},{"kind":"paragraph","text":"Verify the result: With permission, the logo is removed. Without it, the default remains. Check the rendered result and license-rejection events."}]},{"id":"example-3","title":"Example 3. Use a company logo","blocks":[{"kind":"paragraph","text":"Pass a PNG, JPEG, or WebP image up to 100KB as a base64 data URL in brandLogo. External URLs, SVG, and HTML are not accepted."},{"kind":"paragraph","text":"Verify the result: A valid branding entitlement and supported image format are both required. Check readability in light and dark themes."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"Do not force logo repositioning by overriding internal Shadow DOM or CSS. Use public settings within the product's entitlements."},{"kind":"paragraph","text":"Package installation and license registration are separate. Verify registration using the installation guide before setting a custom logo."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"links","items":[{"path":"/docs/options/brandLogo","title":"brandLogo","description":"Specifies the default logo, none, or a supported image data URL. Removal and replacement require grid.branding entitlement. Branding appears at the bottom right."}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""},{"path":"/grid/branding","title":"Explore in Features","description":"The guide describes which interactions are available to try."}]}]}]},{"path":"/docs/features/row-numbers","id":"row-numbers","kind":"feature","group":"rows","title":"Row indices and data IDs","tier":"free","summary":"Row numbers help users read display order, while order IDs identify business data. Decide whether numbers stay attached to rows after sorting or are reassigned to the current display order.","examples":[{"title":"Display arrival order","explanation":"Add sequence numbers to the data to record the received order.","source":"grid.rowData = grid.rowData.map((row, index) => ({ ...row, receivedNo: index + 1 }));\ngrid.columnDefs = [{ field: 'receivedNo', headerName: 'Arrival order', editable: false }, ...grid.columnDefs];","result":"Arrival numbers remain attached to the same orders after sorting. They do not indicate the current displayed row position."},{"title":"Query by row position","explanation":"The API for reading the first displayed row accepts a zero-based index.","source":"console.log(await grid.getDisplayedRowAtIndex(0));","result":"Read the row object at the displayed position. It may differ from the first item in the original unsorted array."},{"title":"Numbering across pages","explanation":"With 20 rows per page, decide whether the next page starts at 21 or 1. Server paging also requires position information within the complete result.","source":null,"result":"Use headings such as Display position or Arrival order so users do not mistake a sequence number for an order identifier."}],"featureId":"row-numbers","sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"Do not invent a rowNumbers switch. Build suitable numbering through your data or a custom column. The API argument rowIndex also differs from a business ID."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Display arrival order","blocks":[{"kind":"paragraph","text":"Add sequence numbers to the data to record the received order."},{"kind":"code","source":"grid.rowData = grid.rowData.map((row, index) => ({ ...row, receivedNo: index + 1 }));\ngrid.columnDefs = [{ field: 'receivedNo', headerName: 'Arrival order', editable: false }, ...grid.columnDefs];","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Arrival numbers remain attached to the same orders after sorting. They do not indicate the current displayed row position."}]},{"id":"example-2","title":"Example 2. Query by row position","blocks":[{"kind":"paragraph","text":"The API for reading the first displayed row accepts a zero-based index."},{"kind":"code","source":"console.log(await grid.getDisplayedRowAtIndex(0));","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Read the row object at the displayed position. It may differ from the first item in the original unsorted array."}]},{"id":"example-3","title":"Example 3. Numbering across pages","blocks":[{"kind":"paragraph","text":"With 20 rows per page, decide whether the next page starts at 21 or 1. Server paging also requires position information within the complete result."},{"kind":"paragraph","text":"Verify the result: Use headings such as Display position or Arrival order so users do not mistake a sequence number for an order identifier."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"Using sequence numbers as getRowId can destabilize an order's identity after insertion, deletion, or sorting. Retain the server's order ID separately."},{"kind":"paragraph","text":"Decide whether group headers and detail rows count toward numbering. Source order counts may differ from rendered row counts."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"paragraph","text":"Review the shared settings together with the related documentation below."},{"kind":"links","items":[{"path":"/docs/options","title":"Grid properties","description":""},{"path":"/docs/columns","title":"Column settings","description":""},{"path":"/docs/methods","title":"Methods","description":""}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""}]}]}]},{"path":"/docs/features/js-processing","id":"js-processing","kind":"feature","group":"application","title":"JavaScript processing engine","tier":"free","summary":"The JavaScript engine is the standard browser execution path for sorting, filtering, and processing table data. Use it as a straightforward starting point for checking deployment environments and feature combinations.","examples":[{"title":"Use the standard path","explanation":"Set the mode explicitly when comparing runtime environments.","source":"grid.engine = 'standard';\nconsole.log(await grid.getActiveTier());","result":"Check the active execution tier after Grid initialization."},{"title":"Small business tables","explanation":"Start with a few hundred orders and basic text columns, then add sorting, search, and editing as needed. Supply data through rowData without a separate server row model.","source":null,"result":"This keeps implementation simple and changes easy to track. As data grows, review virtualization and server-loading scope together."},{"title":"Reduce callback cost","explanation":"Prepare calculations so value formatters and comparators do not repeatedly create large arrays. Enable features one at a time on the same data to compare cost.","source":null,"result":"Reduce unnecessary rendering and full-data replacement before changing the execution engine."}],"featureId":"js-processing","sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"Engine selection and product feature tiers are separate. Choosing standard does not remove Pro licensing requirements or change the installed package's feature scope."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Use the standard path","blocks":[{"kind":"paragraph","text":"Set the mode explicitly when comparing runtime environments."},{"kind":"code","source":"grid.engine = 'standard';\nconsole.log(await grid.getActiveTier());","language":"javascript"},{"kind":"paragraph","text":"Verify the result: Check the active execution tier after Grid initialization."}]},{"id":"example-2","title":"Example 2. Small business tables","blocks":[{"kind":"paragraph","text":"Start with a few hundred orders and basic text columns, then add sorting, search, and editing as needed. Supply data through rowData without a separate server row model."},{"kind":"paragraph","text":"Verify the result: This keeps implementation simple and changes easy to track. As data grows, review virtualization and server-loading scope together."}]},{"id":"example-3","title":"Example 3. Reduce callback cost","blocks":[{"kind":"paragraph","text":"Prepare calculations so value formatters and comparators do not repeatedly create large arrays. Enable features one at a time on the same data to compare cost."},{"kind":"paragraph","text":"Verify the result: Reduce unnecessary rendering and full-data replacement before changing the execution engine."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"The standard engine does not require rendering every DOM cell. It is separate from virtualScroll."},{"kind":"paragraph","text":"If the browser cannot hold the entire dataset in memory, consider a server row model instead of changing only the engine mode."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"links","items":[{"path":"/docs/options/rows","title":"rows","description":"Compatibility input for source rows. Prefer rowData in new configurations and avoid conflicting inputs."},{"path":"/docs/options/columns","title":"columns","description":"Compatibility input for column definitions. Prefer columnDefs in new configurations."},{"path":"/docs/options/maxRendered","title":"maxRendered","description":"Limits the number of rows rendered at once, independently of the total data count."},{"path":"/docs/methods/setQuery","title":"setQuery","description":"Passes query conditions to the processing engine. Review GridQuery and support in the active row model."},{"path":"/docs/events/queryComplete","title":"queryComplete","description":"Emitted when an engine query completes. Read results and actual execution tier from detail for performance and result feedback."}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""}]}]}]},{"path":"/docs/features/fixed-logo","id":"fixed-logo","kind":"feature","group":"application","title":"Default logo display","tier":"free","summary":"The default logo appears in dedicated space beneath Grid, including Community. It occupies layout space as part of the table rather than overlaying data as a watermark.","examples":[{"title":"Check the default setup","explanation":"Omit the logo setting or restore its default.","source":"grid.brandLogo = '';","result":"The default mark appears. Toggling other features should not move it into data cells."},{"title":"Check short tables","explanation":"In a short table with pagination, a status bar, and horizontal scrolling, inspect the last row together with the footer controls.","source":null,"result":"Choose table height with room for the logo and controls. Avoid clipping the bottom through overflow on an outer container."},{"title":"When branding needs to change","explanation":"To remove the logo or use a company image, follow the brandLogo and licensing steps in Logos and positioning.","source":null,"result":"Background colors belong to theming; logo images belong to branding. Apply each setting for its intended purpose."}],"featureId":"fixed-logo","sections":[{"id":"understand","title":"How it works and when to use it","blocks":[{"kind":"paragraph","text":"Grid and Chart have different drawing areas. Grid uses the bottom-right area without overlapping cells or pagination. Include that area when calculating table height."},{"kind":"paragraph","text":"In the code, grid is the Grid element prepared in the installation chapter. Check each example's data and settings, and implement the app functions and server endpoints for your project."},{"kind":"links","items":[{"path":"/docs/guides/getting-started","title":"Installation and integration · Shared sample data","description":""}]}]},{"id":"example-1","title":"Example 1. Check the default setup","blocks":[{"kind":"paragraph","text":"Omit the logo setting or restore its default."},{"kind":"code","source":"grid.brandLogo = '';","language":"javascript"},{"kind":"paragraph","text":"Verify the result: The default mark appears. Toggling other features should not move it into data cells."}]},{"id":"example-2","title":"Example 2. Check short tables","blocks":[{"kind":"paragraph","text":"In a short table with pagination, a status bar, and horizontal scrolling, inspect the last row together with the footer controls."},{"kind":"paragraph","text":"Verify the result: Choose table height with room for the logo and controls. Avoid clipping the bottom through overflow on an outer container."}]},{"id":"example-3","title":"Example 3. When branding needs to change","blocks":[{"kind":"paragraph","text":"To remove the logo or use a company image, follow the brandLogo and licensing steps in Logos and positioning."},{"kind":"paragraph","text":"Verify the result: Background colors belong to theming; logo images belong to branding. Apply each setting for its intended purpose."}]},{"id":"pitfalls","title":"Combining features and troubleshooting","blocks":[{"kind":"paragraph","text":"Do not customize the logo by overlaying app elements or clipping the table to hide the internal mark."},{"kind":"paragraph","text":"The logo does not replace app action buttons. Provide primary actions through separate accessible buttons."}]},{"id":"related-api","title":"APIs used by this feature","blocks":[{"kind":"paragraph","text":"Review the shared settings together with the related documentation below."},{"kind":"links","items":[{"path":"/docs/options","title":"Grid properties","description":""},{"path":"/docs/columns","title":"Column settings","description":""},{"path":"/docs/methods","title":"Methods","description":""}]}]},{"id":"next","title":"Related reading","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"How rows, columns, and IDs relate","description":""},{"path":"/docs/guides/data-event-access","title":"Connect results and events","description":""}]}]}]},{"path":"/docs/features","kind":"index","title":"Feature manuals","summary":"Explore each feature's purpose, setup sequence, and combinations.","sections":[{"id":"columns","title":"Column configuration and values","blocks":[{"kind":"links","items":[{"path":"/docs/features/column-operations","title":"Column sizing and pinning","description":"Width, order, pinning, and visibility are independent column states. Combine them to pin order IDs, hide supporting information, and widen long product names."},{"path":"/docs/features/column-groups","title":"Multi-level headers","description":"Multi-level headers place related columns under a shared heading. Unlike row grouping, they do not change data counts or aggregate values."},{"path":"/docs/features/column-api","title":"Live column API","description":"Live column objects are references connected to the current Grid. They differ from serializable column-state arrays: references suit UI controls for individual columns, while state arrays suit saved preferences."},{"path":"/docs/features/value-getter-formatter","title":"Separate calculation and display","description":"valueGetter produces a calculated value, while valueFormatter produces readable display text. Return numbers from getters when totals, sorting, or comparisons require numeric values."}]}]},{"id":"rows","title":"Rows and data models","blocks":[{"kind":"links","items":[{"path":"/docs/features/data-updates","title":"Data updates","description":"Replace rowData when receiving a complete query result. For partial changes, pass add, update, and remove to applyTransaction. Updates match through getRowId, not display positions."},{"path":"/docs/features/infinite-row-model","title":"Request only needed blocks","description":"When downloading every order at once is impractical, request only the ranges needed for scrolling. datasource supplies data based on starting and ending rows and search conditions."},{"path":"/docs/features/server-query","title":"Sort and search on the server","description":"Server queries send row ranges, sorting, and filtering together as conditions. Use the Infinite model for simple lists and consider the Server-Side model for server grouping and pivoting."},{"path":"/docs/features/server-side-row-model","title":"Server-side row model","description":"In this model, the server calculates grouping and pivots and supplies rows for each expanded group path. Its data responsibilities differ from grouping already loaded local rows with groupBy."},{"path":"/docs/features/viewport-row-model","title":"Stream the visible range","description":"This suits price feeds and monitoring views where the total count is known but only visible rows need continuous updates. Adjusting the subscription to the scroll range is essential."},{"path":"/docs/features/row-layout","title":"Row height and pinned rows","description":"Row height, top/bottom pinned rows, full-width rows, and merged cells are separate layout features. Choose based on whether you need persistent summaries or wide detail content."},{"path":"/docs/features/row-drag","title":"Row dragging","description":"Managed row dragging applies user-defined order to Grid data. Manual reordering can conflict with display order determined by sorting."},{"path":"/docs/features/pagination","title":"Page navigation","description":"Pagination controls the number of displayed rows and the current page position. Total data size and page size are separate settings."},{"path":"/docs/features/row-numbers","title":"Row indices and data IDs","description":"Row numbers help users read display order, while order IDs identify business data. Decide whether numbers stay attached to rows after sorting or are reassigned to the current display order."}]}]},{"id":"sort-filter","title":"Sorting and search","blocks":[{"kind":"links","items":[{"path":"/docs/features/sorting","title":"Single and multiple sorting","description":"Sorting changes display order without modifying data values. Single sorting uses one criterion; multiple sorting uses prioritized criteria."},{"path":"/docs/features/column-filters","title":"Conditions for each column","description":"Column filters apply conditions to individual columns. Text, numbers, and dates use different inputs and comparisons; conditions across columns narrow results together."},{"path":"/docs/features/quick-filter","title":"Search across columns","description":"Quick search looks for text across searchable columns without specifying a column. It is a useful starting point when users do not know whether a term is a product name or a region."},{"path":"/docs/features/external-filter","title":"Filter by business conditions","description":"Connect business conditions outside the Grid through a row predicate. Use this when external UI choices, such as incomplete items or items assigned to you, control the table."},{"path":"/docs/features/set-filter","title":"Choose values from a list","description":"This filter lets users choose from distinct, recurring values such as regions or statuses. It presents the available choices more clearly than a Text filter that matches part of a name."},{"path":"/docs/features/multi-filter","title":"Combine multiple filters","description":"Combine multiple filters, such as text search and a value list, within one column. This differs from enabling separate filters on different columns."},{"path":"/docs/features/advanced-filter","title":"Condition trees","description":"Combine conditions across columns in an AND/OR tree to express business rules, such as large APAC orders or orders for a particular product."},{"path":"/docs/features/find","title":"Find cell content","description":"Find highlights matching cells and moves between results without reducing the row list. Use it when users need to keep reading surrounding rows."}]}]},{"id":"selection","title":"Selection and clipboard","blocks":[{"kind":"links","items":[{"path":"/docs/features/row-selection","title":"Row selection","description":"Row selection chooses targets for bulk actions such as approval, export, or assignment. Unlike cell range selection, it selects an entire order."},{"path":"/docs/features/range-selection","title":"Cell range selection","description":"A cell range is a rectangle spanning rows and columns. It defines the scope for copying, pasting, filling, and chart creation; selecting it does not change values."},{"path":"/docs/features/fill-handle","title":"Fill values","description":"The fill handle copies values or extends a pattern from a source range. Both the drag UI and fillRange API account for editability, validation, and history."},{"path":"/docs/features/single-cell-copy","title":"Copy cells","description":"Copy one cell's display text to the system clipboard. Selected text inside a cell editor and a focused Grid cell are different copy targets."},{"path":"/docs/features/row-copy","title":"Copy rows","description":"Copy a row's displayed columns as tab-separated text. Spreadsheet apps paste each column into a separate cell, making it useful for transferring several values from one order."},{"path":"/docs/features/range-clipboard","title":"Copy and paste ranges","description":"Copy values from a rectangular range and paste them in the same row and column arrangement. Targets are determined from the starting cell and remain subject to editability, permissions, and validation."}]}]},{"id":"editing","title":"Editing and validation","blocks":[{"kind":"links","items":[{"path":"/docs/features/cell-editing","title":"Cell and row editing","description":"Cell editing changes one value immediately; full-row editing commits multiple fields as one row operation. editor specifies the input UI, while editable controls write access."},{"path":"/docs/features/batch-editing","title":"Batch editing","description":"Batch editing stages changes to multiple cells for a single commit or cancellation. Distinguish staged values from committed rowData to make the Save action clear."},{"path":"/docs/features/rich-select","title":"Searchable selection editor","description":"This Pro editor narrows a large candidate list through search. Basic Select suits short, fixed lists; Rich Select helps users quickly find an item among many candidates."},{"path":"/docs/features/undo-redo","title":"Edit history","description":"Undo or redo recorded editing transactions. One operation may contain multiple cell changes, so cell counts and history counts are not necessarily equal."},{"path":"/docs/features/validation-rules","title":"Data validation","description":"Use declarative rules to check required values, numeric ranges, string formats, and custom conditions. The default mode may only mark invalid values, so explicitly set invalidEditMode to block saving when required."},{"path":"/docs/features/cell-notes","title":"Cell notes","description":"Cell notes add review context or explanations without changing the value. Standalone notes and collaboration comment threads use different storage and APIs, so choose the appropriate workflow first."}]}]},{"id":"analysis","title":"Grouping, analysis, and formulas","blocks":[{"kind":"links","items":[{"path":"/docs/features/row-grouping","title":"Grouping and aggregation","description":"Row grouping collects source rows with the same region or team into expandable groups. Unlike column groups, which organize headers, row groups change displayed rows and aggregation results."},{"path":"/docs/features/pivot","title":"Pivot analysis","description":"Pivoting divides source orders into row, column, and value axes to create a cross-tabulation. Unlike collapsible row groups, unique values such as statuses become new result columns."},{"path":"/docs/features/tree-data","title":"Tree data","description":"Trees display parent-child data, such as folders or organizations, with indentation and expansion controls. Unlike grouping equal values, the parent relationship already exists in the data."},{"path":"/docs/features/master-detail","title":"Row details","description":"Master/detail expands an order to show its line items or shipping history. The parent row is a summary, and a full-width panel beneath it holds details."},{"path":"/docs/features/formulas","title":"Formula calculation","description":"Formulas evaluate strings beginning with = and display the result in a cell. For example, =SUM(A1:A3) references the first column in the original column definitions and the first three source rows."},{"path":"/docs/features/integrated-charts","title":"Chart selected data","description":"Connect a Grid range to a chart to view the same data as both a table and a graph. Select category and value columns appropriate to the chart type, rather than simply selecting numeric values."}]}]},{"id":"appearance","title":"Appearance and view state","blocks":[{"kind":"links","items":[{"path":"/docs/features/custom-cells","title":"Customize cell appearance","description":"Cell renderers change how data is displayed. Use them for status badges, links, and action buttons while retaining the original values for sorting and filtering."},{"path":"/docs/features/tooltip","title":"Cell tooltips","description":"Tooltips help users briefly inspect truncated names or long descriptions. Do not hide essential errors or guidance exclusively inside tooltips."},{"path":"/docs/features/conditional-formats","title":"Conditional formatting","description":"Conditional formatting changes visual properties such as background and text color based on a value's meaning. Use it to identify low stock or exceeded targets without changing source values or validation results."},{"path":"/docs/features/cell-change-flash","title":"Highlight changes","description":"Cell change flashing briefly highlights cells changed by editing, pasting, or data transactions. It helps users locate recent changes in tables with many live prices or quantities."},{"path":"/docs/features/row-hover","title":"Follow rows","description":"Row hover highlights the row under the pointer to help users read wide tables. It differs from row selection and does not automatically select a row for business operations."},{"path":"/docs/features/overlays","title":"Loading and empty results","description":"Loading and empty-data messages explain why the table has no visible content. Pending requests, no results, and failures are distinct states and should not share one empty screen."}]}]},{"id":"panels","title":"Menus and tool panels","blocks":[{"kind":"links","items":[{"path":"/docs/features/context-menu","title":"Cell context menus","description":"A cell's context menu offers actions such as Copy, Copy row, and Export for the current location. Also provide toolbar or keyboard access to frequently used features."},{"path":"/docs/features/column-menu","title":"Column menu","description":"Column menus place sorting, filtering, and visibility controls near the current column. Keep them distinct from row actions in cell context menus and whole-column-list management in tool panels."},{"path":"/docs/features/tool-panels","title":"Tool panel","description":"Tool panels collect cross-column tasks such as visibility and filter settings. They separate data space from settings space and open only when needed."},{"path":"/docs/features/status-bar","title":"Status and aggregates","description":"The status bar briefly summarizes results such as row counts or range calculations. It helps users understand the visible scope rather than editing data."}]}]},{"id":"import-export","title":"File import and export","blocks":[{"kind":"links","items":[{"path":"/docs/features/csv-import","title":"Import CSV","description":"CSV import converts delimited text into new columns and rows. Unlike a transaction that appends rows, importCsvText replaces columnDefs and rowData."},{"path":"/docs/features/xlsx-import","title":"Excel import","description":"XLSX import reads a workbook and converts the selected sheet into a Grid column-and-row snapshot. The full parsed workbook and the display snapshot are different data."},{"path":"/docs/features/csv-export","title":"CSV export","description":"CSV export creates a text file for exchanging table data with other tools. It does not preserve cell colors, column widths, detail panels, or other visual layout."},{"path":"/docs/features/excel-export","title":"Excel export","description":"Excel export generates XLSX bytes or downloads a file. This Pro feature suits exchanges requiring sheet names and workbook format beyond CSV."},{"path":"/docs/features/pdf-export","title":"PDF export","description":"PDF export fixes the table into a shareable document. Choose CSV or XLSX for further calculation in other apps, and PDF for reading and distribution."}]}]},{"id":"application","title":"App integration and performance","blocks":[{"kind":"links","items":[{"path":"/docs/features/collaboration","title":"Real-time collaboration","description":"Collaboration shares edits, cursors, and presence among users in the same room. A room name alone does not automatically connect devices over the internet."},{"path":"/docs/features/audit-log","title":"View change history","description":"The audit log tracks row, cell, and selection changes and undo/redo transitions. Use it to inspect change history that current values alone cannot reveal."},{"path":"/docs/features/rbac","title":"Cell access control","description":"Cell read and edit policies restrict visible and editable values according to user roles. Hiding a column is different from enforcing data access."},{"path":"/docs/features/snapshots","title":"Data snapshot","description":"Snapshots retain rowData at a point in time for comparison with current data or another snapshot. They differ from view-state APIs that save column widths, filters, and focus."},{"path":"/docs/features/virtualization","title":"Large data sets","description":"Virtualization renders only row and column DOM needed near the viewport. It is separate from row models that fetch only part of the data from a server."},{"path":"/docs/features/wasm-acceleration","title":"Choose a processing engine","description":"Pro engines accelerate supported sorting, filtering, and aggregation. The actual execution path depends on the browser, package, license, and current feature combination."},{"path":"/docs/features/js-processing","title":"JavaScript processing engine","description":"The JavaScript engine is the standard browser execution path for sorting, filtering, and processing table data. Use it as a straightforward starting point for checking deployment environments and feature combinations."},{"path":"/docs/features/fixed-logo","title":"Default logo display","description":"The default logo appears in dedicated space beneath Grid, including Community. It occupies layout space as part of the table rather than overlaying data as a watermark."}]}]}]},{"path":"/docs/options","kind":"index","title":"Grid properties","summary":"Find 136 sy-grid Grid properties entries by name and open their descriptions, types, and examples.","sections":[{"id":"index","title":"Complete list","blocks":[{"kind":"links","items":[{"path":"/docs/options/rowData","title":"rowData","description":"The source row array for the table. Pass a new array to replace a complete query result, or use applyTransaction for partial updates."},{"path":"/docs/options/columnDefs","title":"columnDefs","description":"Defines column data fields, headings, sizes, visibility, and editing. Include column groups to create multi-level headers."},{"path":"/docs/options/context","title":"context","description":"Passes shared app context to callbacks and the Grid API, such as app-managed permissions and services."},{"path":"/docs/options/components","title":"components","description":"Registers local custom renderers, editors, filters, and other components for this Grid."},{"path":"/docs/options/externalFilter","title":"externalFilter","description":"Determines whether each row passes conditions outside the Grid. Supply activation and row predicates or a lifecycle instance."},{"path":"/docs/options/componentTimeoutMs","title":"componentTimeoutMs","description":"Maximum wait for preparing asynchronous user components. Handle delays and failures with componentError."},{"path":"/docs/options/csvImport","title":"csvImport","description":"Provides a CSV import button and column mapping flow. Explain whether importing replaces existing columns and data."},{"path":"/docs/options/pdfFontUrl","title":"pdfFontUrl","description":"An app-hosted TTF/OTF URL for characters absent from the default PDF font, such as Korean characters."},{"path":"/docs/options/pdfAutoFont","title":"pdfAutoFont","description":"Automatically resolves a PDF font when fontBytes is absent. Tries pdfFontUrl first, then local font access where available."},{"path":"/docs/options/formulas","title":"formulas","description":"Evaluates cell strings beginning with = as formulas. A1 references use original column and row order, not display sorting."},{"path":"/docs/options/showFormulas","title":"showFormulas","description":"Displays formula text instead of calculated results for review in a table with formulas enabled."},{"path":"/docs/options/formulaBar","title":"formulaBar","description":"Shows a formula bar for inspecting and editing the active cell's source value or formula. Enter commits; Escape cancels."},{"path":"/docs/options/workbookId","title":"workbookId","description":"Identifies the workbook connecting multiple Grid sheets. Set it together with sheetName for cross-sheet references."},{"path":"/docs/options/sheetName","title":"sheetName","description":"Identifies this Grid sheet within a workbook. Review the effect of renaming it on formulas in other sheets."},{"path":"/docs/options/defaultColDef","title":"defaultColDef","description":"Defaults shared by all columns. Override individual values in columnDefs for specific columns."},{"path":"/docs/options/theme","title":"theme","description":"Sets Grid colors and appearance with a light/dark preset or a token object extending a preset."},{"path":"/docs/options/height","title":"height","description":"Sets the Grid container height as a number or CSS length. Account for virtual scrolling and bottom tools."},{"path":"/docs/options/locale","title":"locale","description":"A Korean, English, or Japanese preset, or an object overriding default messages. Translate source data and column headings in your app."},{"path":"/docs/options/pagination","title":"pagination","description":"Displays the table across multiple pages. Does not change the server data query strategy itself."},{"path":"/docs/options/pageSize","title":"pageSize","description":"Rows displayed per page. Distinguish the displayed row model, including group rows, from source data counts."},{"path":"/docs/options/pageSizeOptions","title":"pageSizeOptions","description":"The numeric choices available in the page-size selector."},{"path":"/docs/options/rowHeight","title":"rowHeight","description":"Default row height in pixels. Choose a size suitable for text, cell editors, and touch targets."},{"path":"/docs/options/rowHeightFn","title":"rowHeightFn","description":"Calculates individual row heights from row indices and data. Call refreshRowHeights when relevant data changes."},{"path":"/docs/options/virtualScroll","title":"virtualScroll","description":"Enables vertical virtualization, rendering rows near the viewport. Does not reduce total data downloads."},{"path":"/docs/options/quickFilter","title":"quickFilter","description":"Displays a global search input. Use quickFilterText for an initial term or an external input."},{"path":"/docs/options/quickFilterText","title":"quickFilterText","description":"The quick-filter search string. Assign a new string from an external app search input too."},{"path":"/docs/options/quickFilterPlaceholder","title":"quickFilterPlaceholder","description":"Guidance for the quick-filter input. Describe the searchable data scope clearly."},{"path":"/docs/options/quickFilterMode","title":"quickFilterMode","description":"Combines terms with and, requiring all matches, or or, requiring any match."},{"path":"/docs/options/quickFilterRegex","title":"quickFilterRegex","description":"Interprets quick-filter input as a regular expression rather than ordinary text."},{"path":"/docs/options/quickFilterDebounce","title":"quickFilterDebounce","description":"Delay before applying quick-filter input. Balances continuous typing throughput and responsiveness."},{"path":"/docs/options/showEmptyState","title":"showEmptyState","description":"Shows an empty-state message when no data exists. Distinguish request failures from valid empty results in your app."},{"path":"/docs/options/emptyMessage","title":"emptyMessage","description":"Message displayed when source data is empty."},{"path":"/docs/options/noMatchesMessage","title":"noMatchesMessage","description":"Message displayed when data exists but no rows match current search or filters."},{"path":"/docs/options/clearFiltersLabel","title":"clearFiltersLabel","description":"Label for the clear-filters action in an empty-results view."},{"path":"/docs/options/loading","title":"loading","description":"Displays app data-request progress. Clear it after both success and failure."},{"path":"/docs/options/loadingMessage","title":"loadingMessage","description":"Description shown while loading."},{"path":"/docs/options/loadingMode","title":"loadingMode","description":"Selects the Grid loading indicator. See LoadingMode for supported values."},{"path":"/docs/options/minLoadingDuration","title":"minLoadingDuration","description":"Minimum loading-indicator duration to avoid brief flashes."},{"path":"/docs/options/datasource","title":"datasource","description":"Data provider for the infinite row model. Complete each requested range through its success or failure callback."},{"path":"/docs/options/cacheBlockSize","title":"cacheBlockSize","description":"Block size for requesting and caching remote rows."},{"path":"/docs/options/maxBlocksInCache","title":"maxBlocksInCache","description":"Maximum cached blocks in the infinite row model. Balances memory use against repeat queries."},{"path":"/docs/options/serverSideDatasource","title":"serverSideDatasource","description":"Data provider for a row model where the server handles sorting, filtering, grouping, and related requests."},{"path":"/docs/options/serverSideGroupCols","title":"serverSideGroupCols","description":"Columns grouped on the server, ordered from outermost group inward. An empty array represents flat data."},{"path":"/docs/options/serverSideTransactionWaitMs","title":"serverSideTransactionWaitMs","description":"Delay for batching asynchronous server row transactions."},{"path":"/docs/options/viewportDatasource","title":"viewportDatasource","description":"Viewport model supplying data for visible row ranges. Implement initialization, range changes, and cleanup."},{"path":"/docs/options/rowDragManaged","title":"rowDragManaged","description":"Lets the Grid manage reordering from row dragging. Review restrictions with sorting, filtering, and other row models."},{"path":"/docs/options/spanExportMode","title":"spanExportMode","description":"Chooses whether merged-cell copying and output include the origin value once or repeat it at every position."},{"path":"/docs/options/rowDragMultiRow","title":"rowDragMultiRow","description":"Allows dragging multiple selected rows together. Also configure rowDrag on a column and row selection."},{"path":"/docs/options/rowDragText","title":"rowDragText","description":"Builds drag feedback text from the row count and default label."},{"path":"/docs/options/cellChangeFlash","title":"cellChangeFlash","description":"Briefly highlights cells changed by editing, pasting, or transactions."},{"path":"/docs/options/enableCellChangeFlash","title":"enableCellChangeFlash","description":"Compatibility alias for cell change flashing. Do not assign a value that conflicts with cellChangeFlash."},{"path":"/docs/options/contextMenu","title":"contextMenu","description":"Displays a cell context menu. Use built-in copy, row copy, and CSV actions or replace the list through a callback."},{"path":"/docs/options/columnMenu","title":"columnMenu","description":"Enables a column action menu in column headers."},{"path":"/docs/options/find","title":"find","description":"Finds and navigates matching positions in loaded, readable cells. This is not a search of the complete server data set."},{"path":"/docs/options/cellNotes","title":"cellNotes","description":"Provides standalone notes for readable cells with stable IDs. Requires a storage adapter and Pro entitlement."},{"path":"/docs/options/cellNotesAdapter","title":"cellNotesAdapter","description":"Implements standalone note loading and atomic revision-based saving. Does not automatically fall back to temporary built-in storage."},{"path":"/docs/options/batchEditToolbar","title":"batchEditToolbar","description":"Displays tools for starting, committing, and cancelling batch edits."},{"path":"/docs/options/columnMenuItems","title":"columnMenuItems","description":"Builds column menu items from the current column context."},{"path":"/docs/options/contextMenuItemsCallback","title":"contextMenuItemsCallback","description":"Returns cell context-menu items. Replaces the entire default list rather than appending to it."},{"path":"/docs/options/keyboardNavigation","title":"keyboardNavigation","description":"Configures keyboard navigation across cells and internal Grid features."},{"path":"/docs/options/rowSelection","title":"rowSelection","description":"Disables row selection or enables single/multiple selection. Independent of cell range selection."},{"path":"/docs/options/getRowId","title":"getRowId","description":"Returns a stable, unique row ID. The same business row must retain its ID after sorting, filtering, and editing."},{"path":"/docs/options/selectionCheckbox","title":"selectionCheckbox","description":"Displays row selection checkboxes."},{"path":"/docs/options/showSelectionCheckbox","title":"showSelectionCheckbox","description":"Compatibility alias for selection checkboxes. Avoid conflicts with selectionCheckbox."},{"path":"/docs/options/shiftClickAdditive","title":"shiftClickAdditive","description":"Chooses whether Shift-click range selection adds to the existing selection."},{"path":"/docs/options/rowHover","title":"rowHover","description":"Selects CSS-only hover highlighting, stateful hover with events, or no hover."},{"path":"/docs/options/resizableColumns","title":"resizableColumns","description":"Allows users to resize columns by dragging their boundaries."},{"path":"/docs/options/reorderableColumns","title":"reorderableColumns","description":"Allows users to reorder columns by dragging headers."},{"path":"/docs/options/columnHiding","title":"columnHiding","description":"Enables column hiding. Also provide a menu or panel for restoring hidden columns."},{"path":"/docs/options/hideableColumns","title":"hideableColumns","description":"Compatibility setting for column hiding. Keep it consistent with columnHiding."},{"path":"/docs/options/autoSizeOnDoubleClick","title":"autoSizeOnDoubleClick","description":"Autosizes a column to its content when its boundary is double-clicked."},{"path":"/docs/options/multiSort","title":"multiSort","description":"Enables sorting by multiple columns. The sort model order defines priority."},{"path":"/docs/options/enableMultiSort","title":"enableMultiSort","description":"Compatibility alias for multiple sorting. Keep it consistent with multiSort."},{"path":"/docs/options/headerFilterRow","title":"headerFilterRow","description":"Displays a row of per-column filter controls below the headers."},{"path":"/docs/options/conditionBuilder","title":"conditionBuilder","description":"Displays a condition builder combining conditions with AND and OR."},{"path":"/docs/options/virtualizeColumns","title":"virtualizeColumns","description":"Enables horizontal virtualization, rendering columns near the viewport."},{"path":"/docs/options/groupBy","title":"groupBy","description":"Groups rows with equal values. A string array creates nested groups in array order."},{"path":"/docs/options/pivotMode","title":"pivotMode","description":"Enables pivot aggregation across row, column, and value axes. Configure all three axes too."},{"path":"/docs/options/pivotRowGroupColumns","title":"pivotRowGroupColumns","description":"Fields forming the left-hand row axis of pivot results."},{"path":"/docs/options/pivotColumns","title":"pivotColumns","description":"Fields whose distinct values expand into pivot result columns at the top."},{"path":"/docs/options/pivotValueColumns","title":"pivotValueColumns","description":"Value fields aggregated at each pivot intersection."},{"path":"/docs/options/pivotAggFuncs","title":"pivotAggFuncs","description":"Aggregate function names for each value field. Supports built-in and registered custom functions."},{"path":"/docs/options/pivotSubtotals","title":"pivotSubtotals","description":"Hides nested pivot subtotals or positions them above or below expanded groups."},{"path":"/docs/options/pivotGrandTotal","title":"pivotGrandTotal","description":"Hides pivot grand totals or positions them at the top or bottom."},{"path":"/docs/options/pivotPanelShow","title":"pivotPanelShow","description":"Shows the pivot panel always, only in pivot mode, or never."},{"path":"/docs/options/pivotPanel","title":"pivotPanel","description":"Compatibility boolean for the pivot panel. true corresponds to pivotPanelShow: always."},{"path":"/docs/options/groupPanel","title":"groupPanel","description":"Displays a panel where users drag columns to configure row grouping."},{"path":"/docs/options/getDataPath","title":"getDataPath","description":"Builds a tree from a path array from root to the current node. Takes precedence over ID-based tree settings."},{"path":"/docs/options/treeIdField","title":"treeIdField","description":"Node ID field in a parent-ID tree. Configure together with treeParentField."},{"path":"/docs/options/treeParentField","title":"treeParentField","description":"Parent node ID field in a parent-ID tree."},{"path":"/docs/options/treeLabelField","title":"treeLabelField","description":"Display label field in a parent-ID tree. Defaults to the ID when omitted."},{"path":"/docs/options/masterDetail","title":"masterDetail","description":"Expands source rows into full-width detail panels, such as items beneath orders."},{"path":"/docs/options/detailRowHeight","title":"detailRowHeight","description":"Height of expanded detail panels in pixels."},{"path":"/docs/options/detailCellRenderer","title":"detailCellRenderer","description":"Builds detail content using the text, html, or vnode contract. Takes precedence over declarative nested Grids."},{"path":"/docs/options/detailGridOptions","title":"detailGridOptions","description":"Columns and options for an automatically generated nested Grid in the detail panel. Use with getDetailRowData."},{"path":"/docs/options/getDetailRowData","title":"getDetailRowData","description":"Returns detail rows for the expanded parent as an array or Promise. Reuses the result while the row remains expanded."},{"path":"/docs/options/detailNestingLevel","title":"detailNestingLevel","description":"Depth of nested detail Grids. Set by the parent for generated children and used to enforce recursion limits."},{"path":"/docs/options/rangeSelection","title":"rangeSelection","description":"Enables rectangular cell selection, independently of row selection. Supplies ranges for copying, filling, and chart integration."},{"path":"/docs/options/clipboardEscapeFormulae","title":"clipboardEscapeFormulae","description":"Escapes spreadsheet formula prefixes in outgoing clipboard text."},{"path":"/docs/options/statusBar","title":"statusBar","description":"Displays a basic row count or specified status panels below the table. true does not enable every aggregation panel."},{"path":"/docs/options/sideBar","title":"sideBar","description":"Configures column/filter tool panels and the initially open panel. true provides tabs; a string opens the specified panel."},{"path":"/docs/options/rows","title":"rows","description":"Compatibility input for source rows. Prefer rowData in new configurations and avoid conflicting inputs."},{"path":"/docs/options/columns","title":"columns","description":"Compatibility input for column definitions. Prefer columnDefs in new configurations."},{"path":"/docs/options/maxRendered","title":"maxRendered","description":"Limits the number of rows rendered at once, independently of the total data count."},{"path":"/docs/options/engine","title":"engine","description":"Requests automatic selection, standard JavaScript, or Pro processing. Inspect the actual result with getActiveTier."},{"path":"/docs/options/proThreshold","title":"proThreshold","description":"Data-size threshold for considering the Pro path during automatic engine selection."},{"path":"/docs/options/unavailable","title":"unavailable","description":"Chooses fallback execution or an error when the requested engine is unavailable."},{"path":"/docs/options/brandLogo","title":"brandLogo","description":"Specifies the default logo, none, or a supported image data URL. Removal and replacement require grid.branding entitlement. Branding appears at the bottom right."},{"path":"/docs/options/collaborationRoom","title":"collaborationRoom","description":"Collaboration room ID for sharing edits and presence. Connecting multiple devices requires remote service configuration."},{"path":"/docs/options/realtimeUrl","title":"realtimeUrl","description":"WebSocket URL for remote collaboration. When omitted, collaboration is limited to a same-page/process demo scope."},{"path":"/docs/options/collabUserName","title":"collabUserName","description":"User name shown to other collaboration participants."},{"path":"/docs/options/collabUserColor","title":"collabUserColor","description":"Distinctive color for the participant's cursor and presence indicators."},{"path":"/docs/options/collabPresence","title":"collabPresence","description":"Configures participant position and presence indicators."},{"path":"/docs/options/collabConflictUi","title":"collabConflictUi","description":"Configures user-facing conflict guidance for concurrent edits."},{"path":"/docs/options/auditLog","title":"auditLog","description":"Records row, cell, selection, and edit-history transitions in an audit log. Disabled by default and separate from long-term server retention."},{"path":"/docs/options/auditLogMax","title":"auditLogMax","description":"Maximum audit records retained in memory. Oldest records are removed when exceeded."},{"path":"/docs/options/canReadCell","title":"canReadCell","description":"Synchronous permission callback determining whether a cell can be read. Use alongside server access control."},{"path":"/docs/options/maskedCellValue","title":"maskedCellValue","description":"Masking text displayed in place of restricted cells."},{"path":"/docs/options/canEditCell","title":"canEditCell","description":"Determines edit permission from the row, column, current value, and app permissions."},{"path":"/docs/options/conditionalFormats","title":"conditionalFormats","description":"Rules changing matching cells' visual properties, such as backgrounds and text. Does not mutate source values."},{"path":"/docs/options/conditionalFormatUi","title":"conditionalFormatUi","description":"Provides a UI for adjusting conditional formatting rules."},{"path":"/docs/options/validationRules","title":"validationRules","description":"Defines required values, ranges, lists, patterns, custom validation, and other input checks."},{"path":"/docs/options/invalidEditMode","title":"invalidEditMode","description":"Selects allow to apply invalid values with errors, revert to restore previous values, or block to prevent commits."},{"path":"/docs/options/maxSnapshots","title":"maxSnapshots","description":"Maximum data snapshots retained in memory. Older snapshots may be removed."},{"path":"/docs/options/collabPersistence","title":"collabPersistence","description":"Disables local collaboration persistence or uses IndexedDB. Does not replace server backups."},{"path":"/docs/options/initialState","title":"initialState","description":"Versioned view state applied once during initial Grid setup. Use setState for runtime restoration."},{"path":"/docs/options/editType","title":"editType","description":"Selects single-cell editing or editing multiple cells as one row operation."},{"path":"/docs/options/enableFillHandle","title":"enableFillHandle","description":"Enables the fill handle at the corner of a selected range."},{"path":"/docs/options/fillHandleAxes","title":"fillHandleAxes","description":"Allows horizontal, vertical, or bidirectional filling."},{"path":"/docs/options/fillHandleMode","title":"fillHandleMode","description":"Chooses copying existing values or extending a sequence when filling."},{"path":"/docs/options/alignedGrids","title":"alignedGrids","description":"Specifies linked Grids for synchronized column layouts and related state. Inspect connection results and cycle restrictions in aligned Grid reports."},{"path":"/docs/options/isFullWidthRow","title":"isFullWidthRow","description":"Determines whether a row uses a full-width layout instead of individual column cells."},{"path":"/docs/options/fullWidthCellRenderer","title":"fullWidthCellRenderer","description":"Renderer for full-width row content. Uses a different input contract from regular cell renderers."},{"path":"/docs/options/fullWidthRowHeight","title":"fullWidthRowHeight","description":"Fixed height or per-row height function for full-width rows."},{"path":"/docs/options/pinnedTopRowData","title":"pinnedTopRowData","description":"Row data pinned above the scrolling table."},{"path":"/docs/options/pinnedBottomRowData","title":"pinnedBottomRowData","description":"Row data pinned below the scrolling table."}]}]}]},{"path":"/docs/options/rowData","kind":"option","title":"rowData","summary":"The source row array for the table. Pass a new array to replace a complete query result, or use applyTransaction for partial updates.","member":{"name":"rowData","attribute":"row-data","type":"GridData[]","kind":"property","values":[],"default":"undefined","description":"The source row array for the table. Pass a new array to replace a complete query result, or use applyTransaction for partial updates."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"The source row array for the table. Pass a new array to replace a complete query result, or use applyTransaction for partial updates."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"rowData: GridData[]","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","rowData"],["HTML attribute","row-data"],["Default","undefined"],["Input type","GridData[]"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridData","title":"GridData","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/data-updates","title":"Data updates","description":"Replace rowData when receiving a complete query result. For partial changes, pass add, update, and remove to applyTransaction. Updates match through getRowId, not display positions."}]}]}]},{"path":"/docs/options/columnDefs","kind":"option","title":"columnDefs","summary":"Defines column data fields, headings, sizes, visibility, and editing. Include column groups to create multi-level headers.","member":{"name":"columnDefs","attribute":"column-defs","type":"Array<ColumnDef | GridColumnGroupDef>","kind":"property","values":[],"default":"undefined","description":"Defines column data fields, headings, sizes, visibility, and editing. Include column groups to create multi-level headers."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Defines column data fields, headings, sizes, visibility, and editing. Include column groups to create multi-level headers."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"columnDefs: Array<ColumnDef | GridColumnGroupDef>","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","columnDefs"],["HTML attribute","column-defs"],["Default","undefined"],["Input type","Array<ColumnDef | GridColumnGroupDef>"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/ColumnDef","title":"ColumnDef","description":""},{"path":"/docs/types/GridColumnGroupDef","title":"GridColumnGroupDef","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/data-updates","title":"Data updates","description":"Replace rowData when receiving a complete query result. For partial changes, pass add, update, and remove to applyTransaction. Updates match through getRowId, not display positions."}]}]}]},{"path":"/docs/options/context","kind":"option","title":"context","summary":"Passes shared app context to callbacks and the Grid API, such as app-managed permissions and services.","member":{"name":"context","attribute":"context","type":"unknown","kind":"property","values":[],"default":"undefined","description":"Passes shared app context to callbacks and the Grid API, such as app-managed permissions and services."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Passes shared app context to callbacks and the Grid API, such as app-managed permissions and services."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"context: unknown","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","context"],["HTML attribute","context"],["Default","undefined"],["Input type","unknown"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/guides/data-event-access","title":"Data and events","description":"Grid APIs read or change the current state; events report the results of user interactions or data changes. Combine them to build save buttons, detail panels, and change histories."}]}]}]},{"path":"/docs/options/components","kind":"option","title":"components","summary":"Registers local custom renderers, editors, filters, and other components for this Grid.","member":{"name":"components","attribute":"components","type":"GridComponentLocalDefinitions<\n    GridData,\n    unknown,\n    unknown,\n    unknown\n  >","kind":"property","values":[],"default":"undefined","description":"Registers local custom renderers, editors, filters, and other components for this Grid."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Registers local custom renderers, editors, filters, and other components for this Grid."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"components: GridComponentLocalDefinitions<\n    GridData,\n    unknown,\n    unknown,\n    unknown\n  >","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","components"],["HTML attribute","components"],["Default","undefined"],["Input type","GridComponentLocalDefinitions<\n    GridData,\n    unknown,\n    unknown,\n    unknown\n  >"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridComponentLocalDefinitions","title":"GridComponentLocalDefinitions","description":""},{"path":"/docs/types/GridData","title":"GridData","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/custom-cells","title":"Customize cell appearance","description":"Cell renderers change how data is displayed. Use them for status badges, links, and action buttons while retaining the original values for sorting and filtering."}]}]}]},{"path":"/docs/options/externalFilter","kind":"option","title":"externalFilter","summary":"Determines whether each row passes conditions outside the Grid. Supply activation and row predicates or a lifecycle instance.","member":{"name":"externalFilter","attribute":"external-filter","type":"| GridExternalFilterCallbacks<GridData>\n    | GridExternalFilterInstance<GridData, unknown>","kind":"property","values":[],"default":"undefined","description":"Determines whether each row passes conditions outside the Grid. Supply activation and row predicates or a lifecycle instance."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Determines whether each row passes conditions outside the Grid. Supply activation and row predicates or a lifecycle instance."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"externalFilter: | GridExternalFilterCallbacks<GridData>\n    | GridExternalFilterInstance<GridData, unknown>","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","externalFilter"],["HTML attribute","external-filter"],["Default","undefined"],["Input type","| GridExternalFilterCallbacks<GridData>\n    | GridExternalFilterInstance<GridData, unknown>"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridExternalFilterCallbacks","title":"GridExternalFilterCallbacks","description":""},{"path":"/docs/types/GridData","title":"GridData","description":""},{"path":"/docs/types/GridExternalFilterInstance","title":"GridExternalFilterInstance","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/external-filter","title":"Filter by business conditions","description":"Connect business conditions outside the Grid through a row predicate. Use this when external UI choices, such as incomplete items or items assigned to you, control the table."}]}]}]},{"path":"/docs/options/componentTimeoutMs","kind":"option","title":"componentTimeoutMs","summary":"Maximum wait for preparing asynchronous user components. Handle delays and failures with componentError.","member":{"name":"componentTimeoutMs","attribute":"component-timeout-ms","type":"number","kind":"number","values":[],"default":"5_000","description":"Maximum wait for preparing asynchronous user components. Handle delays and failures with componentError."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Maximum wait for preparing asynchronous user components. Handle delays and failures with componentError."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"componentTimeoutMs: number","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","componentTimeoutMs"],["HTML attribute","component-timeout-ms"],["Default","5_000"],["Input type","number"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the component-timeout-ms attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/custom-cells","title":"Customize cell appearance","description":"Cell renderers change how data is displayed. Use them for status badges, links, and action buttons while retaining the original values for sorting and filtering."}]}]}]},{"path":"/docs/options/csvImport","kind":"option","title":"csvImport","summary":"Provides a CSV import button and column mapping flow. Explain whether importing replaces existing columns and data.","member":{"name":"csvImport","attribute":"csv-import","type":"boolean","kind":"boolean","values":[],"default":"false","description":"Provides a CSV import button and column mapping flow. Explain whether importing replaces existing columns and data."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Provides a CSV import button and column mapping flow. Explain whether importing replaces existing columns and data."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"csvImport: boolean","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","csvImport"],["HTML attribute","csv-import"],["Default","false"],["Input type","boolean"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the csv-import attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/csv-import","title":"Import CSV","description":"CSV import converts delimited text into new columns and rows. Unlike a transaction that appends rows, importCsvText replaces columnDefs and rowData."}]}]}]},{"path":"/docs/options/pdfFontUrl","kind":"option","title":"pdfFontUrl","summary":"An app-hosted TTF/OTF URL for characters absent from the default PDF font, such as Korean characters.","member":{"name":"pdfFontUrl","attribute":"pdf-font-url","type":"string","kind":"string","values":[],"default":"undefined","description":"An app-hosted TTF/OTF URL for characters absent from the default PDF font, such as Korean characters."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"An app-hosted TTF/OTF URL for characters absent from the default PDF font, such as Korean characters."},{"kind":"paragraph","text":"API for Pro features: Built-in PDF export"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"pdfFontUrl: string","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","pdfFontUrl"],["HTML attribute","pdf-font-url"],["Default","undefined"],["Input type","string"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the pdf-font-url attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/pdf-export","title":"PDF export","description":"PDF export fixes the table into a shareable document. Choose CSV or XLSX for further calculation in other apps, and PDF for reading and distribution."}]}]}]},{"path":"/docs/options/pdfAutoFont","kind":"option","title":"pdfAutoFont","summary":"Automatically resolves a PDF font when fontBytes is absent. Tries pdfFontUrl first, then local font access where available.","member":{"name":"pdfAutoFont","attribute":"pdf-auto-font","type":"boolean","kind":"boolean","values":[],"default":"true","description":"Automatically resolves a PDF font when fontBytes is absent. Tries pdfFontUrl first, then local font access where available."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Automatically resolves a PDF font when fontBytes is absent. Tries pdfFontUrl first, then local font access where available."},{"kind":"paragraph","text":"API for Pro features: Built-in PDF export"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"pdfAutoFont: boolean","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","pdfAutoFont"],["HTML attribute","pdf-auto-font"],["Default","true"],["Input type","boolean"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the pdf-auto-font attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/pdf-export","title":"PDF export","description":"PDF export fixes the table into a shareable document. Choose CSV or XLSX for further calculation in other apps, and PDF for reading and distribution."}]}]}]},{"path":"/docs/options/formulas","kind":"option","title":"formulas","summary":"Evaluates cell strings beginning with = as formulas. A1 references use original column and row order, not display sorting.","member":{"name":"formulas","attribute":"formulas","type":"boolean","kind":"boolean","values":[],"default":"false","description":"Evaluates cell strings beginning with = as formulas. A1 references use original column and row order, not display sorting."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Evaluates cell strings beginning with = as formulas. A1 references use original column and row order, not display sorting."},{"kind":"paragraph","text":"API for Pro features: Built-in formulas, references, dependency recalculation and calculated columns"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"formulas: boolean","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","formulas"],["HTML attribute","formulas"],["Default","false"],["Input type","boolean"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the formulas attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/formulas","title":"Formula calculation","description":"Formulas evaluate strings beginning with = and display the result in a cell. For example, =SUM(A1:A3) references the first column in the original column definitions and the first three source rows."}]}]}]},{"path":"/docs/options/showFormulas","kind":"option","title":"showFormulas","summary":"Displays formula text instead of calculated results for review in a table with formulas enabled.","member":{"name":"showFormulas","attribute":"show-formulas","type":"boolean","kind":"boolean","values":[],"default":"false","description":"Displays formula text instead of calculated results for review in a table with formulas enabled."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Displays formula text instead of calculated results for review in a table with formulas enabled."},{"kind":"paragraph","text":"API for Pro features: Built-in formulas, references, dependency recalculation and calculated columns"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"showFormulas: boolean","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","showFormulas"],["HTML attribute","show-formulas"],["Default","false"],["Input type","boolean"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the show-formulas attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/formulas","title":"Formula calculation","description":"Formulas evaluate strings beginning with = and display the result in a cell. For example, =SUM(A1:A3) references the first column in the original column definitions and the first three source rows."}]}]}]},{"path":"/docs/options/formulaBar","kind":"option","title":"formulaBar","summary":"Shows a formula bar for inspecting and editing the active cell's source value or formula. Enter commits; Escape cancels.","member":{"name":"formulaBar","attribute":"formula-bar","type":"boolean","kind":"boolean","values":[],"default":"false","description":"Shows a formula bar for inspecting and editing the active cell's source value or formula. Enter commits; Escape cancels."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Shows a formula bar for inspecting and editing the active cell's source value or formula. Enter commits; Escape cancels."},{"kind":"paragraph","text":"API for Pro features: Built-in formulas, references, dependency recalculation and calculated columns"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"formulaBar: boolean","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","formulaBar"],["HTML attribute","formula-bar"],["Default","false"],["Input type","boolean"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the formula-bar attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/formulas","title":"Formula calculation","description":"Formulas evaluate strings beginning with = and display the result in a cell. For example, =SUM(A1:A3) references the first column in the original column definitions and the first three source rows."}]}]}]},{"path":"/docs/options/workbookId","kind":"option","title":"workbookId","summary":"Identifies the workbook connecting multiple Grid sheets. Set it together with sheetName for cross-sheet references.","member":{"name":"workbookId","attribute":"workbook-id","type":"string","kind":"string","values":[],"default":"undefined","description":"Identifies the workbook connecting multiple Grid sheets. Set it together with sheetName for cross-sheet references."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Identifies the workbook connecting multiple Grid sheets. Set it together with sheetName for cross-sheet references."},{"kind":"paragraph","text":"API for Pro features: Built-in formulas, references, dependency recalculation and calculated columns"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"workbookId: string","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","workbookId"],["HTML attribute","workbook-id"],["Default","undefined"],["Input type","string"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the workbook-id attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/formulas","title":"Formula calculation","description":"Formulas evaluate strings beginning with = and display the result in a cell. For example, =SUM(A1:A3) references the first column in the original column definitions and the first three source rows."}]}]}]},{"path":"/docs/options/sheetName","kind":"option","title":"sheetName","summary":"Identifies this Grid sheet within a workbook. Review the effect of renaming it on formulas in other sheets.","member":{"name":"sheetName","attribute":"sheet-name","type":"string","kind":"string","values":[],"default":"undefined","description":"Identifies this Grid sheet within a workbook. Review the effect of renaming it on formulas in other sheets."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Identifies this Grid sheet within a workbook. Review the effect of renaming it on formulas in other sheets."},{"kind":"paragraph","text":"API for Pro features: Built-in formulas, references, dependency recalculation and calculated columns"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"sheetName: string","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","sheetName"],["HTML attribute","sheet-name"],["Default","undefined"],["Input type","string"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the sheet-name attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/formulas","title":"Formula calculation","description":"Formulas evaluate strings beginning with = and display the result in a cell. For example, =SUM(A1:A3) references the first column in the original column definitions and the first three source rows."}]}]}]},{"path":"/docs/options/defaultColDef","kind":"option","title":"defaultColDef","summary":"Defaults shared by all columns. Override individual values in columnDefs for specific columns.","member":{"name":"defaultColDef","attribute":"default-col-def","type":"Partial<ColumnDef>","kind":"property","values":[],"default":"undefined","description":"Defaults shared by all columns. Override individual values in columnDefs for specific columns."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Defaults shared by all columns. Override individual values in columnDefs for specific columns."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"defaultColDef: Partial<ColumnDef>","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","defaultColDef"],["HTML attribute","default-col-def"],["Default","undefined"],["Input type","Partial<ColumnDef>"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/ColumnDef","title":"ColumnDef","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/data-updates","title":"Data updates","description":"Replace rowData when receiving a complete query result. For partial changes, pass add, update, and remove to applyTransaction. Updates match through getRowId, not display positions."}]}]}]},{"path":"/docs/options/theme","kind":"option","title":"theme","summary":"Sets Grid colors and appearance with a light/dark preset or a token object extending a preset.","member":{"name":"theme","attribute":"theme","type":"GridTheme","kind":"property","values":["alpine","balham","alpine-dark","balham-dark"],"default":"'alpine'","description":"Sets Grid colors and appearance with a light/dark preset or a token object extending a preset."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Sets Grid colors and appearance with a light/dark preset or a token object extending a preset."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"theme: GridTheme","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","theme"],["HTML attribute","theme"],["Default","'alpine'"],["Input type","GridTheme"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridTheme","title":"GridTheme","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/guides/theming","title":"Themes for your app","description":"Grid themes coordinate backgrounds, lines, text, and selection states inside the table. They define the table's reading environment without replacing the page background."}]}]}]},{"path":"/docs/options/height","kind":"option","title":"height","summary":"Sets the Grid container height as a number or CSS length. Account for virtual scrolling and bottom tools.","member":{"name":"height","attribute":"height","type":"string | number","kind":"property","values":[],"default":"undefined","description":"Sets the Grid container height as a number or CSS length. Account for virtual scrolling and bottom tools."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Sets the Grid container height as a number or CSS length. Account for virtual scrolling and bottom tools."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"height: string | number","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","height"],["HTML attribute","height"],["Default","undefined"],["Input type","string | number"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/virtualization","title":"Large data sets","description":"Virtualization renders only row and column DOM needed near the viewport. It is separate from row models that fetch only part of the data from a server."}]}]}]},{"path":"/docs/options/locale","kind":"option","title":"locale","summary":"A Korean, English, or Japanese preset, or an object overriding default messages. Translate source data and column headings in your app.","member":{"name":"locale","attribute":"locale","type":"GridLocale","kind":"property","values":["en","ko","ja"],"default":"'en'","description":"A Korean, English, or Japanese preset, or an object overriding default messages. Translate source data and column headings in your app."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"A Korean, English, or Japanese preset, or an object overriding default messages. Translate source data and column headings in your app."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"locale: GridLocale","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","locale"],["HTML attribute","locale"],["Default","'en'"],["Input type","GridLocale"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridLocale","title":"GridLocale","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/guides/keyboard-a11y-i18n","title":"Keyboard and localization","description":"Grid is a workspace for navigating many rows and columns with a keyboard. Cell navigation, editing, menus, and paths to app buttons outside the table must all be understandable."}]}]}]},{"path":"/docs/options/pagination","kind":"option","title":"pagination","summary":"Displays the table across multiple pages. Does not change the server data query strategy itself.","member":{"name":"pagination","attribute":"pagination","type":"boolean","kind":"boolean","values":[],"default":"false","description":"Displays the table across multiple pages. Does not change the server data query strategy itself."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Displays the table across multiple pages. Does not change the server data query strategy itself."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"pagination: boolean","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","pagination"],["HTML attribute","pagination"],["Default","false"],["Input type","boolean"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the pagination attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/pagination","title":"Page navigation","description":"Pagination controls the number of displayed rows and the current page position. Total data size and page size are separate settings."}]}]}]},{"path":"/docs/options/pageSize","kind":"option","title":"pageSize","summary":"Rows displayed per page. Distinguish the displayed row model, including group rows, from source data counts.","member":{"name":"pageSize","attribute":"page-size","type":"number","kind":"number","values":[],"default":"DEFAULT_PAGE_SIZE","description":"Rows displayed per page. Distinguish the displayed row model, including group rows, from source data counts."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Rows displayed per page. Distinguish the displayed row model, including group rows, from source data counts."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"pageSize: number","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","pageSize"],["HTML attribute","page-size"],["Default","DEFAULT_PAGE_SIZE"],["Input type","number"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the page-size attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/pagination","title":"Page navigation","description":"Pagination controls the number of displayed rows and the current page position. Total data size and page size are separate settings."}]}]}]},{"path":"/docs/options/pageSizeOptions","kind":"option","title":"pageSizeOptions","summary":"The numeric choices available in the page-size selector.","member":{"name":"pageSizeOptions","attribute":"page-size-options","type":"readonly number[]","kind":"property","values":[],"default":"DEFAULT_PAGE_SIZE_OPTIONS","description":"The numeric choices available in the page-size selector."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"The numeric choices available in the page-size selector."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"pageSizeOptions: readonly number[]","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","pageSizeOptions"],["HTML attribute","page-size-options"],["Default","DEFAULT_PAGE_SIZE_OPTIONS"],["Input type","readonly number[]"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/pagination","title":"Page navigation","description":"Pagination controls the number of displayed rows and the current page position. Total data size and page size are separate settings."}]}]}]},{"path":"/docs/options/rowHeight","kind":"option","title":"rowHeight","summary":"Default row height in pixels. Choose a size suitable for text, cell editors, and touch targets.","member":{"name":"rowHeight","attribute":"row-height","type":"number","kind":"number","values":[],"default":"32","description":"Default row height in pixels. Choose a size suitable for text, cell editors, and touch targets."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Default row height in pixels. Choose a size suitable for text, cell editors, and touch targets."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"rowHeight: number","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","rowHeight"],["HTML attribute","row-height"],["Default","32"],["Input type","number"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the row-height attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/virtualization","title":"Large data sets","description":"Virtualization renders only row and column DOM needed near the viewport. It is separate from row models that fetch only part of the data from a server."}]}]}]},{"path":"/docs/options/rowHeightFn","kind":"option","title":"rowHeightFn","summary":"Calculates individual row heights from row indices and data. Call refreshRowHeights when relevant data changes.","member":{"name":"rowHeightFn","attribute":"row-height-fn","type":"(index: number, row: GridData) => number","kind":"property","values":[],"default":"undefined","description":"Calculates individual row heights from row indices and data. Call refreshRowHeights when relevant data changes."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Calculates individual row heights from row indices and data. Call refreshRowHeights when relevant data changes."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"rowHeightFn: (index: number, row: GridData) => number","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","rowHeightFn"],["HTML attribute","row-height-fn"],["Default","undefined"],["Input type","(index: number, row: GridData) => number"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridData","title":"GridData","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/virtualization","title":"Large data sets","description":"Virtualization renders only row and column DOM needed near the viewport. It is separate from row models that fetch only part of the data from a server."}]}]}]},{"path":"/docs/options/virtualScroll","kind":"option","title":"virtualScroll","summary":"Enables vertical virtualization, rendering rows near the viewport. Does not reduce total data downloads.","member":{"name":"virtualScroll","attribute":"virtual-scroll","type":"boolean","kind":"boolean","values":[],"default":"true","description":"Enables vertical virtualization, rendering rows near the viewport. Does not reduce total data downloads."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Enables vertical virtualization, rendering rows near the viewport. Does not reduce total data downloads."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"virtualScroll: boolean","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","virtualScroll"],["HTML attribute","virtual-scroll"],["Default","true"],["Input type","boolean"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the virtual-scroll attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/virtualization","title":"Large data sets","description":"Virtualization renders only row and column DOM needed near the viewport. It is separate from row models that fetch only part of the data from a server."}]}]}]},{"path":"/docs/options/quickFilter","kind":"option","title":"quickFilter","summary":"Displays a global search input. Use quickFilterText for an initial term or an external input.","member":{"name":"quickFilter","attribute":"quick-filter","type":"boolean","kind":"boolean","values":[],"default":"false","description":"Displays a global search input. Use quickFilterText for an initial term or an external input."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Displays a global search input. Use quickFilterText for an initial term or an external input."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"quickFilter: boolean","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","quickFilter"],["HTML attribute","quick-filter"],["Default","false"],["Input type","boolean"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the quick-filter attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/quick-filter","title":"Search across columns","description":"Quick search looks for text across searchable columns without specifying a column. It is a useful starting point when users do not know whether a term is a product name or a region."}]}]}]},{"path":"/docs/options/quickFilterText","kind":"option","title":"quickFilterText","summary":"The quick-filter search string. Assign a new string from an external app search input too.","member":{"name":"quickFilterText","attribute":"quick-filter-text","type":"string","kind":"string","values":[],"default":"''","description":"The quick-filter search string. Assign a new string from an external app search input too."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"The quick-filter search string. Assign a new string from an external app search input too."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"quickFilterText: string","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","quickFilterText"],["HTML attribute","quick-filter-text"],["Default","''"],["Input type","string"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the quick-filter-text attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/quick-filter","title":"Search across columns","description":"Quick search looks for text across searchable columns without specifying a column. It is a useful starting point when users do not know whether a term is a product name or a region."}]}]}]},{"path":"/docs/options/quickFilterPlaceholder","kind":"option","title":"quickFilterPlaceholder","summary":"Guidance for the quick-filter input. Describe the searchable data scope clearly.","member":{"name":"quickFilterPlaceholder","attribute":"quick-filter-placeholder","type":"string","kind":"string","values":[],"default":"undefined","description":"Guidance for the quick-filter input. Describe the searchable data scope clearly."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Guidance for the quick-filter input. Describe the searchable data scope clearly."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"quickFilterPlaceholder: string","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","quickFilterPlaceholder"],["HTML attribute","quick-filter-placeholder"],["Default","undefined"],["Input type","string"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the quick-filter-placeholder attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/quick-filter","title":"Search across columns","description":"Quick search looks for text across searchable columns without specifying a column. It is a useful starting point when users do not know whether a term is a product name or a region."}]}]}]},{"path":"/docs/options/quickFilterMode","kind":"option","title":"quickFilterMode","summary":"Combines terms with and, requiring all matches, or or, requiring any match.","member":{"name":"quickFilterMode","attribute":"quick-filter-mode","type":"'and' | 'or'","kind":"string","values":["and","or"],"default":"'and'","description":"Combines terms with and, requiring all matches, or or, requiring any match."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Combines terms with and, requiring all matches, or or, requiring any match."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"quickFilterMode: 'and' | 'or'","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","quickFilterMode"],["HTML attribute","quick-filter-mode"],["Default","'and'"],["Input type","'and' | 'or'"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the quick-filter-mode attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/quick-filter","title":"Search across columns","description":"Quick search looks for text across searchable columns without specifying a column. It is a useful starting point when users do not know whether a term is a product name or a region."}]}]}]},{"path":"/docs/options/quickFilterRegex","kind":"option","title":"quickFilterRegex","summary":"Interprets quick-filter input as a regular expression rather than ordinary text.","member":{"name":"quickFilterRegex","attribute":"quick-filter-regex","type":"boolean","kind":"boolean","values":[],"default":"false","description":"Interprets quick-filter input as a regular expression rather than ordinary text."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Interprets quick-filter input as a regular expression rather than ordinary text."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"quickFilterRegex: boolean","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","quickFilterRegex"],["HTML attribute","quick-filter-regex"],["Default","false"],["Input type","boolean"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the quick-filter-regex attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/quick-filter","title":"Search across columns","description":"Quick search looks for text across searchable columns without specifying a column. It is a useful starting point when users do not know whether a term is a product name or a region."}]}]}]},{"path":"/docs/options/quickFilterDebounce","kind":"option","title":"quickFilterDebounce","summary":"Delay before applying quick-filter input. Balances continuous typing throughput and responsiveness.","member":{"name":"quickFilterDebounce","attribute":"quick-filter-debounce","type":"number","kind":"number","values":[],"default":"150","description":"Delay before applying quick-filter input. Balances continuous typing throughput and responsiveness."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Delay before applying quick-filter input. Balances continuous typing throughput and responsiveness."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"quickFilterDebounce: number","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","quickFilterDebounce"],["HTML attribute","quick-filter-debounce"],["Default","150"],["Input type","number"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the quick-filter-debounce attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/quick-filter","title":"Search across columns","description":"Quick search looks for text across searchable columns without specifying a column. It is a useful starting point when users do not know whether a term is a product name or a region."}]}]}]},{"path":"/docs/options/showEmptyState","kind":"option","title":"showEmptyState","summary":"Shows an empty-state message when no data exists. Distinguish request failures from valid empty results in your app.","member":{"name":"showEmptyState","attribute":"show-empty-state","type":"boolean","kind":"boolean","values":[],"default":"true","description":"Shows an empty-state message when no data exists. Distinguish request failures from valid empty results in your app."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Shows an empty-state message when no data exists. Distinguish request failures from valid empty results in your app."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"showEmptyState: boolean","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","showEmptyState"],["HTML attribute","show-empty-state"],["Default","true"],["Input type","boolean"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the show-empty-state attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/overlays","title":"Loading and empty results","description":"Loading and empty-data messages explain why the table has no visible content. Pending requests, no results, and failures are distinct states and should not share one empty screen."}]}]}]},{"path":"/docs/options/emptyMessage","kind":"option","title":"emptyMessage","summary":"Message displayed when source data is empty.","member":{"name":"emptyMessage","attribute":"empty-message","type":"string","kind":"string","values":[],"default":"undefined","description":"Message displayed when source data is empty."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Message displayed when source data is empty."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"emptyMessage: string","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","emptyMessage"],["HTML attribute","empty-message"],["Default","undefined"],["Input type","string"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the empty-message attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/overlays","title":"Loading and empty results","description":"Loading and empty-data messages explain why the table has no visible content. Pending requests, no results, and failures are distinct states and should not share one empty screen."}]}]}]},{"path":"/docs/options/noMatchesMessage","kind":"option","title":"noMatchesMessage","summary":"Message displayed when data exists but no rows match current search or filters.","member":{"name":"noMatchesMessage","attribute":"no-matches-message","type":"string","kind":"string","values":[],"default":"undefined","description":"Message displayed when data exists but no rows match current search or filters."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Message displayed when data exists but no rows match current search or filters."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"noMatchesMessage: string","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","noMatchesMessage"],["HTML attribute","no-matches-message"],["Default","undefined"],["Input type","string"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the no-matches-message attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/overlays","title":"Loading and empty results","description":"Loading and empty-data messages explain why the table has no visible content. Pending requests, no results, and failures are distinct states and should not share one empty screen."}]}]}]},{"path":"/docs/options/clearFiltersLabel","kind":"option","title":"clearFiltersLabel","summary":"Label for the clear-filters action in an empty-results view.","member":{"name":"clearFiltersLabel","attribute":"clear-filters-label","type":"string","kind":"string","values":[],"default":"undefined","description":"Label for the clear-filters action in an empty-results view."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Label for the clear-filters action in an empty-results view."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"clearFiltersLabel: string","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","clearFiltersLabel"],["HTML attribute","clear-filters-label"],["Default","undefined"],["Input type","string"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the clear-filters-label attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/overlays","title":"Loading and empty results","description":"Loading and empty-data messages explain why the table has no visible content. Pending requests, no results, and failures are distinct states and should not share one empty screen."}]}]}]},{"path":"/docs/options/loading","kind":"option","title":"loading","summary":"Displays app data-request progress. Clear it after both success and failure.","member":{"name":"loading","attribute":"loading","type":"boolean","kind":"boolean","values":[],"default":"false","description":"Displays app data-request progress. Clear it after both success and failure."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Displays app data-request progress. Clear it after both success and failure."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"loading: boolean","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","loading"],["HTML attribute","loading"],["Default","false"],["Input type","boolean"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the loading attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/overlays","title":"Loading and empty results","description":"Loading and empty-data messages explain why the table has no visible content. Pending requests, no results, and failures are distinct states and should not share one empty screen."}]}]}]},{"path":"/docs/options/loadingMessage","kind":"option","title":"loadingMessage","summary":"Description shown while loading.","member":{"name":"loadingMessage","attribute":"loading-message","type":"string","kind":"string","values":[],"default":"undefined","description":"Description shown while loading."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Description shown while loading."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"loadingMessage: string","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","loadingMessage"],["HTML attribute","loading-message"],["Default","undefined"],["Input type","string"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the loading-message attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/overlays","title":"Loading and empty results","description":"Loading and empty-data messages explain why the table has no visible content. Pending requests, no results, and failures are distinct states and should not share one empty screen."}]}]}]},{"path":"/docs/options/loadingMode","kind":"option","title":"loadingMode","summary":"Selects the Grid loading indicator. See LoadingMode for supported values.","member":{"name":"loadingMode","attribute":"loading-mode","type":"LoadingMode","kind":"string","values":["auto","manual","off"],"default":"'manual'","description":"Selects the Grid loading indicator. See LoadingMode for supported values."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Selects the Grid loading indicator. See LoadingMode for supported values."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"loadingMode: LoadingMode","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","loadingMode"],["HTML attribute","loading-mode"],["Default","'manual'"],["Input type","LoadingMode"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the loading-mode attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/LoadingMode","title":"LoadingMode","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/overlays","title":"Loading and empty results","description":"Loading and empty-data messages explain why the table has no visible content. Pending requests, no results, and failures are distinct states and should not share one empty screen."}]}]}]},{"path":"/docs/options/minLoadingDuration","kind":"option","title":"minLoadingDuration","summary":"Minimum loading-indicator duration to avoid brief flashes.","member":{"name":"minLoadingDuration","attribute":"min-loading-duration","type":"number","kind":"number","values":[],"default":"DEFAULT_MIN_LOADING_DURATION_MS","description":"Minimum loading-indicator duration to avoid brief flashes."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Minimum loading-indicator duration to avoid brief flashes."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"minLoadingDuration: number","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","minLoadingDuration"],["HTML attribute","min-loading-duration"],["Default","DEFAULT_MIN_LOADING_DURATION_MS"],["Input type","number"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the min-loading-duration attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/overlays","title":"Loading and empty results","description":"Loading and empty-data messages explain why the table has no visible content. Pending requests, no results, and failures are distinct states and should not share one empty screen."}]}]}]},{"path":"/docs/options/datasource","kind":"option","title":"datasource","summary":"Data provider for the infinite row model. Complete each requested range through its success or failure callback.","member":{"name":"datasource","attribute":"datasource","type":"InfiniteRowDatasource","kind":"property","values":[],"default":"undefined","description":"Data provider for the infinite row model. Complete each requested range through its success or failure callback."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Data provider for the infinite row model. Complete each requested range through its success or failure callback."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"datasource: InfiniteRowDatasource","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","datasource"],["HTML attribute","datasource"],["Default","undefined"],["Input type","InfiniteRowDatasource"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/InfiniteRowDatasource","title":"InfiniteRowDatasource","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/infinite-row-model","title":"Request only needed blocks","description":"When downloading every order at once is impractical, request only the ranges needed for scrolling. datasource supplies data based on starting and ending rows and search conditions."}]}]}]},{"path":"/docs/options/cacheBlockSize","kind":"option","title":"cacheBlockSize","summary":"Block size for requesting and caching remote rows.","member":{"name":"cacheBlockSize","attribute":"cache-block-size","type":"number","kind":"number","values":[],"default":"100","description":"Block size for requesting and caching remote rows."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Block size for requesting and caching remote rows."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"cacheBlockSize: number","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","cacheBlockSize"],["HTML attribute","cache-block-size"],["Default","100"],["Input type","number"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the cache-block-size attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/infinite-row-model","title":"Request only needed blocks","description":"When downloading every order at once is impractical, request only the ranges needed for scrolling. datasource supplies data based on starting and ending rows and search conditions."}]}]}]},{"path":"/docs/options/maxBlocksInCache","kind":"option","title":"maxBlocksInCache","summary":"Maximum cached blocks in the infinite row model. Balances memory use against repeat queries.","member":{"name":"maxBlocksInCache","attribute":"max-blocks-in-cache","type":"number","kind":"number","values":[],"default":"undefined","description":"Maximum cached blocks in the infinite row model. Balances memory use against repeat queries."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Maximum cached blocks in the infinite row model. Balances memory use against repeat queries."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"maxBlocksInCache: number","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","maxBlocksInCache"],["HTML attribute","max-blocks-in-cache"],["Default","undefined"],["Input type","number"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the max-blocks-in-cache attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/infinite-row-model","title":"Request only needed blocks","description":"When downloading every order at once is impractical, request only the ranges needed for scrolling. datasource supplies data based on starting and ending rows and search conditions."}]}]}]},{"path":"/docs/options/serverSideDatasource","kind":"option","title":"serverSideDatasource","summary":"Data provider for a row model where the server handles sorting, filtering, grouping, and related requests.","member":{"name":"serverSideDatasource","attribute":"server-side-datasource","type":"ServerSideDatasource<GridRow>","kind":"property","values":[],"default":"undefined","description":"Data provider for a row model where the server handles sorting, filtering, grouping, and related requests."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Data provider for a row model where the server handles sorting, filtering, grouping, and related requests."},{"kind":"paragraph","text":"API for Pro features: Server-Side Row Model"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"serverSideDatasource: ServerSideDatasource<GridRow>","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","serverSideDatasource"],["HTML attribute","server-side-datasource"],["Default","undefined"],["Input type","ServerSideDatasource<GridRow>"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/ServerSideDatasource","title":"ServerSideDatasource","description":""},{"path":"/docs/types/GridRow","title":"GridRow","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/server-side-row-model","title":"Server-side row model","description":"In this model, the server calculates grouping and pivots and supplies rows for each expanded group path. Its data responsibilities differ from grouping already loaded local rows with groupBy."}]}]}]},{"path":"/docs/options/serverSideGroupCols","kind":"option","title":"serverSideGroupCols","summary":"Columns grouped on the server, ordered from outermost group inward. An empty array represents flat data.","member":{"name":"serverSideGroupCols","attribute":"server-side-group-cols","type":"string[]","kind":"property","values":[],"default":"undefined","description":"Columns grouped on the server, ordered from outermost group inward. An empty array represents flat data."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Columns grouped on the server, ordered from outermost group inward. An empty array represents flat data."},{"kind":"paragraph","text":"API for Pro features: Server-Side Row Model"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"serverSideGroupCols: string[]","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","serverSideGroupCols"],["HTML attribute","server-side-group-cols"],["Default","undefined"],["Input type","string[]"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/server-side-row-model","title":"Server-side row model","description":"In this model, the server calculates grouping and pivots and supplies rows for each expanded group path. Its data responsibilities differ from grouping already loaded local rows with groupBy."}]}]}]},{"path":"/docs/options/serverSideTransactionWaitMs","kind":"option","title":"serverSideTransactionWaitMs","summary":"Delay for batching asynchronous server row transactions.","member":{"name":"serverSideTransactionWaitMs","attribute":"server-side-transaction-wait-ms","type":"number","kind":"number","values":[],"default":"undefined","description":"Delay for batching asynchronous server row transactions."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Delay for batching asynchronous server row transactions."},{"kind":"paragraph","text":"API for Pro features: Server-Side Row Model"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"serverSideTransactionWaitMs: number","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","serverSideTransactionWaitMs"],["HTML attribute","server-side-transaction-wait-ms"],["Default","undefined"],["Input type","number"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the server-side-transaction-wait-ms attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/server-side-row-model","title":"Server-side row model","description":"In this model, the server calculates grouping and pivots and supplies rows for each expanded group path. Its data responsibilities differ from grouping already loaded local rows with groupBy."}]}]}]},{"path":"/docs/options/viewportDatasource","kind":"option","title":"viewportDatasource","summary":"Viewport model supplying data for visible row ranges. Implement initialization, range changes, and cleanup.","member":{"name":"viewportDatasource","attribute":"viewport-datasource","type":"ViewportDatasource<GridRow>","kind":"property","values":[],"default":"undefined","description":"Viewport model supplying data for visible row ranges. Implement initialization, range changes, and cleanup."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Viewport model supplying data for visible row ranges. Implement initialization, range changes, and cleanup."},{"kind":"paragraph","text":"API for Pro features: Viewport row model"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"viewportDatasource: ViewportDatasource<GridRow>","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","viewportDatasource"],["HTML attribute","viewport-datasource"],["Default","undefined"],["Input type","ViewportDatasource<GridRow>"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/ViewportDatasource","title":"ViewportDatasource","description":""},{"path":"/docs/types/GridRow","title":"GridRow","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/viewport-row-model","title":"Stream the visible range","description":"This suits price feeds and monitoring views where the total count is known but only visible rows need continuous updates. Adjusting the subscription to the scroll range is essential."}]}]}]},{"path":"/docs/options/rowDragManaged","kind":"option","title":"rowDragManaged","summary":"Lets the Grid manage reordering from row dragging. Review restrictions with sorting, filtering, and other row models.","member":{"name":"rowDragManaged","attribute":"row-drag-managed","type":"boolean","kind":"boolean","values":[],"default":"false","description":"Lets the Grid manage reordering from row dragging. Review restrictions with sorting, filtering, and other row models."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Lets the Grid manage reordering from row dragging. Review restrictions with sorting, filtering, and other row models."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"rowDragManaged: boolean","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","rowDragManaged"],["HTML attribute","row-drag-managed"],["Default","false"],["Input type","boolean"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the row-drag-managed attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/row-drag","title":"Row dragging","description":"Managed row dragging applies user-defined order to Grid data. Manual reordering can conflict with display order determined by sorting."}]}]}]},{"path":"/docs/options/spanExportMode","kind":"option","title":"spanExportMode","summary":"Chooses whether merged-cell copying and output include the origin value once or repeat it at every position.","member":{"name":"spanExportMode","attribute":"span-export-mode","type":"'origin-once' | 'repeat'","kind":"string","values":["origin-once","repeat"],"default":"'origin-once'","description":"Chooses whether merged-cell copying and output include the origin value once or repeat it at every position."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Chooses whether merged-cell copying and output include the origin value once or repeat it at every position."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"spanExportMode: 'origin-once' | 'repeat'","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","spanExportMode"],["HTML attribute","span-export-mode"],["Default","'origin-once'"],["Input type","'origin-once' | 'repeat'"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the span-export-mode attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/row-layout","title":"Row height and pinned rows","description":"Row height, top/bottom pinned rows, full-width rows, and merged cells are separate layout features. Choose based on whether you need persistent summaries or wide detail content."}]}]}]},{"path":"/docs/options/rowDragMultiRow","kind":"option","title":"rowDragMultiRow","summary":"Allows dragging multiple selected rows together. Also configure rowDrag on a column and row selection.","member":{"name":"rowDragMultiRow","attribute":"row-drag-multi-row","type":"boolean","kind":"boolean","values":[],"default":"false","description":"Allows dragging multiple selected rows together. Also configure rowDrag on a column and row selection."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Allows dragging multiple selected rows together. Also configure rowDrag on a column and row selection."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"rowDragMultiRow: boolean","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","rowDragMultiRow"],["HTML attribute","row-drag-multi-row"],["Default","false"],["Input type","boolean"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the row-drag-multi-row attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/row-drag","title":"Row dragging","description":"Managed row dragging applies user-defined order to Grid data. Manual reordering can conflict with display order determined by sorting."}]}]}]},{"path":"/docs/options/rowDragText","kind":"option","title":"rowDragText","summary":"Builds drag feedback text from the row count and default label.","member":{"name":"rowDragText","attribute":"row-drag-text","type":"(params: { count: number; label: string }) => string","kind":"property","values":[],"default":"undefined","description":"Builds drag feedback text from the row count and default label."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Builds drag feedback text from the row count and default label."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"rowDragText: (params: { count: number; label: string }) => string","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","rowDragText"],["HTML attribute","row-drag-text"],["Default","undefined"],["Input type","(params: { count: number; label: string }) => string"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/row-drag","title":"Row dragging","description":"Managed row dragging applies user-defined order to Grid data. Manual reordering can conflict with display order determined by sorting."}]}]}]},{"path":"/docs/options/cellChangeFlash","kind":"option","title":"cellChangeFlash","summary":"Briefly highlights cells changed by editing, pasting, or transactions.","member":{"name":"cellChangeFlash","attribute":"cell-change-flash","type":"boolean","kind":"boolean","values":[],"default":"false","description":"Briefly highlights cells changed by editing, pasting, or transactions."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Briefly highlights cells changed by editing, pasting, or transactions."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"cellChangeFlash: boolean","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","cellChangeFlash"],["HTML attribute","cell-change-flash"],["Default","false"],["Input type","boolean"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the cell-change-flash attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/cell-change-flash","title":"Highlight changes","description":"Cell change flashing briefly highlights cells changed by editing, pasting, or data transactions. It helps users locate recent changes in tables with many live prices or quantities."}]}]}]},{"path":"/docs/options/enableCellChangeFlash","kind":"option","title":"enableCellChangeFlash","summary":"Compatibility alias for cell change flashing. Do not assign a value that conflicts with cellChangeFlash.","member":{"name":"enableCellChangeFlash","attribute":"enable-cell-change-flash","type":"boolean","kind":"boolean","values":[],"default":"false","description":"Compatibility alias for cell change flashing. Do not assign a value that conflicts with cellChangeFlash."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Compatibility alias for cell change flashing. Do not assign a value that conflicts with cellChangeFlash."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"enableCellChangeFlash: boolean","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","enableCellChangeFlash"],["HTML attribute","enable-cell-change-flash"],["Default","false"],["Input type","boolean"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the enable-cell-change-flash attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/cell-change-flash","title":"Highlight changes","description":"Cell change flashing briefly highlights cells changed by editing, pasting, or data transactions. It helps users locate recent changes in tables with many live prices or quantities."}]}]}]},{"path":"/docs/options/contextMenu","kind":"option","title":"contextMenu","summary":"Displays a cell context menu. Use built-in copy, row copy, and CSV actions or replace the list through a callback.","member":{"name":"contextMenu","attribute":"context-menu","type":"boolean","kind":"boolean","values":[],"default":"false","description":"Displays a cell context menu. Use built-in copy, row copy, and CSV actions or replace the list through a callback."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Displays a cell context menu. Use built-in copy, row copy, and CSV actions or replace the list through a callback."},{"kind":"paragraph","text":"API for Pro features: Built-in context menu"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"contextMenu: boolean","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","contextMenu"],["HTML attribute","context-menu"],["Default","false"],["Input type","boolean"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the context-menu attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/context-menu","title":"Cell context menus","description":"A cell's context menu offers actions such as Copy, Copy row, and Export for the current location. Also provide toolbar or keyboard access to frequently used features."}]}]}]},{"path":"/docs/options/columnMenu","kind":"option","title":"columnMenu","summary":"Enables a column action menu in column headers.","member":{"name":"columnMenu","attribute":"column-menu","type":"boolean","kind":"boolean","values":[],"default":"false","description":"Enables a column action menu in column headers."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Enables a column action menu in column headers."},{"kind":"paragraph","text":"API for Pro features: Built-in column menu"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"columnMenu: boolean","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","columnMenu"],["HTML attribute","column-menu"],["Default","false"],["Input type","boolean"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the column-menu attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/column-menu","title":"Column menu","description":"Column menus place sorting, filtering, and visibility controls near the current column. Keep them distinct from row actions in cell context menus and whole-column-list management in tool panels."}]}]}]},{"path":"/docs/options/find","kind":"option","title":"find","summary":"Finds and navigates matching positions in loaded, readable cells. This is not a search of the complete server data set.","member":{"name":"find","attribute":"find","type":"boolean","kind":"boolean","values":[],"default":"false","description":"Finds and navigates matching positions in loaded, readable cells. This is not a search of the complete server data set."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Finds and navigates matching positions in loaded, readable cells. This is not a search of the complete server data set."},{"kind":"paragraph","text":"API for Pro features: Built-in find (highlight and result navigation)"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"find: boolean","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","find"],["HTML attribute","find"],["Default","false"],["Input type","boolean"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the find attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/find","title":"Find cell content","description":"Find highlights matching cells and moves between results without reducing the row list. Use it when users need to keep reading surrounding rows."}]}]}]},{"path":"/docs/options/cellNotes","kind":"option","title":"cellNotes","summary":"Provides standalone notes for readable cells with stable IDs. Requires a storage adapter and Pro entitlement.","member":{"name":"cellNotes","attribute":"cell-notes","type":"boolean","kind":"boolean","values":[],"default":"false","description":"Provides standalone notes for readable cells with stable IDs. Requires a storage adapter and Pro entitlement."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Provides standalone notes for readable cells with stable IDs. Requires a storage adapter and Pro entitlement."},{"kind":"paragraph","text":"API for Pro features: Cell notes editing"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"cellNotes: boolean","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","cellNotes"],["HTML attribute","cell-notes"],["Default","false"],["Input type","boolean"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the cell-notes attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/cell-notes","title":"Cell notes","description":"Cell notes add review context or explanations without changing the value. Standalone notes and collaboration comment threads use different storage and APIs, so choose the appropriate workflow first."}]}]}]},{"path":"/docs/options/cellNotesAdapter","kind":"option","title":"cellNotesAdapter","summary":"Implements standalone note loading and atomic revision-based saving. Does not automatically fall back to temporary built-in storage.","member":{"name":"cellNotesAdapter","attribute":"cell-notes-adapter","type":"GridCellNotesAdapter","kind":"property","values":[],"default":"undefined","description":"Implements standalone note loading and atomic revision-based saving. Does not automatically fall back to temporary built-in storage."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Implements standalone note loading and atomic revision-based saving. Does not automatically fall back to temporary built-in storage."},{"kind":"paragraph","text":"API for Pro features: Cell notes editing"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"cellNotesAdapter: GridCellNotesAdapter","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","cellNotesAdapter"],["HTML attribute","cell-notes-adapter"],["Default","undefined"],["Input type","GridCellNotesAdapter"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridCellNotesAdapter","title":"GridCellNotesAdapter","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/cell-notes","title":"Cell notes","description":"Cell notes add review context or explanations without changing the value. Standalone notes and collaboration comment threads use different storage and APIs, so choose the appropriate workflow first."}]}]}]},{"path":"/docs/options/batchEditToolbar","kind":"option","title":"batchEditToolbar","summary":"Displays tools for starting, committing, and cancelling batch edits.","member":{"name":"batchEditToolbar","attribute":"batch-edit-toolbar","type":"boolean","kind":"boolean","values":[],"default":"false","description":"Displays tools for starting, committing, and cancelling batch edits."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Displays tools for starting, committing, and cancelling batch edits."},{"kind":"paragraph","text":"API for Pro features: Batch editing"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"batchEditToolbar: boolean","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","batchEditToolbar"],["HTML attribute","batch-edit-toolbar"],["Default","false"],["Input type","boolean"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the batch-edit-toolbar attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/batch-editing","title":"Batch editing","description":"Batch editing stages changes to multiple cells for a single commit or cancellation. Distinguish staged values from committed rowData to make the Save action clear."}]}]}]},{"path":"/docs/options/columnMenuItems","kind":"option","title":"columnMenuItems","summary":"Builds column menu items from the current column context.","member":{"name":"columnMenuItems","attribute":"column-menu-items","type":"(context: GridColumnMenuContext) => readonly GridColumnMenuItem[]","kind":"property","values":[],"default":"undefined","description":"Builds column menu items from the current column context."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Builds column menu items from the current column context."},{"kind":"paragraph","text":"API for Pro features: Built-in column menu"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"columnMenuItems: (context: GridColumnMenuContext) => readonly GridColumnMenuItem[]","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","columnMenuItems"],["HTML attribute","column-menu-items"],["Default","undefined"],["Input type","(context: GridColumnMenuContext) => readonly GridColumnMenuItem[]"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridColumnMenuContext","title":"GridColumnMenuContext","description":""},{"path":"/docs/types/GridColumnMenuItem","title":"GridColumnMenuItem","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/column-menu","title":"Column menu","description":"Column menus place sorting, filtering, and visibility controls near the current column. Keep them distinct from row actions in cell context menus and whole-column-list management in tool panels."}]}]}]},{"path":"/docs/options/contextMenuItemsCallback","kind":"option","title":"contextMenuItemsCallback","summary":"Returns cell context-menu items. Replaces the entire default list rather than appending to it.","member":{"name":"contextMenuItemsCallback","attribute":"context-menu-items-callback","type":"(\n    ctx: ContextMenuContext<GridRow>,\n  ) => ContextMenuItem<GridRow>[]","kind":"property","values":[],"default":"undefined","description":"Returns cell context-menu items. Replaces the entire default list rather than appending to it."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Returns cell context-menu items. Replaces the entire default list rather than appending to it."},{"kind":"paragraph","text":"API for Pro features: Built-in context menu"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"contextMenuItemsCallback: (\n    ctx: ContextMenuContext<GridRow>,\n  ) => ContextMenuItem<GridRow>[]","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","contextMenuItemsCallback"],["HTML attribute","context-menu-items-callback"],["Default","undefined"],["Input type","(\n    ctx: ContextMenuContext<GridRow>,\n  ) => ContextMenuItem<GridRow>[]"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/ContextMenuContext","title":"ContextMenuContext","description":""},{"path":"/docs/types/GridRow","title":"GridRow","description":""},{"path":"/docs/types/ContextMenuItem","title":"ContextMenuItem","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/context-menu","title":"Cell context menus","description":"A cell's context menu offers actions such as Copy, Copy row, and Export for the current location. Also provide toolbar or keyboard access to frequently used features."}]}]}]},{"path":"/docs/options/keyboardNavigation","kind":"option","title":"keyboardNavigation","summary":"Configures keyboard navigation across cells and internal Grid features.","member":{"name":"keyboardNavigation","attribute":"keyboard-navigation","type":"boolean","kind":"boolean","values":[],"default":"true","description":"Configures keyboard navigation across cells and internal Grid features."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Configures keyboard navigation across cells and internal Grid features."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"keyboardNavigation: boolean","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","keyboardNavigation"],["HTML attribute","keyboard-navigation"],["Default","true"],["Input type","boolean"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the keyboard-navigation attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/guides/keyboard-a11y-i18n","title":"Keyboard and localization","description":"Grid is a workspace for navigating many rows and columns with a keyboard. Cell navigation, editing, menus, and paths to app buttons outside the table must all be understandable."}]}]}]},{"path":"/docs/options/rowSelection","kind":"option","title":"rowSelection","summary":"Disables row selection or enables single/multiple selection. Independent of cell range selection.","member":{"name":"rowSelection","attribute":"row-selection","type":"RowSelectionMode","kind":"string","values":["single","multi","none"],"default":"'none'","description":"Disables row selection or enables single/multiple selection. Independent of cell range selection."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Disables row selection or enables single/multiple selection. Independent of cell range selection."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"rowSelection: RowSelectionMode","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","rowSelection"],["HTML attribute","row-selection"],["Default","'none'"],["Input type","RowSelectionMode"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the row-selection attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/RowSelectionMode","title":"RowSelectionMode","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/row-selection","title":"Row selection","description":"Row selection chooses targets for bulk actions such as approval, export, or assignment. Unlike cell range selection, it selects an entire order."}]}]}]},{"path":"/docs/options/getRowId","kind":"option","title":"getRowId","summary":"Returns a stable, unique row ID. The same business row must retain its ID after sorting, filtering, and editing.","member":{"name":"getRowId","attribute":"get-row-id","type":"(row: Readonly<GridData>) => GridRowId","kind":"property","values":[],"default":"undefined","description":"Returns a stable, unique row ID. The same business row must retain its ID after sorting, filtering, and editing."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Returns a stable, unique row ID. The same business row must retain its ID after sorting, filtering, and editing."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getRowId: (row: Readonly<GridData>) => GridRowId","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","getRowId"],["HTML attribute","get-row-id"],["Default","undefined"],["Input type","(row: Readonly<GridData>) => GridRowId"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridData","title":"GridData","description":""},{"path":"/docs/types/GridRowId","title":"GridRowId","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/row-selection","title":"Row selection","description":"Row selection chooses targets for bulk actions such as approval, export, or assignment. Unlike cell range selection, it selects an entire order."}]}]}]},{"path":"/docs/options/selectionCheckbox","kind":"option","title":"selectionCheckbox","summary":"Displays row selection checkboxes.","member":{"name":"selectionCheckbox","attribute":"selection-checkbox","type":"boolean","kind":"boolean","values":[],"default":"false","description":"Displays row selection checkboxes."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Displays row selection checkboxes."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"selectionCheckbox: boolean","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","selectionCheckbox"],["HTML attribute","selection-checkbox"],["Default","false"],["Input type","boolean"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the selection-checkbox attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/row-selection","title":"Row selection","description":"Row selection chooses targets for bulk actions such as approval, export, or assignment. Unlike cell range selection, it selects an entire order."}]}]}]},{"path":"/docs/options/showSelectionCheckbox","kind":"option","title":"showSelectionCheckbox","summary":"Compatibility alias for selection checkboxes. Avoid conflicts with selectionCheckbox.","member":{"name":"showSelectionCheckbox","attribute":"show-selection-checkbox","type":"boolean","kind":"boolean","values":[],"default":"false","description":"Compatibility alias for selection checkboxes. Avoid conflicts with selectionCheckbox."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Compatibility alias for selection checkboxes. Avoid conflicts with selectionCheckbox."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"showSelectionCheckbox: boolean","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","showSelectionCheckbox"],["HTML attribute","show-selection-checkbox"],["Default","false"],["Input type","boolean"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the show-selection-checkbox attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/row-selection","title":"Row selection","description":"Row selection chooses targets for bulk actions such as approval, export, or assignment. Unlike cell range selection, it selects an entire order."}]}]}]},{"path":"/docs/options/shiftClickAdditive","kind":"option","title":"shiftClickAdditive","summary":"Chooses whether Shift-click range selection adds to the existing selection.","member":{"name":"shiftClickAdditive","attribute":"shift-click-additive","type":"boolean","kind":"boolean","values":[],"default":"false","description":"Chooses whether Shift-click range selection adds to the existing selection."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Chooses whether Shift-click range selection adds to the existing selection."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"shiftClickAdditive: boolean","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","shiftClickAdditive"],["HTML attribute","shift-click-additive"],["Default","false"],["Input type","boolean"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the shift-click-additive attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/row-selection","title":"Row selection","description":"Row selection chooses targets for bulk actions such as approval, export, or assignment. Unlike cell range selection, it selects an entire order."}]}]}]},{"path":"/docs/options/rowHover","kind":"option","title":"rowHover","summary":"Selects CSS-only hover highlighting, stateful hover with events, or no hover.","member":{"name":"rowHover","attribute":"row-hover","type":"'css-only' | 'stateful' | 'off'","kind":"string","values":["off","css-only","stateful"],"default":"'css-only'","description":"Selects CSS-only hover highlighting, stateful hover with events, or no hover."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Selects CSS-only hover highlighting, stateful hover with events, or no hover."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"rowHover: 'css-only' | 'stateful' | 'off'","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","rowHover"],["HTML attribute","row-hover"],["Default","'css-only'"],["Input type","'css-only' | 'stateful' | 'off'"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the row-hover attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/row-hover","title":"Follow rows","description":"Row hover highlights the row under the pointer to help users read wide tables. It differs from row selection and does not automatically select a row for business operations."}]}]}]},{"path":"/docs/options/resizableColumns","kind":"option","title":"resizableColumns","summary":"Allows users to resize columns by dragging their boundaries.","member":{"name":"resizableColumns","attribute":"resizable-columns","type":"boolean","kind":"boolean","values":[],"default":"false","description":"Allows users to resize columns by dragging their boundaries."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Allows users to resize columns by dragging their boundaries."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"resizableColumns: boolean","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","resizableColumns"],["HTML attribute","resizable-columns"],["Default","false"],["Input type","boolean"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the resizable-columns attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/column-operations","title":"Column sizing and pinning","description":"Width, order, pinning, and visibility are independent column states. Combine them to pin order IDs, hide supporting information, and widen long product names."}]}]}]},{"path":"/docs/options/reorderableColumns","kind":"option","title":"reorderableColumns","summary":"Allows users to reorder columns by dragging headers.","member":{"name":"reorderableColumns","attribute":"reorderable-columns","type":"boolean","kind":"boolean","values":[],"default":"false","description":"Allows users to reorder columns by dragging headers."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Allows users to reorder columns by dragging headers."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"reorderableColumns: boolean","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","reorderableColumns"],["HTML attribute","reorderable-columns"],["Default","false"],["Input type","boolean"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the reorderable-columns attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/column-operations","title":"Column sizing and pinning","description":"Width, order, pinning, and visibility are independent column states. Combine them to pin order IDs, hide supporting information, and widen long product names."}]}]}]},{"path":"/docs/options/columnHiding","kind":"option","title":"columnHiding","summary":"Enables column hiding. Also provide a menu or panel for restoring hidden columns.","member":{"name":"columnHiding","attribute":"column-hiding","type":"boolean","kind":"boolean","values":[],"default":"false","description":"Enables column hiding. Also provide a menu or panel for restoring hidden columns."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Enables column hiding. Also provide a menu or panel for restoring hidden columns."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"columnHiding: boolean","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","columnHiding"],["HTML attribute","column-hiding"],["Default","false"],["Input type","boolean"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the column-hiding attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/column-operations","title":"Column sizing and pinning","description":"Width, order, pinning, and visibility are independent column states. Combine them to pin order IDs, hide supporting information, and widen long product names."}]}]}]},{"path":"/docs/options/hideableColumns","kind":"option","title":"hideableColumns","summary":"Compatibility setting for column hiding. Keep it consistent with columnHiding.","member":{"name":"hideableColumns","attribute":"hideable-columns","type":"boolean","kind":"boolean","values":[],"default":"false","description":"Compatibility setting for column hiding. Keep it consistent with columnHiding."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Compatibility setting for column hiding. Keep it consistent with columnHiding."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"hideableColumns: boolean","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","hideableColumns"],["HTML attribute","hideable-columns"],["Default","false"],["Input type","boolean"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the hideable-columns attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/column-operations","title":"Column sizing and pinning","description":"Width, order, pinning, and visibility are independent column states. Combine them to pin order IDs, hide supporting information, and widen long product names."}]}]}]},{"path":"/docs/options/autoSizeOnDoubleClick","kind":"option","title":"autoSizeOnDoubleClick","summary":"Autosizes a column to its content when its boundary is double-clicked.","member":{"name":"autoSizeOnDoubleClick","attribute":"auto-size-on-double-click","type":"boolean","kind":"boolean","values":[],"default":"true","description":"Autosizes a column to its content when its boundary is double-clicked."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Autosizes a column to its content when its boundary is double-clicked."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"autoSizeOnDoubleClick: boolean","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","autoSizeOnDoubleClick"],["HTML attribute","auto-size-on-double-click"],["Default","true"],["Input type","boolean"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the auto-size-on-double-click attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/column-operations","title":"Column sizing and pinning","description":"Width, order, pinning, and visibility are independent column states. Combine them to pin order IDs, hide supporting information, and widen long product names."}]}]}]},{"path":"/docs/options/multiSort","kind":"option","title":"multiSort","summary":"Enables sorting by multiple columns. The sort model order defines priority.","member":{"name":"multiSort","attribute":"multi-sort","type":"boolean","kind":"boolean","values":[],"default":"false","description":"Enables sorting by multiple columns. The sort model order defines priority."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Enables sorting by multiple columns. The sort model order defines priority."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"multiSort: boolean","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","multiSort"],["HTML attribute","multi-sort"],["Default","false"],["Input type","boolean"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the multi-sort attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/sorting","title":"Single and multiple sorting","description":"Sorting changes display order without modifying data values. Single sorting uses one criterion; multiple sorting uses prioritized criteria."}]}]}]},{"path":"/docs/options/enableMultiSort","kind":"option","title":"enableMultiSort","summary":"Compatibility alias for multiple sorting. Keep it consistent with multiSort.","member":{"name":"enableMultiSort","attribute":"enable-multi-sort","type":"boolean","kind":"boolean","values":[],"default":"false","description":"Compatibility alias for multiple sorting. Keep it consistent with multiSort."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Compatibility alias for multiple sorting. Keep it consistent with multiSort."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"enableMultiSort: boolean","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","enableMultiSort"],["HTML attribute","enable-multi-sort"],["Default","false"],["Input type","boolean"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the enable-multi-sort attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/sorting","title":"Single and multiple sorting","description":"Sorting changes display order without modifying data values. Single sorting uses one criterion; multiple sorting uses prioritized criteria."}]}]}]},{"path":"/docs/options/headerFilterRow","kind":"option","title":"headerFilterRow","summary":"Displays a row of per-column filter controls below the headers.","member":{"name":"headerFilterRow","attribute":"header-filter-row","type":"boolean","kind":"boolean","values":[],"default":"false","description":"Displays a row of per-column filter controls below the headers."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Displays a row of per-column filter controls below the headers."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"headerFilterRow: boolean","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","headerFilterRow"],["HTML attribute","header-filter-row"],["Default","false"],["Input type","boolean"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the header-filter-row attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/column-filters","title":"Conditions for each column","description":"Column filters apply conditions to individual columns. Text, numbers, and dates use different inputs and comparisons; conditions across columns narrow results together."}]}]}]},{"path":"/docs/options/conditionBuilder","kind":"option","title":"conditionBuilder","summary":"Displays a condition builder combining conditions with AND and OR.","member":{"name":"conditionBuilder","attribute":"condition-builder","type":"boolean","kind":"boolean","values":[],"default":"false","description":"Displays a condition builder combining conditions with AND and OR."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Displays a condition builder combining conditions with AND and OR."},{"kind":"paragraph","text":"API for Pro features: Advanced filter and built-in compound condition editor"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"conditionBuilder: boolean","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","conditionBuilder"],["HTML attribute","condition-builder"],["Default","false"],["Input type","boolean"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the condition-builder attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/advanced-filter","title":"Condition trees","description":"Combine conditions across columns in an AND/OR tree to express business rules, such as large APAC orders or orders for a particular product."}]}]}]},{"path":"/docs/options/virtualizeColumns","kind":"option","title":"virtualizeColumns","summary":"Enables horizontal virtualization, rendering columns near the viewport.","member":{"name":"virtualizeColumns","attribute":"virtualize-columns","type":"boolean","kind":"boolean","values":[],"default":"undefined","description":"Enables horizontal virtualization, rendering columns near the viewport."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Enables horizontal virtualization, rendering columns near the viewport."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"virtualizeColumns: boolean","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","virtualizeColumns"],["HTML attribute","virtualize-columns"],["Default","undefined"],["Input type","boolean"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the virtualize-columns attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/virtualization","title":"Large data sets","description":"Virtualization renders only row and column DOM needed near the viewport. It is separate from row models that fetch only part of the data from a server."}]}]}]},{"path":"/docs/options/groupBy","kind":"option","title":"groupBy","summary":"Groups rows with equal values. A string array creates nested groups in array order.","member":{"name":"groupBy","attribute":"group-by","type":"string | string[]","kind":"property","values":[],"default":"undefined","description":"Groups rows with equal values. A string array creates nested groups in array order."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Groups rows with equal values. A string array creates nested groups in array order."},{"kind":"paragraph","text":"API for Pro features: Row grouping, built-in aggregation and group totals"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"groupBy: string | string[]","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","groupBy"],["HTML attribute","group-by"],["Default","undefined"],["Input type","string | string[]"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/row-grouping","title":"Grouping and aggregation","description":"Row grouping collects source rows with the same region or team into expandable groups. Unlike column groups, which organize headers, row groups change displayed rows and aggregation results."}]}]}]},{"path":"/docs/options/pivotMode","kind":"option","title":"pivotMode","summary":"Enables pivot aggregation across row, column, and value axes. Configure all three axes too.","member":{"name":"pivotMode","attribute":"pivot-mode","type":"boolean","kind":"boolean","values":[],"default":"false","description":"Enables pivot aggregation across row, column, and value axes. Configure all three axes too."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Enables pivot aggregation across row, column, and value axes. Configure all three axes too."},{"kind":"paragraph","text":"API for Pro features: Pivot"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"pivotMode: boolean","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","pivotMode"],["HTML attribute","pivot-mode"],["Default","false"],["Input type","boolean"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the pivot-mode attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/pivot","title":"Pivot analysis","description":"Pivoting divides source orders into row, column, and value axes to create a cross-tabulation. Unlike collapsible row groups, unique values such as statuses become new result columns."}]}]}]},{"path":"/docs/options/pivotRowGroupColumns","kind":"option","title":"pivotRowGroupColumns","summary":"Fields forming the left-hand row axis of pivot results.","member":{"name":"pivotRowGroupColumns","attribute":"pivot-row-group-columns","type":"string[]","kind":"property","values":[],"default":"undefined","description":"Fields forming the left-hand row axis of pivot results."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Fields forming the left-hand row axis of pivot results."},{"kind":"paragraph","text":"API for Pro features: Pivot"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"pivotRowGroupColumns: string[]","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","pivotRowGroupColumns"],["HTML attribute","pivot-row-group-columns"],["Default","undefined"],["Input type","string[]"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/pivot","title":"Pivot analysis","description":"Pivoting divides source orders into row, column, and value axes to create a cross-tabulation. Unlike collapsible row groups, unique values such as statuses become new result columns."}]}]}]},{"path":"/docs/options/pivotColumns","kind":"option","title":"pivotColumns","summary":"Fields whose distinct values expand into pivot result columns at the top.","member":{"name":"pivotColumns","attribute":"pivot-columns","type":"string[]","kind":"property","values":[],"default":"undefined","description":"Fields whose distinct values expand into pivot result columns at the top."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Fields whose distinct values expand into pivot result columns at the top."},{"kind":"paragraph","text":"API for Pro features: Pivot"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"pivotColumns: string[]","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","pivotColumns"],["HTML attribute","pivot-columns"],["Default","undefined"],["Input type","string[]"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/pivot","title":"Pivot analysis","description":"Pivoting divides source orders into row, column, and value axes to create a cross-tabulation. Unlike collapsible row groups, unique values such as statuses become new result columns."}]}]}]},{"path":"/docs/options/pivotValueColumns","kind":"option","title":"pivotValueColumns","summary":"Value fields aggregated at each pivot intersection.","member":{"name":"pivotValueColumns","attribute":"pivot-value-columns","type":"string[]","kind":"property","values":[],"default":"undefined","description":"Value fields aggregated at each pivot intersection."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Value fields aggregated at each pivot intersection."},{"kind":"paragraph","text":"API for Pro features: Pivot"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"pivotValueColumns: string[]","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","pivotValueColumns"],["HTML attribute","pivot-value-columns"],["Default","undefined"],["Input type","string[]"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/pivot","title":"Pivot analysis","description":"Pivoting divides source orders into row, column, and value axes to create a cross-tabulation. Unlike collapsible row groups, unique values such as statuses become new result columns."}]}]}]},{"path":"/docs/options/pivotAggFuncs","kind":"option","title":"pivotAggFuncs","summary":"Aggregate function names for each value field. Supports built-in and registered custom functions.","member":{"name":"pivotAggFuncs","attribute":"pivot-agg-funcs","type":"Record<string, string>","kind":"property","values":[],"default":"undefined","description":"Aggregate function names for each value field. Supports built-in and registered custom functions."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Aggregate function names for each value field. Supports built-in and registered custom functions."},{"kind":"paragraph","text":"API for Pro features: Pivot"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"pivotAggFuncs: Record<string, string>","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","pivotAggFuncs"],["HTML attribute","pivot-agg-funcs"],["Default","undefined"],["Input type","Record<string, string>"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/pivot","title":"Pivot analysis","description":"Pivoting divides source orders into row, column, and value axes to create a cross-tabulation. Unlike collapsible row groups, unique values such as statuses become new result columns."}]}]}]},{"path":"/docs/options/pivotSubtotals","kind":"option","title":"pivotSubtotals","summary":"Hides nested pivot subtotals or positions them above or below expanded groups.","member":{"name":"pivotSubtotals","attribute":"pivot-subtotals","type":"'off' | 'top' | 'bottom'","kind":"string","values":["off","top","bottom"],"default":"'off'","description":"Hides nested pivot subtotals or positions them above or below expanded groups."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Hides nested pivot subtotals or positions them above or below expanded groups."},{"kind":"paragraph","text":"API for Pro features: Pivot"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"pivotSubtotals: 'off' | 'top' | 'bottom'","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","pivotSubtotals"],["HTML attribute","pivot-subtotals"],["Default","'off'"],["Input type","'off' | 'top' | 'bottom'"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the pivot-subtotals attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/pivot","title":"Pivot analysis","description":"Pivoting divides source orders into row, column, and value axes to create a cross-tabulation. Unlike collapsible row groups, unique values such as statuses become new result columns."}]}]}]},{"path":"/docs/options/pivotGrandTotal","kind":"option","title":"pivotGrandTotal","summary":"Hides pivot grand totals or positions them at the top or bottom.","member":{"name":"pivotGrandTotal","attribute":"pivot-grand-total","type":"'off' | 'top' | 'bottom'","kind":"string","values":["off","top","bottom"],"default":"'bottom'","description":"Hides pivot grand totals or positions them at the top or bottom."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Hides pivot grand totals or positions them at the top or bottom."},{"kind":"paragraph","text":"API for Pro features: Pivot"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"pivotGrandTotal: 'off' | 'top' | 'bottom'","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","pivotGrandTotal"],["HTML attribute","pivot-grand-total"],["Default","'bottom'"],["Input type","'off' | 'top' | 'bottom'"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the pivot-grand-total attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/pivot","title":"Pivot analysis","description":"Pivoting divides source orders into row, column, and value axes to create a cross-tabulation. Unlike collapsible row groups, unique values such as statuses become new result columns."}]}]}]},{"path":"/docs/options/pivotPanelShow","kind":"option","title":"pivotPanelShow","summary":"Shows the pivot panel always, only in pivot mode, or never.","member":{"name":"pivotPanelShow","attribute":"pivot-panel-show","type":"'always' | 'onlyWhenPivoting' | 'never'","kind":"string","values":["always","onlyWhenPivoting","never"],"default":"'never'","description":"Shows the pivot panel always, only in pivot mode, or never."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Shows the pivot panel always, only in pivot mode, or never."},{"kind":"paragraph","text":"API for Pro features: Pivot"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"pivotPanelShow: 'always' | 'onlyWhenPivoting' | 'never'","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","pivotPanelShow"],["HTML attribute","pivot-panel-show"],["Default","'never'"],["Input type","'always' | 'onlyWhenPivoting' | 'never'"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the pivot-panel-show attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/pivot","title":"Pivot analysis","description":"Pivoting divides source orders into row, column, and value axes to create a cross-tabulation. Unlike collapsible row groups, unique values such as statuses become new result columns."}]}]}]},{"path":"/docs/options/pivotPanel","kind":"option","title":"pivotPanel","summary":"Compatibility boolean for the pivot panel. true corresponds to pivotPanelShow: always.","member":{"name":"pivotPanel","attribute":"pivot-panel","type":"boolean","kind":"boolean","values":[],"default":"false","description":"Compatibility boolean for the pivot panel. true corresponds to pivotPanelShow: always."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Compatibility boolean for the pivot panel. true corresponds to pivotPanelShow: always."},{"kind":"paragraph","text":"API for Pro features: Pivot"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"pivotPanel: boolean","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","pivotPanel"],["HTML attribute","pivot-panel"],["Default","false"],["Input type","boolean"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the pivot-panel attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/pivot","title":"Pivot analysis","description":"Pivoting divides source orders into row, column, and value axes to create a cross-tabulation. Unlike collapsible row groups, unique values such as statuses become new result columns."}]}]}]},{"path":"/docs/options/groupPanel","kind":"option","title":"groupPanel","summary":"Displays a panel where users drag columns to configure row grouping.","member":{"name":"groupPanel","attribute":"group-panel","type":"boolean","kind":"boolean","values":[],"default":"false","description":"Displays a panel where users drag columns to configure row grouping."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Displays a panel where users drag columns to configure row grouping."},{"kind":"paragraph","text":"API for Pro features: Row grouping, built-in aggregation and group totals"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"groupPanel: boolean","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","groupPanel"],["HTML attribute","group-panel"],["Default","false"],["Input type","boolean"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the group-panel attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/row-grouping","title":"Grouping and aggregation","description":"Row grouping collects source rows with the same region or team into expandable groups. Unlike column groups, which organize headers, row groups change displayed rows and aggregation results."}]}]}]},{"path":"/docs/options/getDataPath","kind":"option","title":"getDataPath","summary":"Builds a tree from a path array from root to the current node. Takes precedence over ID-based tree settings.","member":{"name":"getDataPath","attribute":"get-data-path","type":"(row: Record<string, unknown>) => readonly string[]","kind":"property","values":[],"default":"undefined","description":"Builds a tree from a path array from root to the current node. Takes precedence over ID-based tree settings."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Builds a tree from a path array from root to the current node. Takes precedence over ID-based tree settings."},{"kind":"paragraph","text":"API for Pro features: Tree data"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getDataPath: (row: Record<string, unknown>) => readonly string[]","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","getDataPath"],["HTML attribute","get-data-path"],["Default","undefined"],["Input type","(row: Record<string, unknown>) => readonly string[]"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/tree-data","title":"Tree data","description":"Trees display parent-child data, such as folders or organizations, with indentation and expansion controls. Unlike grouping equal values, the parent relationship already exists in the data."}]}]}]},{"path":"/docs/options/treeIdField","kind":"option","title":"treeIdField","summary":"Node ID field in a parent-ID tree. Configure together with treeParentField.","member":{"name":"treeIdField","attribute":"tree-id-field","type":"string","kind":"string","values":[],"default":"undefined","description":"Node ID field in a parent-ID tree. Configure together with treeParentField."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Node ID field in a parent-ID tree. Configure together with treeParentField."},{"kind":"paragraph","text":"API for Pro features: Tree data"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"treeIdField: string","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","treeIdField"],["HTML attribute","tree-id-field"],["Default","undefined"],["Input type","string"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the tree-id-field attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/tree-data","title":"Tree data","description":"Trees display parent-child data, such as folders or organizations, with indentation and expansion controls. Unlike grouping equal values, the parent relationship already exists in the data."}]}]}]},{"path":"/docs/options/treeParentField","kind":"option","title":"treeParentField","summary":"Parent node ID field in a parent-ID tree.","member":{"name":"treeParentField","attribute":"tree-parent-field","type":"string","kind":"string","values":[],"default":"undefined","description":"Parent node ID field in a parent-ID tree."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Parent node ID field in a parent-ID tree."},{"kind":"paragraph","text":"API for Pro features: Tree data"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"treeParentField: string","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","treeParentField"],["HTML attribute","tree-parent-field"],["Default","undefined"],["Input type","string"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the tree-parent-field attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/tree-data","title":"Tree data","description":"Trees display parent-child data, such as folders or organizations, with indentation and expansion controls. Unlike grouping equal values, the parent relationship already exists in the data."}]}]}]},{"path":"/docs/options/treeLabelField","kind":"option","title":"treeLabelField","summary":"Display label field in a parent-ID tree. Defaults to the ID when omitted.","member":{"name":"treeLabelField","attribute":"tree-label-field","type":"string","kind":"string","values":[],"default":"undefined","description":"Display label field in a parent-ID tree. Defaults to the ID when omitted."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Display label field in a parent-ID tree. Defaults to the ID when omitted."},{"kind":"paragraph","text":"API for Pro features: Tree data"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"treeLabelField: string","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","treeLabelField"],["HTML attribute","tree-label-field"],["Default","undefined"],["Input type","string"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the tree-label-field attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/tree-data","title":"Tree data","description":"Trees display parent-child data, such as folders or organizations, with indentation and expansion controls. Unlike grouping equal values, the parent relationship already exists in the data."}]}]}]},{"path":"/docs/options/masterDetail","kind":"option","title":"masterDetail","summary":"Expands source rows into full-width detail panels, such as items beneath orders.","member":{"name":"masterDetail","attribute":"master-detail","type":"boolean","kind":"boolean","values":[],"default":"false","description":"Expands source rows into full-width detail panels, such as items beneath orders."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Expands source rows into full-width detail panels, such as items beneath orders."},{"kind":"paragraph","text":"API for Pro features: Built-in master / detail"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"masterDetail: boolean","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","masterDetail"],["HTML attribute","master-detail"],["Default","false"],["Input type","boolean"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the master-detail attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/master-detail","title":"Row details","description":"Master/detail expands an order to show its line items or shipping history. The parent row is a summary, and a full-width panel beneath it holds details."}]}]}]},{"path":"/docs/options/detailRowHeight","kind":"option","title":"detailRowHeight","summary":"Height of expanded detail panels in pixels.","member":{"name":"detailRowHeight","attribute":"detail-row-height","type":"number","kind":"number","values":[],"default":"160","description":"Height of expanded detail panels in pixels."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Height of expanded detail panels in pixels."},{"kind":"paragraph","text":"API for Pro features: Built-in master / detail"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"detailRowHeight: number","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","detailRowHeight"],["HTML attribute","detail-row-height"],["Default","160"],["Input type","number"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the detail-row-height attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/master-detail","title":"Row details","description":"Master/detail expands an order to show its line items or shipping history. The parent row is a summary, and a full-width panel beneath it holds details."}]}]}]},{"path":"/docs/options/detailCellRenderer","kind":"option","title":"detailCellRenderer","summary":"Builds detail content using the text, html, or vnode contract. Takes precedence over declarative nested Grids.","member":{"name":"detailCellRenderer","attribute":"detail-cell-renderer","type":"(params: { row: Record<string, unknown>; rowId: string | number }) => CellRenderOutput","kind":"property","values":[],"default":"undefined","description":"Builds detail content using the text, html, or vnode contract. Takes precedence over declarative nested Grids."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Builds detail content using the text, html, or vnode contract. Takes precedence over declarative nested Grids."},{"kind":"paragraph","text":"API for Pro features: Built-in master / detail"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"detailCellRenderer: (params: { row: Record<string, unknown>; rowId: string | number }) => CellRenderOutput","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","detailCellRenderer"],["HTML attribute","detail-cell-renderer"],["Default","undefined"],["Input type","(params: { row: Record<string, unknown>; rowId: string | number }) => CellRenderOutput"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/CellRenderOutput","title":"CellRenderOutput","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/master-detail","title":"Row details","description":"Master/detail expands an order to show its line items or shipping history. The parent row is a summary, and a full-width panel beneath it holds details."}]}]}]},{"path":"/docs/options/detailGridOptions","kind":"option","title":"detailGridOptions","summary":"Columns and options for an automatically generated nested Grid in the detail panel. Use with getDetailRowData.","member":{"name":"detailGridOptions","attribute":"detail-grid-options","type":"DetailGridOptions","kind":"property","values":[],"default":"undefined","description":"Columns and options for an automatically generated nested Grid in the detail panel. Use with getDetailRowData."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Columns and options for an automatically generated nested Grid in the detail panel. Use with getDetailRowData."},{"kind":"paragraph","text":"API for Pro features: Built-in master / detail"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"detailGridOptions: DetailGridOptions","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","detailGridOptions"],["HTML attribute","detail-grid-options"],["Default","undefined"],["Input type","DetailGridOptions"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/DetailGridOptions","title":"DetailGridOptions","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/master-detail","title":"Row details","description":"Master/detail expands an order to show its line items or shipping history. The parent row is a summary, and a full-width panel beneath it holds details."}]}]}]},{"path":"/docs/options/getDetailRowData","kind":"option","title":"getDetailRowData","summary":"Returns detail rows for the expanded parent as an array or Promise. Reuses the result while the row remains expanded.","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":"Returns detail rows for the expanded parent as an array or Promise. Reuses the result while the row remains expanded."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Returns detail rows for the expanded parent as an array or Promise. Reuses the result while the row remains expanded."},{"kind":"paragraph","text":"API for Pro features: Built-in master / detail"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getDetailRowData: (params: { row: Record<string, unknown>; rowId: string | number }) => unknown[] | Promise<unknown[]>","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","getDetailRowData"],["HTML attribute","get-detail-row-data"],["Default","undefined"],["Input type","(params: { row: Record<string, unknown>; rowId: string | number }) => unknown[] | Promise<unknown[]>"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/master-detail","title":"Row details","description":"Master/detail expands an order to show its line items or shipping history. The parent row is a summary, and a full-width panel beneath it holds details."}]}]}]},{"path":"/docs/options/detailNestingLevel","kind":"option","title":"detailNestingLevel","summary":"Depth of nested detail Grids. Set by the parent for generated children and used to enforce recursion limits.","member":{"name":"detailNestingLevel","attribute":"detail-nesting-level","type":"number","kind":"number","values":[],"default":"0","description":"Depth of nested detail Grids. Set by the parent for generated children and used to enforce recursion limits."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Depth of nested detail Grids. Set by the parent for generated children and used to enforce recursion limits."},{"kind":"paragraph","text":"API for Pro features: Built-in master / detail"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"detailNestingLevel: number","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","detailNestingLevel"],["HTML attribute","detail-nesting-level"],["Default","0"],["Input type","number"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the detail-nesting-level attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/master-detail","title":"Row details","description":"Master/detail expands an order to show its line items or shipping history. The parent row is a summary, and a full-width panel beneath it holds details."}]}]}]},{"path":"/docs/options/rangeSelection","kind":"option","title":"rangeSelection","summary":"Enables rectangular cell selection, independently of row selection. Supplies ranges for copying, filling, and chart integration.","member":{"name":"rangeSelection","attribute":"range-selection","type":"boolean","kind":"boolean","values":[],"default":"false","description":"Enables rectangular cell selection, independently of row selection. Supplies ranges for copying, filling, and chart integration."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Enables rectangular cell selection, independently of row selection. Supplies ranges for copying, filling, and chart integration."},{"kind":"paragraph","text":"API for Pro features: Cell range selection"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"rangeSelection: boolean","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","rangeSelection"],["HTML attribute","range-selection"],["Default","false"],["Input type","boolean"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the range-selection attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/range-selection","title":"Cell range selection","description":"A cell range is a rectangle spanning rows and columns. It defines the scope for copying, pasting, filling, and chart creation; selecting it does not change values."}]}]}]},{"path":"/docs/options/clipboardEscapeFormulae","kind":"option","title":"clipboardEscapeFormulae","summary":"Escapes spreadsheet formula prefixes in outgoing clipboard text.","member":{"name":"clipboardEscapeFormulae","attribute":"clipboard-escape-formulae","type":"boolean","kind":"boolean","values":[],"default":"true","description":"Escapes spreadsheet formula prefixes in outgoing clipboard text."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Escapes spreadsheet formula prefixes in outgoing clipboard text."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"clipboardEscapeFormulae: boolean","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","clipboardEscapeFormulae"],["HTML attribute","clipboard-escape-formulae"],["Default","true"],["Input type","boolean"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the clipboard-escape-formulae attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/single-cell-copy","title":"Copy cells","description":"Copy one cell's display text to the system clipboard. Selected text inside a cell editor and a focused Grid cell are different copy targets."}]}]}]},{"path":"/docs/options/statusBar","kind":"option","title":"statusBar","summary":"Displays a basic row count or specified status panels below the table. true does not enable every aggregation panel.","member":{"name":"statusBar","attribute":"status-bar","type":"boolean | { panels?: ReadonlyArray<{ panel: string; align?: string }> }","kind":"property","values":[],"default":"undefined","description":"Displays a basic row count or specified status panels below the table. true does not enable every aggregation panel."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Displays a basic row count or specified status panels below the table. true does not enable every aggregation panel."},{"kind":"paragraph","text":"API for Pro features: Status bar"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"statusBar: boolean | { panels?: ReadonlyArray<{ panel: string; align?: string }> }","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","statusBar"],["HTML attribute","status-bar"],["Default","undefined"],["Input type","boolean | { panels?: ReadonlyArray<{ panel: string; align?: string }> }"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/status-bar","title":"Status and aggregates","description":"The status bar briefly summarizes results such as row counts or range calculations. It helps users understand the visible scope rather than editing data."}]}]}]},{"path":"/docs/options/sideBar","kind":"option","title":"sideBar","summary":"Configures column/filter tool panels and the initially open panel. true provides tabs; a string opens the specified panel.","member":{"name":"sideBar","attribute":"side-bar","type":"boolean | string | { panels?: ReadonlyArray<{ id: string } | string>; defaultOpen?: string }","kind":"property","values":[],"default":"undefined","description":"Configures column/filter tool panels and the initially open panel. true provides tabs; a string opens the specified panel."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Configures column/filter tool panels and the initially open panel. true provides tabs; a string opens the specified panel."},{"kind":"paragraph","text":"API for Pro features: Columns / Filters tool panels"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"sideBar: boolean | string | { panels?: ReadonlyArray<{ id: string } | string>; defaultOpen?: string }","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","sideBar"],["HTML attribute","side-bar"],["Default","undefined"],["Input type","boolean | string | { panels?: ReadonlyArray<{ id: string } | string>; defaultOpen?: string }"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/tool-panels","title":"Tool panel","description":"Tool panels collect cross-column tasks such as visibility and filter settings. They separate data space from settings space and open only when needed."}]}]}]},{"path":"/docs/options/rows","kind":"option","title":"rows","summary":"Compatibility input for source rows. Prefer rowData in new configurations and avoid conflicting inputs.","member":{"name":"rows","attribute":"rows","type":"GridRow[]","kind":"property","values":[],"default":"[]","description":"Compatibility input for source rows. Prefer rowData in new configurations and avoid conflicting inputs."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Compatibility input for source rows. Prefer rowData in new configurations and avoid conflicting inputs."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"rows: GridRow[]","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","rows"],["HTML attribute","rows"],["Default","[]"],["Input type","GridRow[]"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridRow","title":"GridRow","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/js-processing","title":"JavaScript processing engine","description":"The JavaScript engine is the standard browser execution path for sorting, filtering, and processing table data. Use it as a straightforward starting point for checking deployment environments and feature combinations."}]}]}]},{"path":"/docs/options/columns","kind":"option","title":"columns","summary":"Compatibility input for column definitions. Prefer columnDefs in new configurations.","member":{"name":"columns","attribute":"columns","type":"GridColumnDef[]","kind":"property","values":[],"default":"[]","description":"Compatibility input for column definitions. Prefer columnDefs in new configurations."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Compatibility input for column definitions. Prefer columnDefs in new configurations."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"columns: GridColumnDef[]","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","columns"],["HTML attribute","columns"],["Default","[]"],["Input type","GridColumnDef[]"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridColumnDef","title":"GridColumnDef","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/js-processing","title":"JavaScript processing engine","description":"The JavaScript engine is the standard browser execution path for sorting, filtering, and processing table data. Use it as a straightforward starting point for checking deployment environments and feature combinations."}]}]}]},{"path":"/docs/options/maxRendered","kind":"option","title":"maxRendered","summary":"Limits the number of rows rendered at once, independently of the total data count.","member":{"name":"maxRendered","attribute":"max-rendered","type":"number","kind":"number","values":[],"default":"200","description":"Limits the number of rows rendered at once, independently of the total data count."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Limits the number of rows rendered at once, independently of the total data count."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"maxRendered: number","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","maxRendered"],["HTML attribute","max-rendered"],["Default","200"],["Input type","number"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the max-rendered attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/js-processing","title":"JavaScript processing engine","description":"The JavaScript engine is the standard browser execution path for sorting, filtering, and processing table data. Use it as a straightforward starting point for checking deployment environments and feature combinations."}]}]}]},{"path":"/docs/options/engine","kind":"option","title":"engine","summary":"Requests automatic selection, standard JavaScript, or Pro processing. Inspect the actual result with getActiveTier.","member":{"name":"engine","attribute":"engine","type":"GridEngineMode","kind":"string","values":["auto","standard","pro"],"default":"'auto'","description":"Requests automatic selection, standard JavaScript, or Pro processing. Inspect the actual result with getActiveTier."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Requests automatic selection, standard JavaScript, or Pro processing. Inspect the actual result with getActiveTier."},{"kind":"paragraph","text":"WASM acceleration requires Pro. The Standard JS engine is Free."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"engine: GridEngineMode","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","engine"],["HTML attribute","engine"],["Default","'auto'"],["Input type","GridEngineMode"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the engine attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridEngineMode","title":"GridEngineMode","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/wasm-acceleration","title":"Choose a processing engine","description":"Pro engines accelerate supported sorting, filtering, and aggregation. The actual execution path depends on the browser, package, license, and current feature combination."}]}]}]},{"path":"/docs/options/proThreshold","kind":"option","title":"proThreshold","summary":"Data-size threshold for considering the Pro path during automatic engine selection.","member":{"name":"proThreshold","attribute":"pro-threshold","type":"number","kind":"number","values":[],"default":"100_000","description":"Data-size threshold for considering the Pro path during automatic engine selection."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Data-size threshold for considering the Pro path during automatic engine selection."},{"kind":"paragraph","text":"The threshold for switching to the Pro processing engine. The Standard JS engine is Free."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"proThreshold: number","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","proThreshold"],["HTML attribute","pro-threshold"],["Default","100_000"],["Input type","number"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the pro-threshold attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/wasm-acceleration","title":"Choose a processing engine","description":"Pro engines accelerate supported sorting, filtering, and aggregation. The actual execution path depends on the browser, package, license, and current feature combination."}]}]}]},{"path":"/docs/options/unavailable","kind":"option","title":"unavailable","summary":"Chooses fallback execution or an error when the requested engine is unavailable.","member":{"name":"unavailable","attribute":"unavailable","type":"GridUnavailableBehaviour","kind":"string","values":["fallback","error"],"default":"'fallback'","description":"Chooses fallback execution or an error when the requested engine is unavailable."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Chooses fallback execution or an error when the requested engine is unavailable."},{"kind":"paragraph","text":"Behavior when the Pro engine is unavailable. The Standard JS engine is Free."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"unavailable: GridUnavailableBehaviour","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","unavailable"],["HTML attribute","unavailable"],["Default","'fallback'"],["Input type","GridUnavailableBehaviour"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the unavailable attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridUnavailableBehaviour","title":"GridUnavailableBehaviour","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/wasm-acceleration","title":"Choose a processing engine","description":"Pro engines accelerate supported sorting, filtering, and aggregation. The actual execution path depends on the browser, package, license, and current feature combination."}]}]}]},{"path":"/docs/options/brandLogo","kind":"option","title":"brandLogo","summary":"Specifies the default logo, none, or a supported image data URL. Removal and replacement require grid.branding entitlement. Branding appears at the bottom right.","member":{"name":"brandLogo","attribute":"brand-logo","type":"string","kind":"string","values":[],"default":"undefined","description":"Specifies the default logo, none, or a supported image data URL. Removal and replacement require grid.branding entitlement. Branding appears at the bottom right."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Specifies the default logo, none, or a supported image data URL. Removal and replacement require grid.branding entitlement. Branding appears at the bottom right."},{"kind":"paragraph","text":"Removing or customizing the logo requires Pro. The default logo is Free."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"brandLogo: string","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","brandLogo"],["HTML attribute","brand-logo"],["Default","undefined"],["Input type","string"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the brand-logo attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/guides/branding","title":"Logos and positioning","description":"Grid's default logo is right-aligned in a dedicated footer area. It is separate from the data area so it does not cover cells, pagination, or scrolling controls."}]}]}]},{"path":"/docs/options/collaborationRoom","kind":"option","title":"collaborationRoom","summary":"Collaboration room ID for sharing edits and presence. Connecting multiple devices requires remote service configuration.","member":{"name":"collaborationRoom","attribute":"collaboration-room","type":"string","kind":"string","values":[],"default":"undefined","description":"Collaboration room ID for sharing edits and presence. Connecting multiple devices requires remote service configuration."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Collaboration room ID for sharing edits and presence. Connecting multiple devices requires remote service configuration."},{"kind":"paragraph","text":"API for Pro features: Real-time collaboration (existing Pro grade retained)"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"collaborationRoom: string","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","collaborationRoom"],["HTML attribute","collaboration-room"],["Default","undefined"],["Input type","string"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the collaboration-room attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/collaboration","title":"Real-time collaboration","description":"Collaboration shares edits, cursors, and presence among users in the same room. A room name alone does not automatically connect devices over the internet."}]}]}]},{"path":"/docs/options/realtimeUrl","kind":"option","title":"realtimeUrl","summary":"WebSocket URL for remote collaboration. When omitted, collaboration is limited to a same-page/process demo scope.","member":{"name":"realtimeUrl","attribute":"realtime-url","type":"string","kind":"string","values":[],"default":"undefined","description":"WebSocket URL for remote collaboration. When omitted, collaboration is limited to a same-page/process demo scope."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"WebSocket URL for remote collaboration. When omitted, collaboration is limited to a same-page/process demo scope."},{"kind":"paragraph","text":"API for Pro features: Real-time collaboration (existing Pro grade retained)"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"realtimeUrl: string","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","realtimeUrl"],["HTML attribute","realtime-url"],["Default","undefined"],["Input type","string"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the realtime-url attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/collaboration","title":"Real-time collaboration","description":"Collaboration shares edits, cursors, and presence among users in the same room. A room name alone does not automatically connect devices over the internet."}]}]}]},{"path":"/docs/options/collabUserName","kind":"option","title":"collabUserName","summary":"User name shown to other collaboration participants.","member":{"name":"collabUserName","attribute":"collab-user-name","type":"string","kind":"string","values":[],"default":"undefined","description":"User name shown to other collaboration participants."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"User name shown to other collaboration participants."},{"kind":"paragraph","text":"API for Pro features: Real-time collaboration (existing Pro grade retained)"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"collabUserName: string","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","collabUserName"],["HTML attribute","collab-user-name"],["Default","undefined"],["Input type","string"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the collab-user-name attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/collaboration","title":"Real-time collaboration","description":"Collaboration shares edits, cursors, and presence among users in the same room. A room name alone does not automatically connect devices over the internet."}]}]}]},{"path":"/docs/options/collabUserColor","kind":"option","title":"collabUserColor","summary":"Distinctive color for the participant's cursor and presence indicators.","member":{"name":"collabUserColor","attribute":"collab-user-color","type":"string","kind":"string","values":[],"default":"undefined","description":"Distinctive color for the participant's cursor and presence indicators."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Distinctive color for the participant's cursor and presence indicators."},{"kind":"paragraph","text":"API for Pro features: Real-time collaboration (existing Pro grade retained)"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"collabUserColor: string","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","collabUserColor"],["HTML attribute","collab-user-color"],["Default","undefined"],["Input type","string"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the collab-user-color attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/collaboration","title":"Real-time collaboration","description":"Collaboration shares edits, cursors, and presence among users in the same room. A room name alone does not automatically connect devices over the internet."}]}]}]},{"path":"/docs/options/collabPresence","kind":"option","title":"collabPresence","summary":"Configures participant position and presence indicators.","member":{"name":"collabPresence","attribute":"collab-presence","type":"boolean","kind":"boolean","values":[],"default":"true","description":"Configures participant position and presence indicators."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Configures participant position and presence indicators."},{"kind":"paragraph","text":"API for Pro features: Real-time collaboration (existing Pro grade retained)"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"collabPresence: boolean","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","collabPresence"],["HTML attribute","collab-presence"],["Default","true"],["Input type","boolean"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the collab-presence attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/collaboration","title":"Real-time collaboration","description":"Collaboration shares edits, cursors, and presence among users in the same room. A room name alone does not automatically connect devices over the internet."}]}]}]},{"path":"/docs/options/collabConflictUi","kind":"option","title":"collabConflictUi","summary":"Configures user-facing conflict guidance for concurrent edits.","member":{"name":"collabConflictUi","attribute":"collab-conflict-ui","type":"boolean","kind":"boolean","values":[],"default":"true","description":"Configures user-facing conflict guidance for concurrent edits."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Configures user-facing conflict guidance for concurrent edits."},{"kind":"paragraph","text":"API for Pro features: Real-time collaboration (existing Pro grade retained)"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"collabConflictUi: boolean","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","collabConflictUi"],["HTML attribute","collab-conflict-ui"],["Default","true"],["Input type","boolean"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the collab-conflict-ui attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/collaboration","title":"Real-time collaboration","description":"Collaboration shares edits, cursors, and presence among users in the same room. A room name alone does not automatically connect devices over the internet."}]}]}]},{"path":"/docs/options/auditLog","kind":"option","title":"auditLog","summary":"Records row, cell, selection, and edit-history transitions in an audit log. Disabled by default and separate from long-term server retention.","member":{"name":"auditLog","attribute":"audit-log","type":"boolean","kind":"boolean","values":[],"default":"false","description":"Records row, cell, selection, and edit-history transitions in an audit log. Disabled by default and separate from long-term server retention."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Records row, cell, selection, and edit-history transitions in an audit log. Disabled by default and separate from long-term server retention."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"auditLog: boolean","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","auditLog"],["HTML attribute","audit-log"],["Default","false"],["Input type","boolean"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the audit-log attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/audit-log","title":"View change history","description":"The audit log tracks row, cell, and selection changes and undo/redo transitions. Use it to inspect change history that current values alone cannot reveal."}]}]}]},{"path":"/docs/options/auditLogMax","kind":"option","title":"auditLogMax","summary":"Maximum audit records retained in memory. Oldest records are removed when exceeded.","member":{"name":"auditLogMax","attribute":"audit-log-max","type":"number","kind":"number","values":[],"default":"1000","description":"Maximum audit records retained in memory. Oldest records are removed when exceeded."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Maximum audit records retained in memory. Oldest records are removed when exceeded."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"auditLogMax: number","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","auditLogMax"],["HTML attribute","audit-log-max"],["Default","1000"],["Input type","number"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the audit-log-max attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/audit-log","title":"View change history","description":"The audit log tracks row, cell, and selection changes and undo/redo transitions. Use it to inspect change history that current values alone cannot reveal."}]}]}]},{"path":"/docs/options/canReadCell","kind":"option","title":"canReadCell","summary":"Synchronous permission callback determining whether a cell can be read. Use alongside server access control.","member":{"name":"canReadCell","attribute":"can-read-cell","type":"CanReadCellFn","kind":"property","values":[],"default":"undefined","description":"Synchronous permission callback determining whether a cell can be read. Use alongside server access control."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Synchronous permission callback determining whether a cell can be read. Use alongside server access control."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"canReadCell: CanReadCellFn","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","canReadCell"],["HTML attribute","can-read-cell"],["Default","undefined"],["Input type","CanReadCellFn"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/CanReadCellFn","title":"CanReadCellFn","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/rbac","title":"Cell access control","description":"Cell read and edit policies restrict visible and editable values according to user roles. Hiding a column is different from enforcing data access."}]}]}]},{"path":"/docs/options/maskedCellValue","kind":"option","title":"maskedCellValue","summary":"Masking text displayed in place of restricted cells.","member":{"name":"maskedCellValue","attribute":"masked-cell-value","type":"string","kind":"string","values":[],"default":"'•••'","description":"Masking text displayed in place of restricted cells."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Masking text displayed in place of restricted cells."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"maskedCellValue: string","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","maskedCellValue"],["HTML attribute","masked-cell-value"],["Default","'•••'"],["Input type","string"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the masked-cell-value attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/rbac","title":"Cell access control","description":"Cell read and edit policies restrict visible and editable values according to user roles. Hiding a column is different from enforcing data access."}]}]}]},{"path":"/docs/options/canEditCell","kind":"option","title":"canEditCell","summary":"Determines edit permission from the row, column, current value, and app permissions.","member":{"name":"canEditCell","attribute":"can-edit-cell","type":"CanEditCellFn","kind":"property","values":[],"default":"undefined","description":"Determines edit permission from the row, column, current value, and app permissions."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Determines edit permission from the row, column, current value, and app permissions."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"canEditCell: CanEditCellFn","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","canEditCell"],["HTML attribute","can-edit-cell"],["Default","undefined"],["Input type","CanEditCellFn"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/CanEditCellFn","title":"CanEditCellFn","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/rbac","title":"Cell access control","description":"Cell read and edit policies restrict visible and editable values according to user roles. Hiding a column is different from enforcing data access."}]}]}]},{"path":"/docs/options/conditionalFormats","kind":"option","title":"conditionalFormats","summary":"Rules changing matching cells' visual properties, such as backgrounds and text. Does not mutate source values.","member":{"name":"conditionalFormats","attribute":"conditional-formats","type":"ConditionalFormatRule[]","kind":"property","values":[],"default":"undefined","description":"Rules changing matching cells' visual properties, such as backgrounds and text. Does not mutate source values."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Rules changing matching cells' visual properties, such as backgrounds and text. Does not mutate source values."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"conditionalFormats: ConditionalFormatRule[]","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","conditionalFormats"],["HTML attribute","conditional-formats"],["Default","undefined"],["Input type","ConditionalFormatRule[]"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/ConditionalFormatRule","title":"ConditionalFormatRule","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/conditional-formats","title":"Conditional formatting","description":"Conditional formatting changes visual properties such as background and text color based on a value's meaning. Use it to identify low stock or exceeded targets without changing source values or validation results."}]}]}]},{"path":"/docs/options/conditionalFormatUi","kind":"option","title":"conditionalFormatUi","summary":"Provides a UI for adjusting conditional formatting rules.","member":{"name":"conditionalFormatUi","attribute":"conditional-format-ui","type":"boolean","kind":"boolean","values":[],"default":"false","description":"Provides a UI for adjusting conditional formatting rules."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Provides a UI for adjusting conditional formatting rules."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"conditionalFormatUi: boolean","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","conditionalFormatUi"],["HTML attribute","conditional-format-ui"],["Default","false"],["Input type","boolean"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the conditional-format-ui attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/conditional-formats","title":"Conditional formatting","description":"Conditional formatting changes visual properties such as background and text color based on a value's meaning. Use it to identify low stock or exceeded targets without changing source values or validation results."}]}]}]},{"path":"/docs/options/validationRules","kind":"option","title":"validationRules","summary":"Defines required values, ranges, lists, patterns, custom validation, and other input checks.","member":{"name":"validationRules","attribute":"validation-rules","type":"ValidationRule[]","kind":"property","values":[],"default":"undefined","description":"Defines required values, ranges, lists, patterns, custom validation, and other input checks."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Defines required values, ranges, lists, patterns, custom validation, and other input checks."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"validationRules: ValidationRule[]","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","validationRules"],["HTML attribute","validation-rules"],["Default","undefined"],["Input type","ValidationRule[]"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/ValidationRule","title":"ValidationRule","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/validation-rules","title":"Data validation","description":"Use declarative rules to check required values, numeric ranges, string formats, and custom conditions. The default mode may only mark invalid values, so explicitly set invalidEditMode to block saving when required."}]}]}]},{"path":"/docs/options/invalidEditMode","kind":"option","title":"invalidEditMode","summary":"Selects allow to apply invalid values with errors, revert to restore previous values, or block to prevent commits.","member":{"name":"invalidEditMode","attribute":"invalid-edit-mode","type":"'allow' | 'revert' | 'block'","kind":"string","values":["allow","revert","block"],"default":"'allow'","description":"Selects allow to apply invalid values with errors, revert to restore previous values, or block to prevent commits."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Selects allow to apply invalid values with errors, revert to restore previous values, or block to prevent commits."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"invalidEditMode: 'allow' | 'revert' | 'block'","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","invalidEditMode"],["HTML attribute","invalid-edit-mode"],["Default","'allow'"],["Input type","'allow' | 'revert' | 'block'"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the invalid-edit-mode attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/validation-rules","title":"Data validation","description":"Use declarative rules to check required values, numeric ranges, string formats, and custom conditions. The default mode may only mark invalid values, so explicitly set invalidEditMode to block saving when required."}]}]}]},{"path":"/docs/options/maxSnapshots","kind":"option","title":"maxSnapshots","summary":"Maximum data snapshots retained in memory. Older snapshots may be removed.","member":{"name":"maxSnapshots","attribute":"max-snapshots","type":"number","kind":"number","values":[],"default":"20","description":"Maximum data snapshots retained in memory. Older snapshots may be removed."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Maximum data snapshots retained in memory. Older snapshots may be removed."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"maxSnapshots: number","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","maxSnapshots"],["HTML attribute","max-snapshots"],["Default","20"],["Input type","number"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the max-snapshots attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/snapshots","title":"Data snapshot","description":"Snapshots retain rowData at a point in time for comparison with current data or another snapshot. They differ from view-state APIs that save column widths, filters, and focus."}]}]}]},{"path":"/docs/options/collabPersistence","kind":"option","title":"collabPersistence","summary":"Disables local collaboration persistence or uses IndexedDB. Does not replace server backups.","member":{"name":"collabPersistence","attribute":"collab-persistence","type":"'none' | 'indexeddb'","kind":"string","values":["none","indexeddb"],"default":"'none'","description":"Disables local collaboration persistence or uses IndexedDB. Does not replace server backups."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Disables local collaboration persistence or uses IndexedDB. Does not replace server backups."},{"kind":"paragraph","text":"API for Pro features: Real-time collaboration (existing Pro grade retained)"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"collabPersistence: 'none' | 'indexeddb'","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","collabPersistence"],["HTML attribute","collab-persistence"],["Default","'none'"],["Input type","'none' | 'indexeddb'"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the collab-persistence attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/collaboration","title":"Real-time collaboration","description":"Collaboration shares edits, cursors, and presence among users in the same room. A room name alone does not automatically connect devices over the internet."}]}]}]},{"path":"/docs/options/initialState","kind":"option","title":"initialState","summary":"Versioned view state applied once during initial Grid setup. Use setState for runtime restoration.","member":{"name":"initialState","attribute":"initial-state","type":"SyGridState","kind":"property","values":[],"default":"undefined","description":"Versioned view state applied once during initial Grid setup. Use setState for runtime restoration."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Versioned view state applied once during initial Grid setup. Use setState for runtime restoration."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"initialState: SyGridState","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","initialState"],["HTML attribute","initial-state"],["Default","undefined"],["Input type","SyGridState"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridState","title":"SyGridState","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"Settings and data fundamentals","description":""},{"path":"/docs/guides/data-event-access","title":"API calls and event integration","description":""}]}]}]},{"path":"/docs/options/editType","kind":"option","title":"editType","summary":"Selects single-cell editing or editing multiple cells as one row operation.","member":{"name":"editType","attribute":"edit-type","type":"'cell' | 'fullRow'","kind":"string","values":["cell","fullRow"],"default":"'cell'","description":"Selects single-cell editing or editing multiple cells as one row operation."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Selects single-cell editing or editing multiple cells as one row operation."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"editType: 'cell' | 'fullRow'","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","editType"],["HTML attribute","edit-type"],["Default","'cell'"],["Input type","'cell' | 'fullRow'"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the edit-type attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/cell-editing","title":"Cell and row editing","description":"Cell editing changes one value immediately; full-row editing commits multiple fields as one row operation. editor specifies the input UI, while editable controls write access."}]}]}]},{"path":"/docs/options/enableFillHandle","kind":"option","title":"enableFillHandle","summary":"Enables the fill handle at the corner of a selected range.","member":{"name":"enableFillHandle","attribute":"enable-fill-handle","type":"boolean","kind":"boolean","values":[],"default":"undefined","description":"Enables the fill handle at the corner of a selected range."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Enables the fill handle at the corner of a selected range."},{"kind":"paragraph","text":"API for Pro features: Fill handle"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"enableFillHandle: boolean","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","enableFillHandle"],["HTML attribute","enable-fill-handle"],["Default","undefined"],["Input type","boolean"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the enable-fill-handle attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/fill-handle","title":"Fill values","description":"The fill handle copies values or extends a pattern from a source range. Both the drag UI and fillRange API account for editability, validation, and history."}]}]}]},{"path":"/docs/options/fillHandleAxes","kind":"option","title":"fillHandleAxes","summary":"Allows horizontal, vertical, or bidirectional filling.","member":{"name":"fillHandleAxes","attribute":"fill-handle-axes","type":"'both' | 'x' | 'y'","kind":"string","values":["both","x","y"],"default":"undefined","description":"Allows horizontal, vertical, or bidirectional filling."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Allows horizontal, vertical, or bidirectional filling."},{"kind":"paragraph","text":"API for Pro features: Fill handle"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"fillHandleAxes: 'both' | 'x' | 'y'","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","fillHandleAxes"],["HTML attribute","fill-handle-axes"],["Default","undefined"],["Input type","'both' | 'x' | 'y'"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the fill-handle-axes attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/fill-handle","title":"Fill values","description":"The fill handle copies values or extends a pattern from a source range. Both the drag UI and fillRange API account for editability, validation, and history."}]}]}]},{"path":"/docs/options/fillHandleMode","kind":"option","title":"fillHandleMode","summary":"Chooses copying existing values or extending a sequence when filling.","member":{"name":"fillHandleMode","attribute":"fill-handle-mode","type":"'copy' | 'series'","kind":"string","values":["copy","series"],"default":"undefined","description":"Chooses copying existing values or extending a sequence when filling."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Chooses copying existing values or extending a sequence when filling."},{"kind":"paragraph","text":"API for Pro features: Fill handle"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"fillHandleMode: 'copy' | 'series'","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","fillHandleMode"],["HTML attribute","fill-handle-mode"],["Default","undefined"],["Input type","'copy' | 'series'"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. In HTML, you can also use the fill-handle-mode attribute. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/fill-handle","title":"Fill values","description":"The fill handle copies values or extends a pattern from a source range. Both the drag UI and fillRange API account for editability, validation, and history."}]}]}]},{"path":"/docs/options/alignedGrids","kind":"option","title":"alignedGrids","summary":"Specifies linked Grids for synchronized column layouts and related state. Inspect connection results and cycle restrictions in aligned Grid reports.","member":{"name":"alignedGrids","attribute":"aligned-grids","type":"SyGridAlignedGridsInput | string","kind":"property","values":[],"default":"undefined","description":"Specifies linked Grids for synchronized column layouts and related state. Inspect connection results and cycle restrictions in aligned Grid reports."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Specifies linked Grids for synchronized column layouts and related state. Inspect connection results and cycle restrictions in aligned Grid reports."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"alignedGrids: SyGridAlignedGridsInput | string","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","alignedGrids"],["HTML attribute","aligned-grids"],["Default","undefined"],["Input type","SyGridAlignedGridsInput | string"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridAlignedGridsInput","title":"SyGridAlignedGridsInput","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/row-layout","title":"Row height and pinned rows","description":"Row height, top/bottom pinned rows, full-width rows, and merged cells are separate layout features. Choose based on whether you need persistent summaries or wide detail content."}]}]}]},{"path":"/docs/options/isFullWidthRow","kind":"option","title":"isFullWidthRow","summary":"Determines whether a row uses a full-width layout instead of individual column cells.","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":"Determines whether a row uses a full-width layout instead of individual column cells."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Determines whether a row uses a full-width layout instead of individual column cells."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"isFullWidthRow: (params: { row: GridRow; rowIndex: number; builtInKind: 'detail' | 'group' | 'group-footer' | 'loading' | 'custom' | null }) => boolean","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","isFullWidthRow"],["HTML attribute","is-full-width-row"],["Default","undefined"],["Input type","(params: { row: GridRow; rowIndex: number; builtInKind: 'detail' | 'group' | 'group-footer' | 'loading' | 'custom' | null }) => boolean"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridRow","title":"GridRow","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/row-layout","title":"Row height and pinned rows","description":"Row height, top/bottom pinned rows, full-width rows, and merged cells are separate layout features. Choose based on whether you need persistent summaries or wide detail content."}]}]}]},{"path":"/docs/options/fullWidthCellRenderer","kind":"option","title":"fullWidthCellRenderer","summary":"Renderer for full-width row content. Uses a different input contract from regular cell renderers.","member":{"name":"fullWidthCellRenderer","attribute":"full-width-cell-renderer","type":"SyGridFullWidthRenderer<GridRow>","kind":"property","values":[],"default":"undefined","description":"Renderer for full-width row content. Uses a different input contract from regular cell renderers."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Renderer for full-width row content. Uses a different input contract from regular cell renderers."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"fullWidthCellRenderer: SyGridFullWidthRenderer<GridRow>","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","fullWidthCellRenderer"],["HTML attribute","full-width-cell-renderer"],["Default","undefined"],["Input type","SyGridFullWidthRenderer<GridRow>"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridFullWidthRenderer","title":"SyGridFullWidthRenderer","description":""},{"path":"/docs/types/GridRow","title":"GridRow","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/row-layout","title":"Row height and pinned rows","description":"Row height, top/bottom pinned rows, full-width rows, and merged cells are separate layout features. Choose based on whether you need persistent summaries or wide detail content."}]}]}]},{"path":"/docs/options/fullWidthRowHeight","kind":"option","title":"fullWidthRowHeight","summary":"Fixed height or per-row height function for full-width rows.","member":{"name":"fullWidthRowHeight","attribute":"full-width-row-height","type":"number | ((row: GridRow, rowIndex: number) => number)","kind":"property","values":[],"default":"undefined","description":"Fixed height or per-row height function for full-width rows."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Fixed height or per-row height function for full-width rows."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"fullWidthRowHeight: number | ((row: GridRow, rowIndex: number) => number)","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","fullWidthRowHeight"],["HTML attribute","full-width-row-height"],["Default","undefined"],["Input type","number | ((row: GridRow, rowIndex: number) => number)"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridRow","title":"GridRow","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/row-layout","title":"Row height and pinned rows","description":"Row height, top/bottom pinned rows, full-width rows, and merged cells are separate layout features. Choose based on whether you need persistent summaries or wide detail content."}]}]}]},{"path":"/docs/options/pinnedTopRowData","kind":"option","title":"pinnedTopRowData","summary":"Row data pinned above the scrolling table.","member":{"name":"pinnedTopRowData","attribute":"pinned-top-row-data","type":"GridRow[]","kind":"property","values":[],"default":"undefined","description":"Row data pinned above the scrolling table."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Row data pinned above the scrolling table."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"pinnedTopRowData: GridRow[]","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","pinnedTopRowData"],["HTML attribute","pinned-top-row-data"],["Default","undefined"],["Input type","GridRow[]"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridRow","title":"GridRow","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/row-layout","title":"Row height and pinned rows","description":"Row height, top/bottom pinned rows, full-width rows, and merged cells are separate layout features. Choose based on whether you need persistent summaries or wide detail content."}]}]}]},{"path":"/docs/options/pinnedBottomRowData","kind":"option","title":"pinnedBottomRowData","summary":"Row data pinned below the scrolling table.","member":{"name":"pinnedBottomRowData","attribute":"pinned-bottom-row-data","type":"GridRow[]","kind":"property","values":[],"default":"undefined","description":"Row data pinned below the scrolling table."},"apiKind":"props","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Row data pinned below the scrolling table."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"pinnedBottomRowData: GridRow[]","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["JavaScript name","pinnedBottomRowData"],["HTML attribute","pinned-bottom-row-data"],["Default","undefined"],["Input type","GridRow[]"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on a property of the Grid element. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridRow","title":"GridRow","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/row-layout","title":"Row height and pinned rows","description":"Row height, top/bottom pinned rows, full-width rows, and merged cells are separate layout features. Choose based on whether you need persistent summaries or wide detail content."}]}]}]},{"path":"/docs/columns","kind":"index","title":"ColumnDef · Column settings","summary":"Find 53 sy-grid ColumnDef · Column settings entries by name and open their descriptions, types, and examples.","sections":[{"id":"index","title":"Complete list","blocks":[{"kind":"links","items":[{"path":"/docs/columns/field","title":"field","description":"Required field path for reading a value from source rows. Use the data key, not a display heading."},{"path":"/docs/columns/colId","title":"colId","description":"Stable column ID for APIs and state persistence. Keep it unchanged when headings change."},{"path":"/docs/columns/headerName","title":"headerName","description":"User-facing column heading. Can differ from the source data key."},{"path":"/docs/columns/headerTooltip","title":"headerTooltip","description":"Supporting description for the header."},{"path":"/docs/columns/sortable","title":"sortable","description":"Determines whether users can sort this column."},{"path":"/docs/columns/sort","title":"sort","description":"Initial ascending/descending sort or cleared sort for this column."},{"path":"/docs/columns/sortIndex","title":"sortIndex","description":"This column's priority among multiple initial sort criteria."},{"path":"/docs/columns/filter","title":"filter","description":"Built-in filter type or custom filter definition for this column."},{"path":"/docs/columns/valueGetter","title":"valueGetter","description":"Returns a cell value calculated from the source row. Use valueFormatter for display-text changes only."},{"path":"/docs/columns/formula","title":"formula","description":"Formula string applied to this column. Review formula support and original-coordinate rules."},{"path":"/docs/columns/valueFormatter","title":"valueFormatter","description":"Displays values as readable currency, dates, or other strings without changing the stored source type."},{"path":"/docs/columns/tooltipField","title":"tooltipField","description":"Source data field used for tooltips."},{"path":"/docs/columns/tooltipValueGetter","title":"tooltipValueGetter","description":"Calculates tooltip content from the current cell context. Do not expose unauthorized values indirectly."},{"path":"/docs/columns/cellRenderer","title":"cellRenderer","description":"Displays cells through text, html, vnode, or a registered custom renderer."},{"path":"/docs/columns/cellRendererMeta","title":"cellRendererMeta","description":"Additional metadata passed to the cell renderer."},{"path":"/docs/columns/cellEditor","title":"cellEditor","description":"Declares a custom cell editor. Use editor to select a built-in editor type."},{"path":"/docs/columns/floatingFilterComponent","title":"floatingFilterComponent","description":"Custom filter input component displayed below the header."},{"path":"/docs/columns/cellClass","title":"cellClass","description":"CSS classes for the cell or a callback returning classes."},{"path":"/docs/columns/cellClassRules","title":"cellClassRules","description":"Rules for applying CSS classes conditionally."},{"path":"/docs/columns/cellStyle","title":"cellStyle","description":"Inline style object, callback, or array of these for the cell."},{"path":"/docs/columns/width","title":"width","description":"Initial column width in pixels."},{"path":"/docs/columns/minWidth","title":"minWidth","description":"Minimum width allowed during user resizing and autosizing."},{"path":"/docs/columns/maxWidth","title":"maxWidth","description":"Maximum column width."},{"path":"/docs/columns/flex","title":"flex","description":"Relative share of remaining space. Review alongside fixed, minimum, and maximum widths."},{"path":"/docs/columns/resizable","title":"resizable","description":"Whether users can resize this column."},{"path":"/docs/columns/reorderable","title":"reorderable","description":"Whether users can move this column."},{"path":"/docs/columns/pinned","title":"pinned","description":"Pins the column left/right, or unpins it with null."},{"path":"/docs/columns/columnGroupShow","title":"columnGroupShow","description":"Chooses whether the column appears when its parent group is expanded or collapsed."},{"path":"/docs/columns/aggFunc","title":"aggFunc","description":"Built-in or registered custom aggregate function name for grouping and analysis."},{"path":"/docs/columns/hidden","title":"hidden","description":"Whether the column starts hidden. Does not revoke read permission."},{"path":"/docs/columns/hide","title":"hide","description":"Compatibility alias for column hiding. Do not assign conflicting values to hidden."},{"path":"/docs/columns/editable","title":"editable","description":"Allows editing this column. Row permissions and validation still apply."},{"path":"/docs/columns/editor","title":"editor","description":"Built-in editor type, such as text, number, date, select, or checkbox."},{"path":"/docs/columns/valueParser","title":"valueParser","description":"Converts input text to the stored type, for example by normalizing numbers or dates."},{"path":"/docs/columns/valueSetter","title":"valueSetter","description":"Custom logic for writing a converted value into the source row. Follow the return contract indicating whether a change occurred."},{"path":"/docs/columns/comparator","title":"comparator","description":"Compares two values and rows for sorting. Negative, zero, and positive results mean before, equal, and after."},{"path":"/docs/columns/options","title":"options","description":"Values and display labels for select editors. Individual options can be disabled."},{"path":"/docs/columns/min","title":"min","description":"Minimum allowed value for number or date editing."},{"path":"/docs/columns/max","title":"max","description":"Maximum allowed value for number or date editing."},{"path":"/docs/columns/step","title":"step","description":"Increment/decrement step for numeric input."},{"path":"/docs/columns/decimals","title":"decimals","description":"Decimal precision for numeric editing."},{"path":"/docs/columns/nullable","title":"nullable","description":"Whether null is accepted as an edited value."},{"path":"/docs/columns/allowEmpty","title":"allowEmpty","description":"Whether empty values are allowed while editing. Review together with required-value validation."},{"path":"/docs/columns/storeAs","title":"storeAs","description":"Whether date edits are stored as Date objects or ISO strings."},{"path":"/docs/columns/rows","title":"rows","description":"Default visible line count for a multiline text editor."},{"path":"/docs/columns/maxRows","title":"maxRows","description":"Maximum line count to which a multiline editor can grow."},{"path":"/docs/columns/cols","title":"cols","description":"Display width basis for a multiline text editor."},{"path":"/docs/columns/maxLength","title":"maxLength","description":"Maximum text editing length."},{"path":"/docs/columns/rowDrag","title":"rowDrag","description":"Provides a row drag handle in this column. Use with the Grid's drag policy."},{"path":"/docs/columns/wrapText","title":"wrapText","description":"Allows cell text wrapping. Content may clip without sufficient height."},{"path":"/docs/columns/autoHeight","title":"autoHeight","description":"Calculates row height from cell content. Review costs with virtualization and large data sets."},{"path":"/docs/columns/rowSpan","title":"rowSpan","description":"Returns the vertical row span from cell context. Inspect span reports for conflicts and display-model restrictions."},{"path":"/docs/columns/colSpan","title":"colSpan","description":"Returns the horizontal column span from cell context. Account for pinned boundaries and hidden columns."}]}]}]},{"path":"/docs/columns/field","kind":"column","title":"field","summary":"Required field path for reading a value from source rows. Use the data key, not a display heading.","member":{"name":"field","type":"GridFieldPath<TData>","description":"Required field path for reading a value from source rows. Use the data key, not a display heading.","optional":false},"apiKind":"columns","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Required field path for reading a value from source rows. Use the data key, not a display heading."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"field: GridFieldPath<TData>","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["Required","Required"],["Input type","GridFieldPath<TData>"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on an individual column object in columnDefs. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridFieldPath","title":"GridFieldPath","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/data-updates","title":"Data updates","description":"Replace rowData when receiving a complete query result. For partial changes, pass add, update, and remove to applyTransaction. Updates match through getRowId, not display positions."}]}]}]},{"path":"/docs/columns/colId","kind":"column","title":"colId","summary":"Stable column ID for APIs and state persistence. Keep it unchanged when headings change.","member":{"name":"colId","type":"string","description":"Stable column ID for APIs and state persistence. Keep it unchanged when headings change.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Stable column ID for APIs and state persistence. Keep it unchanged when headings change."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"colId?: string","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["Required","Optional"],["Input type","string"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on an individual column object in columnDefs. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/data-updates","title":"Data updates","description":"Replace rowData when receiving a complete query result. For partial changes, pass add, update, and remove to applyTransaction. Updates match through getRowId, not display positions."}]}]}]},{"path":"/docs/columns/headerName","kind":"column","title":"headerName","summary":"User-facing column heading. Can differ from the source data key.","member":{"name":"headerName","type":"string","description":"User-facing column heading. Can differ from the source data key.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"User-facing column heading. Can differ from the source data key."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"headerName?: string","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["Required","Optional"],["Input type","string"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on an individual column object in columnDefs. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/data-updates","title":"Data updates","description":"Replace rowData when receiving a complete query result. For partial changes, pass add, update, and remove to applyTransaction. Updates match through getRowId, not display positions."}]}]}]},{"path":"/docs/columns/headerTooltip","kind":"column","title":"headerTooltip","summary":"Supporting description for the header.","member":{"name":"headerTooltip","type":"string","description":"Supporting description for the header.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Supporting description for the header."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"headerTooltip?: string","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["Required","Optional"],["Input type","string"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on an individual column object in columnDefs. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/tooltip","title":"Cell tooltips","description":"Tooltips help users briefly inspect truncated names or long descriptions. Do not hide essential errors or guidance exclusively inside tooltips."}]}]}]},{"path":"/docs/columns/sortable","kind":"column","title":"sortable","summary":"Determines whether users can sort this column.","member":{"name":"sortable","type":"boolean","description":"Determines whether users can sort this column.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Determines whether users can sort this column."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"sortable?: boolean","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["Required","Optional"],["Input type","boolean"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on an individual column object in columnDefs. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/sorting","title":"Single and multiple sorting","description":"Sorting changes display order without modifying data values. Single sorting uses one criterion; multiple sorting uses prioritized criteria."}]}]}]},{"path":"/docs/columns/sort","kind":"column","title":"sort","summary":"Initial ascending/descending sort or cleared sort for this column.","member":{"name":"sort","type":"'asc' | 'desc' | null","description":"Initial ascending/descending sort or cleared sort for this column.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Initial ascending/descending sort or cleared sort for this column."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"sort?: 'asc' | 'desc' | null","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["Required","Optional"],["Input type","'asc' | 'desc' | null"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on an individual column object in columnDefs. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/sorting","title":"Single and multiple sorting","description":"Sorting changes display order without modifying data values. Single sorting uses one criterion; multiple sorting uses prioritized criteria."}]}]}]},{"path":"/docs/columns/sortIndex","kind":"column","title":"sortIndex","summary":"This column's priority among multiple initial sort criteria.","member":{"name":"sortIndex","type":"number","description":"This column's priority among multiple initial sort criteria.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"This column's priority among multiple initial sort criteria."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"sortIndex?: number","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["Required","Optional"],["Input type","number"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on an individual column object in columnDefs. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/sorting","title":"Single and multiple sorting","description":"Sorting changes display order without modifying data values. Single sorting uses one criterion; multiple sorting uses prioritized criteria."}]}]}]},{"path":"/docs/columns/filter","kind":"column","title":"filter","summary":"Built-in filter type or custom filter definition for this column.","member":{"name":"filter","type":"| ColumnFilterDecl\n    | string\n    | GridFilterDefinition<TData, TValue, unknown, TContext>","description":"Built-in filter type or custom filter definition for this column.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Built-in filter type or custom filter definition for this column."},{"kind":"paragraph","text":"Set Filter and Multi Filter require Pro. Basic text, number, and date filters are Free."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"filter?: | ColumnFilterDecl\n    | string\n    | GridFilterDefinition<TData, TValue, unknown, TContext>","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["Required","Optional"],["Input type","| ColumnFilterDecl\n    | string\n    | GridFilterDefinition<TData, TValue, unknown, TContext>"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on an individual column object in columnDefs. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/ColumnFilterDecl","title":"ColumnFilterDecl","description":""},{"path":"/docs/types/GridFilterDefinition","title":"GridFilterDefinition","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/column-filters","title":"Conditions for each column","description":"Column filters apply conditions to individual columns. Text, numbers, and dates use different inputs and comparisons; conditions across columns narrow results together."},{"path":"/docs/features/set-filter","title":"Choose values from a list","description":"This filter lets users choose from distinct, recurring values such as regions or statuses. It presents the available choices more clearly than a Text filter that matches part of a name."},{"path":"/docs/features/multi-filter","title":"Combine multiple filters","description":"Combine multiple filters, such as text search and a value list, within one column. This differs from enabling separate filters on different columns."}]}]}]},{"path":"/docs/columns/valueGetter","kind":"column","title":"valueGetter","summary":"Returns a cell value calculated from the source row. Use valueFormatter for display-text changes only.","member":{"name":"valueGetter","type":"GridCallback<[ValueGetterParams<TData, TValue, TContext>], TValue> | string","description":"Returns a cell value calculated from the source row. Use valueFormatter for display-text changes only.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Returns a cell value calculated from the source row. Use valueFormatter for display-text changes only."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"valueGetter?: GridCallback<[ValueGetterParams<TData, TValue, TContext>], TValue> | string","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["Required","Optional"],["Input type","GridCallback<[ValueGetterParams<TData, TValue, TContext>], TValue> | string"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on an individual column object in columnDefs. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridCallback","title":"GridCallback","description":""},{"path":"/docs/types/ValueGetterParams","title":"ValueGetterParams","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/value-getter-formatter","title":"Separate calculation and display","description":"valueGetter produces a calculated value, while valueFormatter produces readable display text. Return numbers from getters when totals, sorting, or comparisons require numeric values."}]}]}]},{"path":"/docs/columns/formula","kind":"column","title":"formula","summary":"Formula string applied to this column. Review formula support and original-coordinate rules.","member":{"name":"formula","type":"string","description":"Formula string applied to this column. Review formula support and original-coordinate rules.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Formula string applied to this column. Review formula support and original-coordinate rules."},{"kind":"paragraph","text":"API for Pro features: Built-in formulas, references, dependency recalculation and calculated columns"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"formula?: string","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["Required","Optional"],["Input type","string"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on an individual column object in columnDefs. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/formulas","title":"Formula calculation","description":"Formulas evaluate strings beginning with = and display the result in a cell. For example, =SUM(A1:A3) references the first column in the original column definitions and the first three source rows."}]}]}]},{"path":"/docs/columns/valueFormatter","kind":"column","title":"valueFormatter","summary":"Displays values as readable currency, dates, or other strings without changing the stored source type.","member":{"name":"valueFormatter","type":"GridCallback<[ValueFormatterParams<TData, TValue, TContext>], string> | string","description":"Displays values as readable currency, dates, or other strings without changing the stored source type.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Displays values as readable currency, dates, or other strings without changing the stored source type."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"valueFormatter?: GridCallback<[ValueFormatterParams<TData, TValue, TContext>], string> | string","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["Required","Optional"],["Input type","GridCallback<[ValueFormatterParams<TData, TValue, TContext>], string> | string"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on an individual column object in columnDefs. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridCallback","title":"GridCallback","description":""},{"path":"/docs/types/ValueFormatterParams","title":"ValueFormatterParams","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/value-getter-formatter","title":"Separate calculation and display","description":"valueGetter produces a calculated value, while valueFormatter produces readable display text. Return numbers from getters when totals, sorting, or comparisons require numeric values."}]}]}]},{"path":"/docs/columns/tooltipField","kind":"column","title":"tooltipField","summary":"Source data field used for tooltips.","member":{"name":"tooltipField","type":"GridFieldPath<TData>","description":"Source data field used for tooltips.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Source data field used for tooltips."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"tooltipField?: GridFieldPath<TData>","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["Required","Optional"],["Input type","GridFieldPath<TData>"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on an individual column object in columnDefs. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridFieldPath","title":"GridFieldPath","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/tooltip","title":"Cell tooltips","description":"Tooltips help users briefly inspect truncated names or long descriptions. Do not hide essential errors or guidance exclusively inside tooltips."}]}]}]},{"path":"/docs/columns/tooltipValueGetter","kind":"column","title":"tooltipValueGetter","summary":"Calculates tooltip content from the current cell context. Do not expose unauthorized values indirectly.","member":{"name":"tooltipValueGetter","type":"GridCallback<[ValueGetterParams<TData, TValue, TContext>], unknown> | string","description":"Calculates tooltip content from the current cell context. Do not expose unauthorized values indirectly.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Calculates tooltip content from the current cell context. Do not expose unauthorized values indirectly."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"tooltipValueGetter?: GridCallback<[ValueGetterParams<TData, TValue, TContext>], unknown> | string","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["Required","Optional"],["Input type","GridCallback<[ValueGetterParams<TData, TValue, TContext>], unknown> | string"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on an individual column object in columnDefs. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridCallback","title":"GridCallback","description":""},{"path":"/docs/types/ValueGetterParams","title":"ValueGetterParams","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/tooltip","title":"Cell tooltips","description":"Tooltips help users briefly inspect truncated names or long descriptions. Do not hide essential errors or guidance exclusively inside tooltips."}]}]}]},{"path":"/docs/columns/cellRenderer","kind":"column","title":"cellRenderer","summary":"Displays cells through text, html, vnode, or a registered custom renderer.","member":{"name":"cellRenderer","type":"| string\n    | CellRenderer<TData, TValue>\n    | GridRendererDefinition<TData, TValue, TContext>","description":"Displays cells through text, html, vnode, or a registered custom renderer.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Displays cells through text, html, vnode, or a registered custom renderer."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"cellRenderer?: | string\n    | CellRenderer<TData, TValue>\n    | GridRendererDefinition<TData, TValue, TContext>","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["Required","Optional"],["Input type","| string\n    | CellRenderer<TData, TValue>\n    | GridRendererDefinition<TData, TValue, TContext>"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on an individual column object in columnDefs. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/CellRenderer","title":"CellRenderer","description":""},{"path":"/docs/types/GridRendererDefinition","title":"GridRendererDefinition","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/custom-cells","title":"Customize cell appearance","description":"Cell renderers change how data is displayed. Use them for status badges, links, and action buttons while retaining the original values for sorting and filtering."}]}]}]},{"path":"/docs/columns/cellRendererMeta","kind":"column","title":"cellRendererMeta","summary":"Additional metadata passed to the cell renderer.","member":{"name":"cellRendererMeta","type":"Record<string, unknown>","description":"Additional metadata passed to the cell renderer.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Additional metadata passed to the cell renderer."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"cellRendererMeta?: Record<string, unknown>","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["Required","Optional"],["Input type","Record<string, unknown>"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on an individual column object in columnDefs. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/custom-cells","title":"Customize cell appearance","description":"Cell renderers change how data is displayed. Use them for status badges, links, and action buttons while retaining the original values for sorting and filtering."}]}]}]},{"path":"/docs/columns/cellEditor","kind":"column","title":"cellEditor","summary":"Declares a custom cell editor. Use editor to select a built-in editor type.","member":{"name":"cellEditor","type":"GridCellEditorDeclaration<TData, TValue, TContext>","description":"Declares a custom cell editor. Use editor to select a built-in editor type.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Declares a custom cell editor. Use editor to select a built-in editor type."},{"kind":"paragraph","text":"Rich Select Editor requires Pro. Custom cell editors are Free."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"cellEditor?: GridCellEditorDeclaration<TData, TValue, TContext>","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["Required","Optional"],["Input type","GridCellEditorDeclaration<TData, TValue, TContext>"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on an individual column object in columnDefs. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridCellEditorDeclaration","title":"GridCellEditorDeclaration","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/cell-editing","title":"Cell and row editing","description":"Cell editing changes one value immediately; full-row editing commits multiple fields as one row operation. editor specifies the input UI, while editable controls write access."},{"path":"/docs/features/rich-select","title":"Searchable selection editor","description":"This Pro editor narrows a large candidate list through search. Basic Select suits short, fixed lists; Rich Select helps users quickly find an item among many candidates."}]}]}]},{"path":"/docs/columns/floatingFilterComponent","kind":"column","title":"floatingFilterComponent","summary":"Custom filter input component displayed below the header.","member":{"name":"floatingFilterComponent","type":"| string\n    | GridFloatingFilterDefinition<unknown, TContext>","description":"Custom filter input component displayed below the header.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Custom filter input component displayed below the header."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"floatingFilterComponent?: | string\n    | GridFloatingFilterDefinition<unknown, TContext>","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["Required","Optional"],["Input type","| string\n    | GridFloatingFilterDefinition<unknown, TContext>"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on an individual column object in columnDefs. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridFloatingFilterDefinition","title":"GridFloatingFilterDefinition","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/column-filters","title":"Conditions for each column","description":"Column filters apply conditions to individual columns. Text, numbers, and dates use different inputs and comparisons; conditions across columns narrow results together."}]}]}]},{"path":"/docs/columns/cellClass","kind":"column","title":"cellClass","summary":"CSS classes for the cell or a callback returning classes.","member":{"name":"cellClass","type":"| string\n    | string[]\n    | GridCallback<[CellCallbackParams<TData, TValue, TContext>], string>","description":"CSS classes for the cell or a callback returning classes.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"CSS classes for the cell or a callback returning classes."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"cellClass?: | string\n    | string[]\n    | GridCallback<[CellCallbackParams<TData, TValue, TContext>], string>","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["Required","Optional"],["Input type","| string\n    | string[]\n    | GridCallback<[CellCallbackParams<TData, TValue, TContext>], string>"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on an individual column object in columnDefs. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridCallback","title":"GridCallback","description":""},{"path":"/docs/types/CellCallbackParams","title":"CellCallbackParams","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/custom-cells","title":"Customize cell appearance","description":"Cell renderers change how data is displayed. Use them for status badges, links, and action buttons while retaining the original values for sorting and filtering."}]}]}]},{"path":"/docs/columns/cellClassRules","kind":"column","title":"cellClassRules","summary":"Rules for applying CSS classes conditionally.","member":{"name":"cellClassRules","type":"Record<\n    string,\n    GridCallback<[CellCallbackParams<TData, TValue, TContext>], boolean> | string\n  >","description":"Rules for applying CSS classes conditionally.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Rules for applying CSS classes conditionally."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"cellClassRules?: Record<\n    string,\n    GridCallback<[CellCallbackParams<TData, TValue, TContext>], boolean> | string\n  >","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["Required","Optional"],["Input type","Record<\n    string,\n    GridCallback<[CellCallbackParams<TData, TValue, TContext>], boolean> | string\n  >"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on an individual column object in columnDefs. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridCallback","title":"GridCallback","description":""},{"path":"/docs/types/CellCallbackParams","title":"CellCallbackParams","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/custom-cells","title":"Customize cell appearance","description":"Cell renderers change how data is displayed. Use them for status badges, links, and action buttons while retaining the original values for sorting and filtering."}]}]}]},{"path":"/docs/columns/cellStyle","kind":"column","title":"cellStyle","summary":"Inline style object, callback, or array of these for the cell.","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":"Inline style object, callback, or array of these for the cell.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Inline style object, callback, or array of these for the cell."}]},{"id":"contract","title":"Exact input and result types","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":["Item","Value"],"rows":[["Required","Optional"],["Input 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      >"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on an individual column object in columnDefs. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridCallback","title":"GridCallback","description":""},{"path":"/docs/types/CellCallbackParams","title":"CellCallbackParams","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/custom-cells","title":"Customize cell appearance","description":"Cell renderers change how data is displayed. Use them for status badges, links, and action buttons while retaining the original values for sorting and filtering."}]}]}]},{"path":"/docs/columns/width","kind":"column","title":"width","summary":"Initial column width in pixels.","member":{"name":"width","type":"number","description":"Initial column width in pixels.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Initial column width in pixels."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"width?: number","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["Required","Optional"],["Input type","number"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on an individual column object in columnDefs. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/column-operations","title":"Column sizing and pinning","description":"Width, order, pinning, and visibility are independent column states. Combine them to pin order IDs, hide supporting information, and widen long product names."}]}]}]},{"path":"/docs/columns/minWidth","kind":"column","title":"minWidth","summary":"Minimum width allowed during user resizing and autosizing.","member":{"name":"minWidth","type":"number","description":"Minimum width allowed during user resizing and autosizing.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Minimum width allowed during user resizing and autosizing."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"minWidth?: number","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["Required","Optional"],["Input type","number"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on an individual column object in columnDefs. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/column-operations","title":"Column sizing and pinning","description":"Width, order, pinning, and visibility are independent column states. Combine them to pin order IDs, hide supporting information, and widen long product names."}]}]}]},{"path":"/docs/columns/maxWidth","kind":"column","title":"maxWidth","summary":"Maximum column width.","member":{"name":"maxWidth","type":"number","description":"Maximum column width.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Maximum column width."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"maxWidth?: number","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["Required","Optional"],["Input type","number"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on an individual column object in columnDefs. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/column-operations","title":"Column sizing and pinning","description":"Width, order, pinning, and visibility are independent column states. Combine them to pin order IDs, hide supporting information, and widen long product names."}]}]}]},{"path":"/docs/columns/flex","kind":"column","title":"flex","summary":"Relative share of remaining space. Review alongside fixed, minimum, and maximum widths.","member":{"name":"flex","type":"number","description":"Relative share of remaining space. Review alongside fixed, minimum, and maximum widths.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Relative share of remaining space. Review alongside fixed, minimum, and maximum widths."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"flex?: number","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["Required","Optional"],["Input type","number"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on an individual column object in columnDefs. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/column-operations","title":"Column sizing and pinning","description":"Width, order, pinning, and visibility are independent column states. Combine them to pin order IDs, hide supporting information, and widen long product names."}]}]}]},{"path":"/docs/columns/resizable","kind":"column","title":"resizable","summary":"Whether users can resize this column.","member":{"name":"resizable","type":"boolean","description":"Whether users can resize this column.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Whether users can resize this column."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"resizable?: boolean","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["Required","Optional"],["Input type","boolean"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on an individual column object in columnDefs. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/column-operations","title":"Column sizing and pinning","description":"Width, order, pinning, and visibility are independent column states. Combine them to pin order IDs, hide supporting information, and widen long product names."}]}]}]},{"path":"/docs/columns/reorderable","kind":"column","title":"reorderable","summary":"Whether users can move this column.","member":{"name":"reorderable","type":"boolean","description":"Whether users can move this column.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Whether users can move this column."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"reorderable?: boolean","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["Required","Optional"],["Input type","boolean"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on an individual column object in columnDefs. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/column-operations","title":"Column sizing and pinning","description":"Width, order, pinning, and visibility are independent column states. Combine them to pin order IDs, hide supporting information, and widen long product names."}]}]}]},{"path":"/docs/columns/pinned","kind":"column","title":"pinned","summary":"Pins the column left/right, or unpins it with null.","member":{"name":"pinned","type":"'left' | 'right' | null","description":"Pins the column left/right, or unpins it with null.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Pins the column left/right, or unpins it with null."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"pinned?: 'left' | 'right' | null","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["Required","Optional"],["Input type","'left' | 'right' | null"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on an individual column object in columnDefs. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/column-operations","title":"Column sizing and pinning","description":"Width, order, pinning, and visibility are independent column states. Combine them to pin order IDs, hide supporting information, and widen long product names."}]}]}]},{"path":"/docs/columns/columnGroupShow","kind":"column","title":"columnGroupShow","summary":"Chooses whether the column appears when its parent group is expanded or collapsed.","member":{"name":"columnGroupShow","type":"'open' | 'closed'","description":"Chooses whether the column appears when its parent group is expanded or collapsed.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Chooses whether the column appears when its parent group is expanded or collapsed."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"columnGroupShow?: 'open' | 'closed'","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["Required","Optional"],["Input type","'open' | 'closed'"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on an individual column object in columnDefs. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/column-groups","title":"Multi-level headers","description":"Multi-level headers place related columns under a shared heading. Unlike row grouping, they do not change data counts or aggregate values."}]}]}]},{"path":"/docs/columns/aggFunc","kind":"column","title":"aggFunc","summary":"Built-in or registered custom aggregate function name for grouping and analysis.","member":{"name":"aggFunc","type":"'sum' | 'avg' | 'min' | 'max' | 'count' | string","description":"Built-in or registered custom aggregate function name for grouping and analysis.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Built-in or registered custom aggregate function name for grouping and analysis."},{"kind":"paragraph","text":"API for Pro features: Row grouping, built-in aggregation and group totals"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"aggFunc?: 'sum' | 'avg' | 'min' | 'max' | 'count' | string","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["Required","Optional"],["Input type","'sum' | 'avg' | 'min' | 'max' | 'count' | string"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on an individual column object in columnDefs. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/row-grouping","title":"Grouping and aggregation","description":"Row grouping collects source rows with the same region or team into expandable groups. Unlike column groups, which organize headers, row groups change displayed rows and aggregation results."}]}]}]},{"path":"/docs/columns/hidden","kind":"column","title":"hidden","summary":"Whether the column starts hidden. Does not revoke read permission.","member":{"name":"hidden","type":"boolean","description":"Whether the column starts hidden. Does not revoke read permission.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Whether the column starts hidden. Does not revoke read permission."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"hidden?: boolean","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["Required","Optional"],["Input type","boolean"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on an individual column object in columnDefs. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/column-operations","title":"Column sizing and pinning","description":"Width, order, pinning, and visibility are independent column states. Combine them to pin order IDs, hide supporting information, and widen long product names."}]}]}]},{"path":"/docs/columns/hide","kind":"column","title":"hide","summary":"Compatibility alias for column hiding. Do not assign conflicting values to hidden.","member":{"name":"hide","type":"boolean","description":"Compatibility alias for column hiding. Do not assign conflicting values to hidden.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Compatibility alias for column hiding. Do not assign conflicting values to hidden."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"hide?: boolean","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["Required","Optional"],["Input type","boolean"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on an individual column object in columnDefs. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/column-operations","title":"Column sizing and pinning","description":"Width, order, pinning, and visibility are independent column states. Combine them to pin order IDs, hide supporting information, and widen long product names."}]}]}]},{"path":"/docs/columns/editable","kind":"column","title":"editable","summary":"Allows editing this column. Row permissions and validation still apply.","member":{"name":"editable","type":"boolean","description":"Allows editing this column. Row permissions and validation still apply.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Allows editing this column. Row permissions and validation still apply."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"editable?: boolean","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["Required","Optional"],["Input type","boolean"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on an individual column object in columnDefs. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/cell-editing","title":"Cell and row editing","description":"Cell editing changes one value immediately; full-row editing commits multiple fields as one row operation. editor specifies the input UI, while editable controls write access."}]}]}]},{"path":"/docs/columns/editor","kind":"column","title":"editor","summary":"Built-in editor type, such as text, number, date, select, or checkbox.","member":{"name":"editor","type":"'text' | 'number' | 'date' | 'select' | 'checkbox' | 'textarea' | 'autocomplete' | 'largeText'","description":"Built-in editor type, such as text, number, date, select, or checkbox.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Built-in editor type, such as text, number, date, select, or checkbox."},{"kind":"paragraph","text":"Rich Select (autocomplete) requires Pro. Basic cell editors are Free."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"editor?: 'text' | 'number' | 'date' | 'select' | 'checkbox' | 'textarea' | 'autocomplete' | 'largeText'","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["Required","Optional"],["Input type","'text' | 'number' | 'date' | 'select' | 'checkbox' | 'textarea' | 'autocomplete' | 'largeText'"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on an individual column object in columnDefs. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/cell-editing","title":"Cell and row editing","description":"Cell editing changes one value immediately; full-row editing commits multiple fields as one row operation. editor specifies the input UI, while editable controls write access."},{"path":"/docs/features/rich-select","title":"Searchable selection editor","description":"This Pro editor narrows a large candidate list through search. Basic Select suits short, fixed lists; Rich Select helps users quickly find an item among many candidates."}]}]}]},{"path":"/docs/columns/valueParser","kind":"column","title":"valueParser","summary":"Converts input text to the stored type, for example by normalizing numbers or dates.","member":{"name":"valueParser","type":"GridCallback<[ValueParserParams<TData, TValue, TContext>], TValue>","description":"Converts input text to the stored type, for example by normalizing numbers or dates.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Converts input text to the stored type, for example by normalizing numbers or dates."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"valueParser?: GridCallback<[ValueParserParams<TData, TValue, TContext>], TValue>","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["Required","Optional"],["Input type","GridCallback<[ValueParserParams<TData, TValue, TContext>], TValue>"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on an individual column object in columnDefs. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridCallback","title":"GridCallback","description":""},{"path":"/docs/types/ValueParserParams","title":"ValueParserParams","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/cell-editing","title":"Cell and row editing","description":"Cell editing changes one value immediately; full-row editing commits multiple fields as one row operation. editor specifies the input UI, while editable controls write access."}]}]}]},{"path":"/docs/columns/valueSetter","kind":"column","title":"valueSetter","summary":"Custom logic for writing a converted value into the source row. Follow the return contract indicating whether a change occurred.","member":{"name":"valueSetter","type":"GridCallback<\n    [ValueSetterParams<TData, TValue, TContext>],\n    boolean | void\n  >","description":"Custom logic for writing a converted value into the source row. Follow the return contract indicating whether a change occurred.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Custom logic for writing a converted value into the source row. Follow the return contract indicating whether a change occurred."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"valueSetter?: GridCallback<\n    [ValueSetterParams<TData, TValue, TContext>],\n    boolean | void\n  >","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["Required","Optional"],["Input type","GridCallback<\n    [ValueSetterParams<TData, TValue, TContext>],\n    boolean | void\n  >"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on an individual column object in columnDefs. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridCallback","title":"GridCallback","description":""},{"path":"/docs/types/ValueSetterParams","title":"ValueSetterParams","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/cell-editing","title":"Cell and row editing","description":"Cell editing changes one value immediately; full-row editing commits multiple fields as one row operation. editor specifies the input UI, while editable controls write access."}]}]}]},{"path":"/docs/columns/comparator","kind":"column","title":"comparator","summary":"Compares two values and rows for sorting. Negative, zero, and positive results mean before, equal, and after.","member":{"name":"comparator","type":"GridCallback<[TValue, TValue, Readonly<TData>, Readonly<TData>], number>","description":"Compares two values and rows for sorting. Negative, zero, and positive results mean before, equal, and after.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Compares two values and rows for sorting. Negative, zero, and positive results mean before, equal, and after."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"comparator?: GridCallback<[TValue, TValue, Readonly<TData>, Readonly<TData>], number>","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["Required","Optional"],["Input type","GridCallback<[TValue, TValue, Readonly<TData>, Readonly<TData>], number>"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on an individual column object in columnDefs. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridCallback","title":"GridCallback","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/sorting","title":"Single and multiple sorting","description":"Sorting changes display order without modifying data values. Single sorting uses one criterion; multiple sorting uses prioritized criteria."}]}]}]},{"path":"/docs/columns/options","kind":"column","title":"options","summary":"Values and display labels for select editors. Individual options can be disabled.","member":{"name":"options","type":"ReadonlyArray<{ value: unknown; label: string; disabled?: boolean }>","description":"Values and display labels for select editors. Individual options can be disabled.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Values and display labels for select editors. Individual options can be disabled."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"options?: ReadonlyArray<{ value: unknown; label: string; disabled?: boolean }>","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["Required","Optional"],["Input type","ReadonlyArray<{ value: unknown; label: string; disabled?: boolean }>"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on an individual column object in columnDefs. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/cell-editing","title":"Cell and row editing","description":"Cell editing changes one value immediately; full-row editing commits multiple fields as one row operation. editor specifies the input UI, while editable controls write access."}]}]}]},{"path":"/docs/columns/min","kind":"column","title":"min","summary":"Minimum allowed value for number or date editing.","member":{"name":"min","type":"number | Date | string","description":"Minimum allowed value for number or date editing.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Minimum allowed value for number or date editing."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"min?: number | Date | string","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["Required","Optional"],["Input type","number | Date | string"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on an individual column object in columnDefs. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/cell-editing","title":"Cell and row editing","description":"Cell editing changes one value immediately; full-row editing commits multiple fields as one row operation. editor specifies the input UI, while editable controls write access."}]}]}]},{"path":"/docs/columns/max","kind":"column","title":"max","summary":"Maximum allowed value for number or date editing.","member":{"name":"max","type":"number | Date | string","description":"Maximum allowed value for number or date editing.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Maximum allowed value for number or date editing."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"max?: number | Date | string","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["Required","Optional"],["Input type","number | Date | string"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on an individual column object in columnDefs. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/cell-editing","title":"Cell and row editing","description":"Cell editing changes one value immediately; full-row editing commits multiple fields as one row operation. editor specifies the input UI, while editable controls write access."}]}]}]},{"path":"/docs/columns/step","kind":"column","title":"step","summary":"Increment/decrement step for numeric input.","member":{"name":"step","type":"number","description":"Increment/decrement step for numeric input.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Increment/decrement step for numeric input."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"step?: number","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["Required","Optional"],["Input type","number"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on an individual column object in columnDefs. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/cell-editing","title":"Cell and row editing","description":"Cell editing changes one value immediately; full-row editing commits multiple fields as one row operation. editor specifies the input UI, while editable controls write access."}]}]}]},{"path":"/docs/columns/decimals","kind":"column","title":"decimals","summary":"Decimal precision for numeric editing.","member":{"name":"decimals","type":"number","description":"Decimal precision for numeric editing.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Decimal precision for numeric editing."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"decimals?: number","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["Required","Optional"],["Input type","number"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on an individual column object in columnDefs. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/cell-editing","title":"Cell and row editing","description":"Cell editing changes one value immediately; full-row editing commits multiple fields as one row operation. editor specifies the input UI, while editable controls write access."}]}]}]},{"path":"/docs/columns/nullable","kind":"column","title":"nullable","summary":"Whether null is accepted as an edited value.","member":{"name":"nullable","type":"boolean","description":"Whether null is accepted as an edited value.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Whether null is accepted as an edited value."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"nullable?: boolean","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["Required","Optional"],["Input type","boolean"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on an individual column object in columnDefs. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/cell-editing","title":"Cell and row editing","description":"Cell editing changes one value immediately; full-row editing commits multiple fields as one row operation. editor specifies the input UI, while editable controls write access."}]}]}]},{"path":"/docs/columns/allowEmpty","kind":"column","title":"allowEmpty","summary":"Whether empty values are allowed while editing. Review together with required-value validation.","member":{"name":"allowEmpty","type":"boolean","description":"Whether empty values are allowed while editing. Review together with required-value validation.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Whether empty values are allowed while editing. Review together with required-value validation."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"allowEmpty?: boolean","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["Required","Optional"],["Input type","boolean"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on an individual column object in columnDefs. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/cell-editing","title":"Cell and row editing","description":"Cell editing changes one value immediately; full-row editing commits multiple fields as one row operation. editor specifies the input UI, while editable controls write access."}]}]}]},{"path":"/docs/columns/storeAs","kind":"column","title":"storeAs","summary":"Whether date edits are stored as Date objects or ISO strings.","member":{"name":"storeAs","type":"'date' | 'iso'","description":"Whether date edits are stored as Date objects or ISO strings.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Whether date edits are stored as Date objects or ISO strings."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"storeAs?: 'date' | 'iso'","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["Required","Optional"],["Input type","'date' | 'iso'"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on an individual column object in columnDefs. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/cell-editing","title":"Cell and row editing","description":"Cell editing changes one value immediately; full-row editing commits multiple fields as one row operation. editor specifies the input UI, while editable controls write access."}]}]}]},{"path":"/docs/columns/rows","kind":"column","title":"rows","summary":"Default visible line count for a multiline text editor.","member":{"name":"rows","type":"number","description":"Default visible line count for a multiline text editor.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Default visible line count for a multiline text editor."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"rows?: number","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["Required","Optional"],["Input type","number"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on an individual column object in columnDefs. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/cell-editing","title":"Cell and row editing","description":"Cell editing changes one value immediately; full-row editing commits multiple fields as one row operation. editor specifies the input UI, while editable controls write access."}]}]}]},{"path":"/docs/columns/maxRows","kind":"column","title":"maxRows","summary":"Maximum line count to which a multiline editor can grow.","member":{"name":"maxRows","type":"number","description":"Maximum line count to which a multiline editor can grow.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Maximum line count to which a multiline editor can grow."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"maxRows?: number","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["Required","Optional"],["Input type","number"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on an individual column object in columnDefs. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/cell-editing","title":"Cell and row editing","description":"Cell editing changes one value immediately; full-row editing commits multiple fields as one row operation. editor specifies the input UI, while editable controls write access."}]}]}]},{"path":"/docs/columns/cols","kind":"column","title":"cols","summary":"Display width basis for a multiline text editor.","member":{"name":"cols","type":"number","description":"Display width basis for a multiline text editor.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Display width basis for a multiline text editor."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"cols?: number","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["Required","Optional"],["Input type","number"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on an individual column object in columnDefs. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/cell-editing","title":"Cell and row editing","description":"Cell editing changes one value immediately; full-row editing commits multiple fields as one row operation. editor specifies the input UI, while editable controls write access."}]}]}]},{"path":"/docs/columns/maxLength","kind":"column","title":"maxLength","summary":"Maximum text editing length.","member":{"name":"maxLength","type":"number","description":"Maximum text editing length.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Maximum text editing length."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"maxLength?: number","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["Required","Optional"],["Input type","number"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on an individual column object in columnDefs. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/cell-editing","title":"Cell and row editing","description":"Cell editing changes one value immediately; full-row editing commits multiple fields as one row operation. editor specifies the input UI, while editable controls write access."}]}]}]},{"path":"/docs/columns/rowDrag","kind":"column","title":"rowDrag","summary":"Provides a row drag handle in this column. Use with the Grid's drag policy.","member":{"name":"rowDrag","type":"boolean","description":"Provides a row drag handle in this column. Use with the Grid's drag policy.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Provides a row drag handle in this column. Use with the Grid's drag policy."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"rowDrag?: boolean","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["Required","Optional"],["Input type","boolean"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on an individual column object in columnDefs. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/row-drag","title":"Row dragging","description":"Managed row dragging applies user-defined order to Grid data. Manual reordering can conflict with display order determined by sorting."}]}]}]},{"path":"/docs/columns/wrapText","kind":"column","title":"wrapText","summary":"Allows cell text wrapping. Content may clip without sufficient height.","member":{"name":"wrapText","type":"boolean","description":"Allows cell text wrapping. Content may clip without sufficient height.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Allows cell text wrapping. Content may clip without sufficient height."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"wrapText?: boolean","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["Required","Optional"],["Input type","boolean"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on an individual column object in columnDefs. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/virtualization","title":"Large data sets","description":"Virtualization renders only row and column DOM needed near the viewport. It is separate from row models that fetch only part of the data from a server."}]}]}]},{"path":"/docs/columns/autoHeight","kind":"column","title":"autoHeight","summary":"Calculates row height from cell content. Review costs with virtualization and large data sets.","member":{"name":"autoHeight","type":"boolean","description":"Calculates row height from cell content. Review costs with virtualization and large data sets.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Calculates row height from cell content. Review costs with virtualization and large data sets."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"autoHeight?: boolean","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["Required","Optional"],["Input type","boolean"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on an individual column object in columnDefs. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/virtualization","title":"Large data sets","description":"Virtualization renders only row and column DOM needed near the viewport. It is separate from row models that fetch only part of the data from a server."}]}]}]},{"path":"/docs/columns/rowSpan","kind":"column","title":"rowSpan","summary":"Returns the vertical row span from cell context. Inspect span reports for conflicts and display-model restrictions.","member":{"name":"rowSpan","type":"(params: SyGridRowSpanParams<TData>) => number","description":"Returns the vertical row span from cell context. Inspect span reports for conflicts and display-model restrictions.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Returns the vertical row span from cell context. Inspect span reports for conflicts and display-model restrictions."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"rowSpan?: (params: SyGridRowSpanParams<TData>) => number","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["Required","Optional"],["Input type","(params: SyGridRowSpanParams<TData>) => number"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on an individual column object in columnDefs. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridRowSpanParams","title":"SyGridRowSpanParams","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/row-layout","title":"Row height and pinned rows","description":"Row height, top/bottom pinned rows, full-width rows, and merged cells are separate layout features. Choose based on whether you need persistent summaries or wide detail content."}]}]}]},{"path":"/docs/columns/colSpan","kind":"column","title":"colSpan","summary":"Returns the horizontal column span from cell context. Account for pinned boundaries and hidden columns.","member":{"name":"colSpan","type":"(params: SyGridColSpanParams<TData>) => number","description":"Returns the horizontal column span from cell context. Account for pinned boundaries and hidden columns.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Returns the horizontal column span from cell context. Account for pinned boundaries and hidden columns."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"colSpan?: (params: SyGridColSpanParams<TData>) => number","language":"typescript"},{"kind":"table","headers":["Item","Value"],"rows":[["Required","Optional"],["Input type","(params: SyGridColSpanParams<TData>) => number"]]}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Set this on an individual column object in columnDefs. Pass arrays, objects, and callbacks through JavaScript, and use new arrays or objects when applying changes."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridColSpanParams","title":"SyGridColSpanParams","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/row-layout","title":"Row height and pinned rows","description":"Row height, top/bottom pinned rows, full-width rows, and merged cells are separate layout features. Choose based on whether you need persistent summaries or wide detail content."}]}]}]},{"path":"/docs/methods","kind":"index","title":"Methods","summary":"Find 203 sy-grid Methods entries by name and open their descriptions, types, and examples.","sections":[{"id":"index","title":"Complete list","blocks":[{"kind":"links","items":[{"path":"/docs/methods/getAuditLog","title":"getAuditLog","description":"Reads audit records as an array, optionally filtered by type, sequence, or time. Returns an empty array when recording is disabled."},{"path":"/docs/methods/clearAuditLog","title":"clearAuditLog","description":"Clears retained audit records. Sequence numbers continue increasing and are not reused."},{"path":"/docs/methods/getAuditLogAsCsv","title":"getAuditLogAsCsv","description":"Converts audit records to CSV text for inspection or transfer without downloading a file."},{"path":"/docs/methods/getAuditLogAsJson","title":"getAuditLogAsJson","description":"Reads audit records as a structured JSON array string. Use pretty for readable indentation."},{"path":"/docs/methods/exportAuditLogAsCsv","title":"exportAuditLogAsCsv","description":"Downloads selected audit records as a CSV file."},{"path":"/docs/methods/exportAuditLogAsJson","title":"exportAuditLogAsJson","description":"Downloads selected audit records as a JSON file."},{"path":"/docs/methods/openCellCommentPanel","title":"openCellCommentPanel","description":"Opens a collaboration comment panel for a row ID and field. Separate from standalone cell note adapters."},{"path":"/docs/methods/closeCellCommentPanel","title":"closeCellCommentPanel","description":"Closes the collaboration comment panel without deleting comment data."},{"path":"/docs/methods/getApi","title":"getApi","description":"Accesses the current Grid's typed API and app context. Read from a fully initialized element."},{"path":"/docs/methods/getColumn","title":"getColumn","description":"Finds a current column object by ID. Returns null for missing columns and reflects live state rather than an initial columnDefs copy."},{"path":"/docs/methods/getColumns","title":"getColumns","description":"Reads current column objects to connect widths, order, and visibility to your app."},{"path":"/docs/methods/getColumnGroup","title":"getColumnGroup","description":"Finds a current column group by ID. Returns null if absent."},{"path":"/docs/methods/getColumnGroups","title":"getColumnGroups","description":"Reads current column group objects."},{"path":"/docs/methods/getRow","title":"getRow","description":"Finds a row object by stable row ID, rather than display index."},{"path":"/docs/methods/getDisplayedRowAtIndex","title":"getDisplayedRowAtIndex","description":"Finds a row object by its current display index. Sorting, filtering, and grouping can change the row at an index."},{"path":"/docs/methods/forEachRow","title":"forEachRow","description":"Runs a callback for each row object. Use forEachDisplayedRow when display order matters."},{"path":"/docs/methods/forEachDisplayedRow","title":"forEachDisplayedRow","description":"Iterates current displayed rows for app features that distinguish source order from display order."},{"path":"/docs/methods/getWorkbookBinding","title":"getWorkbookBinding","description":"Reads current workbook and sheet connection information, or null when disconnected."},{"path":"/docs/methods/reconnectWorkbook","title":"reconnectWorkbook","description":"Rebuilds the connection from current workbook settings and returns the result."},{"path":"/docs/methods/disconnectWorkbook","title":"disconnectWorkbook","description":"Disconnects the workbook. Review the effect on cross-sheet formula propagation."},{"path":"/docs/methods/sortBy","title":"sortBy","description":"Sets one column's sorting. Omitted direction cycles sorting; null clears that column. Use setSortModel for the full multi-column model."},{"path":"/docs/methods/setSortModel","title":"setSortModel","description":"Replaces sort criteria and priorities together. An empty array clears all sorting."},{"path":"/docs/methods/getSortModel","title":"getSortModel","description":"Reads current sort columns, directions, and priorities."},{"path":"/docs/methods/setQuery","title":"setQuery","description":"Passes query conditions to the processing engine. Review GridQuery and support in the active row model."},{"path":"/docs/methods/getActiveTier","title":"getActiveTier","description":"Reads the actual active processing tier, which may differ from the requested engine mode."},{"path":"/docs/methods/registerAggFunc","title":"registerAggFunc","description":"Registers a named custom aggregate function. Use unique names because an existing function with the same name can be replaced."},{"path":"/docs/methods/unregisterAggFunc","title":"unregisterAggFunc","description":"Removes a registered custom aggregate function. Also update aggFunc settings in columns using it."},{"path":"/docs/methods/getRegisteredAggFuncNames","title":"getRegisteredAggFuncNames","description":"Reads currently registered aggregate function names."},{"path":"/docs/methods/setRowGroupExpanded","title":"setRowGroupExpanded","description":"Expands or collapses a row group by its actual group key. Missing groups and unchanged states are ignored."},{"path":"/docs/methods/expandAllRowGroups","title":"expandAllRowGroups","description":"Expands all current row groups. Each changed group emits a toggle event."},{"path":"/docs/methods/collapseAllRowGroups","title":"collapseAllRowGroups","description":"Collapses all collapsible row groups in the current data."},{"path":"/docs/methods/setTreeNodeExpanded","title":"setTreeNodeExpanded","description":"Expands or collapses a tree node by path. Leaf nodes and missing paths cannot be expanded."},{"path":"/docs/methods/expandAllTreeNodes","title":"expandAllTreeNodes","description":"Expands all expandable nodes in the current tree."},{"path":"/docs/methods/collapseAllTreeNodes","title":"collapseAllTreeNodes","description":"Collapses all branch nodes in the current tree."},{"path":"/docs/methods/setDetailRowExpanded","title":"setDetailRowExpanded","description":"Expands or collapses a detail panel by stable parent row ID."},{"path":"/docs/methods/expandAllDetailRows","title":"expandAllDetailRows","description":"Expands detail rows across all pages passing the current filter. Consider request volume with lazy loading."},{"path":"/docs/methods/collapseAllDetailRows","title":"collapseAllDetailRows","description":"Collapses all open detail rows and cleans up their panel resources."},{"path":"/docs/methods/setColumnGroupOpened","title":"setColumnGroupOpened","description":"Expands or collapses the specified column group header."},{"path":"/docs/methods/getValidationErrors","title":"getValidationErrors","description":"Reads row, field, value, and message information for current validation errors. Connect to save guidance or an error list."},{"path":"/docs/methods/captureSnapshot","title":"captureSnapshot","description":"Creates a named snapshot of current source data and returns its ID. Separate from saving column layouts."},{"path":"/docs/methods/listSnapshots","title":"listSnapshots","description":"Reads metadata for retained data snapshots."},{"path":"/docs/methods/deleteSnapshot","title":"deleteSnapshot","description":"Deletes a data snapshot and returns success without changing current data."},{"path":"/docs/methods/diffSnapshots","title":"diffSnapshots","description":"Compares two snapshots or a snapshot with current data. Omit the second ID to compare against current data."},{"path":"/docs/methods/restoreSnapshot","title":"restoreSnapshot","description":"Restores source data from a snapshot. Does not automatically save to the server or restore view state."},{"path":"/docs/methods/getCellRanges","title":"getCellRanges","description":"Reads current cell selection boundaries. Review the meaning of display row/column coordinates."},{"path":"/docs/methods/copyRangeToClipboard","title":"copyRangeToClipboard","description":"Copies the selected range and returns success. Check browser permissions and user activation requirements."},{"path":"/docs/methods/pasteFromClipboard","title":"pasteFromClipboard","description":"Pastes clipboard content into the current target. Inspect applied and skipped cells in the result event."},{"path":"/docs/methods/clearCellRanges","title":"clearCellRanges","description":"Clears all cell selection ranges. Row selection is separate."},{"path":"/docs/methods/refreshInfiniteCache","title":"refreshInfiniteCache","description":"Refetches the infinite row model's cache. Prepare updated server conditions and the data provider first."},{"path":"/docs/methods/refreshRowHeights","title":"refreshRowHeights","description":"Recalculates row heights after content or height callback inputs change."},{"path":"/docs/methods/scrollToTop","title":"scrollToTop","description":"Scrolls the Grid to the top."},{"path":"/docs/methods/selectRows","title":"selectRows","description":"Sets selection for specified row IDs. Use stable IDs, not display indices."},{"path":"/docs/methods/getSelectedRowIds","title":"getSelectedRowIds","description":"Reads selected row IDs. Use dedicated server selection state APIs for server-wide selection."},{"path":"/docs/methods/applyTransaction","title":"applyTransaction","description":"Adds, updates, and removes source rows by stable ID. Inspect results separately from app server saving."},{"path":"/docs/methods/undo","title":"undo","description":"Undoes one recorded editing step and returns whether it ran."},{"path":"/docs/methods/redo","title":"redo","description":"Redoes one undone step and returns whether it ran."},{"path":"/docs/methods/clearHistory","title":"clearHistory","description":"Clears undo/redo history without resetting current data values."},{"path":"/docs/methods/connectCollabRoom","title":"connectCollabRoom","description":"Starts the configured collaboration room connection and returns synchronization state."},{"path":"/docs/methods/preloadChunks","title":"preloadChunks","description":"Preloads feature code. Does not activate entitlements or prefetch data."},{"path":"/docs/methods/disconnectCollabRoom","title":"disconnectCollabRoom","description":"Disconnects from the current collaboration room."},{"path":"/docs/methods/getSyncStatus","title":"getSyncStatus","description":"Reads current collaboration connection and synchronization state."},{"path":"/docs/methods/getCollaborators","title":"getCollaborators","description":"Reads current collaboration participant information."},{"path":"/docs/methods/addCellComment","title":"addCellComment","description":"Adds a cell comment in an active collaboration session and returns its ID or null."},{"path":"/docs/methods/getCellComments","title":"getCellComments","description":"Reads collaboration comments associated with a row ID and field."},{"path":"/docs/methods/setCellCommentResolved","title":"setCellCommentResolved","description":"Changes a comment's resolved state and returns success."},{"path":"/docs/methods/deleteCellComment","title":"deleteCellComment","description":"Deletes a collaboration comment and returns success."},{"path":"/docs/methods/getDataAsCsv","title":"getDataAsCsv","description":"Returns an object with CSV text and output row/column counts. Read the string from its csv field."},{"path":"/docs/methods/exportDataAsCsv","title":"exportDataAsCsv","description":"Downloads CSV using current export conditions and returns the export result."},{"path":"/docs/methods/getDataAsExcel","title":"getDataAsExcel","description":"Generates XLSX content as Uint8Array bytes for app attachments, uploads, and similar uses."},{"path":"/docs/methods/exportDataAsExcel","title":"exportDataAsExcel","description":"Downloads an XLSX file using the specified sheet name, columns, and selection conditions."},{"path":"/docs/methods/importCsvText","title":"importCsvText","description":"Parses CSV text and replaces columns and source data. For appending rows, parse separately and use transactions."},{"path":"/docs/methods/getDataAsPdf","title":"getDataAsPdf","description":"Returns PDF generation results without downloading. Prepare a suitable font for characters such as Korean text."},{"path":"/docs/methods/exportDataAsPdf","title":"exportDataAsPdf","description":"Downloads the table as PDF and returns generation results."},{"path":"/docs/methods/importDataFromXlsx","title":"importDataFromXlsx","description":"Parses file bytes into a workbook and returns XlsxImportResult. Read the Grid snapshot from the xlsxImported event."},{"path":"/docs/methods/getContextMenuItems","title":"getContextMenuItems","description":"Calculates context-menu items for a displayed row and field."},{"path":"/docs/methods/copyCellAt","title":"copyCellAt","description":"Copies the value at a displayed row and field and returns success."},{"path":"/docs/methods/copyRowAt","title":"copyRowAt","description":"Copies a displayed row and returns success."},{"path":"/docs/methods/getCellTooltipText","title":"getCellTooltipText","description":"Calculates actual tooltip text from the target cell and overflow context."},{"path":"/docs/methods/getUndoRedoDepth","title":"getUndoRedoDepth","description":"Reads the number of available undo and redo steps."},{"path":"/docs/methods/setColumnWidth","title":"setColumnWidth","description":"Sets the current column width. Review minimum and maximum constraints too."},{"path":"/docs/methods/resetColumnWidth","title":"resetColumnWidth","description":"Resets the specified column's user-adjusted width to its initial setting."},{"path":"/docs/methods/getColumnWidth","title":"getColumnWidth","description":"Reads the current column width, or null if the column is absent."},{"path":"/docs/methods/setColumnPinned","title":"setColumnPinned","description":"Pins a column left/right or unpins it."},{"path":"/docs/methods/getColumnPinned","title":"getColumnPinned","description":"Reads the column's current pinning direction."},{"path":"/docs/methods/setColumnOrder","title":"setColumnOrder","description":"Sets display order using column IDs."},{"path":"/docs/methods/getColumnOrder","title":"getColumnOrder","description":"Reads column IDs in current display order."},{"path":"/docs/methods/hideColumn","title":"hideColumn","description":"Hides a column without deleting source data or revoking read permission."},{"path":"/docs/methods/showColumn","title":"showColumn","description":"Shows a hidden column."},{"path":"/docs/methods/toggleColumnVisibility","title":"toggleColumnVisibility","description":"Toggles column visibility and returns the resulting state."},{"path":"/docs/methods/setHiddenColumns","title":"setHiddenColumns","description":"Sets the list of hidden columns at once."},{"path":"/docs/methods/resetColumnVisibility","title":"resetColumnVisibility","description":"Resets column visibility to initial settings."},{"path":"/docs/methods/getHiddenColumns","title":"getHiddenColumns","description":"Reads IDs of currently hidden columns."},{"path":"/docs/methods/autoSizeColumn","title":"autoSizeColumn","description":"Measures currently available content and applies an appropriate width to one column."},{"path":"/docs/methods/autoSizeAllColumns","title":"autoSizeAllColumns","description":"Autosizes all columns. Do not assume unloaded server values can be measured."},{"path":"/docs/methods/getColumnState","title":"getColumnState","description":"Reads serializable column width, order, visibility, sorting, and pinning state."},{"path":"/docs/methods/applyColumnState","title":"applyColumnState","description":"Restores saved column state. Verify that IDs match current columns."},{"path":"/docs/methods/getState","title":"getState","description":"Reads an immutable, versioned snapshot of the complete view state. Does not back up source row data."},{"path":"/docs/methods/setState","title":"setState","description":"Restores complete or selected state slices and returns applied/issue reports. Only slices in appliedSlices were actually applied."},{"path":"/docs/methods/getFilterModel","title":"getFilterModel","description":"Reads combined state across current filter families."},{"path":"/docs/methods/setFilterModel","title":"setFilterModel","description":"Applies a validated combined filter model. null clears all filter families; inspect reports for invalid models."},{"path":"/docs/methods/getCanonicalRanges","title":"getCanonicalRanges","description":"Reads current selection as normalized ranges including stable row and column IDs."},{"path":"/docs/methods/setCanonicalRanges","title":"setCanonicalRanges","description":"Changes cell selection from normalized range input and returns the change result."},{"path":"/docs/methods/startBatchEdit","title":"startBatchEdit","description":"Starts batch editing to collect multiple cell changes for a single commit."},{"path":"/docs/methods/isBatchEditing","title":"isBatchEditing","description":"Checks whether batch editing is active."},{"path":"/docs/methods/stageBatchCell","title":"stageBatchCell","description":"Stages a batch value by row and column ID. Does not immediately persist final data."},{"path":"/docs/methods/getPendingBatchCells","title":"getPendingBatchCells","description":"Reads uncommitted batch editing cells."},{"path":"/docs/methods/cancelBatchEdit","title":"cancelBatchEdit","description":"Cancels pending batch edits and returns the cancelled item count."},{"path":"/docs/methods/commitBatchEdit","title":"commitBatchEdit","description":"Validates and commits staged changes, reporting per-cell results."},{"path":"/docs/methods/startRowEdit","title":"startRowEdit","description":"Starts full-row editing for a row ID."},{"path":"/docs/methods/stopRowEdit","title":"stopRowEdit","description":"Commits or cancels current row editing and returns a report."},{"path":"/docs/methods/stageRowEditCell","title":"stageRowEditCell","description":"Sets a pending value for a column in the row currently being edited."},{"path":"/docs/methods/getStateCaptureReport","title":"getStateCaptureReport","description":"Reads omissions and issues from the latest view-state capture to assess saved-state completeness."},{"path":"/docs/methods/fillRange","title":"fillRange","description":"Fills a target range from source values or patterns and reports applied and rejected results."},{"path":"/docs/methods/getDisplayRowInfo","title":"getDisplayRowInfo","description":"Reads the displayed row kind, such as data, group, or detail."},{"path":"/docs/methods/getPivotCombinationReport","title":"getPivotCombinationReport","description":"Reads activation, priority, and restriction decisions for the current combination of pivoting and other features."},{"path":"/docs/methods/getPivotSecondaryColumns","title":"getPivotSecondaryColumns","description":"Reads the identity model of result columns created by the active client pivot, or null when no pivot is active."},{"path":"/docs/methods/getGroupCheckStates","title":"getGroupCheckStates","description":"Calculates group selection state. Returns rejection reasons when collapsed groups, missing row IDs, or other row models prevent a reliable result."},{"path":"/docs/methods/startRowDrag","title":"startRowDrag","description":"Starts a row drag session through the public input contract. Check whether it started and any rejection reason."},{"path":"/docs/methods/getRowDragSession","title":"getRowDragSession","description":"Reads current row drag session progress."},{"path":"/docs/methods/registerDropZone","title":"registerDropZone","description":"Registers a drop area for receiving rows and returns the registration result."},{"path":"/docs/methods/unregisterDropZone","title":"unregisterDropZone","description":"Unregisters a drop area and returns success."},{"path":"/docs/methods/getDropZones","title":"getDropZones","description":"Reads current drop-area registration state."},{"path":"/docs/methods/getDragSafetyReport","title":"getDragSafetyReport","description":"Reports whether row dragging is safe under current settings and describes restrictions."},{"path":"/docs/methods/setAlignedGrids","title":"setAlignedGrids","description":"Configures aligned Grid connections and returns the result."},{"path":"/docs/methods/getAlignedGrids","title":"getAlignedGrids","description":"Reads connected Grids and alignment state."},{"path":"/docs/methods/reparentRows","title":"reparentRows","description":"Reparents tree rows and reports applied/rejected results. Check cycle, permission, and row-model restrictions."},{"path":"/docs/methods/getFullWidthRowInfo","title":"getFullWidthRowInfo","description":"Reads one full-width row's information, or the complete layout report when no argument is supplied."},{"path":"/docs/methods/setPinnedRows","title":"setPinnedRows","description":"Sets top/bottom pinned row data and returns the application result."},{"path":"/docs/methods/getPinnedRows","title":"getPinnedRows","description":"Reads current pinned row data as a report."},{"path":"/docs/methods/getPinnedRowInfo","title":"getPinnedRowInfo","description":"Reads details of a specified pinned row."},{"path":"/docs/methods/getRowSpan","title":"getRowSpan","description":"Reads calculated vertical span ranges."},{"path":"/docs/methods/getCellSpan","title":"getCellSpan","description":"Reads horizontal and vertical span information for a cell."},{"path":"/docs/methods/getSpanInteraction","title":"getSpanInteraction","description":"Inspects how merged cells interact with selection, copying, and related actions."},{"path":"/docs/methods/getServerSideSelectionState","title":"getServerSideSelectionState","description":"Reads select-all conditions and exception IDs for the flat server row model. Reports a model mismatch for grouped models."},{"path":"/docs/methods/getServerGroupSelectionState","title":"getServerGroupSelectionState","description":"Reads hierarchical select-all and exception state for the grouped server row model."},{"path":"/docs/methods/setServerSideSelectionState","title":"setServerSideSelectionState","description":"Replaces select-all conditions and exception IDs in the flat server row model."},{"path":"/docs/methods/setServerGroupSelectionState","title":"setServerGroupSelectionState","description":"Replaces hierarchical selection state in the grouped server row model."},{"path":"/docs/methods/selectAllServerSide","title":"selectAllServerSide","description":"Sets server-wide selection conditions without materializing every server row in memory."},{"path":"/docs/methods/selectServerGroupChildren","title":"selectServerGroupChildren","description":"Selects or deselects server descendants beneath a group-key path."},{"path":"/docs/methods/refreshServerSide","title":"refreshServerSide","description":"Refetches the specified server store scope and returns the result."},{"path":"/docs/methods/applyServerSideTransaction","title":"applyServerSideTransaction","description":"Applies row changes to the server row model's cache, separately from saving server source data."},{"path":"/docs/methods/applyServerSideTransactionAsync","title":"applyServerSideTransactionAsync","description":"Queues a server row transaction asynchronously. Queue acceptance differs from final application."},{"path":"/docs/methods/flushServerSideAsyncTransactions","title":"flushServerSideAsyncTransactions","description":"Processes pending server row transactions and returns a completion report."},{"path":"/docs/methods/getServerSideStoreState","title":"getServerSideStoreState","description":"Reads server store paths, states, and block caches. Assess loading through block counts and complete as well as state names."},{"path":"/docs/methods/getServerPivotResultColumns","title":"getServerPivotResultColumns","description":"Reads the server-supplied pivot result column model. Distinguish stale metadata from absent metadata."},{"path":"/docs/methods/auditServerPivotResultColumns","title":"auditServerPivotResultColumns","description":"Checks whether server pivot column IDs used for charts, export, or restoration still exist in the current model."},{"path":"/docs/methods/getWorkbookPropagationState","title":"getWorkbookPropagationState","description":"Reads cross-sheet formula propagation connections, registrations, rejections, and latest publication information."},{"path":"/docs/methods/flushWorkbookPropagation","title":"flushWorkbookPropagation","description":"Processes pending workbook value propagation and returns the result."},{"path":"/docs/methods/getWorkbookSnapshotReport","title":"getWorkbookSnapshotReport","description":"Reads the last published workbook cells, hashes, and generations. Do not assume all Grid data was published."},{"path":"/docs/methods/getWorkbookIntegrityReport","title":"getWorkbookIntegrityReport","description":"Reads consistency checks for workbook connections and value propagation."},{"path":"/docs/methods/applySpillFormula","title":"applySpillFormula","description":"Atomically applies a dynamic array formula under the conflict policy. Inspect conflicts, rejections, and unrendered areas in the report."},{"path":"/docs/methods/clearSpillFormula","title":"clearSpillFormula","description":"Clears a dynamic array formula's anchor cell and releases its occupied range."},{"path":"/docs/methods/undoSpillTransaction","title":"undoSpillTransaction","description":"Undoes a dynamic array formula transaction and returns the result."},{"path":"/docs/methods/getSpillReport","title":"getSpillReport","description":"Inspects current dynamic array formulas and their occupied ranges."},{"path":"/docs/methods/createRangeChart","title":"createRangeChart","description":"Creates an integrated chart from a selection or explicit source. Read chartId on success or the rejection reason on failure."},{"path":"/docs/methods/updateChart","title":"updateChart","description":"Changes an existing chart's type, source range, or properties and returns the result."},{"path":"/docs/methods/destroyChart","title":"destroyChart","description":"Closes the specified chart and releases its resources."},{"path":"/docs/methods/getChartRefs","title":"getChartRefs","description":"Reads IDs and states of active integrated charts."},{"path":"/docs/methods/syncCharts","title":"syncCharts","description":"Recalculates integrated chart data projections from the current Grid view."},{"path":"/docs/methods/getChartMenuModel","title":"getChartMenuModel","description":"Reads the chart menu model available for the current selection and permissions."},{"path":"/docs/methods/openChartToolPanel","title":"openChartToolPanel","description":"Opens the tool panel for choosing an available chart."},{"path":"/docs/methods/closeChartToolPanel","title":"closeChartToolPanel","description":"Closes the chart creation panel and cleans up its selection flow."},{"path":"/docs/methods/getChartToolPanelReport","title":"getChartToolPanelReport","description":"Reads chart panel open, focus, and accessibility state."},{"path":"/docs/methods/activateChartToolPanelItem","title":"activateChartToolPanelItem","description":"Creates a chart by activating the currently focused chart panel item."},{"path":"/docs/methods/getChartModels","title":"getChartModels","description":"Captures active charts in a versioned envelope with capture issues. Pass the result's envelope to restoration."},{"path":"/docs/methods/restoreChartModels","title":"restoreChartModels","description":"Restores a saved chart envelope against the current Grid data contract and returns results."},{"path":"/docs/methods/exportChartImage","title":"exportChartImage","description":"Requests image export for an integrated chart and returns the result."},{"path":"/docs/methods/applyChartCrossFilter","title":"applyChartCrossFilter","description":"Applies chart selection actions to the Grid filter model."},{"path":"/docs/methods/resetChartCrossFilter","title":"resetChartCrossFilter","description":"Clears chart-owned cross-filters while retaining the app's external filters."},{"path":"/docs/methods/getChartAccessibleSummary","title":"getChartAccessibleSummary","description":"Reads chart data summaries and accessibility checks."},{"path":"/docs/methods/getChartFleetReport","title":"getChartFleetReport","description":"Reports the current chart set, open resources, and cleanup state."},{"path":"/docs/methods/setHoveredRow","title":"setHoveredRow","description":"Sets the row targeted by stateful hover. Does not change actual row selection."},{"path":"/docs/methods/getHoveredRowId","title":"getHoveredRowId","description":"Reads the current hovered row ID or null."},{"path":"/docs/methods/getActiveEditTransaction","title":"getActiveEditTransaction","description":"Reads the active cell editing transaction, or null when not editing."},{"path":"/docs/methods/commitActiveEdit","title":"commitActiveEdit","description":"Commits current cell editing and returns success."},{"path":"/docs/methods/cancelActiveEdit","title":"cancelActiveEdit","description":"Cancels current cell editing and returns whether it ran."},{"path":"/docs/methods/registerCellRenderer","title":"registerCellRenderer","description":"Registers a named cell renderer and returns the result."},{"path":"/docs/methods/listRegisteredCellRenderers","title":"listRegisteredCellRenderers","description":"Reads available registered cell renderer names."},{"path":"/docs/methods/unregisterCellRenderer","title":"unregisterCellRenderer","description":"Unregisters a named cell renderer."},{"path":"/docs/methods/registerGridComponent","title":"registerGridComponent","description":"Registers a custom Grid component under the public component contract."},{"path":"/docs/methods/replaceGridComponent","title":"replaceGridComponent","description":"Replaces a registered custom component definition."},{"path":"/docs/methods/unregisterGridComponent","title":"unregisterGridComponent","description":"Unregisters a custom component and returns success."},{"path":"/docs/methods/getRegisteredGridComponentNames","title":"getRegisteredGridComponentNames","description":"Reads registered custom Grid component names."},{"path":"/docs/methods/getCellRendererInstance","title":"getCellRendererInstance","description":"Queries mounted cell renderer instances. Offscreen cells may be unmounted because of virtualization."},{"path":"/docs/methods/destroyCellRendererInstance","title":"destroyCellRendererInstance","description":"Destroys a specified mounted cell renderer instance."},{"path":"/docs/methods/focusCellRendererInstance","title":"focusCellRendererInstance","description":"Moves focus into a mounted cell renderer and returns the result."},{"path":"/docs/methods/getCellEditorInstance","title":"getCellEditorInstance","description":"Reads the mounted cell editor instance and context, or null if no editor exists."},{"path":"/docs/methods/getColumnFilterInstance","title":"getColumnFilterInstance","description":"Queries a column's custom filter instance. May return null if absent or not yet created."},{"path":"/docs/methods/getColumnFilterModel","title":"getColumnFilterModel","description":"Reads one column's current filter model."},{"path":"/docs/methods/setColumnFilterModel","title":"setColumnFilterModel","description":"Sets one column's filter model and returns the result. Separate from setFilterModel, which changes combined filter state."},{"path":"/docs/methods/onFilterChanged","title":"onFilterChanged","description":"Signals changed filter conditions and recalculates current row filtering."},{"path":"/docs/methods/refreshExternalFilter","title":"refreshExternalFilter","description":"Runs the external filter refresh lifecycle and returns success."},{"path":"/docs/methods/destroyColumnFilter","title":"destroyColumnFilter","description":"Destroys a column's filter instance."},{"path":"/docs/methods/recreateColumnFilter","title":"recreateColumnFilter","description":"Recreates a column's filter instance."},{"path":"/docs/methods/setPivotColumns","title":"setPivotColumns","description":"Replaces the pivot column axis through the validated update path and returns success."},{"path":"/docs/methods/setValueColumns","title":"setValueColumns","description":"Replaces the pivot value axis through the validated update path and returns success."},{"path":"/docs/methods/setConditionFilter","title":"setConditionFilter","description":"Applies an advanced AND/OR condition tree. null clears it; inspect results for invalid models."},{"path":"/docs/methods/getConditionFilter","title":"getConditionFilter","description":"Reads the current advanced condition tree or null."},{"path":"/docs/methods/setConditionPresets","title":"setConditionPresets","description":"Sets advanced condition presets containing names and JSON."},{"path":"/docs/methods/getConditionPresets","title":"getConditionPresets","description":"Reads saved advanced condition presets."},{"path":"/docs/methods/openToolPanel","title":"openToolPanel","description":"Opens a column/filter tool panel by ID and returns success."},{"path":"/docs/methods/closeToolPanel","title":"closeToolPanel","description":"Closes the open column/filter panel without clearing applied settings."},{"path":"/docs/methods/getOpenedToolPanel","title":"getOpenedToolPanel","description":"Reads the open tool panel ID or null."}]}]}]},{"path":"/docs/methods/getAuditLog","kind":"method","title":"getAuditLog","summary":"Reads audit records as an array, optionally filtered by type, sequence, or time. Returns an empty array when recording is disabled.","member":{"name":"getAuditLog","typeParameters":[],"parameters":[{"name":"filter","type":"AuditLogFilter","optional":true}],"returns":"Promise<AuditEntry[]>","description":"Reads audit records as an array, optionally filtered by type, sequence, or time. Returns an empty array when recording is disabled."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Reads audit records as an array, optionally filtered by type, sequence, or time. Returns an empty array when recording is disabled."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getAuditLog(filter?: AuditLogFilter): Promise<AuditEntry[]>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["filter","Optional","AuditLogFilter"]]},{"kind":"paragraph","text":"The return type is `Promise<AuditEntry[]>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getAuditLog(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/AuditLogFilter","title":"AuditLogFilter","description":""},{"path":"/docs/types/AuditEntry","title":"AuditEntry","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/audit-log","title":"View change history","description":"The audit log tracks row, cell, and selection changes and undo/redo transitions. Use it to inspect change history that current values alone cannot reveal."}]}]}]},{"path":"/docs/methods/clearAuditLog","kind":"method","title":"clearAuditLog","summary":"Clears retained audit records. Sequence numbers continue increasing and are not reused.","member":{"name":"clearAuditLog","typeParameters":[],"parameters":[],"returns":"Promise<void>","description":"Clears retained audit records. Sequence numbers continue increasing and are not reused."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Clears retained audit records. Sequence numbers continue increasing and are not reused."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"clearAuditLog(): Promise<void>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<void>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.clearAuditLog(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/audit-log","title":"View change history","description":"The audit log tracks row, cell, and selection changes and undo/redo transitions. Use it to inspect change history that current values alone cannot reveal."}]}]}]},{"path":"/docs/methods/getAuditLogAsCsv","kind":"method","title":"getAuditLogAsCsv","summary":"Converts audit records to CSV text for inspection or transfer without downloading a file.","member":{"name":"getAuditLogAsCsv","typeParameters":[],"parameters":[{"name":"filter","type":"AuditLogFilter","optional":true}],"returns":"Promise<string>","description":"Converts audit records to CSV text for inspection or transfer without downloading a file."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Converts audit records to CSV text for inspection or transfer without downloading a file."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getAuditLogAsCsv(filter?: AuditLogFilter): Promise<string>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["filter","Optional","AuditLogFilter"]]},{"kind":"paragraph","text":"The return type is `Promise<string>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getAuditLogAsCsv(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/AuditLogFilter","title":"AuditLogFilter","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/audit-log","title":"View change history","description":"The audit log tracks row, cell, and selection changes and undo/redo transitions. Use it to inspect change history that current values alone cannot reveal."}]}]}]},{"path":"/docs/methods/getAuditLogAsJson","kind":"method","title":"getAuditLogAsJson","summary":"Reads audit records as a structured JSON array string. Use pretty for readable indentation.","member":{"name":"getAuditLogAsJson","typeParameters":[],"parameters":[{"name":"filter","type":"AuditLogFilter","optional":true},{"name":"pretty","type":"boolean","optional":true}],"returns":"Promise<string>","description":"Reads audit records as a structured JSON array string. Use pretty for readable indentation."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Reads audit records as a structured JSON array string. Use pretty for readable indentation."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getAuditLogAsJson(filter?: AuditLogFilter, pretty?: boolean): Promise<string>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["filter","Optional","AuditLogFilter"],["pretty","Optional","boolean"]]},{"kind":"paragraph","text":"The return type is `Promise<string>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getAuditLogAsJson(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/AuditLogFilter","title":"AuditLogFilter","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/audit-log","title":"View change history","description":"The audit log tracks row, cell, and selection changes and undo/redo transitions. Use it to inspect change history that current values alone cannot reveal."}]}]}]},{"path":"/docs/methods/exportAuditLogAsCsv","kind":"method","title":"exportAuditLogAsCsv","summary":"Downloads selected audit records as a CSV file.","member":{"name":"exportAuditLogAsCsv","typeParameters":[],"parameters":[{"name":"fileName","type":"string","optional":true},{"name":"filter","type":"AuditLogFilter","optional":true}],"returns":"Promise<void>","description":"Downloads selected audit records as a CSV file."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Downloads selected audit records as a CSV file."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"exportAuditLogAsCsv(fileName?: string, filter?: AuditLogFilter): Promise<void>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["fileName","Optional","string"],["filter","Optional","AuditLogFilter"]]},{"kind":"paragraph","text":"The return type is `Promise<void>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.exportAuditLogAsCsv(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/AuditLogFilter","title":"AuditLogFilter","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/audit-log","title":"View change history","description":"The audit log tracks row, cell, and selection changes and undo/redo transitions. Use it to inspect change history that current values alone cannot reveal."}]}]}]},{"path":"/docs/methods/exportAuditLogAsJson","kind":"method","title":"exportAuditLogAsJson","summary":"Downloads selected audit records as a JSON file.","member":{"name":"exportAuditLogAsJson","typeParameters":[],"parameters":[{"name":"fileName","type":"string","optional":true},{"name":"filter","type":"AuditLogFilter","optional":true}],"returns":"Promise<void>","description":"Downloads selected audit records as a JSON file."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Downloads selected audit records as a JSON file."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"exportAuditLogAsJson(fileName?: string, filter?: AuditLogFilter): Promise<void>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["fileName","Optional","string"],["filter","Optional","AuditLogFilter"]]},{"kind":"paragraph","text":"The return type is `Promise<void>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.exportAuditLogAsJson(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/AuditLogFilter","title":"AuditLogFilter","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/audit-log","title":"View change history","description":"The audit log tracks row, cell, and selection changes and undo/redo transitions. Use it to inspect change history that current values alone cannot reveal."}]}]}]},{"path":"/docs/methods/openCellCommentPanel","kind":"method","title":"openCellCommentPanel","summary":"Opens a collaboration comment panel for a row ID and field. Separate from standalone cell note adapters.","member":{"name":"openCellCommentPanel","typeParameters":[],"parameters":[{"name":"rowId","type":"string | number","optional":false},{"name":"field","type":"string","optional":false}],"returns":"Promise<void>","description":"Opens a collaboration comment panel for a row ID and field. Separate from standalone cell note adapters."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Opens a collaboration comment panel for a row ID and field. Separate from standalone cell note adapters."},{"kind":"paragraph","text":"API for Pro features: Cell notes editing"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"openCellCommentPanel(rowId: string | number, field: string): Promise<void>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["rowId","Required","string | number"],["field","Required","string"]]},{"kind":"paragraph","text":"The return type is `Promise<void>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.openCellCommentPanel(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/cell-notes","title":"Cell notes","description":"Cell notes add review context or explanations without changing the value. Standalone notes and collaboration comment threads use different storage and APIs, so choose the appropriate workflow first."}]}]}]},{"path":"/docs/methods/closeCellCommentPanel","kind":"method","title":"closeCellCommentPanel","summary":"Closes the collaboration comment panel without deleting comment data.","member":{"name":"closeCellCommentPanel","typeParameters":[],"parameters":[],"returns":"Promise<void>","description":"Closes the collaboration comment panel without deleting comment data."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Closes the collaboration comment panel without deleting comment data."},{"kind":"paragraph","text":"API for Pro features: Cell notes editing"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"closeCellCommentPanel(): Promise<void>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<void>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.closeCellCommentPanel(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/cell-notes","title":"Cell notes","description":"Cell notes add review context or explanations without changing the value. Standalone notes and collaboration comment threads use different storage and APIs, so choose the appropriate workflow first."}]}]}]},{"path":"/docs/methods/getApi","kind":"method","title":"getApi","summary":"Accesses the current Grid's typed API and app context. Read from a fully initialized element.","member":{"name":"getApi","typeParameters":["TData = GridData","TContext = unknown","TValue = unknown","TFilterModel = unknown"],"parameters":[],"returns":"Promise<SyGridApi<TData, TContext, TValue, TFilterModel>>","description":"Accesses the current Grid's typed API and app context. Read from a fully initialized element."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Accesses the current Grid's typed API and app context. Read from a fully initialized element."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getApi<TData = GridData, TContext = unknown, TValue = unknown, TFilterModel = unknown>(): Promise<SyGridApi<TData, TContext, TValue, TFilterModel>>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<SyGridApi<TData, TContext, TValue, TFilterModel>>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getApi(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridData","title":"GridData","description":""},{"path":"/docs/types/SyGridApi","title":"SyGridApi","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/guides/data-event-access","title":"Data and events","description":"Grid APIs read or change the current state; events report the results of user interactions or data changes. Combine them to build save buttons, detail panels, and change histories."}]}]}]},{"path":"/docs/methods/getColumn","kind":"method","title":"getColumn","summary":"Finds a current column object by ID. Returns null for missing columns and reflects live state rather than an initial columnDefs copy.","member":{"name":"getColumn","typeParameters":["TValue = unknown"],"parameters":[{"name":"columnId","type":"string","optional":false}],"returns":"Promise<GridColumnRef<GridData, TValue, unknown> | null>","description":"Finds a current column object by ID. Returns null for missing columns and reflects live state rather than an initial columnDefs copy."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Finds a current column object by ID. Returns null for missing columns and reflects live state rather than an initial columnDefs copy."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getColumn<TValue = unknown>(columnId: string): Promise<GridColumnRef<GridData, TValue, unknown> | null>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["columnId","Required","string"]]},{"kind":"paragraph","text":"The return type is `Promise<GridColumnRef<GridData, TValue, unknown> | null>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getColumn(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridColumnRef","title":"GridColumnRef","description":""},{"path":"/docs/types/GridData","title":"GridData","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/column-api","title":"Live column API","description":"Live column objects are references connected to the current Grid. They differ from serializable column-state arrays: references suit UI controls for individual columns, while state arrays suit saved preferences."}]}]}]},{"path":"/docs/methods/getColumns","kind":"method","title":"getColumns","summary":"Reads current column objects to connect widths, order, and visibility to your app.","member":{"name":"getColumns","typeParameters":[],"parameters":[],"returns":"Promise<ReadonlyArray<GridColumnRef<GridData, unknown, unknown>>>","description":"Reads current column objects to connect widths, order, and visibility to your app."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Reads current column objects to connect widths, order, and visibility to your app."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getColumns(): Promise<ReadonlyArray<GridColumnRef<GridData, unknown, unknown>>>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<ReadonlyArray<GridColumnRef<GridData, unknown, unknown>>>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getColumns(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridColumnRef","title":"GridColumnRef","description":""},{"path":"/docs/types/GridData","title":"GridData","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/column-api","title":"Live column API","description":"Live column objects are references connected to the current Grid. They differ from serializable column-state arrays: references suit UI controls for individual columns, while state arrays suit saved preferences."}]}]}]},{"path":"/docs/methods/getColumnGroup","kind":"method","title":"getColumnGroup","summary":"Finds a current column group by ID. Returns null if absent.","member":{"name":"getColumnGroup","typeParameters":[],"parameters":[{"name":"groupId","type":"string","optional":false}],"returns":"Promise<GridColumnGroupRef<GridData, unknown> | null>","description":"Finds a current column group by ID. Returns null if absent."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Finds a current column group by ID. Returns null if absent."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getColumnGroup(groupId: string): Promise<GridColumnGroupRef<GridData, unknown> | null>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["groupId","Required","string"]]},{"kind":"paragraph","text":"The return type is `Promise<GridColumnGroupRef<GridData, unknown> | null>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getColumnGroup(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridColumnGroupRef","title":"GridColumnGroupRef","description":""},{"path":"/docs/types/GridData","title":"GridData","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/column-api","title":"Live column API","description":"Live column objects are references connected to the current Grid. They differ from serializable column-state arrays: references suit UI controls for individual columns, while state arrays suit saved preferences."}]}]}]},{"path":"/docs/methods/getColumnGroups","kind":"method","title":"getColumnGroups","summary":"Reads current column group objects.","member":{"name":"getColumnGroups","typeParameters":[],"parameters":[],"returns":"Promise<ReadonlyArray<GridColumnGroupRef<GridData, unknown>>>","description":"Reads current column group objects."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Reads current column group objects."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getColumnGroups(): Promise<ReadonlyArray<GridColumnGroupRef<GridData, unknown>>>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<ReadonlyArray<GridColumnGroupRef<GridData, unknown>>>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getColumnGroups(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridColumnGroupRef","title":"GridColumnGroupRef","description":""},{"path":"/docs/types/GridData","title":"GridData","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/column-api","title":"Live column API","description":"Live column objects are references connected to the current Grid. They differ from serializable column-state arrays: references suit UI controls for individual columns, while state arrays suit saved preferences."}]}]}]},{"path":"/docs/methods/getRow","kind":"method","title":"getRow","summary":"Finds a row object by stable row ID, rather than display index.","member":{"name":"getRow","typeParameters":[],"parameters":[{"name":"rowId","type":"GridRowId","optional":false}],"returns":"Promise<GridRowRef<GridData, unknown> | null>","description":"Finds a row object by stable row ID, rather than display index."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Finds a row object by stable row ID, rather than display index."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getRow(rowId: GridRowId): Promise<GridRowRef<GridData, unknown> | null>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["rowId","Required","GridRowId"]]},{"kind":"paragraph","text":"The return type is `Promise<GridRowRef<GridData, unknown> | null>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getRow(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridRowId","title":"GridRowId","description":""},{"path":"/docs/types/GridRowRef","title":"GridRowRef","description":""},{"path":"/docs/types/GridData","title":"GridData","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/guides/data-event-access","title":"Data and events","description":"Grid APIs read or change the current state; events report the results of user interactions or data changes. Combine them to build save buttons, detail panels, and change histories."}]}]}]},{"path":"/docs/methods/getDisplayedRowAtIndex","kind":"method","title":"getDisplayedRowAtIndex","summary":"Finds a row object by its current display index. Sorting, filtering, and grouping can change the row at an index.","member":{"name":"getDisplayedRowAtIndex","typeParameters":[],"parameters":[{"name":"index","type":"number","optional":false}],"returns":"Promise<GridRowRef<GridData, unknown> | null>","description":"Finds a row object by its current display index. Sorting, filtering, and grouping can change the row at an index."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Finds a row object by its current display index. Sorting, filtering, and grouping can change the row at an index."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getDisplayedRowAtIndex(index: number): Promise<GridRowRef<GridData, unknown> | null>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["index","Required","number"]]},{"kind":"paragraph","text":"The return type is `Promise<GridRowRef<GridData, unknown> | null>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getDisplayedRowAtIndex(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridRowRef","title":"GridRowRef","description":""},{"path":"/docs/types/GridData","title":"GridData","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/guides/data-event-access","title":"Data and events","description":"Grid APIs read or change the current state; events report the results of user interactions or data changes. Combine them to build save buttons, detail panels, and change histories."}]}]}]},{"path":"/docs/methods/forEachRow","kind":"method","title":"forEachRow","summary":"Runs a callback for each row object. Use forEachDisplayedRow when display order matters.","member":{"name":"forEachRow","typeParameters":[],"parameters":[{"name":"callback","type":"(row: GridRowRef<GridData, unknown>) => void","optional":false}],"returns":"Promise<void>","description":"Runs a callback for each row object. Use forEachDisplayedRow when display order matters."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Runs a callback for each row object. Use forEachDisplayedRow when display order matters."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"forEachRow(callback: (row: GridRowRef<GridData, unknown>) => void): Promise<void>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["callback","Required","(row: GridRowRef<GridData, unknown>) => void"]]},{"kind":"paragraph","text":"The return type is `Promise<void>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.forEachRow(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridRowRef","title":"GridRowRef","description":""},{"path":"/docs/types/GridData","title":"GridData","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/guides/data-event-access","title":"Data and events","description":"Grid APIs read or change the current state; events report the results of user interactions or data changes. Combine them to build save buttons, detail panels, and change histories."}]}]}]},{"path":"/docs/methods/forEachDisplayedRow","kind":"method","title":"forEachDisplayedRow","summary":"Iterates current displayed rows for app features that distinguish source order from display order.","member":{"name":"forEachDisplayedRow","typeParameters":[],"parameters":[{"name":"callback","type":"(row: GridRowRef<GridData, unknown>) => void","optional":false}],"returns":"Promise<void>","description":"Iterates current displayed rows for app features that distinguish source order from display order."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Iterates current displayed rows for app features that distinguish source order from display order."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"forEachDisplayedRow(callback: (row: GridRowRef<GridData, unknown>) => void): Promise<void>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["callback","Required","(row: GridRowRef<GridData, unknown>) => void"]]},{"kind":"paragraph","text":"The return type is `Promise<void>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.forEachDisplayedRow(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridRowRef","title":"GridRowRef","description":""},{"path":"/docs/types/GridData","title":"GridData","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/guides/data-event-access","title":"Data and events","description":"Grid APIs read or change the current state; events report the results of user interactions or data changes. Combine them to build save buttons, detail panels, and change histories."}]}]}]},{"path":"/docs/methods/getWorkbookBinding","kind":"method","title":"getWorkbookBinding","summary":"Reads current workbook and sheet connection information, or null when disconnected.","member":{"name":"getWorkbookBinding","typeParameters":[],"parameters":[],"returns":"Promise<GridWorkbookBinding | null>","description":"Reads current workbook and sheet connection information, or null when disconnected."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Reads current workbook and sheet connection information, or null when disconnected."},{"kind":"paragraph","text":"API for Pro features: Built-in formulas, references, dependency recalculation and calculated columns"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getWorkbookBinding(): Promise<GridWorkbookBinding | null>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<GridWorkbookBinding | null>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getWorkbookBinding(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridWorkbookBinding","title":"GridWorkbookBinding","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/formulas","title":"Formula calculation","description":"Formulas evaluate strings beginning with = and display the result in a cell. For example, =SUM(A1:A3) references the first column in the original column definitions and the first three source rows."}]}]}]},{"path":"/docs/methods/reconnectWorkbook","kind":"method","title":"reconnectWorkbook","summary":"Rebuilds the connection from current workbook settings and returns the result.","member":{"name":"reconnectWorkbook","typeParameters":[],"parameters":[],"returns":"Promise<GridWorkbookBinding | null>","description":"Rebuilds the connection from current workbook settings and returns the result."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Rebuilds the connection from current workbook settings and returns the result."},{"kind":"paragraph","text":"API for Pro features: Built-in formulas, references, dependency recalculation and calculated columns"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"reconnectWorkbook(): Promise<GridWorkbookBinding | null>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<GridWorkbookBinding | null>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.reconnectWorkbook(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridWorkbookBinding","title":"GridWorkbookBinding","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/formulas","title":"Formula calculation","description":"Formulas evaluate strings beginning with = and display the result in a cell. For example, =SUM(A1:A3) references the first column in the original column definitions and the first three source rows."}]}]}]},{"path":"/docs/methods/disconnectWorkbook","kind":"method","title":"disconnectWorkbook","summary":"Disconnects the workbook. Review the effect on cross-sheet formula propagation.","member":{"name":"disconnectWorkbook","typeParameters":[],"parameters":[],"returns":"Promise<boolean>","description":"Disconnects the workbook. Review the effect on cross-sheet formula propagation."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Disconnects the workbook. Review the effect on cross-sheet formula propagation."},{"kind":"paragraph","text":"API for Pro features: Built-in formulas, references, dependency recalculation and calculated columns"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"disconnectWorkbook(): Promise<boolean>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<boolean>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.disconnectWorkbook(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/formulas","title":"Formula calculation","description":"Formulas evaluate strings beginning with = and display the result in a cell. For example, =SUM(A1:A3) references the first column in the original column definitions and the first three source rows."}]}]}]},{"path":"/docs/methods/sortBy","kind":"method","title":"sortBy","summary":"Sets one column's sorting. Omitted direction cycles sorting; null clears that column. Use setSortModel for the full multi-column model.","member":{"name":"sortBy","typeParameters":[],"parameters":[{"name":"column","type":"string","optional":false},{"name":"direction","type":"GridSortDirection | null","optional":true}],"returns":"Promise<void>","description":"Sets one column's sorting. Omitted direction cycles sorting; null clears that column. Use setSortModel for the full multi-column model."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Sets one column's sorting. Omitted direction cycles sorting; null clears that column. Use setSortModel for the full multi-column model."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"sortBy(column: string, direction?: GridSortDirection | null): Promise<void>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["column","Required","string"],["direction","Optional","GridSortDirection | null"]]},{"kind":"paragraph","text":"The return type is `Promise<void>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.sortBy(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridSortDirection","title":"GridSortDirection","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/sorting","title":"Single and multiple sorting","description":"Sorting changes display order without modifying data values. Single sorting uses one criterion; multiple sorting uses prioritized criteria."}]}]}]},{"path":"/docs/methods/setSortModel","kind":"method","title":"setSortModel","summary":"Replaces sort criteria and priorities together. An empty array clears all sorting.","member":{"name":"setSortModel","typeParameters":[],"parameters":[{"name":"model","type":"ReadonlyArray<{ field: string; direction: 'asc' | 'desc' }>","optional":false}],"returns":"Promise<void>","description":"Replaces sort criteria and priorities together. An empty array clears all sorting."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Replaces sort criteria and priorities together. An empty array clears all sorting."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"setSortModel(model: ReadonlyArray<{ field: string; direction: 'asc' | 'desc' }>): Promise<void>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["model","Required","ReadonlyArray<{ field: string; direction: 'asc' | 'desc' }>"]]},{"kind":"paragraph","text":"The return type is `Promise<void>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.setSortModel(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/sorting","title":"Single and multiple sorting","description":"Sorting changes display order without modifying data values. Single sorting uses one criterion; multiple sorting uses prioritized criteria."}]}]}]},{"path":"/docs/methods/getSortModel","kind":"method","title":"getSortModel","summary":"Reads current sort columns, directions, and priorities.","member":{"name":"getSortModel","typeParameters":[],"parameters":[],"returns":"Promise<SortModelEntry[]>","description":"Reads current sort columns, directions, and priorities."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Reads current sort columns, directions, and priorities."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getSortModel(): Promise<SortModelEntry[]>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<SortModelEntry[]>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getSortModel(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SortModelEntry","title":"SortModelEntry","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/sorting","title":"Single and multiple sorting","description":"Sorting changes display order without modifying data values. Single sorting uses one criterion; multiple sorting uses prioritized criteria."}]}]}]},{"path":"/docs/methods/setQuery","kind":"method","title":"setQuery","summary":"Passes query conditions to the processing engine. Review GridQuery and support in the active row model.","member":{"name":"setQuery","typeParameters":[],"parameters":[{"name":"query","type":"string","optional":false}],"returns":"Promise<void>","description":"Passes query conditions to the processing engine. Review GridQuery and support in the active row model."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Passes query conditions to the processing engine. Review GridQuery and support in the active row model."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"setQuery(query: string): Promise<void>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["query","Required","string"]]},{"kind":"paragraph","text":"The return type is `Promise<void>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.setQuery(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/js-processing","title":"JavaScript processing engine","description":"The JavaScript engine is the standard browser execution path for sorting, filtering, and processing table data. Use it as a straightforward starting point for checking deployment environments and feature combinations."}]}]}]},{"path":"/docs/methods/getActiveTier","kind":"method","title":"getActiveTier","summary":"Reads the actual active processing tier, which may differ from the requested engine mode.","member":{"name":"getActiveTier","typeParameters":[],"parameters":[],"returns":"Promise<GridEngineTier>","description":"Reads the actual active processing tier, which may differ from the requested engine mode."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Reads the actual active processing tier, which may differ from the requested engine mode."},{"kind":"paragraph","text":"Read the active processing engine. The Standard JS engine is Free; WASM acceleration requires Pro."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getActiveTier(): Promise<GridEngineTier>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<GridEngineTier>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getActiveTier(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridEngineTier","title":"GridEngineTier","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/wasm-acceleration","title":"Choose a processing engine","description":"Pro engines accelerate supported sorting, filtering, and aggregation. The actual execution path depends on the browser, package, license, and current feature combination."}]}]}]},{"path":"/docs/methods/registerAggFunc","kind":"method","title":"registerAggFunc","summary":"Registers a named custom aggregate function. Use unique names because an existing function with the same name can be replaced.","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":"Registers a named custom aggregate function. Use unique names because an existing function with the same name can be replaced."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Registers a named custom aggregate function. Use unique names because an existing function with the same name can be replaced."},{"kind":"paragraph","text":"API for Pro features: Row grouping, built-in aggregation and group totals"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"registerAggFunc(name: string, fn: (values: unknown[], rows: readonly unknown[]) => unknown): Promise<void>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["name","Required","string"],["fn","Required","(values: unknown[], rows: readonly unknown[]) => unknown"]]},{"kind":"paragraph","text":"The return type is `Promise<void>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.registerAggFunc(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/row-grouping","title":"Grouping and aggregation","description":"Row grouping collects source rows with the same region or team into expandable groups. Unlike column groups, which organize headers, row groups change displayed rows and aggregation results."}]}]}]},{"path":"/docs/methods/unregisterAggFunc","kind":"method","title":"unregisterAggFunc","summary":"Removes a registered custom aggregate function. Also update aggFunc settings in columns using it.","member":{"name":"unregisterAggFunc","typeParameters":[],"parameters":[{"name":"name","type":"string","optional":false}],"returns":"Promise<void>","description":"Removes a registered custom aggregate function. Also update aggFunc settings in columns using it."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Removes a registered custom aggregate function. Also update aggFunc settings in columns using it."},{"kind":"paragraph","text":"API for Pro features: Row grouping, built-in aggregation and group totals"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"unregisterAggFunc(name: string): Promise<void>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["name","Required","string"]]},{"kind":"paragraph","text":"The return type is `Promise<void>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.unregisterAggFunc(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/row-grouping","title":"Grouping and aggregation","description":"Row grouping collects source rows with the same region or team into expandable groups. Unlike column groups, which organize headers, row groups change displayed rows and aggregation results."}]}]}]},{"path":"/docs/methods/getRegisteredAggFuncNames","kind":"method","title":"getRegisteredAggFuncNames","summary":"Reads currently registered aggregate function names.","member":{"name":"getRegisteredAggFuncNames","typeParameters":[],"parameters":[],"returns":"Promise<string[]>","description":"Reads currently registered aggregate function names."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Reads currently registered aggregate function names."},{"kind":"paragraph","text":"API for Pro features: Row grouping, built-in aggregation and group totals"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getRegisteredAggFuncNames(): Promise<string[]>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<string[]>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getRegisteredAggFuncNames(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/row-grouping","title":"Grouping and aggregation","description":"Row grouping collects source rows with the same region or team into expandable groups. Unlike column groups, which organize headers, row groups change displayed rows and aggregation results."}]}]}]},{"path":"/docs/methods/setRowGroupExpanded","kind":"method","title":"setRowGroupExpanded","summary":"Expands or collapses a row group by its actual group key. Missing groups and unchanged states are ignored.","member":{"name":"setRowGroupExpanded","typeParameters":[],"parameters":[{"name":"key","type":"string | null","optional":false},{"name":"expanded","type":"boolean","optional":false}],"returns":"Promise<void>","description":"Expands or collapses a row group by its actual group key. Missing groups and unchanged states are ignored."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Expands or collapses a row group by its actual group key. Missing groups and unchanged states are ignored."},{"kind":"paragraph","text":"API for Pro features: Row grouping, built-in aggregation and group totals"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"setRowGroupExpanded(key: string | null, expanded: boolean): Promise<void>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["key","Required","string | null"],["expanded","Required","boolean"]]},{"kind":"paragraph","text":"The return type is `Promise<void>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.setRowGroupExpanded(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/row-grouping","title":"Grouping and aggregation","description":"Row grouping collects source rows with the same region or team into expandable groups. Unlike column groups, which organize headers, row groups change displayed rows and aggregation results."}]}]}]},{"path":"/docs/methods/expandAllRowGroups","kind":"method","title":"expandAllRowGroups","summary":"Expands all current row groups. Each changed group emits a toggle event.","member":{"name":"expandAllRowGroups","typeParameters":[],"parameters":[],"returns":"Promise<void>","description":"Expands all current row groups. Each changed group emits a toggle event."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Expands all current row groups. Each changed group emits a toggle event."},{"kind":"paragraph","text":"API for Pro features: Row grouping, built-in aggregation and group totals"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"expandAllRowGroups(): Promise<void>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<void>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.expandAllRowGroups(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/row-grouping","title":"Grouping and aggregation","description":"Row grouping collects source rows with the same region or team into expandable groups. Unlike column groups, which organize headers, row groups change displayed rows and aggregation results."}]}]}]},{"path":"/docs/methods/collapseAllRowGroups","kind":"method","title":"collapseAllRowGroups","summary":"Collapses all collapsible row groups in the current data.","member":{"name":"collapseAllRowGroups","typeParameters":[],"parameters":[],"returns":"Promise<void>","description":"Collapses all collapsible row groups in the current data."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Collapses all collapsible row groups in the current data."},{"kind":"paragraph","text":"API for Pro features: Row grouping, built-in aggregation and group totals"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"collapseAllRowGroups(): Promise<void>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<void>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.collapseAllRowGroups(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/row-grouping","title":"Grouping and aggregation","description":"Row grouping collects source rows with the same region or team into expandable groups. Unlike column groups, which organize headers, row groups change displayed rows and aggregation results."}]}]}]},{"path":"/docs/methods/setTreeNodeExpanded","kind":"method","title":"setTreeNodeExpanded","summary":"Expands or collapses a tree node by path. Leaf nodes and missing paths cannot be expanded.","member":{"name":"setTreeNodeExpanded","typeParameters":[],"parameters":[{"name":"path","type":"readonly string[]","optional":false},{"name":"expanded","type":"boolean","optional":false}],"returns":"Promise<void>","description":"Expands or collapses a tree node by path. Leaf nodes and missing paths cannot be expanded."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Expands or collapses a tree node by path. Leaf nodes and missing paths cannot be expanded."},{"kind":"paragraph","text":"API for Pro features: Tree data"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"setTreeNodeExpanded(path: readonly string[], expanded: boolean): Promise<void>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["path","Required","readonly string[]"],["expanded","Required","boolean"]]},{"kind":"paragraph","text":"The return type is `Promise<void>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.setTreeNodeExpanded(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/tree-data","title":"Tree data","description":"Trees display parent-child data, such as folders or organizations, with indentation and expansion controls. Unlike grouping equal values, the parent relationship already exists in the data."}]}]}]},{"path":"/docs/methods/expandAllTreeNodes","kind":"method","title":"expandAllTreeNodes","summary":"Expands all expandable nodes in the current tree.","member":{"name":"expandAllTreeNodes","typeParameters":[],"parameters":[],"returns":"Promise<void>","description":"Expands all expandable nodes in the current tree."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Expands all expandable nodes in the current tree."},{"kind":"paragraph","text":"API for Pro features: Tree data"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"expandAllTreeNodes(): Promise<void>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<void>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.expandAllTreeNodes(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/tree-data","title":"Tree data","description":"Trees display parent-child data, such as folders or organizations, with indentation and expansion controls. Unlike grouping equal values, the parent relationship already exists in the data."}]}]}]},{"path":"/docs/methods/collapseAllTreeNodes","kind":"method","title":"collapseAllTreeNodes","summary":"Collapses all branch nodes in the current tree.","member":{"name":"collapseAllTreeNodes","typeParameters":[],"parameters":[],"returns":"Promise<void>","description":"Collapses all branch nodes in the current tree."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Collapses all branch nodes in the current tree."},{"kind":"paragraph","text":"API for Pro features: Tree data"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"collapseAllTreeNodes(): Promise<void>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<void>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.collapseAllTreeNodes(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/tree-data","title":"Tree data","description":"Trees display parent-child data, such as folders or organizations, with indentation and expansion controls. Unlike grouping equal values, the parent relationship already exists in the data."}]}]}]},{"path":"/docs/methods/setDetailRowExpanded","kind":"method","title":"setDetailRowExpanded","summary":"Expands or collapses a detail panel by stable parent row ID.","member":{"name":"setDetailRowExpanded","typeParameters":[],"parameters":[{"name":"rowId","type":"string | number","optional":false},{"name":"expanded","type":"boolean","optional":false}],"returns":"Promise<void>","description":"Expands or collapses a detail panel by stable parent row ID."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Expands or collapses a detail panel by stable parent row ID."},{"kind":"paragraph","text":"API for Pro features: Built-in master / detail"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"setDetailRowExpanded(rowId: string | number, expanded: boolean): Promise<void>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["rowId","Required","string | number"],["expanded","Required","boolean"]]},{"kind":"paragraph","text":"The return type is `Promise<void>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.setDetailRowExpanded(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/master-detail","title":"Row details","description":"Master/detail expands an order to show its line items or shipping history. The parent row is a summary, and a full-width panel beneath it holds details."}]}]}]},{"path":"/docs/methods/expandAllDetailRows","kind":"method","title":"expandAllDetailRows","summary":"Expands detail rows across all pages passing the current filter. Consider request volume with lazy loading.","member":{"name":"expandAllDetailRows","typeParameters":[],"parameters":[],"returns":"Promise<void>","description":"Expands detail rows across all pages passing the current filter. Consider request volume with lazy loading."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Expands detail rows across all pages passing the current filter. Consider request volume with lazy loading."},{"kind":"paragraph","text":"API for Pro features: Built-in master / detail"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"expandAllDetailRows(): Promise<void>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<void>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.expandAllDetailRows(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/master-detail","title":"Row details","description":"Master/detail expands an order to show its line items or shipping history. The parent row is a summary, and a full-width panel beneath it holds details."}]}]}]},{"path":"/docs/methods/collapseAllDetailRows","kind":"method","title":"collapseAllDetailRows","summary":"Collapses all open detail rows and cleans up their panel resources.","member":{"name":"collapseAllDetailRows","typeParameters":[],"parameters":[],"returns":"Promise<void>","description":"Collapses all open detail rows and cleans up their panel resources."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Collapses all open detail rows and cleans up their panel resources."},{"kind":"paragraph","text":"API for Pro features: Built-in master / detail"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"collapseAllDetailRows(): Promise<void>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<void>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.collapseAllDetailRows(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/master-detail","title":"Row details","description":"Master/detail expands an order to show its line items or shipping history. The parent row is a summary, and a full-width panel beneath it holds details."}]}]}]},{"path":"/docs/methods/setColumnGroupOpened","kind":"method","title":"setColumnGroupOpened","summary":"Expands or collapses the specified column group header.","member":{"name":"setColumnGroupOpened","typeParameters":[],"parameters":[{"name":"groupId","type":"string","optional":false},{"name":"open","type":"boolean","optional":false}],"returns":"Promise<void>","description":"Expands or collapses the specified column group header."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Expands or collapses the specified column group header."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"setColumnGroupOpened(groupId: string, open: boolean): Promise<void>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["groupId","Required","string"],["open","Required","boolean"]]},{"kind":"paragraph","text":"The return type is `Promise<void>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.setColumnGroupOpened(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/column-groups","title":"Multi-level headers","description":"Multi-level headers place related columns under a shared heading. Unlike row grouping, they do not change data counts or aggregate values."}]}]}]},{"path":"/docs/methods/getValidationErrors","kind":"method","title":"getValidationErrors","summary":"Reads row, field, value, and message information for current validation errors. Connect to save guidance or an error list.","member":{"name":"getValidationErrors","typeParameters":[],"parameters":[],"returns":"Promise<\n    Array<{ rowIndex: number; rowId: unknown; field: string; value: unknown; message: string }>\n  >","description":"Reads row, field, value, and message information for current validation errors. Connect to save guidance or an error list."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Reads row, field, value, and message information for current validation errors. Connect to save guidance or an error list."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getValidationErrors(): Promise<\n    Array<{ rowIndex: number; rowId: unknown; field: string; value: unknown; message: string }>\n  >","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<\n    Array<{ rowIndex: number; rowId: unknown; field: string; value: unknown; message: string }>\n  >`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getValidationErrors(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/validation-rules","title":"Data validation","description":"Use declarative rules to check required values, numeric ranges, string formats, and custom conditions. The default mode may only mark invalid values, so explicitly set invalidEditMode to block saving when required."}]}]}]},{"path":"/docs/methods/captureSnapshot","kind":"method","title":"captureSnapshot","summary":"Creates a named snapshot of current source data and returns its ID. Separate from saving column layouts.","member":{"name":"captureSnapshot","typeParameters":[],"parameters":[{"name":"name","type":"string","optional":true}],"returns":"Promise<string>","description":"Creates a named snapshot of current source data and returns its ID. Separate from saving column layouts."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Creates a named snapshot of current source data and returns its ID. Separate from saving column layouts."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"captureSnapshot(name?: string): Promise<string>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["name","Optional","string"]]},{"kind":"paragraph","text":"The return type is `Promise<string>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.captureSnapshot(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/snapshots","title":"Data snapshot","description":"Snapshots retain rowData at a point in time for comparison with current data or another snapshot. They differ from view-state APIs that save column widths, filters, and focus."}]}]}]},{"path":"/docs/methods/listSnapshots","kind":"method","title":"listSnapshots","summary":"Reads metadata for retained data snapshots.","member":{"name":"listSnapshots","typeParameters":[],"parameters":[],"returns":"Promise<SnapshotMeta[]>","description":"Reads metadata for retained data snapshots."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Reads metadata for retained data snapshots."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"listSnapshots(): Promise<SnapshotMeta[]>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<SnapshotMeta[]>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.listSnapshots(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SnapshotMeta","title":"SnapshotMeta","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/snapshots","title":"Data snapshot","description":"Snapshots retain rowData at a point in time for comparison with current data or another snapshot. They differ from view-state APIs that save column widths, filters, and focus."}]}]}]},{"path":"/docs/methods/deleteSnapshot","kind":"method","title":"deleteSnapshot","summary":"Deletes a data snapshot and returns success without changing current data.","member":{"name":"deleteSnapshot","typeParameters":[],"parameters":[{"name":"id","type":"string","optional":false}],"returns":"Promise<boolean>","description":"Deletes a data snapshot and returns success without changing current data."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Deletes a data snapshot and returns success without changing current data."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"deleteSnapshot(id: string): Promise<boolean>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["id","Required","string"]]},{"kind":"paragraph","text":"The return type is `Promise<boolean>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.deleteSnapshot(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/snapshots","title":"Data snapshot","description":"Snapshots retain rowData at a point in time for comparison with current data or another snapshot. They differ from view-state APIs that save column widths, filters, and focus."}]}]}]},{"path":"/docs/methods/diffSnapshots","kind":"method","title":"diffSnapshots","summary":"Compares two snapshots or a snapshot with current data. Omit the second ID to compare against current data.","member":{"name":"diffSnapshots","typeParameters":[],"parameters":[{"name":"idA","type":"string","optional":false},{"name":"idB","type":"string","optional":true}],"returns":"Promise<SnapshotDiff<GridRow>>","description":"Compares two snapshots or a snapshot with current data. Omit the second ID to compare against current data."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Compares two snapshots or a snapshot with current data. Omit the second ID to compare against current data."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"diffSnapshots(idA: string, idB?: string): Promise<SnapshotDiff<GridRow>>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["idA","Required","string"],["idB","Optional","string"]]},{"kind":"paragraph","text":"The return type is `Promise<SnapshotDiff<GridRow>>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.diffSnapshots(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SnapshotDiff","title":"SnapshotDiff","description":""},{"path":"/docs/types/GridRow","title":"GridRow","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/snapshots","title":"Data snapshot","description":"Snapshots retain rowData at a point in time for comparison with current data or another snapshot. They differ from view-state APIs that save column widths, filters, and focus."}]}]}]},{"path":"/docs/methods/restoreSnapshot","kind":"method","title":"restoreSnapshot","summary":"Restores source data from a snapshot. Does not automatically save to the server or restore view state.","member":{"name":"restoreSnapshot","typeParameters":[],"parameters":[{"name":"id","type":"string","optional":false}],"returns":"Promise<boolean>","description":"Restores source data from a snapshot. Does not automatically save to the server or restore view state."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Restores source data from a snapshot. Does not automatically save to the server or restore view state."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"restoreSnapshot(id: string): Promise<boolean>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["id","Required","string"]]},{"kind":"paragraph","text":"The return type is `Promise<boolean>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.restoreSnapshot(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/snapshots","title":"Data snapshot","description":"Snapshots retain rowData at a point in time for comparison with current data or another snapshot. They differ from view-state APIs that save column widths, filters, and focus."}]}]}]},{"path":"/docs/methods/getCellRanges","kind":"method","title":"getCellRanges","summary":"Reads current cell selection boundaries. Review the meaning of display row/column coordinates.","member":{"name":"getCellRanges","typeParameters":[],"parameters":[],"returns":"Promise<CellRangeBounds[]>","description":"Reads current cell selection boundaries. Review the meaning of display row/column coordinates."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Reads current cell selection boundaries. Review the meaning of display row/column coordinates."},{"kind":"paragraph","text":"API for Pro features: Cell range selection"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getCellRanges(): Promise<CellRangeBounds[]>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<CellRangeBounds[]>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getCellRanges(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/CellRangeBounds","title":"CellRangeBounds","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/range-selection","title":"Cell range selection","description":"A cell range is a rectangle spanning rows and columns. It defines the scope for copying, pasting, filling, and chart creation; selecting it does not change values."}]}]}]},{"path":"/docs/methods/copyRangeToClipboard","kind":"method","title":"copyRangeToClipboard","summary":"Copies the selected range and returns success. Check browser permissions and user activation requirements.","member":{"name":"copyRangeToClipboard","typeParameters":[],"parameters":[],"returns":"Promise<boolean>","description":"Copies the selected range and returns success. Check browser permissions and user activation requirements."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Copies the selected range and returns success. Check browser permissions and user activation requirements."},{"kind":"paragraph","text":"API for Pro features: Range copy / paste"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"copyRangeToClipboard(): Promise<boolean>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<boolean>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.copyRangeToClipboard(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/range-clipboard","title":"Copy and paste ranges","description":"Copy values from a rectangular range and paste them in the same row and column arrangement. Targets are determined from the starting cell and remain subject to editability, permissions, and validation."}]}]}]},{"path":"/docs/methods/pasteFromClipboard","kind":"method","title":"pasteFromClipboard","summary":"Pastes clipboard content into the current target. Inspect applied and skipped cells in the result event.","member":{"name":"pasteFromClipboard","typeParameters":[],"parameters":[],"returns":"Promise<boolean>","description":"Pastes clipboard content into the current target. Inspect applied and skipped cells in the result event."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Pastes clipboard content into the current target. Inspect applied and skipped cells in the result event."},{"kind":"paragraph","text":"API for Pro features: Range copy / paste"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"pasteFromClipboard(): Promise<boolean>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<boolean>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.pasteFromClipboard(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/range-clipboard","title":"Copy and paste ranges","description":"Copy values from a rectangular range and paste them in the same row and column arrangement. Targets are determined from the starting cell and remain subject to editability, permissions, and validation."}]}]}]},{"path":"/docs/methods/clearCellRanges","kind":"method","title":"clearCellRanges","summary":"Clears all cell selection ranges. Row selection is separate.","member":{"name":"clearCellRanges","typeParameters":[],"parameters":[],"returns":"Promise<void>","description":"Clears all cell selection ranges. Row selection is separate."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Clears all cell selection ranges. Row selection is separate."},{"kind":"paragraph","text":"API for Pro features: Cell range selection"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"clearCellRanges(): Promise<void>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<void>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.clearCellRanges(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/range-selection","title":"Cell range selection","description":"A cell range is a rectangle spanning rows and columns. It defines the scope for copying, pasting, filling, and chart creation; selecting it does not change values."}]}]}]},{"path":"/docs/methods/refreshInfiniteCache","kind":"method","title":"refreshInfiniteCache","summary":"Refetches the infinite row model's cache. Prepare updated server conditions and the data provider first.","member":{"name":"refreshInfiniteCache","typeParameters":[],"parameters":[],"returns":"Promise<void>","description":"Refetches the infinite row model's cache. Prepare updated server conditions and the data provider first."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Refetches the infinite row model's cache. Prepare updated server conditions and the data provider first."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"refreshInfiniteCache(): Promise<void>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<void>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.refreshInfiniteCache(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/infinite-row-model","title":"Request only needed blocks","description":"When downloading every order at once is impractical, request only the ranges needed for scrolling. datasource supplies data based on starting and ending rows and search conditions."}]}]}]},{"path":"/docs/methods/refreshRowHeights","kind":"method","title":"refreshRowHeights","summary":"Recalculates row heights after content or height callback inputs change.","member":{"name":"refreshRowHeights","typeParameters":[],"parameters":[],"returns":"Promise<void>","description":"Recalculates row heights after content or height callback inputs change."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Recalculates row heights after content or height callback inputs change."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"refreshRowHeights(): Promise<void>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<void>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.refreshRowHeights(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/virtualization","title":"Large data sets","description":"Virtualization renders only row and column DOM needed near the viewport. It is separate from row models that fetch only part of the data from a server."}]}]}]},{"path":"/docs/methods/scrollToTop","kind":"method","title":"scrollToTop","summary":"Scrolls the Grid to the top.","member":{"name":"scrollToTop","typeParameters":[],"parameters":[],"returns":"Promise<void>","description":"Scrolls the Grid to the top."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Scrolls the Grid to the top."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"scrollToTop(): Promise<void>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<void>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.scrollToTop(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/virtualization","title":"Large data sets","description":"Virtualization renders only row and column DOM needed near the viewport. It is separate from row models that fetch only part of the data from a server."}]}]}]},{"path":"/docs/methods/selectRows","kind":"method","title":"selectRows","summary":"Sets selection for specified row IDs. Use stable IDs, not display indices.","member":{"name":"selectRows","typeParameters":[],"parameters":[{"name":"ids","type":"Array<string | number>","optional":false}],"returns":"Promise<void>","description":"Sets selection for specified row IDs. Use stable IDs, not display indices."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Sets selection for specified row IDs. Use stable IDs, not display indices."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"selectRows(ids: Array<string | number>): Promise<void>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["ids","Required","Array<string | number>"]]},{"kind":"paragraph","text":"The return type is `Promise<void>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.selectRows(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/row-selection","title":"Row selection","description":"Row selection chooses targets for bulk actions such as approval, export, or assignment. Unlike cell range selection, it selects an entire order."}]}]}]},{"path":"/docs/methods/getSelectedRowIds","kind":"method","title":"getSelectedRowIds","summary":"Reads selected row IDs. Use dedicated server selection state APIs for server-wide selection.","member":{"name":"getSelectedRowIds","typeParameters":[],"parameters":[],"returns":"Promise<ReadonlyArray<string | number>>","description":"Reads selected row IDs. Use dedicated server selection state APIs for server-wide selection."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Reads selected row IDs. Use dedicated server selection state APIs for server-wide selection."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getSelectedRowIds(): Promise<ReadonlyArray<string | number>>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<ReadonlyArray<string | number>>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getSelectedRowIds(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/row-selection","title":"Row selection","description":"Row selection chooses targets for bulk actions such as approval, export, or assignment. Unlike cell range selection, it selects an entire order."}]}]}]},{"path":"/docs/methods/applyTransaction","kind":"method","title":"applyTransaction","summary":"Adds, updates, and removes source rows by stable ID. Inspect results separately from app server saving.","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":"Adds, updates, and removes source rows by stable ID. Inspect results separately from app server saving."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Adds, updates, and removes source rows by stable ID. Inspect results separately from app server saving."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"applyTransaction(transaction: RowDataTransaction<GridRow>, label?: string, opts?: { source?: GridEditSource; origin?: unknown }): Promise<ApplyRowTransactionResult<GridRow>>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["transaction","Required","RowDataTransaction<GridRow>"],["label","Optional","string"],["opts","Optional","{ source?: GridEditSource; origin?: unknown }"]]},{"kind":"paragraph","text":"The return type is `Promise<ApplyRowTransactionResult<GridRow>>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.applyTransaction(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/RowDataTransaction","title":"RowDataTransaction","description":""},{"path":"/docs/types/GridRow","title":"GridRow","description":""},{"path":"/docs/types/GridEditSource","title":"GridEditSource","description":""},{"path":"/docs/types/ApplyRowTransactionResult","title":"ApplyRowTransactionResult","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/data-updates","title":"Data updates","description":"Replace rowData when receiving a complete query result. For partial changes, pass add, update, and remove to applyTransaction. Updates match through getRowId, not display positions."}]}]}]},{"path":"/docs/methods/undo","kind":"method","title":"undo","summary":"Undoes one recorded editing step and returns whether it ran.","member":{"name":"undo","typeParameters":[],"parameters":[],"returns":"Promise<boolean>","description":"Undoes one recorded editing step and returns whether it ran."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Undoes one recorded editing step and returns whether it ran."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"undo(): Promise<boolean>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<boolean>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.undo(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/undo-redo","title":"Edit history","description":"Undo or redo recorded editing transactions. One operation may contain multiple cell changes, so cell counts and history counts are not necessarily equal."}]}]}]},{"path":"/docs/methods/redo","kind":"method","title":"redo","summary":"Redoes one undone step and returns whether it ran.","member":{"name":"redo","typeParameters":[],"parameters":[],"returns":"Promise<boolean>","description":"Redoes one undone step and returns whether it ran."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Redoes one undone step and returns whether it ran."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"redo(): Promise<boolean>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<boolean>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.redo(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/undo-redo","title":"Edit history","description":"Undo or redo recorded editing transactions. One operation may contain multiple cell changes, so cell counts and history counts are not necessarily equal."}]}]}]},{"path":"/docs/methods/clearHistory","kind":"method","title":"clearHistory","summary":"Clears undo/redo history without resetting current data values.","member":{"name":"clearHistory","typeParameters":[],"parameters":[],"returns":"Promise<void>","description":"Clears undo/redo history without resetting current data values."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Clears undo/redo history without resetting current data values."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"clearHistory(): Promise<void>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<void>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.clearHistory(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/undo-redo","title":"Edit history","description":"Undo or redo recorded editing transactions. One operation may contain multiple cell changes, so cell counts and history counts are not necessarily equal."}]}]}]},{"path":"/docs/methods/connectCollabRoom","kind":"method","title":"connectCollabRoom","summary":"Starts the configured collaboration room connection and returns synchronization state.","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":"Starts the configured collaboration room connection and returns synchronization state."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Starts the configured collaboration room connection and returns synchronization state."},{"kind":"paragraph","text":"API for Pro features: Real-time collaboration (existing Pro grade retained)"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"connectCollabRoom(opts?: { realtimeUrl?: string; userName?: string; userColor?: string; presence?: boolean; persistence?: 'none' | 'indexeddb' }): Promise<GridSyncStatus>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["opts","Optional","{ realtimeUrl?: string; userName?: string; userColor?: string; presence?: boolean; persistence?: 'none' | 'indexeddb' }"]]},{"kind":"paragraph","text":"The return type is `Promise<GridSyncStatus>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.connectCollabRoom(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridSyncStatus","title":"GridSyncStatus","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/collaboration","title":"Real-time collaboration","description":"Collaboration shares edits, cursors, and presence among users in the same room. A room name alone does not automatically connect devices over the internet."}]}]}]},{"path":"/docs/methods/preloadChunks","kind":"method","title":"preloadChunks","summary":"Preloads feature code. Does not activate entitlements or prefetch data.","member":{"name":"preloadChunks","typeParameters":[],"parameters":[{"name":"ids","type":"GridChunkId[]","optional":false}],"returns":"Promise<void>","description":"Preloads feature code. Does not activate entitlements or prefetch data."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Preloads feature code. Does not activate entitlements or prefetch data."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"preloadChunks(ids: GridChunkId[]): Promise<void>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["ids","Required","GridChunkId[]"]]},{"kind":"paragraph","text":"The return type is `Promise<void>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.preloadChunks(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChunkId","title":"GridChunkId","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"Settings and data fundamentals","description":""},{"path":"/docs/guides/data-event-access","title":"API calls and event integration","description":""}]}]}]},{"path":"/docs/methods/disconnectCollabRoom","kind":"method","title":"disconnectCollabRoom","summary":"Disconnects from the current collaboration room.","member":{"name":"disconnectCollabRoom","typeParameters":[],"parameters":[],"returns":"Promise<void>","description":"Disconnects from the current collaboration room."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Disconnects from the current collaboration room."},{"kind":"paragraph","text":"API for Pro features: Real-time collaboration (existing Pro grade retained)"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"disconnectCollabRoom(): Promise<void>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<void>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.disconnectCollabRoom(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/collaboration","title":"Real-time collaboration","description":"Collaboration shares edits, cursors, and presence among users in the same room. A room name alone does not automatically connect devices over the internet."}]}]}]},{"path":"/docs/methods/getSyncStatus","kind":"method","title":"getSyncStatus","summary":"Reads current collaboration connection and synchronization state.","member":{"name":"getSyncStatus","typeParameters":[],"parameters":[],"returns":"Promise<GridSyncStatus>","description":"Reads current collaboration connection and synchronization state."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Reads current collaboration connection and synchronization state."},{"kind":"paragraph","text":"API for Pro features: Real-time collaboration (existing Pro grade retained)"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getSyncStatus(): Promise<GridSyncStatus>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<GridSyncStatus>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getSyncStatus(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridSyncStatus","title":"GridSyncStatus","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/collaboration","title":"Real-time collaboration","description":"Collaboration shares edits, cursors, and presence among users in the same room. A room name alone does not automatically connect devices over the internet."}]}]}]},{"path":"/docs/methods/getCollaborators","kind":"method","title":"getCollaborators","summary":"Reads current collaboration participant information.","member":{"name":"getCollaborators","typeParameters":[],"parameters":[],"returns":"Promise<GridCollaboratorInfo[]>","description":"Reads current collaboration participant information."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Reads current collaboration participant information."},{"kind":"paragraph","text":"API for Pro features: Real-time collaboration (existing Pro grade retained)"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getCollaborators(): Promise<GridCollaboratorInfo[]>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<GridCollaboratorInfo[]>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getCollaborators(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridCollaboratorInfo","title":"GridCollaboratorInfo","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/collaboration","title":"Real-time collaboration","description":"Collaboration shares edits, cursors, and presence among users in the same room. A room name alone does not automatically connect devices over the internet."}]}]}]},{"path":"/docs/methods/addCellComment","kind":"method","title":"addCellComment","summary":"Adds a cell comment in an active collaboration session and returns its ID or 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":"Adds a cell comment in an active collaboration session and returns its ID or null."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Adds a cell comment in an active collaboration session and returns its ID or null."},{"kind":"paragraph","text":"API for Pro features: Cell notes editing"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"addCellComment(rowId: string | number, field: string, text: string, parentId?: string): Promise<string | null>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["rowId","Required","string | number"],["field","Required","string"],["text","Required","string"],["parentId","Optional","string"]]},{"kind":"paragraph","text":"The return type is `Promise<string | null>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.addCellComment(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/cell-notes","title":"Cell notes","description":"Cell notes add review context or explanations without changing the value. Standalone notes and collaboration comment threads use different storage and APIs, so choose the appropriate workflow first."}]}]}]},{"path":"/docs/methods/getCellComments","kind":"method","title":"getCellComments","summary":"Reads collaboration comments associated with a row ID and field.","member":{"name":"getCellComments","typeParameters":[],"parameters":[{"name":"rowId","type":"string | number","optional":false},{"name":"field","type":"string","optional":false}],"returns":"Promise<GridCellComment[]>","description":"Reads collaboration comments associated with a row ID and field."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Reads collaboration comments associated with a row ID and field."},{"kind":"paragraph","text":"API for Pro features: Cell notes editing"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getCellComments(rowId: string | number, field: string): Promise<GridCellComment[]>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["rowId","Required","string | number"],["field","Required","string"]]},{"kind":"paragraph","text":"The return type is `Promise<GridCellComment[]>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getCellComments(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridCellComment","title":"GridCellComment","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/cell-notes","title":"Cell notes","description":"Cell notes add review context or explanations without changing the value. Standalone notes and collaboration comment threads use different storage and APIs, so choose the appropriate workflow first."}]}]}]},{"path":"/docs/methods/setCellCommentResolved","kind":"method","title":"setCellCommentResolved","summary":"Changes a comment's resolved state and returns success.","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":"Changes a comment's resolved state and returns success."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Changes a comment's resolved state and returns success."},{"kind":"paragraph","text":"API for Pro features: Cell notes editing"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"setCellCommentResolved(rowId: string | number, field: string, commentId: string, resolved: boolean): Promise<boolean>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["rowId","Required","string | number"],["field","Required","string"],["commentId","Required","string"],["resolved","Required","boolean"]]},{"kind":"paragraph","text":"The return type is `Promise<boolean>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.setCellCommentResolved(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/cell-notes","title":"Cell notes","description":"Cell notes add review context or explanations without changing the value. Standalone notes and collaboration comment threads use different storage and APIs, so choose the appropriate workflow first."}]}]}]},{"path":"/docs/methods/deleteCellComment","kind":"method","title":"deleteCellComment","summary":"Deletes a collaboration comment and returns success.","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":"Deletes a collaboration comment and returns success."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Deletes a collaboration comment and returns success."},{"kind":"paragraph","text":"API for Pro features: Cell notes editing"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"deleteCellComment(rowId: string | number, field: string, commentId: string): Promise<boolean>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["rowId","Required","string | number"],["field","Required","string"],["commentId","Required","string"]]},{"kind":"paragraph","text":"The return type is `Promise<boolean>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.deleteCellComment(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/cell-notes","title":"Cell notes","description":"Cell notes add review context or explanations without changing the value. Standalone notes and collaboration comment threads use different storage and APIs, so choose the appropriate workflow first."}]}]}]},{"path":"/docs/methods/getDataAsCsv","kind":"method","title":"getDataAsCsv","summary":"Returns an object with CSV text and output row/column counts. Read the string from its csv field.","member":{"name":"getDataAsCsv","typeParameters":[],"parameters":[{"name":"options","type":"Omit<CsvExportOptions<GridRow>, 'columns' | 'rows'>","optional":true}],"returns":"Promise<CsvExportResult>","description":"Returns an object with CSV text and output row/column counts. Read the string from its csv field."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Returns an object with CSV text and output row/column counts. Read the string from its csv field."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getDataAsCsv(options?: Omit<CsvExportOptions<GridRow>, 'columns' | 'rows'>): Promise<CsvExportResult>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["options","Optional","Omit<CsvExportOptions<GridRow>, 'columns' | 'rows'>"]]},{"kind":"paragraph","text":"The return type is `Promise<CsvExportResult>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getDataAsCsv(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/CsvExportOptions","title":"CsvExportOptions","description":""},{"path":"/docs/types/GridRow","title":"GridRow","description":""},{"path":"/docs/types/CsvExportResult","title":"CsvExportResult","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/csv-export","title":"CSV export","description":"CSV export creates a text file for exchanging table data with other tools. It does not preserve cell colors, column widths, detail panels, or other visual layout."}]}]}]},{"path":"/docs/methods/exportDataAsCsv","kind":"method","title":"exportDataAsCsv","summary":"Downloads CSV using current export conditions and returns the export result.","member":{"name":"exportDataAsCsv","typeParameters":[],"parameters":[{"name":"options","type":"Omit<CsvDownloadOptions<GridRow>, 'columns' | 'rows'>","optional":true}],"returns":"Promise<CsvExportResult>","description":"Downloads CSV using current export conditions and returns the export result."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Downloads CSV using current export conditions and returns the export result."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"exportDataAsCsv(options?: Omit<CsvDownloadOptions<GridRow>, 'columns' | 'rows'>): Promise<CsvExportResult>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["options","Optional","Omit<CsvDownloadOptions<GridRow>, 'columns' | 'rows'>"]]},{"kind":"paragraph","text":"The return type is `Promise<CsvExportResult>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.exportDataAsCsv(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/CsvDownloadOptions","title":"CsvDownloadOptions","description":""},{"path":"/docs/types/GridRow","title":"GridRow","description":""},{"path":"/docs/types/CsvExportResult","title":"CsvExportResult","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/csv-export","title":"CSV export","description":"CSV export creates a text file for exchanging table data with other tools. It does not preserve cell colors, column widths, detail panels, or other visual layout."}]}]}]},{"path":"/docs/methods/getDataAsExcel","kind":"method","title":"getDataAsExcel","summary":"Generates XLSX content as Uint8Array bytes for app attachments, uploads, and similar uses.","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":"Generates XLSX content as Uint8Array bytes for app attachments, uploads, and similar uses."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Generates XLSX content as Uint8Array bytes for app attachments, uploads, and similar uses."},{"kind":"paragraph","text":"API for Pro features: Built-in Excel export"}]},{"id":"contract","title":"Exact input and result types","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":["Arguments","Required","Type"],"rows":[["options","Optional","{\n      sheetName?: string;\n      onlySelected?: boolean;\n      columnKeys?: readonly string[];\n      skipHeaders?: boolean;\n    }"]]},{"kind":"paragraph","text":"The return type is `Promise<Uint8Array>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getDataAsExcel(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/excel-export","title":"Excel export","description":"Excel export generates XLSX bytes or downloads a file. This Pro feature suits exchanges requiring sheet names and workbook format beyond CSV."}]}]}]},{"path":"/docs/methods/exportDataAsExcel","kind":"method","title":"exportDataAsExcel","summary":"Downloads an XLSX file using the specified sheet name, columns, and selection conditions.","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":"Downloads an XLSX file using the specified sheet name, columns, and selection conditions."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Downloads an XLSX file using the specified sheet name, columns, and selection conditions."},{"kind":"paragraph","text":"API for Pro features: Built-in Excel export"}]},{"id":"contract","title":"Exact input and result types","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":["Arguments","Required","Type"],"rows":[["options","Optional","{\n      fileName?: string;\n      sheetName?: string;\n      onlySelected?: boolean;\n      columnKeys?: readonly string[];\n      skipHeaders?: boolean;\n    }"]]},{"kind":"paragraph","text":"The return type is `Promise<void>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.exportDataAsExcel(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/excel-export","title":"Excel export","description":"Excel export generates XLSX bytes or downloads a file. This Pro feature suits exchanges requiring sheet names and workbook format beyond CSV."}]}]}]},{"path":"/docs/methods/importCsvText","kind":"method","title":"importCsvText","summary":"Parses CSV text and replaces columns and source data. For appending rows, parse separately and use transactions.","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":"Parses CSV text and replaces columns and source data. For appending rows, parse separately and use transactions."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Parses CSV text and replaces columns and source data. For appending rows, parse separately and use transactions."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"importCsvText(text: string, options?: { delimiter?: CsvDelimiter; hasHeader?: boolean }): Promise<{ rowCount: number; columnCount: number }>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["text","Required","string"],["options","Optional","{ delimiter?: CsvDelimiter; hasHeader?: boolean }"]]},{"kind":"paragraph","text":"The return type is `Promise<{ rowCount: number; columnCount: number }>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.importCsvText(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/CsvDelimiter","title":"CsvDelimiter","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/csv-import","title":"Import CSV","description":"CSV import converts delimited text into new columns and rows. Unlike a transaction that appends rows, importCsvText replaces columnDefs and rowData."}]}]}]},{"path":"/docs/methods/getDataAsPdf","kind":"method","title":"getDataAsPdf","summary":"Returns PDF generation results without downloading. Prepare a suitable font for characters such as Korean text.","member":{"name":"getDataAsPdf","typeParameters":[],"parameters":[{"name":"options","type":"SyGridPdfExportOptions","optional":true}],"returns":"Promise<PdfExportResult>","description":"Returns PDF generation results without downloading. Prepare a suitable font for characters such as Korean text."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Returns PDF generation results without downloading. Prepare a suitable font for characters such as Korean text."},{"kind":"paragraph","text":"API for Pro features: Built-in PDF export"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getDataAsPdf(options?: SyGridPdfExportOptions): Promise<PdfExportResult>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["options","Optional","SyGridPdfExportOptions"]]},{"kind":"paragraph","text":"The return type is `Promise<PdfExportResult>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getDataAsPdf(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridPdfExportOptions","title":"SyGridPdfExportOptions","description":""},{"path":"/docs/types/PdfExportResult","title":"PdfExportResult","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/pdf-export","title":"PDF export","description":"PDF export fixes the table into a shareable document. Choose CSV or XLSX for further calculation in other apps, and PDF for reading and distribution."}]}]}]},{"path":"/docs/methods/exportDataAsPdf","kind":"method","title":"exportDataAsPdf","summary":"Downloads the table as PDF and returns generation results.","member":{"name":"exportDataAsPdf","typeParameters":[],"parameters":[{"name":"options","type":"SyGridPdfDownloadOptions","optional":true}],"returns":"Promise<PdfExportResult>","description":"Downloads the table as PDF and returns generation results."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Downloads the table as PDF and returns generation results."},{"kind":"paragraph","text":"API for Pro features: Built-in PDF export"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"exportDataAsPdf(options?: SyGridPdfDownloadOptions): Promise<PdfExportResult>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["options","Optional","SyGridPdfDownloadOptions"]]},{"kind":"paragraph","text":"The return type is `Promise<PdfExportResult>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.exportDataAsPdf(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridPdfDownloadOptions","title":"SyGridPdfDownloadOptions","description":""},{"path":"/docs/types/PdfExportResult","title":"PdfExportResult","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/pdf-export","title":"PDF export","description":"PDF export fixes the table into a shareable document. Choose CSV or XLSX for further calculation in other apps, and PDF for reading and distribution."}]}]}]},{"path":"/docs/methods/importDataFromXlsx","kind":"method","title":"importDataFromXlsx","summary":"Parses file bytes into a workbook and returns XlsxImportResult. Read the Grid snapshot from the xlsxImported event.","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":"Parses file bytes into a workbook and returns XlsxImportResult. Read the Grid snapshot from the xlsxImported event."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Parses file bytes into a workbook and returns XlsxImportResult. Read the Grid snapshot from the xlsxImported event."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"importDataFromXlsx(source: ArrayBuffer | Uint8Array, options?: { sheetName?: string; snapshot?: SheetToRowDataOptions }): Promise<XlsxImportResult>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["source","Required","ArrayBuffer | Uint8Array"],["options","Optional","{ sheetName?: string; snapshot?: SheetToRowDataOptions }"]]},{"kind":"paragraph","text":"The return type is `Promise<XlsxImportResult>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.importDataFromXlsx(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SheetToRowDataOptions","title":"SheetToRowDataOptions","description":""},{"path":"/docs/types/XlsxImportResult","title":"XlsxImportResult","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/xlsx-import","title":"Excel import","description":"XLSX import reads a workbook and converts the selected sheet into a Grid column-and-row snapshot. The full parsed workbook and the display snapshot are different data."}]}]}]},{"path":"/docs/methods/getContextMenuItems","kind":"method","title":"getContextMenuItems","summary":"Calculates context-menu items for a displayed row and field.","member":{"name":"getContextMenuItems","typeParameters":[],"parameters":[{"name":"target","type":"{ rowIndex: number; field?: string }","optional":false}],"returns":"Promise<ContextMenuItem[]>","description":"Calculates context-menu items for a displayed row and field."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Calculates context-menu items for a displayed row and field."},{"kind":"paragraph","text":"API for Pro features: Built-in context menu"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getContextMenuItems(target: { rowIndex: number; field?: string }): Promise<ContextMenuItem[]>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["target","Required","{ rowIndex: number; field?: string }"]]},{"kind":"paragraph","text":"The return type is `Promise<ContextMenuItem[]>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getContextMenuItems(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/ContextMenuItem","title":"ContextMenuItem","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/context-menu","title":"Cell context menus","description":"A cell's context menu offers actions such as Copy, Copy row, and Export for the current location. Also provide toolbar or keyboard access to frequently used features."}]}]}]},{"path":"/docs/methods/copyCellAt","kind":"method","title":"copyCellAt","summary":"Copies the value at a displayed row and field and returns success.","member":{"name":"copyCellAt","typeParameters":[],"parameters":[{"name":"rowIndex","type":"number","optional":false},{"name":"field","type":"string","optional":false}],"returns":"Promise<boolean>","description":"Copies the value at a displayed row and field and returns success."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Copies the value at a displayed row and field and returns success."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"copyCellAt(rowIndex: number, field: string): Promise<boolean>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["rowIndex","Required","number"],["field","Required","string"]]},{"kind":"paragraph","text":"The return type is `Promise<boolean>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.copyCellAt(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/single-cell-copy","title":"Copy cells","description":"Copy one cell's display text to the system clipboard. Selected text inside a cell editor and a focused Grid cell are different copy targets."}]}]}]},{"path":"/docs/methods/copyRowAt","kind":"method","title":"copyRowAt","summary":"Copies a displayed row and returns success.","member":{"name":"copyRowAt","typeParameters":[],"parameters":[{"name":"rowIndex","type":"number","optional":false}],"returns":"Promise<boolean>","description":"Copies a displayed row and returns success."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Copies a displayed row and returns success."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"copyRowAt(rowIndex: number): Promise<boolean>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["rowIndex","Required","number"]]},{"kind":"paragraph","text":"The return type is `Promise<boolean>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.copyRowAt(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/row-copy","title":"Copy rows","description":"Copy a row's displayed columns as tab-separated text. Spreadsheet apps paste each column into a separate cell, making it useful for transferring several values from one order."}]}]}]},{"path":"/docs/methods/getCellTooltipText","kind":"method","title":"getCellTooltipText","summary":"Calculates actual tooltip text from the target cell and overflow context.","member":{"name":"getCellTooltipText","typeParameters":[],"parameters":[{"name":"target","type":"{ rowIndex: number; field: string; displayedText?: string; isOverflowing?: boolean }","optional":false}],"returns":"Promise<string>","description":"Calculates actual tooltip text from the target cell and overflow context."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Calculates actual tooltip text from the target cell and overflow context."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getCellTooltipText(target: { rowIndex: number; field: string; displayedText?: string; isOverflowing?: boolean }): Promise<string>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["target","Required","{ rowIndex: number; field: string; displayedText?: string; isOverflowing?: boolean }"]]},{"kind":"paragraph","text":"The return type is `Promise<string>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getCellTooltipText(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/tooltip","title":"Cell tooltips","description":"Tooltips help users briefly inspect truncated names or long descriptions. Do not hide essential errors or guidance exclusively inside tooltips."}]}]}]},{"path":"/docs/methods/getUndoRedoDepth","kind":"method","title":"getUndoRedoDepth","summary":"Reads the number of available undo and redo steps.","member":{"name":"getUndoRedoDepth","typeParameters":[],"parameters":[],"returns":"Promise<{ undo: number; redo: number }>","description":"Reads the number of available undo and redo steps."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Reads the number of available undo and redo steps."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getUndoRedoDepth(): Promise<{ undo: number; redo: number }>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<{ undo: number; redo: number }>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getUndoRedoDepth(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/undo-redo","title":"Edit history","description":"Undo or redo recorded editing transactions. One operation may contain multiple cell changes, so cell counts and history counts are not necessarily equal."}]}]}]},{"path":"/docs/methods/setColumnWidth","kind":"method","title":"setColumnWidth","summary":"Sets the current column width. Review minimum and maximum constraints too.","member":{"name":"setColumnWidth","typeParameters":[],"parameters":[{"name":"colId","type":"string","optional":false},{"name":"width","type":"number","optional":false}],"returns":"Promise<void>","description":"Sets the current column width. Review minimum and maximum constraints too."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Sets the current column width. Review minimum and maximum constraints too."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"setColumnWidth(colId: string, width: number): Promise<void>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["colId","Required","string"],["width","Required","number"]]},{"kind":"paragraph","text":"The return type is `Promise<void>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.setColumnWidth(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/column-operations","title":"Column sizing and pinning","description":"Width, order, pinning, and visibility are independent column states. Combine them to pin order IDs, hide supporting information, and widen long product names."}]}]}]},{"path":"/docs/methods/resetColumnWidth","kind":"method","title":"resetColumnWidth","summary":"Resets the specified column's user-adjusted width to its initial setting.","member":{"name":"resetColumnWidth","typeParameters":[],"parameters":[{"name":"colId","type":"string","optional":false}],"returns":"Promise<void>","description":"Resets the specified column's user-adjusted width to its initial setting."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Resets the specified column's user-adjusted width to its initial setting."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"resetColumnWidth(colId: string): Promise<void>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["colId","Required","string"]]},{"kind":"paragraph","text":"The return type is `Promise<void>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.resetColumnWidth(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/column-operations","title":"Column sizing and pinning","description":"Width, order, pinning, and visibility are independent column states. Combine them to pin order IDs, hide supporting information, and widen long product names."}]}]}]},{"path":"/docs/methods/getColumnWidth","kind":"method","title":"getColumnWidth","summary":"Reads the current column width, or null if the column is absent.","member":{"name":"getColumnWidth","typeParameters":[],"parameters":[{"name":"colId","type":"string","optional":false}],"returns":"Promise<number | null>","description":"Reads the current column width, or null if the column is absent."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Reads the current column width, or null if the column is absent."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getColumnWidth(colId: string): Promise<number | null>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["colId","Required","string"]]},{"kind":"paragraph","text":"The return type is `Promise<number | null>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getColumnWidth(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/column-operations","title":"Column sizing and pinning","description":"Width, order, pinning, and visibility are independent column states. Combine them to pin order IDs, hide supporting information, and widen long product names."}]}]}]},{"path":"/docs/methods/setColumnPinned","kind":"method","title":"setColumnPinned","summary":"Pins a column left/right or unpins it.","member":{"name":"setColumnPinned","typeParameters":[],"parameters":[{"name":"field","type":"string","optional":false},{"name":"side","type":"ColumnPinSide | null","optional":false}],"returns":"Promise<void>","description":"Pins a column left/right or unpins it."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Pins a column left/right or unpins it."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"setColumnPinned(field: string, side: ColumnPinSide | null): Promise<void>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["field","Required","string"],["side","Required","ColumnPinSide | null"]]},{"kind":"paragraph","text":"The return type is `Promise<void>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.setColumnPinned(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/ColumnPinSide","title":"ColumnPinSide","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/column-operations","title":"Column sizing and pinning","description":"Width, order, pinning, and visibility are independent column states. Combine them to pin order IDs, hide supporting information, and widen long product names."}]}]}]},{"path":"/docs/methods/getColumnPinned","kind":"method","title":"getColumnPinned","summary":"Reads the column's current pinning direction.","member":{"name":"getColumnPinned","typeParameters":[],"parameters":[{"name":"field","type":"string","optional":false}],"returns":"Promise<ColumnPinSide | null>","description":"Reads the column's current pinning direction."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Reads the column's current pinning direction."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getColumnPinned(field: string): Promise<ColumnPinSide | null>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["field","Required","string"]]},{"kind":"paragraph","text":"The return type is `Promise<ColumnPinSide | null>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getColumnPinned(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/ColumnPinSide","title":"ColumnPinSide","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/column-operations","title":"Column sizing and pinning","description":"Width, order, pinning, and visibility are independent column states. Combine them to pin order IDs, hide supporting information, and widen long product names."}]}]}]},{"path":"/docs/methods/setColumnOrder","kind":"method","title":"setColumnOrder","summary":"Sets display order using column IDs.","member":{"name":"setColumnOrder","typeParameters":[],"parameters":[{"name":"orderedColIds","type":"string[]","optional":false}],"returns":"Promise<void>","description":"Sets display order using column IDs."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Sets display order using column IDs."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"setColumnOrder(orderedColIds: string[]): Promise<void>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["orderedColIds","Required","string[]"]]},{"kind":"paragraph","text":"The return type is `Promise<void>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.setColumnOrder(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/column-operations","title":"Column sizing and pinning","description":"Width, order, pinning, and visibility are independent column states. Combine them to pin order IDs, hide supporting information, and widen long product names."}]}]}]},{"path":"/docs/methods/getColumnOrder","kind":"method","title":"getColumnOrder","summary":"Reads column IDs in current display order.","member":{"name":"getColumnOrder","typeParameters":[],"parameters":[],"returns":"Promise<string[]>","description":"Reads column IDs in current display order."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Reads column IDs in current display order."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getColumnOrder(): Promise<string[]>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<string[]>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getColumnOrder(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/column-operations","title":"Column sizing and pinning","description":"Width, order, pinning, and visibility are independent column states. Combine them to pin order IDs, hide supporting information, and widen long product names."}]}]}]},{"path":"/docs/methods/hideColumn","kind":"method","title":"hideColumn","summary":"Hides a column without deleting source data or revoking read permission.","member":{"name":"hideColumn","typeParameters":[],"parameters":[{"name":"colId","type":"string","optional":false}],"returns":"Promise<void>","description":"Hides a column without deleting source data or revoking read permission."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Hides a column without deleting source data or revoking read permission."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"hideColumn(colId: string): Promise<void>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["colId","Required","string"]]},{"kind":"paragraph","text":"The return type is `Promise<void>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.hideColumn(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/column-operations","title":"Column sizing and pinning","description":"Width, order, pinning, and visibility are independent column states. Combine them to pin order IDs, hide supporting information, and widen long product names."}]}]}]},{"path":"/docs/methods/showColumn","kind":"method","title":"showColumn","summary":"Shows a hidden column.","member":{"name":"showColumn","typeParameters":[],"parameters":[{"name":"colId","type":"string","optional":false}],"returns":"Promise<void>","description":"Shows a hidden column."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Shows a hidden column."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"showColumn(colId: string): Promise<void>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["colId","Required","string"]]},{"kind":"paragraph","text":"The return type is `Promise<void>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.showColumn(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/column-operations","title":"Column sizing and pinning","description":"Width, order, pinning, and visibility are independent column states. Combine them to pin order IDs, hide supporting information, and widen long product names."}]}]}]},{"path":"/docs/methods/toggleColumnVisibility","kind":"method","title":"toggleColumnVisibility","summary":"Toggles column visibility and returns the resulting state.","member":{"name":"toggleColumnVisibility","typeParameters":[],"parameters":[{"name":"colId","type":"string","optional":false}],"returns":"Promise<boolean>","description":"Toggles column visibility and returns the resulting state."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Toggles column visibility and returns the resulting state."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"toggleColumnVisibility(colId: string): Promise<boolean>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["colId","Required","string"]]},{"kind":"paragraph","text":"The return type is `Promise<boolean>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.toggleColumnVisibility(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/column-operations","title":"Column sizing and pinning","description":"Width, order, pinning, and visibility are independent column states. Combine them to pin order IDs, hide supporting information, and widen long product names."}]}]}]},{"path":"/docs/methods/setHiddenColumns","kind":"method","title":"setHiddenColumns","summary":"Sets the list of hidden columns at once.","member":{"name":"setHiddenColumns","typeParameters":[],"parameters":[{"name":"colIds","type":"string[]","optional":false}],"returns":"Promise<void>","description":"Sets the list of hidden columns at once."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Sets the list of hidden columns at once."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"setHiddenColumns(colIds: string[]): Promise<void>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["colIds","Required","string[]"]]},{"kind":"paragraph","text":"The return type is `Promise<void>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.setHiddenColumns(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/column-operations","title":"Column sizing and pinning","description":"Width, order, pinning, and visibility are independent column states. Combine them to pin order IDs, hide supporting information, and widen long product names."}]}]}]},{"path":"/docs/methods/resetColumnVisibility","kind":"method","title":"resetColumnVisibility","summary":"Resets column visibility to initial settings.","member":{"name":"resetColumnVisibility","typeParameters":[],"parameters":[],"returns":"Promise<void>","description":"Resets column visibility to initial settings."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Resets column visibility to initial settings."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"resetColumnVisibility(): Promise<void>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<void>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.resetColumnVisibility(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/column-operations","title":"Column sizing and pinning","description":"Width, order, pinning, and visibility are independent column states. Combine them to pin order IDs, hide supporting information, and widen long product names."}]}]}]},{"path":"/docs/methods/getHiddenColumns","kind":"method","title":"getHiddenColumns","summary":"Reads IDs of currently hidden columns.","member":{"name":"getHiddenColumns","typeParameters":[],"parameters":[],"returns":"Promise<string[]>","description":"Reads IDs of currently hidden columns."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Reads IDs of currently hidden columns."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getHiddenColumns(): Promise<string[]>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<string[]>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getHiddenColumns(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/column-operations","title":"Column sizing and pinning","description":"Width, order, pinning, and visibility are independent column states. Combine them to pin order IDs, hide supporting information, and widen long product names."}]}]}]},{"path":"/docs/methods/autoSizeColumn","kind":"method","title":"autoSizeColumn","summary":"Measures currently available content and applies an appropriate width to one column.","member":{"name":"autoSizeColumn","typeParameters":[],"parameters":[{"name":"colId","type":"string","optional":false}],"returns":"Promise<number | null>","description":"Measures currently available content and applies an appropriate width to one column."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Measures currently available content and applies an appropriate width to one column."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"autoSizeColumn(colId: string): Promise<number | null>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["colId","Required","string"]]},{"kind":"paragraph","text":"The return type is `Promise<number | null>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.autoSizeColumn(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/column-operations","title":"Column sizing and pinning","description":"Width, order, pinning, and visibility are independent column states. Combine them to pin order IDs, hide supporting information, and widen long product names."}]}]}]},{"path":"/docs/methods/autoSizeAllColumns","kind":"method","title":"autoSizeAllColumns","summary":"Autosizes all columns. Do not assume unloaded server values can be measured.","member":{"name":"autoSizeAllColumns","typeParameters":[],"parameters":[],"returns":"Promise<void>","description":"Autosizes all columns. Do not assume unloaded server values can be measured."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Autosizes all columns. Do not assume unloaded server values can be measured."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"autoSizeAllColumns(): Promise<void>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<void>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.autoSizeAllColumns(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/column-operations","title":"Column sizing and pinning","description":"Width, order, pinning, and visibility are independent column states. Combine them to pin order IDs, hide supporting information, and widen long product names."}]}]}]},{"path":"/docs/methods/getColumnState","kind":"method","title":"getColumnState","summary":"Reads serializable column width, order, visibility, sorting, and pinning state.","member":{"name":"getColumnState","typeParameters":[],"parameters":[],"returns":"Promise<ColumnStateEntry[]>","description":"Reads serializable column width, order, visibility, sorting, and pinning state."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Reads serializable column width, order, visibility, sorting, and pinning state."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getColumnState(): Promise<ColumnStateEntry[]>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<ColumnStateEntry[]>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getColumnState(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/ColumnStateEntry","title":"ColumnStateEntry","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/column-operations","title":"Column sizing and pinning","description":"Width, order, pinning, and visibility are independent column states. Combine them to pin order IDs, hide supporting information, and widen long product names."}]}]}]},{"path":"/docs/methods/applyColumnState","kind":"method","title":"applyColumnState","summary":"Restores saved column state. Verify that IDs match current columns.","member":{"name":"applyColumnState","typeParameters":[],"parameters":[{"name":"state","type":"ColumnStateEntry[]","optional":false},{"name":"opts","type":"ApplyColumnStateOptions","optional":true}],"returns":"Promise<void>","description":"Restores saved column state. Verify that IDs match current columns."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Restores saved column state. Verify that IDs match current columns."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"applyColumnState(state: ColumnStateEntry[], opts?: ApplyColumnStateOptions): Promise<void>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["state","Required","ColumnStateEntry[]"],["opts","Optional","ApplyColumnStateOptions"]]},{"kind":"paragraph","text":"The return type is `Promise<void>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.applyColumnState(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/ColumnStateEntry","title":"ColumnStateEntry","description":""},{"path":"/docs/types/ApplyColumnStateOptions","title":"ApplyColumnStateOptions","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/column-operations","title":"Column sizing and pinning","description":"Width, order, pinning, and visibility are independent column states. Combine them to pin order IDs, hide supporting information, and widen long product names."}]}]}]},{"path":"/docs/methods/getState","kind":"method","title":"getState","summary":"Reads an immutable, versioned snapshot of the complete view state. Does not back up source row data.","member":{"name":"getState","typeParameters":[],"parameters":[],"returns":"Promise<SyGridState>","description":"Reads an immutable, versioned snapshot of the complete view state. Does not back up source row data."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Reads an immutable, versioned snapshot of the complete view state. Does not back up source row data."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getState(): Promise<SyGridState>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<SyGridState>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getState(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridState","title":"SyGridState","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"Settings and data fundamentals","description":""},{"path":"/docs/guides/data-event-access","title":"API calls and event integration","description":""}]}]}]},{"path":"/docs/methods/setState","kind":"method","title":"setState","summary":"Restores complete or selected state slices and returns applied/issue reports. Only slices in appliedSlices were actually applied.","member":{"name":"setState","typeParameters":[],"parameters":[{"name":"state","type":"SyGridState","optional":false},{"name":"options","type":"GridStateApplyOptions","optional":true}],"returns":"Promise<SyGridStateApplyReport>","description":"Restores complete or selected state slices and returns applied/issue reports. Only slices in appliedSlices were actually applied."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Restores complete or selected state slices and returns applied/issue reports. Only slices in appliedSlices were actually applied."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"setState(state: SyGridState, options?: GridStateApplyOptions): Promise<SyGridStateApplyReport>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["state","Required","SyGridState"],["options","Optional","GridStateApplyOptions"]]},{"kind":"paragraph","text":"The return type is `Promise<SyGridStateApplyReport>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.setState(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridState","title":"SyGridState","description":""},{"path":"/docs/types/GridStateApplyOptions","title":"GridStateApplyOptions","description":""},{"path":"/docs/types/SyGridStateApplyReport","title":"SyGridStateApplyReport","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"Settings and data fundamentals","description":""},{"path":"/docs/guides/data-event-access","title":"API calls and event integration","description":""}]}]}]},{"path":"/docs/methods/getFilterModel","kind":"method","title":"getFilterModel","summary":"Reads combined state across current filter families.","member":{"name":"getFilterModel","typeParameters":[],"parameters":[],"returns":"Promise<SyGridFilterSlice>","description":"Reads combined state across current filter families."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Reads combined state across current filter families."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getFilterModel(): Promise<SyGridFilterSlice>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<SyGridFilterSlice>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getFilterModel(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridFilterSlice","title":"SyGridFilterSlice","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/column-filters","title":"Conditions for each column","description":"Column filters apply conditions to individual columns. Text, numbers, and dates use different inputs and comparisons; conditions across columns narrow results together."}]}]}]},{"path":"/docs/methods/setFilterModel","kind":"method","title":"setFilterModel","summary":"Applies a validated combined filter model. null clears all filter families; inspect reports for invalid models.","member":{"name":"setFilterModel","typeParameters":[],"parameters":[{"name":"model","type":"SyGridFilterSlice | null","optional":false}],"returns":"Promise<FilterSliceApplyResult['report']>","description":"Applies a validated combined filter model. null clears all filter families; inspect reports for invalid models."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Applies a validated combined filter model. null clears all filter families; inspect reports for invalid models."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"setFilterModel(model: SyGridFilterSlice | null): Promise<FilterSliceApplyResult['report']>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["model","Required","SyGridFilterSlice | null"]]},{"kind":"paragraph","text":"The return type is `Promise<FilterSliceApplyResult['report']>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.setFilterModel(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridFilterSlice","title":"SyGridFilterSlice","description":""},{"path":"/docs/types/FilterSliceApplyResult","title":"FilterSliceApplyResult","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/column-filters","title":"Conditions for each column","description":"Column filters apply conditions to individual columns. Text, numbers, and dates use different inputs and comparisons; conditions across columns narrow results together."}]}]}]},{"path":"/docs/methods/getCanonicalRanges","kind":"method","title":"getCanonicalRanges","summary":"Reads current selection as normalized ranges including stable row and column IDs.","member":{"name":"getCanonicalRanges","typeParameters":[],"parameters":[],"returns":"Promise<SyGridCanonicalRange[]>","description":"Reads current selection as normalized ranges including stable row and column IDs."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Reads current selection as normalized ranges including stable row and column IDs."},{"kind":"paragraph","text":"API for Pro features: Cell range selection"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getCanonicalRanges(): Promise<SyGridCanonicalRange[]>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<SyGridCanonicalRange[]>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getCanonicalRanges(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridCanonicalRange","title":"SyGridCanonicalRange","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/range-selection","title":"Cell range selection","description":"A cell range is a rectangle spanning rows and columns. It defines the scope for copying, pasting, filling, and chart creation; selecting it does not change values."}]}]}]},{"path":"/docs/methods/setCanonicalRanges","kind":"method","title":"setCanonicalRanges","summary":"Changes cell selection from normalized range input and returns the change result.","member":{"name":"setCanonicalRanges","typeParameters":[],"parameters":[{"name":"ranges","type":"SyGridCellRangeInput[]","optional":false}],"returns":"Promise<SyGridCanonicalChange[]>","description":"Changes cell selection from normalized range input and returns the change result."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Changes cell selection from normalized range input and returns the change result."},{"kind":"paragraph","text":"API for Pro features: Cell range selection"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"setCanonicalRanges(ranges: SyGridCellRangeInput[]): Promise<SyGridCanonicalChange[]>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["ranges","Required","SyGridCellRangeInput[]"]]},{"kind":"paragraph","text":"The return type is `Promise<SyGridCanonicalChange[]>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.setCanonicalRanges(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridCellRangeInput","title":"SyGridCellRangeInput","description":""},{"path":"/docs/types/SyGridCanonicalChange","title":"SyGridCanonicalChange","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/range-selection","title":"Cell range selection","description":"A cell range is a rectangle spanning rows and columns. It defines the scope for copying, pasting, filling, and chart creation; selecting it does not change values."}]}]}]},{"path":"/docs/methods/startBatchEdit","kind":"method","title":"startBatchEdit","summary":"Starts batch editing to collect multiple cell changes for a single commit.","member":{"name":"startBatchEdit","typeParameters":[],"parameters":[{"name":"options","type":"SyGridBatchStartOptions","optional":true}],"returns":"Promise<boolean>","description":"Starts batch editing to collect multiple cell changes for a single commit."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Starts batch editing to collect multiple cell changes for a single commit."},{"kind":"paragraph","text":"API for Pro features: Batch editing"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"startBatchEdit(options?: SyGridBatchStartOptions): Promise<boolean>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["options","Optional","SyGridBatchStartOptions"]]},{"kind":"paragraph","text":"The return type is `Promise<boolean>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.startBatchEdit(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridBatchStartOptions","title":"SyGridBatchStartOptions","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/batch-editing","title":"Batch editing","description":"Batch editing stages changes to multiple cells for a single commit or cancellation. Distinguish staged values from committed rowData to make the Save action clear."}]}]}]},{"path":"/docs/methods/isBatchEditing","kind":"method","title":"isBatchEditing","summary":"Checks whether batch editing is active.","member":{"name":"isBatchEditing","typeParameters":[],"parameters":[],"returns":"Promise<boolean>","description":"Checks whether batch editing is active."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Checks whether batch editing is active."},{"kind":"paragraph","text":"API for Pro features: Batch editing"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"isBatchEditing(): Promise<boolean>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<boolean>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.isBatchEditing(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/batch-editing","title":"Batch editing","description":"Batch editing stages changes to multiple cells for a single commit or cancellation. Distinguish staged values from committed rowData to make the Save action clear."}]}]}]},{"path":"/docs/methods/stageBatchCell","kind":"method","title":"stageBatchCell","summary":"Stages a batch value by row and column ID. Does not immediately persist final data.","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":"Stages a batch value by row and column ID. Does not immediately persist final data."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Stages a batch value by row and column ID. Does not immediately persist final data."},{"kind":"paragraph","text":"API for Pro features: Batch editing"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"stageBatchCell(rowId: GridRowId, colId: string, value: unknown): Promise<boolean>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["rowId","Required","GridRowId"],["colId","Required","string"],["value","Required","unknown"]]},{"kind":"paragraph","text":"The return type is `Promise<boolean>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.stageBatchCell(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridRowId","title":"GridRowId","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/batch-editing","title":"Batch editing","description":"Batch editing stages changes to multiple cells for a single commit or cancellation. Distinguish staged values from committed rowData to make the Save action clear."}]}]}]},{"path":"/docs/methods/getPendingBatchCells","kind":"method","title":"getPendingBatchCells","summary":"Reads uncommitted batch editing cells.","member":{"name":"getPendingBatchCells","typeParameters":[],"parameters":[],"returns":"Promise<SyGridPendingBatchCell[]>","description":"Reads uncommitted batch editing cells."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Reads uncommitted batch editing cells."},{"kind":"paragraph","text":"API for Pro features: Batch editing"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getPendingBatchCells(): Promise<SyGridPendingBatchCell[]>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<SyGridPendingBatchCell[]>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getPendingBatchCells(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridPendingBatchCell","title":"SyGridPendingBatchCell","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/batch-editing","title":"Batch editing","description":"Batch editing stages changes to multiple cells for a single commit or cancellation. Distinguish staged values from committed rowData to make the Save action clear."}]}]}]},{"path":"/docs/methods/cancelBatchEdit","kind":"method","title":"cancelBatchEdit","summary":"Cancels pending batch edits and returns the cancelled item count.","member":{"name":"cancelBatchEdit","typeParameters":[],"parameters":[],"returns":"Promise<number>","description":"Cancels pending batch edits and returns the cancelled item count."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Cancels pending batch edits and returns the cancelled item count."},{"kind":"paragraph","text":"API for Pro features: Batch editing"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"cancelBatchEdit(): Promise<number>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<number>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.cancelBatchEdit(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/batch-editing","title":"Batch editing","description":"Batch editing stages changes to multiple cells for a single commit or cancellation. Distinguish staged values from committed rowData to make the Save action clear."}]}]}]},{"path":"/docs/methods/commitBatchEdit","kind":"method","title":"commitBatchEdit","summary":"Validates and commits staged changes, reporting per-cell results.","member":{"name":"commitBatchEdit","typeParameters":[],"parameters":[{"name":"options","type":"SyGridBatchCommitOptions","optional":true}],"returns":"Promise<SyGridBatchCommitReport>","description":"Validates and commits staged changes, reporting per-cell results."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Validates and commits staged changes, reporting per-cell results."},{"kind":"paragraph","text":"API for Pro features: Batch editing"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"commitBatchEdit(options?: SyGridBatchCommitOptions): Promise<SyGridBatchCommitReport>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["options","Optional","SyGridBatchCommitOptions"]]},{"kind":"paragraph","text":"The return type is `Promise<SyGridBatchCommitReport>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.commitBatchEdit(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridBatchCommitOptions","title":"SyGridBatchCommitOptions","description":""},{"path":"/docs/types/SyGridBatchCommitReport","title":"SyGridBatchCommitReport","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/batch-editing","title":"Batch editing","description":"Batch editing stages changes to multiple cells for a single commit or cancellation. Distinguish staged values from committed rowData to make the Save action clear."}]}]}]},{"path":"/docs/methods/startRowEdit","kind":"method","title":"startRowEdit","summary":"Starts full-row editing for a row ID.","member":{"name":"startRowEdit","typeParameters":[],"parameters":[{"name":"rowId","type":"GridRowId","optional":false}],"returns":"Promise<boolean>","description":"Starts full-row editing for a row ID."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Starts full-row editing for a row ID."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"startRowEdit(rowId: GridRowId): Promise<boolean>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["rowId","Required","GridRowId"]]},{"kind":"paragraph","text":"The return type is `Promise<boolean>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.startRowEdit(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridRowId","title":"GridRowId","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/cell-editing","title":"Cell and row editing","description":"Cell editing changes one value immediately; full-row editing commits multiple fields as one row operation. editor specifies the input UI, while editable controls write access."}]}]}]},{"path":"/docs/methods/stopRowEdit","kind":"method","title":"stopRowEdit","summary":"Commits or cancels current row editing and returns a report.","member":{"name":"stopRowEdit","typeParameters":[],"parameters":[{"name":"reason","type":"'commit' | 'cancel'","optional":true}],"returns":"Promise<SyGridRowEditReport>","description":"Commits or cancels current row editing and returns a report."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Commits or cancels current row editing and returns a report."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"stopRowEdit(reason?: 'commit' | 'cancel'): Promise<SyGridRowEditReport>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["reason","Optional","'commit' | 'cancel'"]]},{"kind":"paragraph","text":"The return type is `Promise<SyGridRowEditReport>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.stopRowEdit(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridRowEditReport","title":"SyGridRowEditReport","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/cell-editing","title":"Cell and row editing","description":"Cell editing changes one value immediately; full-row editing commits multiple fields as one row operation. editor specifies the input UI, while editable controls write access."}]}]}]},{"path":"/docs/methods/stageRowEditCell","kind":"method","title":"stageRowEditCell","summary":"Sets a pending value for a column in the row currently being edited.","member":{"name":"stageRowEditCell","typeParameters":[],"parameters":[{"name":"colId","type":"string","optional":false},{"name":"value","type":"unknown","optional":false}],"returns":"Promise<boolean>","description":"Sets a pending value for a column in the row currently being edited."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Sets a pending value for a column in the row currently being edited."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"stageRowEditCell(colId: string, value: unknown): Promise<boolean>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["colId","Required","string"],["value","Required","unknown"]]},{"kind":"paragraph","text":"The return type is `Promise<boolean>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.stageRowEditCell(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/cell-editing","title":"Cell and row editing","description":"Cell editing changes one value immediately; full-row editing commits multiple fields as one row operation. editor specifies the input UI, while editable controls write access."}]}]}]},{"path":"/docs/methods/getStateCaptureReport","kind":"method","title":"getStateCaptureReport","summary":"Reads omissions and issues from the latest view-state capture to assess saved-state completeness.","member":{"name":"getStateCaptureReport","typeParameters":[],"parameters":[],"returns":"Promise<SyGridStateCaptureReport>","description":"Reads omissions and issues from the latest view-state capture to assess saved-state completeness."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Reads omissions and issues from the latest view-state capture to assess saved-state completeness."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getStateCaptureReport(): Promise<SyGridStateCaptureReport>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<SyGridStateCaptureReport>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getStateCaptureReport(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridStateCaptureReport","title":"SyGridStateCaptureReport","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"Settings and data fundamentals","description":""},{"path":"/docs/guides/data-event-access","title":"API calls and event integration","description":""}]}]}]},{"path":"/docs/methods/fillRange","kind":"method","title":"fillRange","summary":"Fills a target range from source values or patterns and reports applied and rejected results.","member":{"name":"fillRange","typeParameters":[],"parameters":[{"name":"options","type":"SyGridFillRangeOptions","optional":false}],"returns":"Promise<SyGridFillRangeReport>","description":"Fills a target range from source values or patterns and reports applied and rejected results."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Fills a target range from source values or patterns and reports applied and rejected results."},{"kind":"paragraph","text":"API for Pro features: Fill handle"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"fillRange(options: SyGridFillRangeOptions): Promise<SyGridFillRangeReport>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["options","Required","SyGridFillRangeOptions"]]},{"kind":"paragraph","text":"The return type is `Promise<SyGridFillRangeReport>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.fillRange(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridFillRangeOptions","title":"SyGridFillRangeOptions","description":""},{"path":"/docs/types/SyGridFillRangeReport","title":"SyGridFillRangeReport","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/fill-handle","title":"Fill values","description":"The fill handle copies values or extends a pattern from a source range. Both the drag UI and fillRange API account for editability, validation, and history."}]}]}]},{"path":"/docs/methods/getDisplayRowInfo","kind":"method","title":"getDisplayRowInfo","summary":"Reads the displayed row kind, such as data, group, or detail.","member":{"name":"getDisplayRowInfo","typeParameters":[],"parameters":[{"name":"index","type":"number","optional":false}],"returns":"Promise<SyGridDisplayRowInfo | null>","description":"Reads the displayed row kind, such as data, group, or detail."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Reads the displayed row kind, such as data, group, or detail."},{"kind":"paragraph","text":"API for Pro features: Row grouping, built-in aggregation and group totals"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getDisplayRowInfo(index: number): Promise<SyGridDisplayRowInfo | null>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["index","Required","number"]]},{"kind":"paragraph","text":"The return type is `Promise<SyGridDisplayRowInfo | null>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getDisplayRowInfo(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridDisplayRowInfo","title":"SyGridDisplayRowInfo","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/row-grouping","title":"Grouping and aggregation","description":"Row grouping collects source rows with the same region or team into expandable groups. Unlike column groups, which organize headers, row groups change displayed rows and aggregation results."}]}]}]},{"path":"/docs/methods/getPivotCombinationReport","kind":"method","title":"getPivotCombinationReport","summary":"Reads activation, priority, and restriction decisions for the current combination of pivoting and other features.","member":{"name":"getPivotCombinationReport","typeParameters":[],"parameters":[],"returns":"Promise<SyGridPivotCombinationReport>","description":"Reads activation, priority, and restriction decisions for the current combination of pivoting and other features."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Reads activation, priority, and restriction decisions for the current combination of pivoting and other features."},{"kind":"paragraph","text":"API for Pro features: Pivot"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getPivotCombinationReport(): Promise<SyGridPivotCombinationReport>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<SyGridPivotCombinationReport>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getPivotCombinationReport(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridPivotCombinationReport","title":"SyGridPivotCombinationReport","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/pivot","title":"Pivot analysis","description":"Pivoting divides source orders into row, column, and value axes to create a cross-tabulation. Unlike collapsible row groups, unique values such as statuses become new result columns."}]}]}]},{"path":"/docs/methods/getPivotSecondaryColumns","kind":"method","title":"getPivotSecondaryColumns","summary":"Reads the identity model of result columns created by the active client pivot, or null when no pivot is active.","member":{"name":"getPivotSecondaryColumns","typeParameters":[],"parameters":[],"returns":"Promise<SyGridPivotSecondaryColumns | null>","description":"Reads the identity model of result columns created by the active client pivot, or null when no pivot is active."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Reads the identity model of result columns created by the active client pivot, or null when no pivot is active."},{"kind":"paragraph","text":"API for Pro features: Pivot"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getPivotSecondaryColumns(): Promise<SyGridPivotSecondaryColumns | null>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<SyGridPivotSecondaryColumns | null>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getPivotSecondaryColumns(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridPivotSecondaryColumns","title":"SyGridPivotSecondaryColumns","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/pivot","title":"Pivot analysis","description":"Pivoting divides source orders into row, column, and value axes to create a cross-tabulation. Unlike collapsible row groups, unique values such as statuses become new result columns."}]}]}]},{"path":"/docs/methods/getGroupCheckStates","kind":"method","title":"getGroupCheckStates","summary":"Calculates group selection state. Returns rejection reasons when collapsed groups, missing row IDs, or other row models prevent a reliable result.","member":{"name":"getGroupCheckStates","typeParameters":[],"parameters":[{"name":"options","type":"SyGridGroupCheckStatesOptions","optional":true}],"returns":"Promise<SyGridGroupCheckStatesReport>","description":"Calculates group selection state. Returns rejection reasons when collapsed groups, missing row IDs, or other row models prevent a reliable result."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Calculates group selection state. Returns rejection reasons when collapsed groups, missing row IDs, or other row models prevent a reliable result."},{"kind":"paragraph","text":"API for Pro features: Row grouping, built-in aggregation and group totals"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getGroupCheckStates(options?: SyGridGroupCheckStatesOptions): Promise<SyGridGroupCheckStatesReport>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["options","Optional","SyGridGroupCheckStatesOptions"]]},{"kind":"paragraph","text":"The return type is `Promise<SyGridGroupCheckStatesReport>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getGroupCheckStates(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridGroupCheckStatesOptions","title":"SyGridGroupCheckStatesOptions","description":""},{"path":"/docs/types/SyGridGroupCheckStatesReport","title":"SyGridGroupCheckStatesReport","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/row-grouping","title":"Grouping and aggregation","description":"Row grouping collects source rows with the same region or team into expandable groups. Unlike column groups, which organize headers, row groups change displayed rows and aggregation results."}]}]}]},{"path":"/docs/methods/startRowDrag","kind":"method","title":"startRowDrag","summary":"Starts a row drag session through the public input contract. Check whether it started and any rejection reason.","member":{"name":"startRowDrag","typeParameters":[],"parameters":[{"name":"input","type":"SyGridRowDragStartInput","optional":false}],"returns":"Promise<SyGridRowDragStartResult>","description":"Starts a row drag session through the public input contract. Check whether it started and any rejection reason."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Starts a row drag session through the public input contract. Check whether it started and any rejection reason."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"startRowDrag(input: SyGridRowDragStartInput): Promise<SyGridRowDragStartResult>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["input","Required","SyGridRowDragStartInput"]]},{"kind":"paragraph","text":"The return type is `Promise<SyGridRowDragStartResult>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.startRowDrag(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridRowDragStartInput","title":"SyGridRowDragStartInput","description":""},{"path":"/docs/types/SyGridRowDragStartResult","title":"SyGridRowDragStartResult","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/row-drag","title":"Row dragging","description":"Managed row dragging applies user-defined order to Grid data. Manual reordering can conflict with display order determined by sorting."}]}]}]},{"path":"/docs/methods/getRowDragSession","kind":"method","title":"getRowDragSession","summary":"Reads current row drag session progress.","member":{"name":"getRowDragSession","typeParameters":[],"parameters":[],"returns":"Promise<SyGridRowDragSessionReport>","description":"Reads current row drag session progress."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Reads current row drag session progress."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getRowDragSession(): Promise<SyGridRowDragSessionReport>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<SyGridRowDragSessionReport>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getRowDragSession(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridRowDragSessionReport","title":"SyGridRowDragSessionReport","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/row-drag","title":"Row dragging","description":"Managed row dragging applies user-defined order to Grid data. Manual reordering can conflict with display order determined by sorting."}]}]}]},{"path":"/docs/methods/registerDropZone","kind":"method","title":"registerDropZone","summary":"Registers a drop area for receiving rows and returns the registration result.","member":{"name":"registerDropZone","typeParameters":[],"parameters":[{"name":"input","type":"SyGridDropZoneInput","optional":false}],"returns":"Promise<SyGridDropZoneRegistration>","description":"Registers a drop area for receiving rows and returns the registration result."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Registers a drop area for receiving rows and returns the registration result."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"registerDropZone(input: SyGridDropZoneInput): Promise<SyGridDropZoneRegistration>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["input","Required","SyGridDropZoneInput"]]},{"kind":"paragraph","text":"The return type is `Promise<SyGridDropZoneRegistration>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.registerDropZone(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridDropZoneInput","title":"SyGridDropZoneInput","description":""},{"path":"/docs/types/SyGridDropZoneRegistration","title":"SyGridDropZoneRegistration","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/row-drag","title":"Row dragging","description":"Managed row dragging applies user-defined order to Grid data. Manual reordering can conflict with display order determined by sorting."}]}]}]},{"path":"/docs/methods/unregisterDropZone","kind":"method","title":"unregisterDropZone","summary":"Unregisters a drop area and returns success.","member":{"name":"unregisterDropZone","typeParameters":[],"parameters":[{"name":"zoneId","type":"string","optional":false}],"returns":"Promise<boolean>","description":"Unregisters a drop area and returns success."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Unregisters a drop area and returns success."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"unregisterDropZone(zoneId: string): Promise<boolean>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["zoneId","Required","string"]]},{"kind":"paragraph","text":"The return type is `Promise<boolean>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.unregisterDropZone(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/row-drag","title":"Row dragging","description":"Managed row dragging applies user-defined order to Grid data. Manual reordering can conflict with display order determined by sorting."}]}]}]},{"path":"/docs/methods/getDropZones","kind":"method","title":"getDropZones","summary":"Reads current drop-area registration state.","member":{"name":"getDropZones","typeParameters":[],"parameters":[],"returns":"Promise<SyGridDropZonesReport>","description":"Reads current drop-area registration state."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Reads current drop-area registration state."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getDropZones(): Promise<SyGridDropZonesReport>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<SyGridDropZonesReport>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getDropZones(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridDropZonesReport","title":"SyGridDropZonesReport","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/row-drag","title":"Row dragging","description":"Managed row dragging applies user-defined order to Grid data. Manual reordering can conflict with display order determined by sorting."}]}]}]},{"path":"/docs/methods/getDragSafetyReport","kind":"method","title":"getDragSafetyReport","summary":"Reports whether row dragging is safe under current settings and describes restrictions.","member":{"name":"getDragSafetyReport","typeParameters":[],"parameters":[],"returns":"Promise<SyGridDragSafetyReport>","description":"Reports whether row dragging is safe under current settings and describes restrictions."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Reports whether row dragging is safe under current settings and describes restrictions."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getDragSafetyReport(): Promise<SyGridDragSafetyReport>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<SyGridDragSafetyReport>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getDragSafetyReport(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridDragSafetyReport","title":"SyGridDragSafetyReport","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/row-drag","title":"Row dragging","description":"Managed row dragging applies user-defined order to Grid data. Manual reordering can conflict with display order determined by sorting."}]}]}]},{"path":"/docs/methods/setAlignedGrids","kind":"method","title":"setAlignedGrids","summary":"Configures aligned Grid connections and returns the result.","member":{"name":"setAlignedGrids","typeParameters":[],"parameters":[{"name":"input","type":"SyGridAlignedGridsInput","optional":false}],"returns":"Promise<SyGridAlignedGridsResult>","description":"Configures aligned Grid connections and returns the result."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Configures aligned Grid connections and returns the result."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"setAlignedGrids(input: SyGridAlignedGridsInput): Promise<SyGridAlignedGridsResult>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["input","Required","SyGridAlignedGridsInput"]]},{"kind":"paragraph","text":"The return type is `Promise<SyGridAlignedGridsResult>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.setAlignedGrids(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridAlignedGridsInput","title":"SyGridAlignedGridsInput","description":""},{"path":"/docs/types/SyGridAlignedGridsResult","title":"SyGridAlignedGridsResult","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/row-layout","title":"Row height and pinned rows","description":"Row height, top/bottom pinned rows, full-width rows, and merged cells are separate layout features. Choose based on whether you need persistent summaries or wide detail content."}]}]}]},{"path":"/docs/methods/getAlignedGrids","kind":"method","title":"getAlignedGrids","summary":"Reads connected Grids and alignment state.","member":{"name":"getAlignedGrids","typeParameters":[],"parameters":[],"returns":"Promise<SyGridAlignedGridsReport>","description":"Reads connected Grids and alignment state."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Reads connected Grids and alignment state."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getAlignedGrids(): Promise<SyGridAlignedGridsReport>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<SyGridAlignedGridsReport>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getAlignedGrids(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridAlignedGridsReport","title":"SyGridAlignedGridsReport","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/row-layout","title":"Row height and pinned rows","description":"Row height, top/bottom pinned rows, full-width rows, and merged cells are separate layout features. Choose based on whether you need persistent summaries or wide detail content."}]}]}]},{"path":"/docs/methods/reparentRows","kind":"method","title":"reparentRows","summary":"Reparents tree rows and reports applied/rejected results. Check cycle, permission, and row-model restrictions.","member":{"name":"reparentRows","typeParameters":[],"parameters":[{"name":"request","type":"SyGridReparentRequest","optional":false}],"returns":"Promise<SyGridReparentResult>","description":"Reparents tree rows and reports applied/rejected results. Check cycle, permission, and row-model restrictions."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Reparents tree rows and reports applied/rejected results. Check cycle, permission, and row-model restrictions."},{"kind":"paragraph","text":"API for Pro features: Tree data"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"reparentRows(request: SyGridReparentRequest): Promise<SyGridReparentResult>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["request","Required","SyGridReparentRequest"]]},{"kind":"paragraph","text":"The return type is `Promise<SyGridReparentResult>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.reparentRows(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridReparentRequest","title":"SyGridReparentRequest","description":""},{"path":"/docs/types/SyGridReparentResult","title":"SyGridReparentResult","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/tree-data","title":"Tree data","description":"Trees display parent-child data, such as folders or organizations, with indentation and expansion controls. Unlike grouping equal values, the parent relationship already exists in the data."}]}]}]},{"path":"/docs/methods/getFullWidthRowInfo","kind":"method","title":"getFullWidthRowInfo","summary":"Reads one full-width row's information, or the complete layout report when no argument is supplied.","member":{"name":"getFullWidthRowInfo","typeParameters":[],"parameters":[{"name":"rowIndex","type":"number","optional":true}],"returns":"Promise<SyGridFullWidthRowInfo<GridRow> | SyGridFullWidthLayoutReport | null>","description":"Reads one full-width row's information, or the complete layout report when no argument is supplied."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Reads one full-width row's information, or the complete layout report when no argument is supplied."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getFullWidthRowInfo(rowIndex?: number): Promise<SyGridFullWidthRowInfo<GridRow> | SyGridFullWidthLayoutReport | null>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["rowIndex","Optional","number"]]},{"kind":"paragraph","text":"The return type is `Promise<SyGridFullWidthRowInfo<GridRow> | SyGridFullWidthLayoutReport | null>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getFullWidthRowInfo(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridFullWidthRowInfo","title":"SyGridFullWidthRowInfo","description":""},{"path":"/docs/types/GridRow","title":"GridRow","description":""},{"path":"/docs/types/SyGridFullWidthLayoutReport","title":"SyGridFullWidthLayoutReport","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/row-layout","title":"Row height and pinned rows","description":"Row height, top/bottom pinned rows, full-width rows, and merged cells are separate layout features. Choose based on whether you need persistent summaries or wide detail content."}]}]}]},{"path":"/docs/methods/setPinnedRows","kind":"method","title":"setPinnedRows","summary":"Sets top/bottom pinned row data and returns the application result.","member":{"name":"setPinnedRows","typeParameters":[],"parameters":[{"name":"input","type":"SyGridPinnedRowSetInput<GridRow>","optional":false}],"returns":"Promise<SyGridPinnedRowsResult<GridRow>>","description":"Sets top/bottom pinned row data and returns the application result."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Sets top/bottom pinned row data and returns the application result."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"setPinnedRows(input: SyGridPinnedRowSetInput<GridRow>): Promise<SyGridPinnedRowsResult<GridRow>>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["input","Required","SyGridPinnedRowSetInput<GridRow>"]]},{"kind":"paragraph","text":"The return type is `Promise<SyGridPinnedRowsResult<GridRow>>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.setPinnedRows(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridPinnedRowSetInput","title":"SyGridPinnedRowSetInput","description":""},{"path":"/docs/types/GridRow","title":"GridRow","description":""},{"path":"/docs/types/SyGridPinnedRowsResult","title":"SyGridPinnedRowsResult","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/row-layout","title":"Row height and pinned rows","description":"Row height, top/bottom pinned rows, full-width rows, and merged cells are separate layout features. Choose based on whether you need persistent summaries or wide detail content."}]}]}]},{"path":"/docs/methods/getPinnedRows","kind":"method","title":"getPinnedRows","summary":"Reads current pinned row data as a report.","member":{"name":"getPinnedRows","typeParameters":[],"parameters":[],"returns":"Promise<SyGridPinnedRowsReport<GridRow>>","description":"Reads current pinned row data as a report."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Reads current pinned row data as a report."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getPinnedRows(): Promise<SyGridPinnedRowsReport<GridRow>>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<SyGridPinnedRowsReport<GridRow>>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getPinnedRows(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridPinnedRowsReport","title":"SyGridPinnedRowsReport","description":""},{"path":"/docs/types/GridRow","title":"GridRow","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/row-layout","title":"Row height and pinned rows","description":"Row height, top/bottom pinned rows, full-width rows, and merged cells are separate layout features. Choose based on whether you need persistent summaries or wide detail content."}]}]}]},{"path":"/docs/methods/getPinnedRowInfo","kind":"method","title":"getPinnedRowInfo","summary":"Reads details of a specified pinned row.","member":{"name":"getPinnedRowInfo","typeParameters":[],"parameters":[{"name":"displayIndex","type":"number","optional":false}],"returns":"Promise<SyGridPinnedRowInfo<GridRow> | null>","description":"Reads details of a specified pinned row."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Reads details of a specified pinned row."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getPinnedRowInfo(displayIndex: number): Promise<SyGridPinnedRowInfo<GridRow> | null>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["displayIndex","Required","number"]]},{"kind":"paragraph","text":"The return type is `Promise<SyGridPinnedRowInfo<GridRow> | null>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getPinnedRowInfo(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridPinnedRowInfo","title":"SyGridPinnedRowInfo","description":""},{"path":"/docs/types/GridRow","title":"GridRow","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/row-layout","title":"Row height and pinned rows","description":"Row height, top/bottom pinned rows, full-width rows, and merged cells are separate layout features. Choose based on whether you need persistent summaries or wide detail content."}]}]}]},{"path":"/docs/methods/getRowSpan","kind":"method","title":"getRowSpan","summary":"Reads calculated vertical span ranges.","member":{"name":"getRowSpan","typeParameters":[],"parameters":[{"name":"colId","type":"string","optional":false}],"returns":"Promise<SyGridRowSpanReport | null>","description":"Reads calculated vertical span ranges."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Reads calculated vertical span ranges."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getRowSpan(colId: string): Promise<SyGridRowSpanReport | null>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["colId","Required","string"]]},{"kind":"paragraph","text":"The return type is `Promise<SyGridRowSpanReport | null>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getRowSpan(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridRowSpanReport","title":"SyGridRowSpanReport","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/row-layout","title":"Row height and pinned rows","description":"Row height, top/bottom pinned rows, full-width rows, and merged cells are separate layout features. Choose based on whether you need persistent summaries or wide detail content."}]}]}]},{"path":"/docs/methods/getCellSpan","kind":"method","title":"getCellSpan","summary":"Reads horizontal and vertical span information for a cell.","member":{"name":"getCellSpan","typeParameters":[],"parameters":[{"name":"rowIndex","type":"number","optional":false},{"name":"colId","type":"string","optional":false}],"returns":"Promise<SyGridCellSpanInfo | null>","description":"Reads horizontal and vertical span information for a cell."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Reads horizontal and vertical span information for a cell."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getCellSpan(rowIndex: number, colId: string): Promise<SyGridCellSpanInfo | null>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["rowIndex","Required","number"],["colId","Required","string"]]},{"kind":"paragraph","text":"The return type is `Promise<SyGridCellSpanInfo | null>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getCellSpan(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridCellSpanInfo","title":"SyGridCellSpanInfo","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/row-layout","title":"Row height and pinned rows","description":"Row height, top/bottom pinned rows, full-width rows, and merged cells are separate layout features. Choose based on whether you need persistent summaries or wide detail content."}]}]}]},{"path":"/docs/methods/getSpanInteraction","kind":"method","title":"getSpanInteraction","summary":"Inspects how merged cells interact with selection, copying, and related actions.","member":{"name":"getSpanInteraction","typeParameters":[],"parameters":[{"name":"query","type":"SyGridSpanInteractionQuery","optional":true}],"returns":"Promise<SyGridSpanInteractionReport>","description":"Inspects how merged cells interact with selection, copying, and related actions."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Inspects how merged cells interact with selection, copying, and related actions."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getSpanInteraction(query?: SyGridSpanInteractionQuery): Promise<SyGridSpanInteractionReport>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["query","Optional","SyGridSpanInteractionQuery"]]},{"kind":"paragraph","text":"The return type is `Promise<SyGridSpanInteractionReport>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getSpanInteraction(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridSpanInteractionQuery","title":"SyGridSpanInteractionQuery","description":""},{"path":"/docs/types/SyGridSpanInteractionReport","title":"SyGridSpanInteractionReport","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/row-layout","title":"Row height and pinned rows","description":"Row height, top/bottom pinned rows, full-width rows, and merged cells are separate layout features. Choose based on whether you need persistent summaries or wide detail content."}]}]}]},{"path":"/docs/methods/getServerSideSelectionState","kind":"method","title":"getServerSideSelectionState","summary":"Reads select-all conditions and exception IDs for the flat server row model. Reports a model mismatch for grouped models.","member":{"name":"getServerSideSelectionState","typeParameters":[],"parameters":[],"returns":"Promise<SyGridServerSelectionState>","description":"Reads select-all conditions and exception IDs for the flat server row model. Reports a model mismatch for grouped models."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Reads select-all conditions and exception IDs for the flat server row model. Reports a model mismatch for grouped models."},{"kind":"paragraph","text":"API for Pro features: Server-Side Row Model"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getServerSideSelectionState(): Promise<SyGridServerSelectionState>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<SyGridServerSelectionState>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getServerSideSelectionState(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridServerSelectionState","title":"SyGridServerSelectionState","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/server-side-row-model","title":"Server-side row model","description":"In this model, the server calculates grouping and pivots and supplies rows for each expanded group path. Its data responsibilities differ from grouping already loaded local rows with groupBy."}]}]}]},{"path":"/docs/methods/getServerGroupSelectionState","kind":"method","title":"getServerGroupSelectionState","summary":"Reads hierarchical select-all and exception state for the grouped server row model.","member":{"name":"getServerGroupSelectionState","typeParameters":[],"parameters":[],"returns":"Promise<SyGridServerSelectionState>","description":"Reads hierarchical select-all and exception state for the grouped server row model."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Reads hierarchical select-all and exception state for the grouped server row model."},{"kind":"paragraph","text":"API for Pro features: Server-Side Row Model"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getServerGroupSelectionState(): Promise<SyGridServerSelectionState>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<SyGridServerSelectionState>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getServerGroupSelectionState(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridServerSelectionState","title":"SyGridServerSelectionState","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/server-side-row-model","title":"Server-side row model","description":"In this model, the server calculates grouping and pivots and supplies rows for each expanded group path. Its data responsibilities differ from grouping already loaded local rows with groupBy."}]}]}]},{"path":"/docs/methods/setServerSideSelectionState","kind":"method","title":"setServerSideSelectionState","summary":"Replaces select-all conditions and exception IDs in the flat server row model.","member":{"name":"setServerSideSelectionState","typeParameters":[],"parameters":[{"name":"input","type":"unknown","optional":false}],"returns":"Promise<SyGridServerSelectionSetResult>","description":"Replaces select-all conditions and exception IDs in the flat server row model."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Replaces select-all conditions and exception IDs in the flat server row model."},{"kind":"paragraph","text":"API for Pro features: Server-Side Row Model"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"setServerSideSelectionState(input: unknown): Promise<SyGridServerSelectionSetResult>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["input","Required","unknown"]]},{"kind":"paragraph","text":"The return type is `Promise<SyGridServerSelectionSetResult>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.setServerSideSelectionState(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridServerSelectionSetResult","title":"SyGridServerSelectionSetResult","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/server-side-row-model","title":"Server-side row model","description":"In this model, the server calculates grouping and pivots and supplies rows for each expanded group path. Its data responsibilities differ from grouping already loaded local rows with groupBy."}]}]}]},{"path":"/docs/methods/setServerGroupSelectionState","kind":"method","title":"setServerGroupSelectionState","summary":"Replaces hierarchical selection state in the grouped server row model.","member":{"name":"setServerGroupSelectionState","typeParameters":[],"parameters":[{"name":"input","type":"unknown","optional":false}],"returns":"Promise<SyGridServerSelectionSetResult>","description":"Replaces hierarchical selection state in the grouped server row model."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Replaces hierarchical selection state in the grouped server row model."},{"kind":"paragraph","text":"API for Pro features: Server-Side Row Model"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"setServerGroupSelectionState(input: unknown): Promise<SyGridServerSelectionSetResult>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["input","Required","unknown"]]},{"kind":"paragraph","text":"The return type is `Promise<SyGridServerSelectionSetResult>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.setServerGroupSelectionState(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridServerSelectionSetResult","title":"SyGridServerSelectionSetResult","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/server-side-row-model","title":"Server-side row model","description":"In this model, the server calculates grouping and pivots and supplies rows for each expanded group path. Its data responsibilities differ from grouping already loaded local rows with groupBy."}]}]}]},{"path":"/docs/methods/selectAllServerSide","kind":"method","title":"selectAllServerSide","summary":"Sets server-wide selection conditions without materializing every server row in memory.","member":{"name":"selectAllServerSide","typeParameters":[],"parameters":[{"name":"action","type":"'select' | 'clear'","optional":true}],"returns":"Promise<SyGridServerSelectAllResult>","description":"Sets server-wide selection conditions without materializing every server row in memory."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Sets server-wide selection conditions without materializing every server row in memory."},{"kind":"paragraph","text":"API for Pro features: Server-Side Row Model"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"selectAllServerSide(action?: 'select' | 'clear'): Promise<SyGridServerSelectAllResult>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["action","Optional","'select' | 'clear'"]]},{"kind":"paragraph","text":"The return type is `Promise<SyGridServerSelectAllResult>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.selectAllServerSide(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridServerSelectAllResult","title":"SyGridServerSelectAllResult","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/server-side-row-model","title":"Server-side row model","description":"In this model, the server calculates grouping and pivots and supplies rows for each expanded group path. Its data responsibilities differ from grouping already loaded local rows with groupBy."}]}]}]},{"path":"/docs/methods/selectServerGroupChildren","kind":"method","title":"selectServerGroupChildren","summary":"Selects or deselects server descendants beneath a group-key path.","member":{"name":"selectServerGroupChildren","typeParameters":[],"parameters":[{"name":"groupKeys","type":"ReadonlyArray<string>","optional":false},{"name":"action","type":"'select' | 'deselect'","optional":true}],"returns":"Promise<SyGridServerGroupChildrenResult>","description":"Selects or deselects server descendants beneath a group-key path."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Selects or deselects server descendants beneath a group-key path."},{"kind":"paragraph","text":"API for Pro features: Server-Side Row Model"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"selectServerGroupChildren(groupKeys: ReadonlyArray<string>, action?: 'select' | 'deselect'): Promise<SyGridServerGroupChildrenResult>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["groupKeys","Required","ReadonlyArray<string>"],["action","Optional","'select' | 'deselect'"]]},{"kind":"paragraph","text":"The return type is `Promise<SyGridServerGroupChildrenResult>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.selectServerGroupChildren(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridServerGroupChildrenResult","title":"SyGridServerGroupChildrenResult","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/server-side-row-model","title":"Server-side row model","description":"In this model, the server calculates grouping and pivots and supplies rows for each expanded group path. Its data responsibilities differ from grouping already loaded local rows with groupBy."}]}]}]},{"path":"/docs/methods/refreshServerSide","kind":"method","title":"refreshServerSide","summary":"Refetches the specified server store scope and returns the result.","member":{"name":"refreshServerSide","typeParameters":[],"parameters":[{"name":"input","type":"SyGridServerRefreshInput","optional":true}],"returns":"Promise<SyGridServerRefreshResult>","description":"Refetches the specified server store scope and returns the result."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Refetches the specified server store scope and returns the result."},{"kind":"paragraph","text":"API for Pro features: Server-Side Row Model"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"refreshServerSide(input?: SyGridServerRefreshInput): Promise<SyGridServerRefreshResult>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["input","Optional","SyGridServerRefreshInput"]]},{"kind":"paragraph","text":"The return type is `Promise<SyGridServerRefreshResult>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.refreshServerSide(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridServerRefreshInput","title":"SyGridServerRefreshInput","description":""},{"path":"/docs/types/SyGridServerRefreshResult","title":"SyGridServerRefreshResult","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/server-side-row-model","title":"Server-side row model","description":"In this model, the server calculates grouping and pivots and supplies rows for each expanded group path. Its data responsibilities differ from grouping already loaded local rows with groupBy."}]}]}]},{"path":"/docs/methods/applyServerSideTransaction","kind":"method","title":"applyServerSideTransaction","summary":"Applies row changes to the server row model's cache, separately from saving server source data.","member":{"name":"applyServerSideTransaction","typeParameters":[],"parameters":[{"name":"transaction","type":"SyGridServerTransactionInput","optional":false}],"returns":"Promise<SyGridServerTransactionResult>","description":"Applies row changes to the server row model's cache, separately from saving server source data."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Applies row changes to the server row model's cache, separately from saving server source data."},{"kind":"paragraph","text":"API for Pro features: Server-Side Row Model"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"applyServerSideTransaction(transaction: SyGridServerTransactionInput): Promise<SyGridServerTransactionResult>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["transaction","Required","SyGridServerTransactionInput"]]},{"kind":"paragraph","text":"The return type is `Promise<SyGridServerTransactionResult>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.applyServerSideTransaction(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridServerTransactionInput","title":"SyGridServerTransactionInput","description":""},{"path":"/docs/types/SyGridServerTransactionResult","title":"SyGridServerTransactionResult","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/server-side-row-model","title":"Server-side row model","description":"In this model, the server calculates grouping and pivots and supplies rows for each expanded group path. Its data responsibilities differ from grouping already loaded local rows with groupBy."}]}]}]},{"path":"/docs/methods/applyServerSideTransactionAsync","kind":"method","title":"applyServerSideTransactionAsync","summary":"Queues a server row transaction asynchronously. Queue acceptance differs from final application.","member":{"name":"applyServerSideTransactionAsync","typeParameters":[],"parameters":[{"name":"transaction","type":"SyGridServerTransactionInput","optional":false},{"name":"onSettle","type":"(settlement: SyGridServerTransactionSettlement) => void","optional":true}],"returns":"Promise<SyGridServerTransactionEnqueue>","description":"Queues a server row transaction asynchronously. Queue acceptance differs from final application."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Queues a server row transaction asynchronously. Queue acceptance differs from final application."},{"kind":"paragraph","text":"API for Pro features: Server-Side Row Model"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"applyServerSideTransactionAsync(transaction: SyGridServerTransactionInput, onSettle?: (settlement: SyGridServerTransactionSettlement) => void): Promise<SyGridServerTransactionEnqueue>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["transaction","Required","SyGridServerTransactionInput"],["onSettle","Optional","(settlement: SyGridServerTransactionSettlement) => void"]]},{"kind":"paragraph","text":"The return type is `Promise<SyGridServerTransactionEnqueue>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.applyServerSideTransactionAsync(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridServerTransactionInput","title":"SyGridServerTransactionInput","description":""},{"path":"/docs/types/SyGridServerTransactionSettlement","title":"SyGridServerTransactionSettlement","description":""},{"path":"/docs/types/SyGridServerTransactionEnqueue","title":"SyGridServerTransactionEnqueue","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/server-side-row-model","title":"Server-side row model","description":"In this model, the server calculates grouping and pivots and supplies rows for each expanded group path. Its data responsibilities differ from grouping already loaded local rows with groupBy."}]}]}]},{"path":"/docs/methods/flushServerSideAsyncTransactions","kind":"method","title":"flushServerSideAsyncTransactions","summary":"Processes pending server row transactions and returns a completion report.","member":{"name":"flushServerSideAsyncTransactions","typeParameters":[],"parameters":[],"returns":"Promise<SyGridServerFlushReport>","description":"Processes pending server row transactions and returns a completion report."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Processes pending server row transactions and returns a completion report."},{"kind":"paragraph","text":"API for Pro features: Server-Side Row Model"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"flushServerSideAsyncTransactions(): Promise<SyGridServerFlushReport>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<SyGridServerFlushReport>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.flushServerSideAsyncTransactions(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridServerFlushReport","title":"SyGridServerFlushReport","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/server-side-row-model","title":"Server-side row model","description":"In this model, the server calculates grouping and pivots and supplies rows for each expanded group path. Its data responsibilities differ from grouping already loaded local rows with groupBy."}]}]}]},{"path":"/docs/methods/getServerSideStoreState","kind":"method","title":"getServerSideStoreState","summary":"Reads server store paths, states, and block caches. Assess loading through block counts and complete as well as state names.","member":{"name":"getServerSideStoreState","typeParameters":[],"parameters":[],"returns":"Promise<SyGridServerStateReport | null>","description":"Reads server store paths, states, and block caches. Assess loading through block counts and complete as well as state names."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Reads server store paths, states, and block caches. Assess loading through block counts and complete as well as state names."},{"kind":"paragraph","text":"API for Pro features: Server-Side Row Model"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getServerSideStoreState(): Promise<SyGridServerStateReport | null>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<SyGridServerStateReport | null>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getServerSideStoreState(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridServerStateReport","title":"SyGridServerStateReport","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/server-side-row-model","title":"Server-side row model","description":"In this model, the server calculates grouping and pivots and supplies rows for each expanded group path. Its data responsibilities differ from grouping already loaded local rows with groupBy."}]}]}]},{"path":"/docs/methods/getServerPivotResultColumns","kind":"method","title":"getServerPivotResultColumns","summary":"Reads the server-supplied pivot result column model. Distinguish stale metadata from absent metadata.","member":{"name":"getServerPivotResultColumns","typeParameters":[],"parameters":[],"returns":"Promise<SyGridServerPivotColumnsReport | null>","description":"Reads the server-supplied pivot result column model. Distinguish stale metadata from absent metadata."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Reads the server-supplied pivot result column model. Distinguish stale metadata from absent metadata."},{"kind":"paragraph","text":"API for Pro features: Server-Side Row Model"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getServerPivotResultColumns(): Promise<SyGridServerPivotColumnsReport | null>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<SyGridServerPivotColumnsReport | null>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getServerPivotResultColumns(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridServerPivotColumnsReport","title":"SyGridServerPivotColumnsReport","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/server-side-row-model","title":"Server-side row model","description":"In this model, the server calculates grouping and pivots and supplies rows for each expanded group path. Its data responsibilities differ from grouping already loaded local rows with groupBy."}]}]}]},{"path":"/docs/methods/auditServerPivotResultColumns","kind":"method","title":"auditServerPivotResultColumns","summary":"Checks whether server pivot column IDs used for charts, export, or restoration still exist in the current model.","member":{"name":"auditServerPivotResultColumns","typeParameters":[],"parameters":[{"name":"colIds","type":"ReadonlyArray<string>","optional":false}],"returns":"Promise<SyGridServerPivotColumnAudit | null>","description":"Checks whether server pivot column IDs used for charts, export, or restoration still exist in the current model."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Checks whether server pivot column IDs used for charts, export, or restoration still exist in the current model."},{"kind":"paragraph","text":"API for Pro features: Server-Side Row Model"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"auditServerPivotResultColumns(colIds: ReadonlyArray<string>): Promise<SyGridServerPivotColumnAudit | null>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["colIds","Required","ReadonlyArray<string>"]]},{"kind":"paragraph","text":"The return type is `Promise<SyGridServerPivotColumnAudit | null>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.auditServerPivotResultColumns(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridServerPivotColumnAudit","title":"SyGridServerPivotColumnAudit","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/server-side-row-model","title":"Server-side row model","description":"In this model, the server calculates grouping and pivots and supplies rows for each expanded group path. Its data responsibilities differ from grouping already loaded local rows with groupBy."}]}]}]},{"path":"/docs/methods/getWorkbookPropagationState","kind":"method","title":"getWorkbookPropagationState","summary":"Reads cross-sheet formula propagation connections, registrations, rejections, and latest publication information.","member":{"name":"getWorkbookPropagationState","typeParameters":[],"parameters":[],"returns":"Promise<SyGridWorkbookPropagationState>","description":"Reads cross-sheet formula propagation connections, registrations, rejections, and latest publication information."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Reads cross-sheet formula propagation connections, registrations, rejections, and latest publication information."},{"kind":"paragraph","text":"API for Pro features: Built-in formulas, references, dependency recalculation and calculated columns"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getWorkbookPropagationState(): Promise<SyGridWorkbookPropagationState>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<SyGridWorkbookPropagationState>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getWorkbookPropagationState(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridWorkbookPropagationState","title":"SyGridWorkbookPropagationState","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/formulas","title":"Formula calculation","description":"Formulas evaluate strings beginning with = and display the result in a cell. For example, =SUM(A1:A3) references the first column in the original column definitions and the first three source rows."}]}]}]},{"path":"/docs/methods/flushWorkbookPropagation","kind":"method","title":"flushWorkbookPropagation","summary":"Processes pending workbook value propagation and returns the result.","member":{"name":"flushWorkbookPropagation","typeParameters":[],"parameters":[],"returns":"Promise<SyGridWorkbookFlushReport>","description":"Processes pending workbook value propagation and returns the result."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Processes pending workbook value propagation and returns the result."},{"kind":"paragraph","text":"API for Pro features: Built-in formulas, references, dependency recalculation and calculated columns"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"flushWorkbookPropagation(): Promise<SyGridWorkbookFlushReport>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<SyGridWorkbookFlushReport>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.flushWorkbookPropagation(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridWorkbookFlushReport","title":"SyGridWorkbookFlushReport","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/formulas","title":"Formula calculation","description":"Formulas evaluate strings beginning with = and display the result in a cell. For example, =SUM(A1:A3) references the first column in the original column definitions and the first three source rows."}]}]}]},{"path":"/docs/methods/getWorkbookSnapshotReport","kind":"method","title":"getWorkbookSnapshotReport","summary":"Reads the last published workbook cells, hashes, and generations. Do not assume all Grid data was published.","member":{"name":"getWorkbookSnapshotReport","typeParameters":[],"parameters":[],"returns":"Promise<SyGridWorkbookSnapshotReport>","description":"Reads the last published workbook cells, hashes, and generations. Do not assume all Grid data was published."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Reads the last published workbook cells, hashes, and generations. Do not assume all Grid data was published."},{"kind":"paragraph","text":"API for Pro features: Built-in formulas, references, dependency recalculation and calculated columns"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getWorkbookSnapshotReport(): Promise<SyGridWorkbookSnapshotReport>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<SyGridWorkbookSnapshotReport>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getWorkbookSnapshotReport(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridWorkbookSnapshotReport","title":"SyGridWorkbookSnapshotReport","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/formulas","title":"Formula calculation","description":"Formulas evaluate strings beginning with = and display the result in a cell. For example, =SUM(A1:A3) references the first column in the original column definitions and the first three source rows."}]}]}]},{"path":"/docs/methods/getWorkbookIntegrityReport","kind":"method","title":"getWorkbookIntegrityReport","summary":"Reads consistency checks for workbook connections and value propagation.","member":{"name":"getWorkbookIntegrityReport","typeParameters":[],"parameters":[],"returns":"Promise<SyGridWorkbookIntegrityReport>","description":"Reads consistency checks for workbook connections and value propagation."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Reads consistency checks for workbook connections and value propagation."},{"kind":"paragraph","text":"API for Pro features: Built-in formulas, references, dependency recalculation and calculated columns"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getWorkbookIntegrityReport(): Promise<SyGridWorkbookIntegrityReport>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<SyGridWorkbookIntegrityReport>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getWorkbookIntegrityReport(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridWorkbookIntegrityReport","title":"SyGridWorkbookIntegrityReport","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/formulas","title":"Formula calculation","description":"Formulas evaluate strings beginning with = and display the result in a cell. For example, =SUM(A1:A3) references the first column in the original column definitions and the first three source rows."}]}]}]},{"path":"/docs/methods/applySpillFormula","kind":"method","title":"applySpillFormula","summary":"Atomically applies a dynamic array formula under the conflict policy. Inspect conflicts, rejections, and unrendered areas in the report.","member":{"name":"applySpillFormula","typeParameters":[],"parameters":[{"name":"input","type":"SyGridSpillApplyInput","optional":false}],"returns":"Promise<SyGridSpillApplyResult>","description":"Atomically applies a dynamic array formula under the conflict policy. Inspect conflicts, rejections, and unrendered areas in the report."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Atomically applies a dynamic array formula under the conflict policy. Inspect conflicts, rejections, and unrendered areas in the report."},{"kind":"paragraph","text":"API for Pro features: Built-in formulas, references, dependency recalculation and calculated columns"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"applySpillFormula(input: SyGridSpillApplyInput): Promise<SyGridSpillApplyResult>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["input","Required","SyGridSpillApplyInput"]]},{"kind":"paragraph","text":"The return type is `Promise<SyGridSpillApplyResult>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.applySpillFormula(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridSpillApplyInput","title":"SyGridSpillApplyInput","description":""},{"path":"/docs/types/SyGridSpillApplyResult","title":"SyGridSpillApplyResult","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/formulas","title":"Formula calculation","description":"Formulas evaluate strings beginning with = and display the result in a cell. For example, =SUM(A1:A3) references the first column in the original column definitions and the first three source rows."}]}]}]},{"path":"/docs/methods/clearSpillFormula","kind":"method","title":"clearSpillFormula","summary":"Clears a dynamic array formula's anchor cell and releases its occupied range.","member":{"name":"clearSpillFormula","typeParameters":[],"parameters":[{"name":"target","type":"SyGridSpillTarget","optional":false}],"returns":"Promise<SyGridSpillClearResult>","description":"Clears a dynamic array formula's anchor cell and releases its occupied range."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Clears a dynamic array formula's anchor cell and releases its occupied range."},{"kind":"paragraph","text":"API for Pro features: Built-in formulas, references, dependency recalculation and calculated columns"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"clearSpillFormula(target: SyGridSpillTarget): Promise<SyGridSpillClearResult>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["target","Required","SyGridSpillTarget"]]},{"kind":"paragraph","text":"The return type is `Promise<SyGridSpillClearResult>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.clearSpillFormula(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridSpillTarget","title":"SyGridSpillTarget","description":""},{"path":"/docs/types/SyGridSpillClearResult","title":"SyGridSpillClearResult","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/formulas","title":"Formula calculation","description":"Formulas evaluate strings beginning with = and display the result in a cell. For example, =SUM(A1:A3) references the first column in the original column definitions and the first three source rows."}]}]}]},{"path":"/docs/methods/undoSpillTransaction","kind":"method","title":"undoSpillTransaction","summary":"Undoes a dynamic array formula transaction and returns the result.","member":{"name":"undoSpillTransaction","typeParameters":[],"parameters":[{"name":"mutationId","type":"GridMutationId","optional":false}],"returns":"Promise<SyGridSpillUndoResult>","description":"Undoes a dynamic array formula transaction and returns the result."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Undoes a dynamic array formula transaction and returns the result."},{"kind":"paragraph","text":"API for Pro features: Built-in formulas, references, dependency recalculation and calculated columns"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"undoSpillTransaction(mutationId: GridMutationId): Promise<SyGridSpillUndoResult>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["mutationId","Required","GridMutationId"]]},{"kind":"paragraph","text":"The return type is `Promise<SyGridSpillUndoResult>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.undoSpillTransaction(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridMutationId","title":"GridMutationId","description":""},{"path":"/docs/types/SyGridSpillUndoResult","title":"SyGridSpillUndoResult","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/formulas","title":"Formula calculation","description":"Formulas evaluate strings beginning with = and display the result in a cell. For example, =SUM(A1:A3) references the first column in the original column definitions and the first three source rows."}]}]}]},{"path":"/docs/methods/getSpillReport","kind":"method","title":"getSpillReport","summary":"Inspects current dynamic array formulas and their occupied ranges.","member":{"name":"getSpillReport","typeParameters":[],"parameters":[],"returns":"Promise<SyGridSpillReport>","description":"Inspects current dynamic array formulas and their occupied ranges."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Inspects current dynamic array formulas and their occupied ranges."},{"kind":"paragraph","text":"API for Pro features: Built-in formulas, references, dependency recalculation and calculated columns"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getSpillReport(): Promise<SyGridSpillReport>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<SyGridSpillReport>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getSpillReport(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridSpillReport","title":"SyGridSpillReport","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/formulas","title":"Formula calculation","description":"Formulas evaluate strings beginning with = and display the result in a cell. For example, =SUM(A1:A3) references the first column in the original column definitions and the first three source rows."}]}]}]},{"path":"/docs/methods/createRangeChart","kind":"method","title":"createRangeChart","summary":"Creates an integrated chart from a selection or explicit source. Read chartId on success or the rejection reason on failure.","member":{"name":"createRangeChart","typeParameters":[],"parameters":[{"name":"params","type":"SyGridChartCreateParams","optional":false}],"returns":"Promise<SyGridChartCreateResult>","description":"Creates an integrated chart from a selection or explicit source. Read chartId on success or the rejection reason on failure."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Creates an integrated chart from a selection or explicit source. Read chartId on success or the rejection reason on failure."},{"kind":"paragraph","text":"API for Pro features: Integrated range charts and pivot chart tools"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"createRangeChart(params: SyGridChartCreateParams): Promise<SyGridChartCreateResult>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["params","Required","SyGridChartCreateParams"]]},{"kind":"paragraph","text":"The return type is `Promise<SyGridChartCreateResult>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.createRangeChart(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridChartCreateParams","title":"SyGridChartCreateParams","description":""},{"path":"/docs/types/SyGridChartCreateResult","title":"SyGridChartCreateResult","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/integrated-charts","title":"Chart selected data","description":"Connect a Grid range to a chart to view the same data as both a table and a graph. Select category and value columns appropriate to the chart type, rather than simply selecting numeric values."}]}]}]},{"path":"/docs/methods/updateChart","kind":"method","title":"updateChart","summary":"Changes an existing chart's type, source range, or properties and returns the result.","member":{"name":"updateChart","typeParameters":[],"parameters":[{"name":"chartId","type":"string","optional":false},{"name":"patch","type":"SyGridChartUpdatePatch","optional":false}],"returns":"Promise<SyGridChartUpdateResult>","description":"Changes an existing chart's type, source range, or properties and returns the result."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Changes an existing chart's type, source range, or properties and returns the result."},{"kind":"paragraph","text":"API for Pro features: Integrated range charts and pivot chart tools"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"updateChart(chartId: string, patch: SyGridChartUpdatePatch): Promise<SyGridChartUpdateResult>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["chartId","Required","string"],["patch","Required","SyGridChartUpdatePatch"]]},{"kind":"paragraph","text":"The return type is `Promise<SyGridChartUpdateResult>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.updateChart(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridChartUpdatePatch","title":"SyGridChartUpdatePatch","description":""},{"path":"/docs/types/SyGridChartUpdateResult","title":"SyGridChartUpdateResult","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/integrated-charts","title":"Chart selected data","description":"Connect a Grid range to a chart to view the same data as both a table and a graph. Select category and value columns appropriate to the chart type, rather than simply selecting numeric values."}]}]}]},{"path":"/docs/methods/destroyChart","kind":"method","title":"destroyChart","summary":"Closes the specified chart and releases its resources.","member":{"name":"destroyChart","typeParameters":[],"parameters":[{"name":"chartId","type":"string","optional":false}],"returns":"Promise<SyGridChartDestroyResult>","description":"Closes the specified chart and releases its resources."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Closes the specified chart and releases its resources."},{"kind":"paragraph","text":"API for Pro features: Integrated range charts and pivot chart tools"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"destroyChart(chartId: string): Promise<SyGridChartDestroyResult>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["chartId","Required","string"]]},{"kind":"paragraph","text":"The return type is `Promise<SyGridChartDestroyResult>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.destroyChart(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridChartDestroyResult","title":"SyGridChartDestroyResult","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/integrated-charts","title":"Chart selected data","description":"Connect a Grid range to a chart to view the same data as both a table and a graph. Select category and value columns appropriate to the chart type, rather than simply selecting numeric values."}]}]}]},{"path":"/docs/methods/getChartRefs","kind":"method","title":"getChartRefs","summary":"Reads IDs and states of active integrated charts.","member":{"name":"getChartRefs","typeParameters":[],"parameters":[],"returns":"Promise<SyGridChartReport[]>","description":"Reads IDs and states of active integrated charts."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Reads IDs and states of active integrated charts."},{"kind":"paragraph","text":"API for Pro features: Integrated range charts and pivot chart tools"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getChartRefs(): Promise<SyGridChartReport[]>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<SyGridChartReport[]>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getChartRefs(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridChartReport","title":"SyGridChartReport","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/integrated-charts","title":"Chart selected data","description":"Connect a Grid range to a chart to view the same data as both a table and a graph. Select category and value columns appropriate to the chart type, rather than simply selecting numeric values."}]}]}]},{"path":"/docs/methods/syncCharts","kind":"method","title":"syncCharts","summary":"Recalculates integrated chart data projections from the current Grid view.","member":{"name":"syncCharts","typeParameters":[],"parameters":[{"name":"mutation","type":"SyGridChartSyncMutation","optional":true}],"returns":"Promise<SyGridChartSyncReport>","description":"Recalculates integrated chart data projections from the current Grid view."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Recalculates integrated chart data projections from the current Grid view."},{"kind":"paragraph","text":"API for Pro features: Integrated range charts and pivot chart tools"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"syncCharts(mutation?: SyGridChartSyncMutation): Promise<SyGridChartSyncReport>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["mutation","Optional","SyGridChartSyncMutation"]]},{"kind":"paragraph","text":"The return type is `Promise<SyGridChartSyncReport>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.syncCharts(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridChartSyncMutation","title":"SyGridChartSyncMutation","description":""},{"path":"/docs/types/SyGridChartSyncReport","title":"SyGridChartSyncReport","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/integrated-charts","title":"Chart selected data","description":"Connect a Grid range to a chart to view the same data as both a table and a graph. Select category and value columns appropriate to the chart type, rather than simply selecting numeric values."}]}]}]},{"path":"/docs/methods/getChartMenuModel","kind":"method","title":"getChartMenuModel","summary":"Reads the chart menu model available for the current selection and permissions.","member":{"name":"getChartMenuModel","typeParameters":[],"parameters":[{"name":"permissions","type":"SyGridChartPermissions","optional":true}],"returns":"Promise<SyGridChartMenuReport>","description":"Reads the chart menu model available for the current selection and permissions."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Reads the chart menu model available for the current selection and permissions."},{"kind":"paragraph","text":"API for Pro features: Integrated range charts and pivot chart tools"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getChartMenuModel(permissions?: SyGridChartPermissions): Promise<SyGridChartMenuReport>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["permissions","Optional","SyGridChartPermissions"]]},{"kind":"paragraph","text":"The return type is `Promise<SyGridChartMenuReport>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getChartMenuModel(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridChartPermissions","title":"SyGridChartPermissions","description":""},{"path":"/docs/types/SyGridChartMenuReport","title":"SyGridChartMenuReport","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/integrated-charts","title":"Chart selected data","description":"Connect a Grid range to a chart to view the same data as both a table and a graph. Select category and value columns appropriate to the chart type, rather than simply selecting numeric values."}]}]}]},{"path":"/docs/methods/openChartToolPanel","kind":"method","title":"openChartToolPanel","summary":"Opens the tool panel for choosing an available chart.","member":{"name":"openChartToolPanel","typeParameters":[],"parameters":[{"name":"permissions","type":"SyGridChartPermissions","optional":true}],"returns":"Promise<SyGridChartPanelReport>","description":"Opens the tool panel for choosing an available chart."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Opens the tool panel for choosing an available chart."},{"kind":"paragraph","text":"API for Pro features: Integrated range charts and pivot chart tools"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"openChartToolPanel(permissions?: SyGridChartPermissions): Promise<SyGridChartPanelReport>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["permissions","Optional","SyGridChartPermissions"]]},{"kind":"paragraph","text":"The return type is `Promise<SyGridChartPanelReport>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.openChartToolPanel(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridChartPermissions","title":"SyGridChartPermissions","description":""},{"path":"/docs/types/SyGridChartPanelReport","title":"SyGridChartPanelReport","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/integrated-charts","title":"Chart selected data","description":"Connect a Grid range to a chart to view the same data as both a table and a graph. Select category and value columns appropriate to the chart type, rather than simply selecting numeric values."}]}]}]},{"path":"/docs/methods/closeChartToolPanel","kind":"method","title":"closeChartToolPanel","summary":"Closes the chart creation panel and cleans up its selection flow.","member":{"name":"closeChartToolPanel","typeParameters":[],"parameters":[],"returns":"Promise<SyGridChartPanelReport>","description":"Closes the chart creation panel and cleans up its selection flow."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Closes the chart creation panel and cleans up its selection flow."},{"kind":"paragraph","text":"API for Pro features: Integrated range charts and pivot chart tools"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"closeChartToolPanel(): Promise<SyGridChartPanelReport>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<SyGridChartPanelReport>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.closeChartToolPanel(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridChartPanelReport","title":"SyGridChartPanelReport","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/integrated-charts","title":"Chart selected data","description":"Connect a Grid range to a chart to view the same data as both a table and a graph. Select category and value columns appropriate to the chart type, rather than simply selecting numeric values."}]}]}]},{"path":"/docs/methods/getChartToolPanelReport","kind":"method","title":"getChartToolPanelReport","summary":"Reads chart panel open, focus, and accessibility state.","member":{"name":"getChartToolPanelReport","typeParameters":[],"parameters":[],"returns":"Promise<SyGridChartPanelReport>","description":"Reads chart panel open, focus, and accessibility state."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Reads chart panel open, focus, and accessibility state."},{"kind":"paragraph","text":"API for Pro features: Integrated range charts and pivot chart tools"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getChartToolPanelReport(): Promise<SyGridChartPanelReport>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<SyGridChartPanelReport>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getChartToolPanelReport(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridChartPanelReport","title":"SyGridChartPanelReport","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/integrated-charts","title":"Chart selected data","description":"Connect a Grid range to a chart to view the same data as both a table and a graph. Select category and value columns appropriate to the chart type, rather than simply selecting numeric values."}]}]}]},{"path":"/docs/methods/activateChartToolPanelItem","kind":"method","title":"activateChartToolPanelItem","summary":"Creates a chart by activating the currently focused chart panel item.","member":{"name":"activateChartToolPanelItem","typeParameters":[],"parameters":[],"returns":"Promise<SyGridChartCreateResult>","description":"Creates a chart by activating the currently focused chart panel item."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Creates a chart by activating the currently focused chart panel item."},{"kind":"paragraph","text":"API for Pro features: Integrated range charts and pivot chart tools"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"activateChartToolPanelItem(): Promise<SyGridChartCreateResult>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<SyGridChartCreateResult>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.activateChartToolPanelItem(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridChartCreateResult","title":"SyGridChartCreateResult","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/integrated-charts","title":"Chart selected data","description":"Connect a Grid range to a chart to view the same data as both a table and a graph. Select category and value columns appropriate to the chart type, rather than simply selecting numeric values."}]}]}]},{"path":"/docs/methods/getChartModels","kind":"method","title":"getChartModels","summary":"Captures active charts in a versioned envelope with capture issues. Pass the result's envelope to restoration.","member":{"name":"getChartModels","typeParameters":[],"parameters":[],"returns":"Promise<SyGridChartCaptureResult>","description":"Captures active charts in a versioned envelope with capture issues. Pass the result's envelope to restoration."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Captures active charts in a versioned envelope with capture issues. Pass the result's envelope to restoration."},{"kind":"paragraph","text":"API for Pro features: Integrated range charts and pivot chart tools"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getChartModels(): Promise<SyGridChartCaptureResult>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<SyGridChartCaptureResult>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getChartModels(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridChartCaptureResult","title":"SyGridChartCaptureResult","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/integrated-charts","title":"Chart selected data","description":"Connect a Grid range to a chart to view the same data as both a table and a graph. Select category and value columns appropriate to the chart type, rather than simply selecting numeric values."}]}]}]},{"path":"/docs/methods/restoreChartModels","kind":"method","title":"restoreChartModels","summary":"Restores a saved chart envelope against the current Grid data contract and returns results.","member":{"name":"restoreChartModels","typeParameters":[],"parameters":[{"name":"envelope","type":"unknown","optional":false}],"returns":"Promise<SyGridChartRestoreResult>","description":"Restores a saved chart envelope against the current Grid data contract and returns results."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Restores a saved chart envelope against the current Grid data contract and returns results."},{"kind":"paragraph","text":"API for Pro features: Integrated range charts and pivot chart tools"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"restoreChartModels(envelope: unknown): Promise<SyGridChartRestoreResult>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["envelope","Required","unknown"]]},{"kind":"paragraph","text":"The return type is `Promise<SyGridChartRestoreResult>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.restoreChartModels(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridChartRestoreResult","title":"SyGridChartRestoreResult","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/integrated-charts","title":"Chart selected data","description":"Connect a Grid range to a chart to view the same data as both a table and a graph. Select category and value columns appropriate to the chart type, rather than simply selecting numeric values."}]}]}]},{"path":"/docs/methods/exportChartImage","kind":"method","title":"exportChartImage","summary":"Requests image export for an integrated chart and returns the result.","member":{"name":"exportChartImage","typeParameters":[],"parameters":[{"name":"chartId","type":"string","optional":false},{"name":"request","type":"SyGridChartExportRequest","optional":false}],"returns":"Promise<SyGridChartExportResult>","description":"Requests image export for an integrated chart and returns the result."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Requests image export for an integrated chart and returns the result."},{"kind":"paragraph","text":"API for Pro features: Integrated range charts and pivot chart tools"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"exportChartImage(chartId: string, request: SyGridChartExportRequest): Promise<SyGridChartExportResult>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["chartId","Required","string"],["request","Required","SyGridChartExportRequest"]]},{"kind":"paragraph","text":"The return type is `Promise<SyGridChartExportResult>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.exportChartImage(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridChartExportRequest","title":"SyGridChartExportRequest","description":""},{"path":"/docs/types/SyGridChartExportResult","title":"SyGridChartExportResult","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/integrated-charts","title":"Chart selected data","description":"Connect a Grid range to a chart to view the same data as both a table and a graph. Select category and value columns appropriate to the chart type, rather than simply selecting numeric values."}]}]}]},{"path":"/docs/methods/applyChartCrossFilter","kind":"method","title":"applyChartCrossFilter","summary":"Applies chart selection actions to the Grid filter model.","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":"Applies chart selection actions to the Grid filter model."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Applies chart selection actions to the Grid filter model."},{"kind":"paragraph","text":"API for Pro features: Integrated range charts and pivot chart tools"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"applyChartCrossFilter(chartId: string, colId: string, action: SyGridChartCrossFilterAction, categories: unknown[]): Promise<SyGridChartCrossFilterResult>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["chartId","Required","string"],["colId","Required","string"],["action","Required","SyGridChartCrossFilterAction"],["categories","Required","unknown[]"]]},{"kind":"paragraph","text":"The return type is `Promise<SyGridChartCrossFilterResult>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.applyChartCrossFilter(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridChartCrossFilterAction","title":"SyGridChartCrossFilterAction","description":""},{"path":"/docs/types/SyGridChartCrossFilterResult","title":"SyGridChartCrossFilterResult","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/integrated-charts","title":"Chart selected data","description":"Connect a Grid range to a chart to view the same data as both a table and a graph. Select category and value columns appropriate to the chart type, rather than simply selecting numeric values."}]}]}]},{"path":"/docs/methods/resetChartCrossFilter","kind":"method","title":"resetChartCrossFilter","summary":"Clears chart-owned cross-filters while retaining the app's external filters.","member":{"name":"resetChartCrossFilter","typeParameters":[],"parameters":[],"returns":"Promise<SyGridChartCrossFilterResult>","description":"Clears chart-owned cross-filters while retaining the app's external filters."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Clears chart-owned cross-filters while retaining the app's external filters."},{"kind":"paragraph","text":"API for Pro features: Integrated range charts and pivot chart tools"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"resetChartCrossFilter(): Promise<SyGridChartCrossFilterResult>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<SyGridChartCrossFilterResult>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.resetChartCrossFilter(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridChartCrossFilterResult","title":"SyGridChartCrossFilterResult","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/integrated-charts","title":"Chart selected data","description":"Connect a Grid range to a chart to view the same data as both a table and a graph. Select category and value columns appropriate to the chart type, rather than simply selecting numeric values."}]}]}]},{"path":"/docs/methods/getChartAccessibleSummary","kind":"method","title":"getChartAccessibleSummary","summary":"Reads chart data summaries and accessibility checks.","member":{"name":"getChartAccessibleSummary","typeParameters":[],"parameters":[{"name":"chartId","type":"string","optional":false}],"returns":"Promise<SyGridChartAccessibleReport | null>","description":"Reads chart data summaries and accessibility checks."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Reads chart data summaries and accessibility checks."},{"kind":"paragraph","text":"API for Pro features: Integrated range charts and pivot chart tools"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getChartAccessibleSummary(chartId: string): Promise<SyGridChartAccessibleReport | null>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["chartId","Required","string"]]},{"kind":"paragraph","text":"The return type is `Promise<SyGridChartAccessibleReport | null>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getChartAccessibleSummary(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridChartAccessibleReport","title":"SyGridChartAccessibleReport","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/integrated-charts","title":"Chart selected data","description":"Connect a Grid range to a chart to view the same data as both a table and a graph. Select category and value columns appropriate to the chart type, rather than simply selecting numeric values."}]}]}]},{"path":"/docs/methods/getChartFleetReport","kind":"method","title":"getChartFleetReport","summary":"Reports the current chart set, open resources, and cleanup state.","member":{"name":"getChartFleetReport","typeParameters":[],"parameters":[],"returns":"Promise<SyGridChartFleetReport>","description":"Reports the current chart set, open resources, and cleanup state."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Reports the current chart set, open resources, and cleanup state."},{"kind":"paragraph","text":"API for Pro features: Integrated range charts and pivot chart tools"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getChartFleetReport(): Promise<SyGridChartFleetReport>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<SyGridChartFleetReport>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getChartFleetReport(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridChartFleetReport","title":"SyGridChartFleetReport","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/integrated-charts","title":"Chart selected data","description":"Connect a Grid range to a chart to view the same data as both a table and a graph. Select category and value columns appropriate to the chart type, rather than simply selecting numeric values."}]}]}]},{"path":"/docs/methods/setHoveredRow","kind":"method","title":"setHoveredRow","summary":"Sets the row targeted by stateful hover. Does not change actual row selection.","member":{"name":"setHoveredRow","typeParameters":[],"parameters":[{"name":"rowId","type":"string | number | null","optional":false}],"returns":"Promise<void>","description":"Sets the row targeted by stateful hover. Does not change actual row selection."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Sets the row targeted by stateful hover. Does not change actual row selection."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"setHoveredRow(rowId: string | number | null): Promise<void>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["rowId","Required","string | number | null"]]},{"kind":"paragraph","text":"The return type is `Promise<void>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.setHoveredRow(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/row-hover","title":"Follow rows","description":"Row hover highlights the row under the pointer to help users read wide tables. It differs from row selection and does not automatically select a row for business operations."}]}]}]},{"path":"/docs/methods/getHoveredRowId","kind":"method","title":"getHoveredRowId","summary":"Reads the current hovered row ID or null.","member":{"name":"getHoveredRowId","typeParameters":[],"parameters":[],"returns":"Promise<string | number | null>","description":"Reads the current hovered row ID or null."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Reads the current hovered row ID or null."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getHoveredRowId(): Promise<string | number | null>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<string | number | null>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getHoveredRowId(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/row-hover","title":"Follow rows","description":"Row hover highlights the row under the pointer to help users read wide tables. It differs from row selection and does not automatically select a row for business operations."}]}]}]},{"path":"/docs/methods/getActiveEditTransaction","kind":"method","title":"getActiveEditTransaction","summary":"Reads the active cell editing transaction, or null when not editing.","member":{"name":"getActiveEditTransaction","typeParameters":[],"parameters":[],"returns":"Promise<EditTransaction | null>","description":"Reads the active cell editing transaction, or null when not editing."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Reads the active cell editing transaction, or null when not editing."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getActiveEditTransaction(): Promise<EditTransaction | null>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<EditTransaction | null>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getActiveEditTransaction(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/EditTransaction","title":"EditTransaction","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/cell-editing","title":"Cell and row editing","description":"Cell editing changes one value immediately; full-row editing commits multiple fields as one row operation. editor specifies the input UI, while editable controls write access."}]}]}]},{"path":"/docs/methods/commitActiveEdit","kind":"method","title":"commitActiveEdit","summary":"Commits current cell editing and returns success.","member":{"name":"commitActiveEdit","typeParameters":[],"parameters":[],"returns":"Promise<boolean>","description":"Commits current cell editing and returns success."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Commits current cell editing and returns success."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"commitActiveEdit(): Promise<boolean>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<boolean>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.commitActiveEdit(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/cell-editing","title":"Cell and row editing","description":"Cell editing changes one value immediately; full-row editing commits multiple fields as one row operation. editor specifies the input UI, while editable controls write access."}]}]}]},{"path":"/docs/methods/cancelActiveEdit","kind":"method","title":"cancelActiveEdit","summary":"Cancels current cell editing and returns whether it ran.","member":{"name":"cancelActiveEdit","typeParameters":[],"parameters":[],"returns":"Promise<boolean>","description":"Cancels current cell editing and returns whether it ran."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Cancels current cell editing and returns whether it ran."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"cancelActiveEdit(): Promise<boolean>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<boolean>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.cancelActiveEdit(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/cell-editing","title":"Cell and row editing","description":"Cell editing changes one value immediately; full-row editing commits multiple fields as one row operation. editor specifies the input UI, while editable controls write access."}]}]}]},{"path":"/docs/methods/registerCellRenderer","kind":"method","title":"registerCellRenderer","summary":"Registers a named cell renderer and returns the result.","member":{"name":"registerCellRenderer","typeParameters":[],"parameters":[{"name":"name","type":"string","optional":false},{"name":"renderer","type":"CellRenderer","optional":false}],"returns":"Promise<boolean>","description":"Registers a named cell renderer and returns the result."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Registers a named cell renderer and returns the result."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"registerCellRenderer(name: string, renderer: CellRenderer): Promise<boolean>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["name","Required","string"],["renderer","Required","CellRenderer"]]},{"kind":"paragraph","text":"The return type is `Promise<boolean>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.registerCellRenderer(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/CellRenderer","title":"CellRenderer","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/custom-cells","title":"Customize cell appearance","description":"Cell renderers change how data is displayed. Use them for status badges, links, and action buttons while retaining the original values for sorting and filtering."}]}]}]},{"path":"/docs/methods/listRegisteredCellRenderers","kind":"method","title":"listRegisteredCellRenderers","summary":"Reads available registered cell renderer names.","member":{"name":"listRegisteredCellRenderers","typeParameters":[],"parameters":[],"returns":"Promise<ReadonlyArray<string>>","description":"Reads available registered cell renderer names."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Reads available registered cell renderer names."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"listRegisteredCellRenderers(): Promise<ReadonlyArray<string>>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<ReadonlyArray<string>>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.listRegisteredCellRenderers(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/custom-cells","title":"Customize cell appearance","description":"Cell renderers change how data is displayed. Use them for status badges, links, and action buttons while retaining the original values for sorting and filtering."}]}]}]},{"path":"/docs/methods/unregisterCellRenderer","kind":"method","title":"unregisterCellRenderer","summary":"Unregisters a named cell renderer.","member":{"name":"unregisterCellRenderer","typeParameters":[],"parameters":[{"name":"name","type":"string","optional":false}],"returns":"Promise<boolean>","description":"Unregisters a named cell renderer."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Unregisters a named cell renderer."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"unregisterCellRenderer(name: string): Promise<boolean>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["name","Required","string"]]},{"kind":"paragraph","text":"The return type is `Promise<boolean>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.unregisterCellRenderer(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/custom-cells","title":"Customize cell appearance","description":"Cell renderers change how data is displayed. Use them for status badges, links, and action buttons while retaining the original values for sorting and filtering."}]}]}]},{"path":"/docs/methods/registerGridComponent","kind":"method","title":"registerGridComponent","summary":"Registers a custom Grid component under the public component contract.","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":"Registers a custom Grid component under the public component contract."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Registers a custom Grid component under the public component contract."}]},{"id":"contract","title":"Exact input and result types","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":["Arguments","Required","Type"],"rows":[["scope","Required","GridComponentRegistrationScope"],["kind","Required","TKind"],["name","Required","string"],["definition","Required","GridComponentDefinitionFor<\n      TKind,\n      GridData,\n      unknown,\n      unknown,\n      unknown\n    >"]]},{"kind":"paragraph","text":"The return type is `Promise<void>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.registerGridComponent(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridComponentKind","title":"GridComponentKind","description":""},{"path":"/docs/types/GridComponentRegistrationScope","title":"GridComponentRegistrationScope","description":""},{"path":"/docs/types/GridComponentDefinitionFor","title":"GridComponentDefinitionFor","description":""},{"path":"/docs/types/GridData","title":"GridData","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/custom-cells","title":"Customize cell appearance","description":"Cell renderers change how data is displayed. Use them for status badges, links, and action buttons while retaining the original values for sorting and filtering."}]}]}]},{"path":"/docs/methods/replaceGridComponent","kind":"method","title":"replaceGridComponent","summary":"Replaces a registered custom component definition.","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":"Replaces a registered custom component definition."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Replaces a registered custom component definition."}]},{"id":"contract","title":"Exact input and result types","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":["Arguments","Required","Type"],"rows":[["scope","Required","GridComponentRegistrationScope"],["kind","Required","TKind"],["name","Required","string"],["definition","Required","GridComponentDefinitionFor<\n      TKind,\n      GridData,\n      unknown,\n      unknown,\n      unknown\n    >"]]},{"kind":"paragraph","text":"The return type is `Promise<void>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.replaceGridComponent(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridComponentKind","title":"GridComponentKind","description":""},{"path":"/docs/types/GridComponentRegistrationScope","title":"GridComponentRegistrationScope","description":""},{"path":"/docs/types/GridComponentDefinitionFor","title":"GridComponentDefinitionFor","description":""},{"path":"/docs/types/GridData","title":"GridData","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/custom-cells","title":"Customize cell appearance","description":"Cell renderers change how data is displayed. Use them for status badges, links, and action buttons while retaining the original values for sorting and filtering."}]}]}]},{"path":"/docs/methods/unregisterGridComponent","kind":"method","title":"unregisterGridComponent","summary":"Unregisters a custom component and returns success.","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":"Unregisters a custom component and returns success."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Unregisters a custom component and returns success."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"unregisterGridComponent(scope: GridComponentRegistrationScope, kind: GridComponentKind, name: string): Promise<boolean>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["scope","Required","GridComponentRegistrationScope"],["kind","Required","GridComponentKind"],["name","Required","string"]]},{"kind":"paragraph","text":"The return type is `Promise<boolean>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.unregisterGridComponent(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridComponentRegistrationScope","title":"GridComponentRegistrationScope","description":""},{"path":"/docs/types/GridComponentKind","title":"GridComponentKind","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/custom-cells","title":"Customize cell appearance","description":"Cell renderers change how data is displayed. Use them for status badges, links, and action buttons while retaining the original values for sorting and filtering."}]}]}]},{"path":"/docs/methods/getRegisteredGridComponentNames","kind":"method","title":"getRegisteredGridComponentNames","summary":"Reads registered custom Grid component names.","member":{"name":"getRegisteredGridComponentNames","typeParameters":[],"parameters":[{"name":"scope","type":"GridComponentRegistrationScope","optional":false},{"name":"kind","type":"GridComponentKind","optional":false}],"returns":"Promise<ReadonlyArray<string>>","description":"Reads registered custom Grid component names."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Reads registered custom Grid component names."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getRegisteredGridComponentNames(scope: GridComponentRegistrationScope, kind: GridComponentKind): Promise<ReadonlyArray<string>>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["scope","Required","GridComponentRegistrationScope"],["kind","Required","GridComponentKind"]]},{"kind":"paragraph","text":"The return type is `Promise<ReadonlyArray<string>>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getRegisteredGridComponentNames(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridComponentRegistrationScope","title":"GridComponentRegistrationScope","description":""},{"path":"/docs/types/GridComponentKind","title":"GridComponentKind","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/custom-cells","title":"Customize cell appearance","description":"Cell renderers change how data is displayed. Use them for status badges, links, and action buttons while retaining the original values for sorting and filtering."}]}]}]},{"path":"/docs/methods/getCellRendererInstance","kind":"method","title":"getCellRendererInstance","summary":"Queries mounted cell renderer instances. Offscreen cells may be unmounted because of virtualization.","member":{"name":"getCellRendererInstance","typeParameters":[],"parameters":[{"name":"rowId","type":"GridRowId","optional":false},{"name":"colId","type":"string","optional":false}],"returns":"Promise<GridRendererDiscovery<GridData, unknown, unknown>>","description":"Queries mounted cell renderer instances. Offscreen cells may be unmounted because of virtualization."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Queries mounted cell renderer instances. Offscreen cells may be unmounted because of virtualization."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getCellRendererInstance(rowId: GridRowId, colId: string): Promise<GridRendererDiscovery<GridData, unknown, unknown>>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["rowId","Required","GridRowId"],["colId","Required","string"]]},{"kind":"paragraph","text":"The return type is `Promise<GridRendererDiscovery<GridData, unknown, unknown>>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getCellRendererInstance(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridRowId","title":"GridRowId","description":""},{"path":"/docs/types/GridRendererDiscovery","title":"GridRendererDiscovery","description":""},{"path":"/docs/types/GridData","title":"GridData","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/custom-cells","title":"Customize cell appearance","description":"Cell renderers change how data is displayed. Use them for status badges, links, and action buttons while retaining the original values for sorting and filtering."}]}]}]},{"path":"/docs/methods/destroyCellRendererInstance","kind":"method","title":"destroyCellRendererInstance","summary":"Destroys a specified mounted cell renderer instance.","member":{"name":"destroyCellRendererInstance","typeParameters":[],"parameters":[{"name":"rowId","type":"GridRowId","optional":false},{"name":"colId","type":"string","optional":false}],"returns":"Promise<boolean>","description":"Destroys a specified mounted cell renderer instance."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Destroys a specified mounted cell renderer instance."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"destroyCellRendererInstance(rowId: GridRowId, colId: string): Promise<boolean>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["rowId","Required","GridRowId"],["colId","Required","string"]]},{"kind":"paragraph","text":"The return type is `Promise<boolean>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.destroyCellRendererInstance(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridRowId","title":"GridRowId","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/custom-cells","title":"Customize cell appearance","description":"Cell renderers change how data is displayed. Use them for status badges, links, and action buttons while retaining the original values for sorting and filtering."}]}]}]},{"path":"/docs/methods/focusCellRendererInstance","kind":"method","title":"focusCellRendererInstance","summary":"Moves focus into a mounted cell renderer and returns the result.","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":"Moves focus into a mounted cell renderer and returns the result."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Moves focus into a mounted cell renderer and returns the result."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"focusCellRendererInstance(rowId: GridRowId, colId: string, direction: 'in' | 'out'): Promise<boolean>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["rowId","Required","GridRowId"],["colId","Required","string"],["direction","Required","'in' | 'out'"]]},{"kind":"paragraph","text":"The return type is `Promise<boolean>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.focusCellRendererInstance(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridRowId","title":"GridRowId","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/custom-cells","title":"Customize cell appearance","description":"Cell renderers change how data is displayed. Use them for status badges, links, and action buttons while retaining the original values for sorting and filtering."}]}]}]},{"path":"/docs/methods/getCellEditorInstance","kind":"method","title":"getCellEditorInstance","summary":"Reads the mounted cell editor instance and context, or null if no editor exists.","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":"Reads the mounted cell editor instance and context, or null if no editor exists."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Reads the mounted cell editor instance and context, or null if no editor exists."}]},{"id":"contract","title":"Exact input and result types","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":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<\n    GridMountedComponentLookup<\n      GridEditorInstance<GridData, unknown, unknown>,\n      GridEditorParams<GridData, unknown, unknown>,\n      HTMLElement\n    >\n    | null\n  >`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getCellEditorInstance(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridMountedComponentLookup","title":"GridMountedComponentLookup","description":""},{"path":"/docs/types/GridEditorInstance","title":"GridEditorInstance","description":""},{"path":"/docs/types/GridData","title":"GridData","description":""},{"path":"/docs/types/GridEditorParams","title":"GridEditorParams","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/cell-editing","title":"Cell and row editing","description":"Cell editing changes one value immediately; full-row editing commits multiple fields as one row operation. editor specifies the input UI, while editable controls write access."}]}]}]},{"path":"/docs/methods/getColumnFilterInstance","kind":"method","title":"getColumnFilterInstance","summary":"Queries a column's custom filter instance. May return null if absent or not yet created.","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":"Queries a column's custom filter instance. May return null if absent or not yet created."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Queries a column's custom filter instance. May return null if absent or not yet created."}]},{"id":"contract","title":"Exact input and result types","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":["Arguments","Required","Type"],"rows":[["columnId","Required","string"]]},{"kind":"paragraph","text":"The return type is `Promise<\n    GridFilterInstance<GridData, TColumnValue, TModel, unknown> | null\n  >`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getColumnFilterInstance(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridFilterInstance","title":"GridFilterInstance","description":""},{"path":"/docs/types/GridData","title":"GridData","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/column-filters","title":"Conditions for each column","description":"Column filters apply conditions to individual columns. Text, numbers, and dates use different inputs and comparisons; conditions across columns narrow results together."}]}]}]},{"path":"/docs/methods/getColumnFilterModel","kind":"method","title":"getColumnFilterModel","summary":"Reads one column's current filter model.","member":{"name":"getColumnFilterModel","typeParameters":["TModel = unknown"],"parameters":[{"name":"columnId","type":"string","optional":false}],"returns":"Promise<TModel | null>","description":"Reads one column's current filter model."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Reads one column's current filter model."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getColumnFilterModel<TModel = unknown>(columnId: string): Promise<TModel | null>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["columnId","Required","string"]]},{"kind":"paragraph","text":"The return type is `Promise<TModel | null>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getColumnFilterModel(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/column-filters","title":"Conditions for each column","description":"Column filters apply conditions to individual columns. Text, numbers, and dates use different inputs and comparisons; conditions across columns narrow results together."}]}]}]},{"path":"/docs/methods/setColumnFilterModel","kind":"method","title":"setColumnFilterModel","summary":"Sets one column's filter model and returns the result. Separate from setFilterModel, which changes combined filter state.","member":{"name":"setColumnFilterModel","typeParameters":["TModel = unknown"],"parameters":[{"name":"columnId","type":"string","optional":false},{"name":"model","type":"TModel | null","optional":false}],"returns":"Promise<boolean>","description":"Sets one column's filter model and returns the result. Separate from setFilterModel, which changes combined filter state."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Sets one column's filter model and returns the result. Separate from setFilterModel, which changes combined filter state."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"setColumnFilterModel<TModel = unknown>(columnId: string, model: TModel | null): Promise<boolean>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["columnId","Required","string"],["model","Required","TModel | null"]]},{"kind":"paragraph","text":"The return type is `Promise<boolean>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.setColumnFilterModel(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/column-filters","title":"Conditions for each column","description":"Column filters apply conditions to individual columns. Text, numbers, and dates use different inputs and comparisons; conditions across columns narrow results together."}]}]}]},{"path":"/docs/methods/onFilterChanged","kind":"method","title":"onFilterChanged","summary":"Signals changed filter conditions and recalculates current row filtering.","member":{"name":"onFilterChanged","typeParameters":[],"parameters":[],"returns":"Promise<void>","description":"Signals changed filter conditions and recalculates current row filtering."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Signals changed filter conditions and recalculates current row filtering."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"onFilterChanged(): Promise<void>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<void>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.onFilterChanged(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/column-filters","title":"Conditions for each column","description":"Column filters apply conditions to individual columns. Text, numbers, and dates use different inputs and comparisons; conditions across columns narrow results together."}]}]}]},{"path":"/docs/methods/refreshExternalFilter","kind":"method","title":"refreshExternalFilter","summary":"Runs the external filter refresh lifecycle and returns success.","member":{"name":"refreshExternalFilter","typeParameters":[],"parameters":[],"returns":"Promise<boolean>","description":"Runs the external filter refresh lifecycle and returns success."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Runs the external filter refresh lifecycle and returns success."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"refreshExternalFilter(): Promise<boolean>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<boolean>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.refreshExternalFilter(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/external-filter","title":"Filter by business conditions","description":"Connect business conditions outside the Grid through a row predicate. Use this when external UI choices, such as incomplete items or items assigned to you, control the table."}]}]}]},{"path":"/docs/methods/destroyColumnFilter","kind":"method","title":"destroyColumnFilter","summary":"Destroys a column's filter instance.","member":{"name":"destroyColumnFilter","typeParameters":[],"parameters":[{"name":"columnId","type":"string","optional":false}],"returns":"Promise<boolean>","description":"Destroys a column's filter instance."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Destroys a column's filter instance."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"destroyColumnFilter(columnId: string): Promise<boolean>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["columnId","Required","string"]]},{"kind":"paragraph","text":"The return type is `Promise<boolean>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.destroyColumnFilter(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/column-filters","title":"Conditions for each column","description":"Column filters apply conditions to individual columns. Text, numbers, and dates use different inputs and comparisons; conditions across columns narrow results together."}]}]}]},{"path":"/docs/methods/recreateColumnFilter","kind":"method","title":"recreateColumnFilter","summary":"Recreates a column's filter instance.","member":{"name":"recreateColumnFilter","typeParameters":[],"parameters":[{"name":"columnId","type":"string","optional":false},{"name":"options","type":"{ preserveModel?: boolean }","optional":true}],"returns":"Promise<boolean>","description":"Recreates a column's filter instance."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Recreates a column's filter instance."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"recreateColumnFilter(columnId: string, options?: { preserveModel?: boolean }): Promise<boolean>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["columnId","Required","string"],["options","Optional","{ preserveModel?: boolean }"]]},{"kind":"paragraph","text":"The return type is `Promise<boolean>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.recreateColumnFilter(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/column-filters","title":"Conditions for each column","description":"Column filters apply conditions to individual columns. Text, numbers, and dates use different inputs and comparisons; conditions across columns narrow results together."}]}]}]},{"path":"/docs/methods/setPivotColumns","kind":"method","title":"setPivotColumns","summary":"Replaces the pivot column axis through the validated update path and returns success.","member":{"name":"setPivotColumns","typeParameters":[],"parameters":[{"name":"columns","type":"string[]","optional":false}],"returns":"Promise<boolean>","description":"Replaces the pivot column axis through the validated update path and returns success."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Replaces the pivot column axis through the validated update path and returns success."},{"kind":"paragraph","text":"API for Pro features: Pivot"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"setPivotColumns(columns: string[]): Promise<boolean>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["columns","Required","string[]"]]},{"kind":"paragraph","text":"The return type is `Promise<boolean>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.setPivotColumns(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/pivot","title":"Pivot analysis","description":"Pivoting divides source orders into row, column, and value axes to create a cross-tabulation. Unlike collapsible row groups, unique values such as statuses become new result columns."}]}]}]},{"path":"/docs/methods/setValueColumns","kind":"method","title":"setValueColumns","summary":"Replaces the pivot value axis through the validated update path and returns success.","member":{"name":"setValueColumns","typeParameters":[],"parameters":[{"name":"columns","type":"string[]","optional":false}],"returns":"Promise<boolean>","description":"Replaces the pivot value axis through the validated update path and returns success."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Replaces the pivot value axis through the validated update path and returns success."},{"kind":"paragraph","text":"API for Pro features: Pivot"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"setValueColumns(columns: string[]): Promise<boolean>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["columns","Required","string[]"]]},{"kind":"paragraph","text":"The return type is `Promise<boolean>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.setValueColumns(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/pivot","title":"Pivot analysis","description":"Pivoting divides source orders into row, column, and value axes to create a cross-tabulation. Unlike collapsible row groups, unique values such as statuses become new result columns."}]}]}]},{"path":"/docs/methods/setConditionFilter","kind":"method","title":"setConditionFilter","summary":"Applies an advanced AND/OR condition tree. null clears it; inspect results for invalid models.","member":{"name":"setConditionFilter","typeParameters":[],"parameters":[{"name":"model","type":"ConditionNode | null","optional":false}],"returns":"Promise<void>","description":"Applies an advanced AND/OR condition tree. null clears it; inspect results for invalid models."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Applies an advanced AND/OR condition tree. null clears it; inspect results for invalid models."},{"kind":"paragraph","text":"API for Pro features: Advanced filter and built-in compound condition editor"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"setConditionFilter(model: ConditionNode | null): Promise<void>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["model","Required","ConditionNode | null"]]},{"kind":"paragraph","text":"The return type is `Promise<void>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.setConditionFilter(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/ConditionNode","title":"ConditionNode","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/advanced-filter","title":"Condition trees","description":"Combine conditions across columns in an AND/OR tree to express business rules, such as large APAC orders or orders for a particular product."}]}]}]},{"path":"/docs/methods/getConditionFilter","kind":"method","title":"getConditionFilter","summary":"Reads the current advanced condition tree or null.","member":{"name":"getConditionFilter","typeParameters":[],"parameters":[],"returns":"Promise<ConditionNode | null>","description":"Reads the current advanced condition tree or null."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Reads the current advanced condition tree or null."},{"kind":"paragraph","text":"API for Pro features: Advanced filter and built-in compound condition editor"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getConditionFilter(): Promise<ConditionNode | null>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<ConditionNode | null>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getConditionFilter(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/ConditionNode","title":"ConditionNode","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/advanced-filter","title":"Condition trees","description":"Combine conditions across columns in an AND/OR tree to express business rules, such as large APAC orders or orders for a particular product."}]}]}]},{"path":"/docs/methods/setConditionPresets","kind":"method","title":"setConditionPresets","summary":"Sets advanced condition presets containing names and JSON.","member":{"name":"setConditionPresets","typeParameters":[],"parameters":[{"name":"presets","type":"ReadonlyArray<{ name: string; json: string }>","optional":false}],"returns":"Promise<void>","description":"Sets advanced condition presets containing names and JSON."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Sets advanced condition presets containing names and JSON."},{"kind":"paragraph","text":"API for Pro features: Advanced filter and built-in compound condition editor"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"setConditionPresets(presets: ReadonlyArray<{ name: string; json: string }>): Promise<void>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["presets","Required","ReadonlyArray<{ name: string; json: string }>"]]},{"kind":"paragraph","text":"The return type is `Promise<void>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.setConditionPresets(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/advanced-filter","title":"Condition trees","description":"Combine conditions across columns in an AND/OR tree to express business rules, such as large APAC orders or orders for a particular product."}]}]}]},{"path":"/docs/methods/getConditionPresets","kind":"method","title":"getConditionPresets","summary":"Reads saved advanced condition presets.","member":{"name":"getConditionPresets","typeParameters":[],"parameters":[],"returns":"Promise<Array<{ name: string; json: string }>>","description":"Reads saved advanced condition presets."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Reads saved advanced condition presets."},{"kind":"paragraph","text":"API for Pro features: Advanced filter and built-in compound condition editor"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getConditionPresets(): Promise<Array<{ name: string; json: string }>>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<Array<{ name: string; json: string }>>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getConditionPresets(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/advanced-filter","title":"Condition trees","description":"Combine conditions across columns in an AND/OR tree to express business rules, such as large APAC orders or orders for a particular product."}]}]}]},{"path":"/docs/methods/openToolPanel","kind":"method","title":"openToolPanel","summary":"Opens a column/filter tool panel by ID and returns success.","member":{"name":"openToolPanel","typeParameters":[],"parameters":[{"name":"id","type":"string","optional":false}],"returns":"Promise<boolean>","description":"Opens a column/filter tool panel by ID and returns success."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Opens a column/filter tool panel by ID and returns success."},{"kind":"paragraph","text":"API for Pro features: Columns / Filters tool panels"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"openToolPanel(id: string): Promise<boolean>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[["id","Required","string"]]},{"kind":"paragraph","text":"The return type is `Promise<boolean>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.openToolPanel(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/tool-panels","title":"Tool panel","description":"Tool panels collect cross-column tasks such as visibility and filter settings. They separate data space from settings space and open only when needed."}]}]}]},{"path":"/docs/methods/closeToolPanel","kind":"method","title":"closeToolPanel","summary":"Closes the open column/filter panel without clearing applied settings.","member":{"name":"closeToolPanel","typeParameters":[],"parameters":[],"returns":"Promise<void>","description":"Closes the open column/filter panel without clearing applied settings."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Closes the open column/filter panel without clearing applied settings."},{"kind":"paragraph","text":"API for Pro features: Columns / Filters tool panels"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"closeToolPanel(): Promise<void>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<void>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.closeToolPanel(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/tool-panels","title":"Tool panel","description":"Tool panels collect cross-column tasks such as visibility and filter settings. They separate data space from settings space and open only when needed."}]}]}]},{"path":"/docs/methods/getOpenedToolPanel","kind":"method","title":"getOpenedToolPanel","summary":"Reads the open tool panel ID or null.","member":{"name":"getOpenedToolPanel","typeParameters":[],"parameters":[],"returns":"Promise<string | null>","description":"Reads the open tool panel ID or null."},"apiKind":"methods","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Reads the open tool panel ID or null."},{"kind":"paragraph","text":"API for Pro features: Columns / Filters tool panels"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"getOpenedToolPanel(): Promise<string | null>","language":"typescript"},{"kind":"table","headers":["Arguments","Required","Type"],"rows":[]},{"kind":"paragraph","text":"The return type is `Promise<string | null>`."}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"After registering and initializing the Grid element, call grid.getOpenedToolPanel(…). Read the return value with await. For methods returning a boolean or report, inspect the result before continuing."}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/tool-panels","title":"Tool panel","description":"Tool panels collect cross-column tasks such as visibility and filter settings. They separate data space from settings space and open only when needed."}]}]}]},{"path":"/docs/events","kind":"index","title":"Events","summary":"Find 93 sy-grid Events entries by name and open their descriptions, types, and examples.","sections":[{"id":"index","title":"Complete list","blocks":[{"kind":"links","items":[{"path":"/docs/events/queryComplete","title":"queryComplete","description":"Emitted when an engine query completes. Read results and actual execution tier from detail for performance and result feedback."},{"path":"/docs/events/sortChanged","title":"sortChanged","description":"Emitted when sorting changes. Reflect the current model in app query conditions or saved view state."},{"path":"/docs/events/filterChanged","title":"filterChanged","description":"Emitted when applied filters change. Distinguish from filterModified, which describes input changes."},{"path":"/docs/events/filterModified","title":"filterModified","description":"Emitted when filter input changes. Filters with an Apply button may not yet have updated result rows."},{"path":"/docs/events/conditionFilterChanged","title":"conditionFilterChanged","description":"Emitted when the AND/OR condition tree changes. A null model means advanced conditions were cleared."},{"path":"/docs/events/conditionPresetsChanged","title":"conditionPresetsChanged","description":"Emitted when advanced condition presets change. Connect presets to user preference storage."},{"path":"/docs/events/columnGroupToggled","title":"columnGroupToggled","description":"Emitted when a column group header expands or collapses. Read groupId and open for its state."},{"path":"/docs/events/rowGroupToggled","title":"rowGroupToggled","description":"Emitted when a row group expands or collapses. Reuse the actual key in detail, not the display label."},{"path":"/docs/events/treeNodeToggled","title":"treeNodeToggled","description":"Emitted when tree expansion changes. Inspect the path and expanded state."},{"path":"/docs/events/detailRowToggled","title":"detailRowToggled","description":"Emitted when a parent row's detail expansion changes."},{"path":"/docs/events/detailRowCreated","title":"detailRowCreated","description":"Emitted when a detail panel is created. Connect app resources using its row ID and parent data."},{"path":"/docs/events/detailRowDestroyed","title":"detailRowDestroyed","description":"Emitted when a detail panel is destroyed. Clean up app resources associated with its rowId too."},{"path":"/docs/events/rangeSelectionChanged","title":"rangeSelectionChanged","description":"Emitted when cell selection ranges change. Use the boundaries for copying or summaries."},{"path":"/docs/events/toolPanelToggled","title":"toolPanelToggled","description":"Emitted when column/filter tool panel visibility changes."},{"path":"/docs/events/csvImported","title":"csvImported","description":"Emitted after CSV import completes. Report the actual applied row and column counts to users."},{"path":"/docs/events/clipboardCopied","title":"clipboardCopied","description":"Emitted after clipboard copying completes. Output text and ranges are available, so avoid logging sensitive values."},{"path":"/docs/events/clipboardPasted","title":"clipboardPasted","description":"Reports paste results. Inspect applied/skipped counts, starting position, and actual changes together."},{"path":"/docs/events/paginationChanged","title":"paginationChanged","description":"Emitted when the page or page size changes. Synchronize external page indicators."},{"path":"/docs/events/quickFilterChanged","title":"quickFilterChanged","description":"Emitted when quick-filter conditions change. Synchronize external search input values if needed."},{"path":"/docs/events/emptyStateActionClicked","title":"emptyStateActionClicked","description":"Emitted when an empty-state action button is clicked. Connect the app flow appropriate to the action type."},{"path":"/docs/events/activeCellChanged","title":"activeCellChanged","description":"Emitted when keyboard or pointer input changes the active cell. Separate from range or row selection."},{"path":"/docs/events/cellClicked","title":"cellClicked","description":"Emitted on a cell click. Read the row, field, and input context from detail."},{"path":"/docs/events/cellDoubleClicked","title":"cellDoubleClicked","description":"Emitted on a cell double-click. Avoid conflicts between starting editing and opening app details."},{"path":"/docs/events/rowClicked","title":"rowClicked","description":"Emitted on a row click. Distinguish the click itself from the resulting selection."},{"path":"/docs/events/cellEditingRequested","title":"cellEditingRequested","description":"Emitted when cell editing is requested. Distinguish later cancellation, commit, and value-change events."},{"path":"/docs/events/cellEditingCancelled","title":"cellEditingCancelled","description":"Emitted when cell editing is cancelled. Do not treat it as a successful server save."},{"path":"/docs/events/cellEditingCommitted","title":"cellEditingCommitted","description":"Emitted when cell editing is committed. Also inspect cellValueChanged for actual value changes."},{"path":"/docs/events/formulaEvaluated","title":"formulaEvaluated","description":"Emitted when a formula result is calculated. Distinguish formula text from its result."},{"path":"/docs/events/formulaError","title":"formulaError","description":"Emitted when formula evaluation fails. Connect target and error information to a review UI."},{"path":"/docs/events/workbookBindingChanged","title":"workbookBindingChanged","description":"Emitted when the Grid's workbook/sheet connection changes."},{"path":"/docs/events/workbookBindingError","title":"workbookBindingError","description":"Emitted when a workbook connection cannot be configured. Inspect identifiers and connection errors."},{"path":"/docs/events/chunkLoading","title":"chunkLoading","description":"Emitted when feature code starts loading. Separate from row data query events."},{"path":"/docs/events/chunkLoaded","title":"chunkLoaded","description":"Emitted when feature code has loaded."},{"path":"/docs/events/chunkLoadFailed","title":"chunkLoadFailed","description":"Emitted when feature code loading fails. Use the error and feature name for retry or fallback guidance."},{"path":"/docs/events/componentError","title":"componentError","description":"Reports custom component initialization or invocation errors. Handle them by target and phase rather than ignoring them."},{"path":"/docs/events/rowDataChanged","title":"rowDataChanged","description":"Emitted when source row data changes. Different from a change in display sorting."},{"path":"/docs/events/cellValueChanged","title":"cellValueChanged","description":"Emitted when an actual cell value changes. Use the row, field, and before/after values for saving or activity history."},{"path":"/docs/events/rowMoved","title":"rowMoved","description":"Emitted when row order changes. Read the affected row and before/after indices."},{"path":"/docs/events/rowGroupChanged","title":"rowGroupChanged","description":"Emitted when row grouping changes. Inspect group fields and whether grouping was cleared."},{"path":"/docs/events/pivotPanelChanged","title":"pivotPanelChanged","description":"Emitted when axes change in the pivot panel. Inspect the changed axis and current pivot state."},{"path":"/docs/events/pivotChanged","title":"pivotChanged","description":"Reports pivot configuration changes. Avoid duplicate saves from subscribing to both compatibility and panel events."},{"path":"/docs/events/pivotModeChanged","title":"pivotModeChanged","description":"Emitted when pivot mode is enabled or disabled."},{"path":"/docs/events/contextMenuItemClicked","title":"contextMenuItemClicked","description":"Emitted when a cell context-menu item runs. Read its item ID and target cell position."},{"path":"/docs/events/remoteEditApplied","title":"remoteEditApplied","description":"Emitted when a collaborator's edit is applied. Track its origin to avoid resending it as a local edit and creating a loop."},{"path":"/docs/events/presenceChanged","title":"presenceChanged","description":"Emitted when participant positions or presence change."},{"path":"/docs/events/collabConflictResolved","title":"collabConflictResolved","description":"Emitted when a concurrent editing conflict is resolved. Read the actual outcome before explaining it to users."},{"path":"/docs/events/collaboratorJoined","title":"collaboratorJoined","description":"Emitted when a participant joins the collaboration room."},{"path":"/docs/events/collaboratorLeft","title":"collaboratorLeft","description":"Emitted when a participant leaves. Update the app's participant list by ID."},{"path":"/docs/events/syncStatusChanged","title":"syncStatusChanged","description":"Emitted when collaboration synchronization changes. Distinguish connection state from completed persistent server saving."},{"path":"/docs/events/cellCommentsChanged","title":"cellCommentsChanged","description":"Emitted when cell collaboration comments change. Read the row ID, field, and latest comments."},{"path":"/docs/events/commentMentioned","title":"commentMentioned","description":"Reports a mention in collaboration comments. Connect app notifications using the target cell and comment."},{"path":"/docs/events/auditLogChanged","title":"auditLogChanged","description":"Emitted when an audit record is added. Read entry to connect your app's retention flow."},{"path":"/docs/events/conditionalFormatsChanged","title":"conditionalFormatsChanged","description":"Emitted when conditional formatting rules change. Save rules as user preferences."},{"path":"/docs/events/cellValidationFailed","title":"cellValidationFailed","description":"Emitted when validation fails. Use the target cell, input, and message to guide corrections."},{"path":"/docs/events/snapshotCaptured","title":"snapshotCaptured","description":"Emitted when a data snapshot is created. Display the saved point using its ID, name, and row count."},{"path":"/docs/events/snapshotRestored","title":"snapshotRestored","description":"Emitted when snapshot restoration completes. Does not indicate completed server saving."},{"path":"/docs/events/xlsxImported","title":"xlsxImported","description":"Emits the selected sheet's Grid snapshot after XLSX parsing. Apply snapshot.columnDefs and snapshot.rowData in your app if needed."},{"path":"/docs/events/historyChanged","title":"historyChanged","description":"Emitted when undo/redo history changes. Update button availability and current depths."},{"path":"/docs/events/columnResized","title":"columnResized","description":"Emitted when column width changes. Include the current width in saved view state."},{"path":"/docs/events/columnReordered","title":"columnReordered","description":"Emitted when column order changes."},{"path":"/docs/events/columnVisibilityChanged","title":"columnVisibilityChanged","description":"Emitted when column visibility changes."},{"path":"/docs/events/selectionChanged","title":"selectionChanged","description":"Emitted when row selection changes. Use selected IDs to define bulk-operation targets."},{"path":"/docs/events/rowHoverChanged","title":"rowHoverChanged","description":"Emitted when the stateful hovered row changes. Unlike CSS-only hover, the app can read this state."},{"path":"/docs/events/themeChanged","title":"themeChanged","description":"Emitted when the Grid theme changes. Check it alongside the surrounding app theme."},{"path":"/docs/events/localeChanged","title":"localeChanged","description":"Emitted when the Grid locale changes."},{"path":"/docs/events/gridObjectChanged","title":"gridObjectChanged","description":"Emitted when public objects such as rows and columns change. Read the target and changes from detail."},{"path":"/docs/events/stateUpdated","title":"stateUpdated","description":"Emitted when combined view state updates. Adjust persistence frequency in your app for frequent events."},{"path":"/docs/events/preDestroyed","title":"preDestroyed","description":"Provides state and capture issues before the Grid is destroyed. Use for saving view preferences and cleaning up resources."},{"path":"/docs/events/batchEditStart","title":"batchEditStart","description":"Emitted when batch editing starts. Open a staged-changes UI if needed."},{"path":"/docs/events/batchEditEnd","title":"batchEditEnd","description":"Emitted when batch editing commits or cancels. Inspect the end reason and results."},{"path":"/docs/events/rowValueChanged","title":"rowValueChanged","description":"Reports full-row value changes. Use when defining a save unit for an entire row."},{"path":"/docs/events/rowEditStart","title":"rowEditStart","description":"Emitted when full-row editing starts."},{"path":"/docs/events/rowEditStop","title":"rowEditStop","description":"Emitted when full-row editing ends. Distinguish commit from cancellation."},{"path":"/docs/events/fillStart","title":"fillStart","description":"Emitted when range filling starts."},{"path":"/docs/events/fillEnd","title":"fillEnd","description":"Emitted when range filling ends. Explain applied, skipped, and rejected results to users."},{"path":"/docs/events/pivotCombinationConflict","title":"pivotCombinationConflict","description":"Emitted when pivot settings conflict with other features. Adjust app options based on the actual compatibility decision."},{"path":"/docs/events/pivotColumnsChanged","title":"pivotColumnsChanged","description":"Emitted when the pivot result column model changes. Update chart and export code using previous result column IDs."},{"path":"/docs/events/serverStoreUpdated","title":"serverStoreUpdated","description":"Emitted when a server row store refreshes. Inspect its path and cache state."},{"path":"/docs/events/rowDragEnter","title":"rowDragEnter","description":"Emitted when a row drag enters a target area."},{"path":"/docs/events/rowDragMove","title":"rowDragMove","description":"Emitted during row dragging. Avoid expensive save operations on every high-frequency event."},{"path":"/docs/events/rowDragLeave","title":"rowDragLeave","description":"Emitted when a row drag leaves an area. Different from drag completion."},{"path":"/docs/events/rowDragEnd","title":"rowDragEnd","description":"Emitted when row dragging ends. Inspect the applied result and drop position."},{"path":"/docs/events/rowDragCancel","title":"rowDragCancel","description":"Emitted when row dragging is cancelled. Do not run completion actions or save server ordering."},{"path":"/docs/events/rowsTransferred","title":"rowsTransferred","description":"Reports row transfers between drop areas. Inspect actual move, copy, and rejection results."},{"path":"/docs/events/spanConflict","title":"spanConflict","description":"Emitted when cell spans conflict with other ranges or layouts."},{"path":"/docs/events/treeReparented","title":"treeReparented","description":"Reports tree reparenting results. Connect to parent-relationship saving on your app server."},{"path":"/docs/events/pinnedRowsChanged","title":"pinnedRowsChanged","description":"Emitted when top/bottom pinned row data changes."},{"path":"/docs/events/rowLayoutRefused","title":"rowLayoutRefused","description":"Emitted when a requested row layout cannot be applied. Adjust the combination according to the rejection reason."},{"path":"/docs/events/workbookValuesPropagated","title":"workbookValuesPropagated","description":"Emitted after cross-sheet value propagation. Inspect results and generation information."},{"path":"/docs/events/chartCreated","title":"chartCreated","description":"Emitted when an integrated Grid chart is created. Manage your app's chart list by chart ID."},{"path":"/docs/events/chartRangeChanged","title":"chartRangeChanged","description":"Emitted when an integrated chart's source range changes."},{"path":"/docs/events/chartOptionsChanged","title":"chartOptionsChanged","description":"Emitted when integrated chart settings change. Update saved chart models if needed."},{"path":"/docs/events/chartDestroyed","title":"chartDestroyed","description":"Emitted when an integrated chart is destroyed. Clean up app-held references and external resources."}]}]}]},{"path":"/docs/events/queryComplete","kind":"event","title":"queryComplete","summary":"Emitted when an engine query completes. Read results and actual execution tier from detail for performance and result feedback.","member":{"name":"queryComplete","type":"GridQueryResult & { tier: GridEngineTier }","description":"Emitted when an engine query completes. Read results and actual execution tier from detail for performance and result feedback."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when an engine query completes. Read results and actual execution tier from detail for performance and result feedback."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"queryComplete: GridQueryResult & { tier: GridEngineTier }","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('queryComplete', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('queryComplete', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridQueryResult","title":"GridQueryResult","description":""},{"path":"/docs/types/GridEngineTier","title":"GridEngineTier","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/js-processing","title":"JavaScript processing engine","description":"The JavaScript engine is the standard browser execution path for sorting, filtering, and processing table data. Use it as a straightforward starting point for checking deployment environments and feature combinations."}]}]}]},{"path":"/docs/events/sortChanged","kind":"event","title":"sortChanged","summary":"Emitted when sorting changes. Reflect the current model in app query conditions or saved view state.","member":{"name":"sortChanged","type":"GridSortChangedDetail","description":"Emitted when sorting changes. Reflect the current model in app query conditions or saved view state."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when sorting changes. Reflect the current model in app query conditions or saved view state."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"sortChanged: GridSortChangedDetail","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('sortChanged', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('sortChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridSortChangedDetail","title":"GridSortChangedDetail","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/sorting","title":"Single and multiple sorting","description":"Sorting changes display order without modifying data values. Single sorting uses one criterion; multiple sorting uses prioritized criteria."}]}]}]},{"path":"/docs/events/filterChanged","kind":"event","title":"filterChanged","summary":"Emitted when applied filters change. Distinguish from filterModified, which describes input changes.","member":{"name":"filterChanged","type":"GridFilterChangedDetail","description":"Emitted when applied filters change. Distinguish from filterModified, which describes input changes."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when applied filters change. Distinguish from filterModified, which describes input changes."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"filterChanged: GridFilterChangedDetail","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('filterChanged', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('filterChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridFilterChangedDetail","title":"GridFilterChangedDetail","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/column-filters","title":"Conditions for each column","description":"Column filters apply conditions to individual columns. Text, numbers, and dates use different inputs and comparisons; conditions across columns narrow results together."}]}]}]},{"path":"/docs/events/filterModified","kind":"event","title":"filterModified","summary":"Emitted when filter input changes. Filters with an Apply button may not yet have updated result rows.","member":{"name":"filterModified","type":"GridFilterModifiedDetail","description":"Emitted when filter input changes. Filters with an Apply button may not yet have updated result rows."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when filter input changes. Filters with an Apply button may not yet have updated result rows."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"filterModified: GridFilterModifiedDetail","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('filterModified', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('filterModified', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridFilterModifiedDetail","title":"GridFilterModifiedDetail","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/column-filters","title":"Conditions for each column","description":"Column filters apply conditions to individual columns. Text, numbers, and dates use different inputs and comparisons; conditions across columns narrow results together."}]}]}]},{"path":"/docs/events/conditionFilterChanged","kind":"event","title":"conditionFilterChanged","summary":"Emitted when the AND/OR condition tree changes. A null model means advanced conditions were cleared.","member":{"name":"conditionFilterChanged","type":"{ model: ConditionNode | null }","description":"Emitted when the AND/OR condition tree changes. A null model means advanced conditions were cleared."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when the AND/OR condition tree changes. A null model means advanced conditions were cleared."},{"kind":"paragraph","text":"API for Pro features: Advanced filter and built-in compound condition editor"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"conditionFilterChanged: { model: ConditionNode | null }","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('conditionFilterChanged', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('conditionFilterChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/ConditionNode","title":"ConditionNode","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/advanced-filter","title":"Condition trees","description":"Combine conditions across columns in an AND/OR tree to express business rules, such as large APAC orders or orders for a particular product."}]}]}]},{"path":"/docs/events/conditionPresetsChanged","kind":"event","title":"conditionPresetsChanged","summary":"Emitted when advanced condition presets change. Connect presets to user preference storage.","member":{"name":"conditionPresetsChanged","type":"{ presets: Array<{ name: string; json: string }> }","description":"Emitted when advanced condition presets change. Connect presets to user preference storage."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when advanced condition presets change. Connect presets to user preference storage."},{"kind":"paragraph","text":"API for Pro features: Advanced filter and built-in compound condition editor"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"conditionPresetsChanged: { presets: Array<{ name: string; json: string }> }","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('conditionPresetsChanged', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('conditionPresetsChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/advanced-filter","title":"Condition trees","description":"Combine conditions across columns in an AND/OR tree to express business rules, such as large APAC orders or orders for a particular product."}]}]}]},{"path":"/docs/events/columnGroupToggled","kind":"event","title":"columnGroupToggled","summary":"Emitted when a column group header expands or collapses. Read groupId and open for its state.","member":{"name":"columnGroupToggled","type":"{ groupId: string; open: boolean }","description":"Emitted when a column group header expands or collapses. Read groupId and open for its state."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when a column group header expands or collapses. Read groupId and open for its state."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"columnGroupToggled: { groupId: string; open: boolean }","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('columnGroupToggled', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('columnGroupToggled', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/column-groups","title":"Multi-level headers","description":"Multi-level headers place related columns under a shared heading. Unlike row grouping, they do not change data counts or aggregate values."}]}]}]},{"path":"/docs/events/rowGroupToggled","kind":"event","title":"rowGroupToggled","summary":"Emitted when a row group expands or collapses. Reuse the actual key in detail, not the display label.","member":{"name":"rowGroupToggled","type":"{ key: string | null; expanded: boolean }","description":"Emitted when a row group expands or collapses. Reuse the actual key in detail, not the display label."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when a row group expands or collapses. Reuse the actual key in detail, not the display label."},{"kind":"paragraph","text":"API for Pro features: Row grouping, built-in aggregation and group totals"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"rowGroupToggled: { key: string | null; expanded: boolean }","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('rowGroupToggled', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('rowGroupToggled', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/row-grouping","title":"Grouping and aggregation","description":"Row grouping collects source rows with the same region or team into expandable groups. Unlike column groups, which organize headers, row groups change displayed rows and aggregation results."}]}]}]},{"path":"/docs/events/treeNodeToggled","kind":"event","title":"treeNodeToggled","summary":"Emitted when tree expansion changes. Inspect the path and expanded state.","member":{"name":"treeNodeToggled","type":"{ path: readonly string[]; expanded: boolean }","description":"Emitted when tree expansion changes. Inspect the path and expanded state."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when tree expansion changes. Inspect the path and expanded state."},{"kind":"paragraph","text":"API for Pro features: Tree data"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"treeNodeToggled: { path: readonly string[]; expanded: boolean }","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('treeNodeToggled', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('treeNodeToggled', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/tree-data","title":"Tree data","description":"Trees display parent-child data, such as folders or organizations, with indentation and expansion controls. Unlike grouping equal values, the parent relationship already exists in the data."}]}]}]},{"path":"/docs/events/detailRowToggled","kind":"event","title":"detailRowToggled","summary":"Emitted when a parent row's detail expansion changes.","member":{"name":"detailRowToggled","type":"{ rowId: string | number; expanded: boolean }","description":"Emitted when a parent row's detail expansion changes."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when a parent row's detail expansion changes."},{"kind":"paragraph","text":"API for Pro features: Built-in master / detail"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"detailRowToggled: { rowId: string | number; expanded: boolean }","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('detailRowToggled', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('detailRowToggled', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/master-detail","title":"Row details","description":"Master/detail expands an order to show its line items or shipping history. The parent row is a summary, and a full-width panel beneath it holds details."}]}]}]},{"path":"/docs/events/detailRowCreated","kind":"event","title":"detailRowCreated","summary":"Emitted when a detail panel is created. Connect app resources using its row ID and parent data.","member":{"name":"detailRowCreated","type":"{ rowId: string | number; master: GridRow | null }","description":"Emitted when a detail panel is created. Connect app resources using its row ID and parent data."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when a detail panel is created. Connect app resources using its row ID and parent data."},{"kind":"paragraph","text":"API for Pro features: Built-in master / detail"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"detailRowCreated: { rowId: string | number; master: GridRow | null }","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('detailRowCreated', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('detailRowCreated', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridRow","title":"GridRow","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/master-detail","title":"Row details","description":"Master/detail expands an order to show its line items or shipping history. The parent row is a summary, and a full-width panel beneath it holds details."}]}]}]},{"path":"/docs/events/detailRowDestroyed","kind":"event","title":"detailRowDestroyed","summary":"Emitted when a detail panel is destroyed. Clean up app resources associated with its rowId too.","member":{"name":"detailRowDestroyed","type":"{ rowId: string | number }","description":"Emitted when a detail panel is destroyed. Clean up app resources associated with its rowId too."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when a detail panel is destroyed. Clean up app resources associated with its rowId too."},{"kind":"paragraph","text":"API for Pro features: Built-in master / detail"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"detailRowDestroyed: { rowId: string | number }","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('detailRowDestroyed', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('detailRowDestroyed', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/master-detail","title":"Row details","description":"Master/detail expands an order to show its line items or shipping history. The parent row is a summary, and a full-width panel beneath it holds details."}]}]}]},{"path":"/docs/events/rangeSelectionChanged","kind":"event","title":"rangeSelectionChanged","summary":"Emitted when cell selection ranges change. Use the boundaries for copying or summaries.","member":{"name":"rangeSelectionChanged","type":"{ ranges: CellRangeBounds[] }","description":"Emitted when cell selection ranges change. Use the boundaries for copying or summaries."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when cell selection ranges change. Use the boundaries for copying or summaries."},{"kind":"paragraph","text":"API for Pro features: Cell range selection"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"rangeSelectionChanged: { ranges: CellRangeBounds[] }","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('rangeSelectionChanged', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('rangeSelectionChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/CellRangeBounds","title":"CellRangeBounds","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/range-selection","title":"Cell range selection","description":"A cell range is a rectangle spanning rows and columns. It defines the scope for copying, pasting, filling, and chart creation; selecting it does not change values."}]}]}]},{"path":"/docs/events/toolPanelToggled","kind":"event","title":"toolPanelToggled","summary":"Emitted when column/filter tool panel visibility changes.","member":{"name":"toolPanelToggled","type":"{ id: SideBarPanelId; open: boolean }","description":"Emitted when column/filter tool panel visibility changes."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when column/filter tool panel visibility changes."},{"kind":"paragraph","text":"API for Pro features: Columns / Filters tool panels"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"toolPanelToggled: { id: SideBarPanelId; open: boolean }","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('toolPanelToggled', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('toolPanelToggled', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SideBarPanelId","title":"SideBarPanelId","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/tool-panels","title":"Tool panel","description":"Tool panels collect cross-column tasks such as visibility and filter settings. They separate data space from settings space and open only when needed."}]}]}]},{"path":"/docs/events/csvImported","kind":"event","title":"csvImported","summary":"Emitted after CSV import completes. Report the actual applied row and column counts to users.","member":{"name":"csvImported","type":"{ rowCount: number; columnCount: number }","description":"Emitted after CSV import completes. Report the actual applied row and column counts to users."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted after CSV import completes. Report the actual applied row and column counts to users."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"csvImported: { rowCount: number; columnCount: number }","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('csvImported', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('csvImported', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/csv-import","title":"Import CSV","description":"CSV import converts delimited text into new columns and rows. Unlike a transaction that appends rows, importCsvText replaces columnDefs and rowData."}]}]}]},{"path":"/docs/events/clipboardCopied","kind":"event","title":"clipboardCopied","summary":"Emitted after clipboard copying completes. Output text and ranges are available, so avoid logging sensitive values.","member":{"name":"clipboardCopied","type":"{ text: string; ranges: CellRangeBounds[] }","description":"Emitted after clipboard copying completes. Output text and ranges are available, so avoid logging sensitive values."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted after clipboard copying completes. Output text and ranges are available, so avoid logging sensitive values."},{"kind":"paragraph","text":"API for Pro features: Range copy / paste"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"clipboardCopied: { text: string; ranges: CellRangeBounds[] }","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('clipboardCopied', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('clipboardCopied', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/CellRangeBounds","title":"CellRangeBounds","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/range-clipboard","title":"Copy and paste ranges","description":"Copy values from a rectangular range and paste them in the same row and column arrangement. Targets are determined from the starting cell and remain subject to editability, permissions, and validation."}]}]}]},{"path":"/docs/events/clipboardPasted","kind":"event","title":"clipboardPasted","summary":"Reports paste results. Inspect applied/skipped counts, starting position, and actual changes together.","member":{"name":"clipboardPasted","type":"{\n    applied: number;\n    skipped: number;\n    top: number;\n    left: number;\n    changes: GridCellValueChangedDetail[];\n  }","description":"Reports paste results. Inspect applied/skipped counts, starting position, and actual changes together."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Reports paste results. Inspect applied/skipped counts, starting position, and actual changes together."},{"kind":"paragraph","text":"API for Pro features: Range copy / paste"}]},{"id":"contract","title":"Exact input and result types","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":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('clipboardPasted', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('clipboardPasted', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridCellValueChangedDetail","title":"GridCellValueChangedDetail","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/range-clipboard","title":"Copy and paste ranges","description":"Copy values from a rectangular range and paste them in the same row and column arrangement. Targets are determined from the starting cell and remain subject to editability, permissions, and validation."}]}]}]},{"path":"/docs/events/paginationChanged","kind":"event","title":"paginationChanged","summary":"Emitted when the page or page size changes. Synchronize external page indicators.","member":{"name":"paginationChanged","type":"GridPaginationChangedDetail","description":"Emitted when the page or page size changes. Synchronize external page indicators."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when the page or page size changes. Synchronize external page indicators."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"paginationChanged: GridPaginationChangedDetail","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('paginationChanged', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('paginationChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridPaginationChangedDetail","title":"GridPaginationChangedDetail","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/pagination","title":"Page navigation","description":"Pagination controls the number of displayed rows and the current page position. Total data size and page size are separate settings."}]}]}]},{"path":"/docs/events/quickFilterChanged","kind":"event","title":"quickFilterChanged","summary":"Emitted when quick-filter conditions change. Synchronize external search input values if needed.","member":{"name":"quickFilterChanged","type":"GridQuickFilterChangedDetail","description":"Emitted when quick-filter conditions change. Synchronize external search input values if needed."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when quick-filter conditions change. Synchronize external search input values if needed."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"quickFilterChanged: GridQuickFilterChangedDetail","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('quickFilterChanged', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('quickFilterChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridQuickFilterChangedDetail","title":"GridQuickFilterChangedDetail","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/quick-filter","title":"Search across columns","description":"Quick search looks for text across searchable columns without specifying a column. It is a useful starting point when users do not know whether a term is a product name or a region."}]}]}]},{"path":"/docs/events/emptyStateActionClicked","kind":"event","title":"emptyStateActionClicked","summary":"Emitted when an empty-state action button is clicked. Connect the app flow appropriate to the action type.","member":{"name":"emptyStateActionClicked","type":"GridEmptyStateActionDetail","description":"Emitted when an empty-state action button is clicked. Connect the app flow appropriate to the action type."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when an empty-state action button is clicked. Connect the app flow appropriate to the action type."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"emptyStateActionClicked: GridEmptyStateActionDetail","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('emptyStateActionClicked', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('emptyStateActionClicked', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridEmptyStateActionDetail","title":"GridEmptyStateActionDetail","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/overlays","title":"Loading and empty results","description":"Loading and empty-data messages explain why the table has no visible content. Pending requests, no results, and failures are distinct states and should not share one empty screen."}]}]}]},{"path":"/docs/events/activeCellChanged","kind":"event","title":"activeCellChanged","summary":"Emitted when keyboard or pointer input changes the active cell. Separate from range or row selection.","member":{"name":"activeCellChanged","type":"GridActiveCellChangedDetail","description":"Emitted when keyboard or pointer input changes the active cell. Separate from range or row selection."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when keyboard or pointer input changes the active cell. Separate from range or row selection."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"activeCellChanged: GridActiveCellChangedDetail","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('activeCellChanged', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('activeCellChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridActiveCellChangedDetail","title":"GridActiveCellChangedDetail","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/guides/keyboard-a11y-i18n","title":"Keyboard and localization","description":"Grid is a workspace for navigating many rows and columns with a keyboard. Cell navigation, editing, menus, and paths to app buttons outside the table must all be understandable."}]}]}]},{"path":"/docs/events/cellClicked","kind":"event","title":"cellClicked","summary":"Emitted on a cell click. Read the row, field, and input context from detail.","member":{"name":"cellClicked","type":"GridCellClickedDetail","description":"Emitted on a cell click. Read the row, field, and input context from detail."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted on a cell click. Read the row, field, and input context from detail."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"cellClicked: GridCellClickedDetail","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('cellClicked', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('cellClicked', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridCellClickedDetail","title":"GridCellClickedDetail","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/guides/data-event-access","title":"Data and events","description":"Grid APIs read or change the current state; events report the results of user interactions or data changes. Combine them to build save buttons, detail panels, and change histories."}]}]}]},{"path":"/docs/events/cellDoubleClicked","kind":"event","title":"cellDoubleClicked","summary":"Emitted on a cell double-click. Avoid conflicts between starting editing and opening app details.","member":{"name":"cellDoubleClicked","type":"GridCellDoubleClickedDetail","description":"Emitted on a cell double-click. Avoid conflicts between starting editing and opening app details."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted on a cell double-click. Avoid conflicts between starting editing and opening app details."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"cellDoubleClicked: GridCellDoubleClickedDetail","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('cellDoubleClicked', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('cellDoubleClicked', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridCellDoubleClickedDetail","title":"GridCellDoubleClickedDetail","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/guides/data-event-access","title":"Data and events","description":"Grid APIs read or change the current state; events report the results of user interactions or data changes. Combine them to build save buttons, detail panels, and change histories."}]}]}]},{"path":"/docs/events/rowClicked","kind":"event","title":"rowClicked","summary":"Emitted on a row click. Distinguish the click itself from the resulting selection.","member":{"name":"rowClicked","type":"GridRowClickedDetail","description":"Emitted on a row click. Distinguish the click itself from the resulting selection."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted on a row click. Distinguish the click itself from the resulting selection."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"rowClicked: GridRowClickedDetail","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('rowClicked', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('rowClicked', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridRowClickedDetail","title":"GridRowClickedDetail","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/guides/data-event-access","title":"Data and events","description":"Grid APIs read or change the current state; events report the results of user interactions or data changes. Combine them to build save buttons, detail panels, and change histories."}]}]}]},{"path":"/docs/events/cellEditingRequested","kind":"event","title":"cellEditingRequested","summary":"Emitted when cell editing is requested. Distinguish later cancellation, commit, and value-change events.","member":{"name":"cellEditingRequested","type":"GridCellEditingRequestedDetail","description":"Emitted when cell editing is requested. Distinguish later cancellation, commit, and value-change events."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when cell editing is requested. Distinguish later cancellation, commit, and value-change events."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"cellEditingRequested: GridCellEditingRequestedDetail","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('cellEditingRequested', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('cellEditingRequested', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridCellEditingRequestedDetail","title":"GridCellEditingRequestedDetail","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/cell-editing","title":"Cell and row editing","description":"Cell editing changes one value immediately; full-row editing commits multiple fields as one row operation. editor specifies the input UI, while editable controls write access."}]}]}]},{"path":"/docs/events/cellEditingCancelled","kind":"event","title":"cellEditingCancelled","summary":"Emitted when cell editing is cancelled. Do not treat it as a successful server save.","member":{"name":"cellEditingCancelled","type":"GridCellEditingCancelledDetail","description":"Emitted when cell editing is cancelled. Do not treat it as a successful server save."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when cell editing is cancelled. Do not treat it as a successful server save."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"cellEditingCancelled: GridCellEditingCancelledDetail","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('cellEditingCancelled', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('cellEditingCancelled', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridCellEditingCancelledDetail","title":"GridCellEditingCancelledDetail","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/cell-editing","title":"Cell and row editing","description":"Cell editing changes one value immediately; full-row editing commits multiple fields as one row operation. editor specifies the input UI, while editable controls write access."}]}]}]},{"path":"/docs/events/cellEditingCommitted","kind":"event","title":"cellEditingCommitted","summary":"Emitted when cell editing is committed. Also inspect cellValueChanged for actual value changes.","member":{"name":"cellEditingCommitted","type":"GridCellEditingCommittedDetail","description":"Emitted when cell editing is committed. Also inspect cellValueChanged for actual value changes."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when cell editing is committed. Also inspect cellValueChanged for actual value changes."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"cellEditingCommitted: GridCellEditingCommittedDetail","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('cellEditingCommitted', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('cellEditingCommitted', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridCellEditingCommittedDetail","title":"GridCellEditingCommittedDetail","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/cell-editing","title":"Cell and row editing","description":"Cell editing changes one value immediately; full-row editing commits multiple fields as one row operation. editor specifies the input UI, while editable controls write access."}]}]}]},{"path":"/docs/events/formulaEvaluated","kind":"event","title":"formulaEvaluated","summary":"Emitted when a formula result is calculated. Distinguish formula text from its result.","member":{"name":"formulaEvaluated","type":"GridFormulaEvaluatedDetail","description":"Emitted when a formula result is calculated. Distinguish formula text from its result."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when a formula result is calculated. Distinguish formula text from its result."},{"kind":"paragraph","text":"API for Pro features: Built-in formulas, references, dependency recalculation and calculated columns"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"formulaEvaluated: GridFormulaEvaluatedDetail","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('formulaEvaluated', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('formulaEvaluated', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridFormulaEvaluatedDetail","title":"GridFormulaEvaluatedDetail","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/formulas","title":"Formula calculation","description":"Formulas evaluate strings beginning with = and display the result in a cell. For example, =SUM(A1:A3) references the first column in the original column definitions and the first three source rows."}]}]}]},{"path":"/docs/events/formulaError","kind":"event","title":"formulaError","summary":"Emitted when formula evaluation fails. Connect target and error information to a review UI.","member":{"name":"formulaError","type":"GridFormulaErrorDetail","description":"Emitted when formula evaluation fails. Connect target and error information to a review UI."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when formula evaluation fails. Connect target and error information to a review UI."},{"kind":"paragraph","text":"API for Pro features: Built-in formulas, references, dependency recalculation and calculated columns"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"formulaError: GridFormulaErrorDetail","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('formulaError', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('formulaError', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridFormulaErrorDetail","title":"GridFormulaErrorDetail","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/formulas","title":"Formula calculation","description":"Formulas evaluate strings beginning with = and display the result in a cell. For example, =SUM(A1:A3) references the first column in the original column definitions and the first three source rows."}]}]}]},{"path":"/docs/events/workbookBindingChanged","kind":"event","title":"workbookBindingChanged","summary":"Emitted when the Grid's workbook/sheet connection changes.","member":{"name":"workbookBindingChanged","type":"GridWorkbookBindingChangedDetail","description":"Emitted when the Grid's workbook/sheet connection changes."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when the Grid's workbook/sheet connection changes."},{"kind":"paragraph","text":"API for Pro features: Built-in formulas, references, dependency recalculation and calculated columns"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"workbookBindingChanged: GridWorkbookBindingChangedDetail","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('workbookBindingChanged', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('workbookBindingChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridWorkbookBindingChangedDetail","title":"GridWorkbookBindingChangedDetail","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/formulas","title":"Formula calculation","description":"Formulas evaluate strings beginning with = and display the result in a cell. For example, =SUM(A1:A3) references the first column in the original column definitions and the first three source rows."}]}]}]},{"path":"/docs/events/workbookBindingError","kind":"event","title":"workbookBindingError","summary":"Emitted when a workbook connection cannot be configured. Inspect identifiers and connection errors.","member":{"name":"workbookBindingError","type":"GridWorkbookBindingErrorDetail","description":"Emitted when a workbook connection cannot be configured. Inspect identifiers and connection errors."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when a workbook connection cannot be configured. Inspect identifiers and connection errors."},{"kind":"paragraph","text":"API for Pro features: Built-in formulas, references, dependency recalculation and calculated columns"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"workbookBindingError: GridWorkbookBindingErrorDetail","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('workbookBindingError', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('workbookBindingError', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridWorkbookBindingErrorDetail","title":"GridWorkbookBindingErrorDetail","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/formulas","title":"Formula calculation","description":"Formulas evaluate strings beginning with = and display the result in a cell. For example, =SUM(A1:A3) references the first column in the original column definitions and the first three source rows."}]}]}]},{"path":"/docs/events/chunkLoading","kind":"event","title":"chunkLoading","summary":"Emitted when feature code starts loading. Separate from row data query events.","member":{"name":"chunkLoading","type":"GridChunkLoadEventDetail","description":"Emitted when feature code starts loading. Separate from row data query events."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when feature code starts loading. Separate from row data query events."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"chunkLoading: GridChunkLoadEventDetail","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('chunkLoading', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('chunkLoading', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChunkLoadEventDetail","title":"GridChunkLoadEventDetail","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"Settings and data fundamentals","description":""},{"path":"/docs/guides/data-event-access","title":"API calls and event integration","description":""}]}]}]},{"path":"/docs/events/chunkLoaded","kind":"event","title":"chunkLoaded","summary":"Emitted when feature code has loaded.","member":{"name":"chunkLoaded","type":"GridChunkLoadEventDetail","description":"Emitted when feature code has loaded."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when feature code has loaded."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"chunkLoaded: GridChunkLoadEventDetail","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('chunkLoaded', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('chunkLoaded', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChunkLoadEventDetail","title":"GridChunkLoadEventDetail","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"Settings and data fundamentals","description":""},{"path":"/docs/guides/data-event-access","title":"API calls and event integration","description":""}]}]}]},{"path":"/docs/events/chunkLoadFailed","kind":"event","title":"chunkLoadFailed","summary":"Emitted when feature code loading fails. Use the error and feature name for retry or fallback guidance.","member":{"name":"chunkLoadFailed","type":"GridChunkLoadEventDetail","description":"Emitted when feature code loading fails. Use the error and feature name for retry or fallback guidance."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when feature code loading fails. Use the error and feature name for retry or fallback guidance."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"chunkLoadFailed: GridChunkLoadEventDetail","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('chunkLoadFailed', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('chunkLoadFailed', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChunkLoadEventDetail","title":"GridChunkLoadEventDetail","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"Settings and data fundamentals","description":""},{"path":"/docs/guides/data-event-access","title":"API calls and event integration","description":""}]}]}]},{"path":"/docs/events/componentError","kind":"event","title":"componentError","summary":"Reports custom component initialization or invocation errors. Handle them by target and phase rather than ignoring them.","member":{"name":"componentError","type":"GridComponentErrorDetails","description":"Reports custom component initialization or invocation errors. Handle them by target and phase rather than ignoring them."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Reports custom component initialization or invocation errors. Handle them by target and phase rather than ignoring them."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"componentError: GridComponentErrorDetails","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('componentError', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('componentError', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridComponentErrorDetails","title":"GridComponentErrorDetails","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/custom-cells","title":"Customize cell appearance","description":"Cell renderers change how data is displayed. Use them for status badges, links, and action buttons while retaining the original values for sorting and filtering."}]}]}]},{"path":"/docs/events/rowDataChanged","kind":"event","title":"rowDataChanged","summary":"Emitted when source row data changes. Different from a change in display sorting.","member":{"name":"rowDataChanged","type":"GridRowDataChangedDetail","description":"Emitted when source row data changes. Different from a change in display sorting."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when source row data changes. Different from a change in display sorting."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"rowDataChanged: GridRowDataChangedDetail","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('rowDataChanged', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('rowDataChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridRowDataChangedDetail","title":"GridRowDataChangedDetail","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/data-updates","title":"Data updates","description":"Replace rowData when receiving a complete query result. For partial changes, pass add, update, and remove to applyTransaction. Updates match through getRowId, not display positions."}]}]}]},{"path":"/docs/events/cellValueChanged","kind":"event","title":"cellValueChanged","summary":"Emitted when an actual cell value changes. Use the row, field, and before/after values for saving or activity history.","member":{"name":"cellValueChanged","type":"GridCellValueChangedDetail","description":"Emitted when an actual cell value changes. Use the row, field, and before/after values for saving or activity history."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when an actual cell value changes. Use the row, field, and before/after values for saving or activity history."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"cellValueChanged: GridCellValueChangedDetail","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('cellValueChanged', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('cellValueChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridCellValueChangedDetail","title":"GridCellValueChangedDetail","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/data-updates","title":"Data updates","description":"Replace rowData when receiving a complete query result. For partial changes, pass add, update, and remove to applyTransaction. Updates match through getRowId, not display positions."}]}]}]},{"path":"/docs/events/rowMoved","kind":"event","title":"rowMoved","summary":"Emitted when row order changes. Read the affected row and before/after indices.","member":{"name":"rowMoved","type":"{ fromIndex: number; toIndex: number; row: unknown }","description":"Emitted when row order changes. Read the affected row and before/after indices."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when row order changes. Read the affected row and before/after indices."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"rowMoved: { fromIndex: number; toIndex: number; row: unknown }","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('rowMoved', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('rowMoved', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/row-drag","title":"Row dragging","description":"Managed row dragging applies user-defined order to Grid data. Manual reordering can conflict with display order determined by sorting."}]}]}]},{"path":"/docs/events/rowGroupChanged","kind":"event","title":"rowGroupChanged","summary":"Emitted when row grouping changes. Inspect group fields and whether grouping was cleared.","member":{"name":"rowGroupChanged","type":"{ groupBy: string | null }","description":"Emitted when row grouping changes. Inspect group fields and whether grouping was cleared."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when row grouping changes. Inspect group fields and whether grouping was cleared."},{"kind":"paragraph","text":"API for Pro features: Row grouping, built-in aggregation and group totals"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"rowGroupChanged: { groupBy: string | null }","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('rowGroupChanged', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('rowGroupChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/row-grouping","title":"Grouping and aggregation","description":"Row grouping collects source rows with the same region or team into expandable groups. Unlike column groups, which organize headers, row groups change displayed rows and aggregation results."}]}]}]},{"path":"/docs/events/pivotPanelChanged","kind":"event","title":"pivotPanelChanged","summary":"Emitted when axes change in the pivot panel. Inspect the changed axis and current pivot state.","member":{"name":"pivotPanelChanged","type":"PivotPanelChangeDetail","description":"Emitted when axes change in the pivot panel. Inspect the changed axis and current pivot state."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when axes change in the pivot panel. Inspect the changed axis and current pivot state."},{"kind":"paragraph","text":"API for Pro features: Pivot"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"pivotPanelChanged: PivotPanelChangeDetail","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('pivotPanelChanged', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('pivotPanelChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/PivotPanelChangeDetail","title":"PivotPanelChangeDetail","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/pivot","title":"Pivot analysis","description":"Pivoting divides source orders into row, column, and value axes to create a cross-tabulation. Unlike collapsible row groups, unique values such as statuses become new result columns."}]}]}]},{"path":"/docs/events/pivotChanged","kind":"event","title":"pivotChanged","summary":"Reports pivot configuration changes. Avoid duplicate saves from subscribing to both compatibility and panel events.","member":{"name":"pivotChanged","type":"PivotPanelChangeDetail","description":"Reports pivot configuration changes. Avoid duplicate saves from subscribing to both compatibility and panel events."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Reports pivot configuration changes. Avoid duplicate saves from subscribing to both compatibility and panel events."},{"kind":"paragraph","text":"API for Pro features: Pivot"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"pivotChanged: PivotPanelChangeDetail","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('pivotChanged', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('pivotChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/PivotPanelChangeDetail","title":"PivotPanelChangeDetail","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/pivot","title":"Pivot analysis","description":"Pivoting divides source orders into row, column, and value axes to create a cross-tabulation. Unlike collapsible row groups, unique values such as statuses become new result columns."}]}]}]},{"path":"/docs/events/pivotModeChanged","kind":"event","title":"pivotModeChanged","summary":"Emitted when pivot mode is enabled or disabled.","member":{"name":"pivotModeChanged","type":"{ pivotMode: boolean }","description":"Emitted when pivot mode is enabled or disabled."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when pivot mode is enabled or disabled."},{"kind":"paragraph","text":"API for Pro features: Pivot"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"pivotModeChanged: { pivotMode: boolean }","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('pivotModeChanged', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('pivotModeChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/pivot","title":"Pivot analysis","description":"Pivoting divides source orders into row, column, and value axes to create a cross-tabulation. Unlike collapsible row groups, unique values such as statuses become new result columns."}]}]}]},{"path":"/docs/events/contextMenuItemClicked","kind":"event","title":"contextMenuItemClicked","summary":"Emitted when a cell context-menu item runs. Read its item ID and target cell position.","member":{"name":"contextMenuItemClicked","type":"{ id: string; rowIndex: number; field?: string }","description":"Emitted when a cell context-menu item runs. Read its item ID and target cell position."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when a cell context-menu item runs. Read its item ID and target cell position."},{"kind":"paragraph","text":"API for Pro features: Built-in context menu"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"contextMenuItemClicked: { id: string; rowIndex: number; field?: string }","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('contextMenuItemClicked', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('contextMenuItemClicked', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/context-menu","title":"Cell context menus","description":"A cell's context menu offers actions such as Copy, Copy row, and Export for the current location. Also provide toolbar or keyboard access to frequently used features."}]}]}]},{"path":"/docs/events/remoteEditApplied","kind":"event","title":"remoteEditApplied","summary":"Emitted when a collaborator's edit is applied. Track its origin to avoid resending it as a local edit and creating a loop.","member":{"name":"remoteEditApplied","type":"GridRemoteEditAppliedDetail","description":"Emitted when a collaborator's edit is applied. Track its origin to avoid resending it as a local edit and creating a loop."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when a collaborator's edit is applied. Track its origin to avoid resending it as a local edit and creating a loop."},{"kind":"paragraph","text":"API for Pro features: Real-time collaboration (existing Pro grade retained)"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"remoteEditApplied: GridRemoteEditAppliedDetail","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('remoteEditApplied', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('remoteEditApplied', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridRemoteEditAppliedDetail","title":"GridRemoteEditAppliedDetail","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/collaboration","title":"Real-time collaboration","description":"Collaboration shares edits, cursors, and presence among users in the same room. A room name alone does not automatically connect devices over the internet."}]}]}]},{"path":"/docs/events/presenceChanged","kind":"event","title":"presenceChanged","summary":"Emitted when participant positions or presence change.","member":{"name":"presenceChanged","type":"GridPresenceChangedDetail","description":"Emitted when participant positions or presence change."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when participant positions or presence change."},{"kind":"paragraph","text":"API for Pro features: Real-time collaboration (existing Pro grade retained)"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"presenceChanged: GridPresenceChangedDetail","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('presenceChanged', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('presenceChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridPresenceChangedDetail","title":"GridPresenceChangedDetail","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/collaboration","title":"Real-time collaboration","description":"Collaboration shares edits, cursors, and presence among users in the same room. A room name alone does not automatically connect devices over the internet."}]}]}]},{"path":"/docs/events/collabConflictResolved","kind":"event","title":"collabConflictResolved","summary":"Emitted when a concurrent editing conflict is resolved. Read the actual outcome before explaining it to users.","member":{"name":"collabConflictResolved","type":"GridCollabConflict","description":"Emitted when a concurrent editing conflict is resolved. Read the actual outcome before explaining it to users."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when a concurrent editing conflict is resolved. Read the actual outcome before explaining it to users."},{"kind":"paragraph","text":"API for Pro features: Real-time collaboration (existing Pro grade retained)"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"collabConflictResolved: GridCollabConflict","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('collabConflictResolved', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('collabConflictResolved', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridCollabConflict","title":"GridCollabConflict","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/collaboration","title":"Real-time collaboration","description":"Collaboration shares edits, cursors, and presence among users in the same room. A room name alone does not automatically connect devices over the internet."}]}]}]},{"path":"/docs/events/collaboratorJoined","kind":"event","title":"collaboratorJoined","summary":"Emitted when a participant joins the collaboration room.","member":{"name":"collaboratorJoined","type":"GridCollaboratorInfo","description":"Emitted when a participant joins the collaboration room."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when a participant joins the collaboration room."},{"kind":"paragraph","text":"API for Pro features: Real-time collaboration (existing Pro grade retained)"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"collaboratorJoined: GridCollaboratorInfo","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('collaboratorJoined', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('collaboratorJoined', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridCollaboratorInfo","title":"GridCollaboratorInfo","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/collaboration","title":"Real-time collaboration","description":"Collaboration shares edits, cursors, and presence among users in the same room. A room name alone does not automatically connect devices over the internet."}]}]}]},{"path":"/docs/events/collaboratorLeft","kind":"event","title":"collaboratorLeft","summary":"Emitted when a participant leaves. Update the app's participant list by ID.","member":{"name":"collaboratorLeft","type":"{ id: string }","description":"Emitted when a participant leaves. Update the app's participant list by ID."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when a participant leaves. Update the app's participant list by ID."},{"kind":"paragraph","text":"API for Pro features: Real-time collaboration (existing Pro grade retained)"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"collaboratorLeft: { id: string }","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('collaboratorLeft', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('collaboratorLeft', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/collaboration","title":"Real-time collaboration","description":"Collaboration shares edits, cursors, and presence among users in the same room. A room name alone does not automatically connect devices over the internet."}]}]}]},{"path":"/docs/events/syncStatusChanged","kind":"event","title":"syncStatusChanged","summary":"Emitted when collaboration synchronization changes. Distinguish connection state from completed persistent server saving.","member":{"name":"syncStatusChanged","type":"{ status: GridSyncStatus }","description":"Emitted when collaboration synchronization changes. Distinguish connection state from completed persistent server saving."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when collaboration synchronization changes. Distinguish connection state from completed persistent server saving."},{"kind":"paragraph","text":"API for Pro features: Real-time collaboration (existing Pro grade retained)"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"syncStatusChanged: { status: GridSyncStatus }","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('syncStatusChanged', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('syncStatusChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridSyncStatus","title":"GridSyncStatus","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/collaboration","title":"Real-time collaboration","description":"Collaboration shares edits, cursors, and presence among users in the same room. A room name alone does not automatically connect devices over the internet."}]}]}]},{"path":"/docs/events/cellCommentsChanged","kind":"event","title":"cellCommentsChanged","summary":"Emitted when cell collaboration comments change. Read the row ID, field, and latest comments.","member":{"name":"cellCommentsChanged","type":"{ rowId: string; field: string; comments: GridCellComment[] }","description":"Emitted when cell collaboration comments change. Read the row ID, field, and latest comments."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when cell collaboration comments change. Read the row ID, field, and latest comments."},{"kind":"paragraph","text":"API for Pro features: Cell notes editing"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"cellCommentsChanged: { rowId: string; field: string; comments: GridCellComment[] }","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('cellCommentsChanged', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('cellCommentsChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridCellComment","title":"GridCellComment","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/cell-notes","title":"Cell notes","description":"Cell notes add review context or explanations without changing the value. Standalone notes and collaboration comment threads use different storage and APIs, so choose the appropriate workflow first."}]}]}]},{"path":"/docs/events/commentMentioned","kind":"event","title":"commentMentioned","summary":"Reports a mention in collaboration comments. Connect app notifications using the target cell and comment.","member":{"name":"commentMentioned","type":"{ rowId: string; field: string; comment: GridCellComment }","description":"Reports a mention in collaboration comments. Connect app notifications using the target cell and comment."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Reports a mention in collaboration comments. Connect app notifications using the target cell and comment."},{"kind":"paragraph","text":"API for Pro features: Cell notes editing"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"commentMentioned: { rowId: string; field: string; comment: GridCellComment }","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('commentMentioned', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('commentMentioned', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridCellComment","title":"GridCellComment","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/cell-notes","title":"Cell notes","description":"Cell notes add review context or explanations without changing the value. Standalone notes and collaboration comment threads use different storage and APIs, so choose the appropriate workflow first."}]}]}]},{"path":"/docs/events/auditLogChanged","kind":"event","title":"auditLogChanged","summary":"Emitted when an audit record is added. Read entry to connect your app's retention flow.","member":{"name":"auditLogChanged","type":"{ entry: AuditEntry }","description":"Emitted when an audit record is added. Read entry to connect your app's retention flow."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when an audit record is added. Read entry to connect your app's retention flow."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"auditLogChanged: { entry: AuditEntry }","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('auditLogChanged', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('auditLogChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/AuditEntry","title":"AuditEntry","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/audit-log","title":"View change history","description":"The audit log tracks row, cell, and selection changes and undo/redo transitions. Use it to inspect change history that current values alone cannot reveal."}]}]}]},{"path":"/docs/events/conditionalFormatsChanged","kind":"event","title":"conditionalFormatsChanged","summary":"Emitted when conditional formatting rules change. Save rules as user preferences.","member":{"name":"conditionalFormatsChanged","type":"{ rules: ConditionalFormatRule[] }","description":"Emitted when conditional formatting rules change. Save rules as user preferences."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when conditional formatting rules change. Save rules as user preferences."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"conditionalFormatsChanged: { rules: ConditionalFormatRule[] }","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('conditionalFormatsChanged', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('conditionalFormatsChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/ConditionalFormatRule","title":"ConditionalFormatRule","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/conditional-formats","title":"Conditional formatting","description":"Conditional formatting changes visual properties such as background and text color based on a value's meaning. Use it to identify low stock or exceeded targets without changing source values or validation results."}]}]}]},{"path":"/docs/events/cellValidationFailed","kind":"event","title":"cellValidationFailed","summary":"Emitted when validation fails. Use the target cell, input, and message to guide corrections.","member":{"name":"cellValidationFailed","type":"{ rowIndex: number; field: string; value: unknown; message: string }","description":"Emitted when validation fails. Use the target cell, input, and message to guide corrections."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when validation fails. Use the target cell, input, and message to guide corrections."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"cellValidationFailed: { rowIndex: number; field: string; value: unknown; message: string }","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('cellValidationFailed', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('cellValidationFailed', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/validation-rules","title":"Data validation","description":"Use declarative rules to check required values, numeric ranges, string formats, and custom conditions. The default mode may only mark invalid values, so explicitly set invalidEditMode to block saving when required."}]}]}]},{"path":"/docs/events/snapshotCaptured","kind":"event","title":"snapshotCaptured","summary":"Emitted when a data snapshot is created. Display the saved point using its ID, name, and row count.","member":{"name":"snapshotCaptured","type":"{ id: string; name: string; rowCount: number }","description":"Emitted when a data snapshot is created. Display the saved point using its ID, name, and row count."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when a data snapshot is created. Display the saved point using its ID, name, and row count."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"snapshotCaptured: { id: string; name: string; rowCount: number }","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('snapshotCaptured', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('snapshotCaptured', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/snapshots","title":"Data snapshot","description":"Snapshots retain rowData at a point in time for comparison with current data or another snapshot. They differ from view-state APIs that save column widths, filters, and focus."}]}]}]},{"path":"/docs/events/snapshotRestored","kind":"event","title":"snapshotRestored","summary":"Emitted when snapshot restoration completes. Does not indicate completed server saving.","member":{"name":"snapshotRestored","type":"{ id: string; name: string; rowCount: number }","description":"Emitted when snapshot restoration completes. Does not indicate completed server saving."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when snapshot restoration completes. Does not indicate completed server saving."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"snapshotRestored: { id: string; name: string; rowCount: number }","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('snapshotRestored', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('snapshotRestored', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/snapshots","title":"Data snapshot","description":"Snapshots retain rowData at a point in time for comparison with current data or another snapshot. They differ from view-state APIs that save column widths, filters, and focus."}]}]}]},{"path":"/docs/events/xlsxImported","kind":"event","title":"xlsxImported","summary":"Emits the selected sheet's Grid snapshot after XLSX parsing. Apply snapshot.columnDefs and snapshot.rowData in your app if needed.","member":{"name":"xlsxImported","type":"GridXlsxImportedDetail","description":"Emits the selected sheet's Grid snapshot after XLSX parsing. Apply snapshot.columnDefs and snapshot.rowData in your app if needed."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emits the selected sheet's Grid snapshot after XLSX parsing. Apply snapshot.columnDefs and snapshot.rowData in your app if needed."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"xlsxImported: GridXlsxImportedDetail","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('xlsxImported', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('xlsxImported', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridXlsxImportedDetail","title":"GridXlsxImportedDetail","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/xlsx-import","title":"Excel import","description":"XLSX import reads a workbook and converts the selected sheet into a Grid column-and-row snapshot. The full parsed workbook and the display snapshot are different data."}]}]}]},{"path":"/docs/events/historyChanged","kind":"event","title":"historyChanged","summary":"Emitted when undo/redo history changes. Update button availability and current depths.","member":{"name":"historyChanged","type":"GridHistoryChangedDetail","description":"Emitted when undo/redo history changes. Update button availability and current depths."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when undo/redo history changes. Update button availability and current depths."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"historyChanged: GridHistoryChangedDetail","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('historyChanged', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('historyChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridHistoryChangedDetail","title":"GridHistoryChangedDetail","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/undo-redo","title":"Edit history","description":"Undo or redo recorded editing transactions. One operation may contain multiple cell changes, so cell counts and history counts are not necessarily equal."}]}]}]},{"path":"/docs/events/columnResized","kind":"event","title":"columnResized","summary":"Emitted when column width changes. Include the current width in saved view state.","member":{"name":"columnResized","type":"GridColumnResizedDetail","description":"Emitted when column width changes. Include the current width in saved view state."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when column width changes. Include the current width in saved view state."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"columnResized: GridColumnResizedDetail","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('columnResized', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('columnResized', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridColumnResizedDetail","title":"GridColumnResizedDetail","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/column-operations","title":"Column sizing and pinning","description":"Width, order, pinning, and visibility are independent column states. Combine them to pin order IDs, hide supporting information, and widen long product names."}]}]}]},{"path":"/docs/events/columnReordered","kind":"event","title":"columnReordered","summary":"Emitted when column order changes.","member":{"name":"columnReordered","type":"GridColumnReorderedDetail","description":"Emitted when column order changes."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when column order changes."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"columnReordered: GridColumnReorderedDetail","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('columnReordered', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('columnReordered', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridColumnReorderedDetail","title":"GridColumnReorderedDetail","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/column-operations","title":"Column sizing and pinning","description":"Width, order, pinning, and visibility are independent column states. Combine them to pin order IDs, hide supporting information, and widen long product names."}]}]}]},{"path":"/docs/events/columnVisibilityChanged","kind":"event","title":"columnVisibilityChanged","summary":"Emitted when column visibility changes.","member":{"name":"columnVisibilityChanged","type":"GridColumnVisibilityChangedDetail","description":"Emitted when column visibility changes."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when column visibility changes."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"columnVisibilityChanged: GridColumnVisibilityChangedDetail","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('columnVisibilityChanged', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('columnVisibilityChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridColumnVisibilityChangedDetail","title":"GridColumnVisibilityChangedDetail","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/column-operations","title":"Column sizing and pinning","description":"Width, order, pinning, and visibility are independent column states. Combine them to pin order IDs, hide supporting information, and widen long product names."}]}]}]},{"path":"/docs/events/selectionChanged","kind":"event","title":"selectionChanged","summary":"Emitted when row selection changes. Use selected IDs to define bulk-operation targets.","member":{"name":"selectionChanged","type":"GridSelectionChangedDetail","description":"Emitted when row selection changes. Use selected IDs to define bulk-operation targets."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when row selection changes. Use selected IDs to define bulk-operation targets."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"selectionChanged: GridSelectionChangedDetail","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('selectionChanged', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('selectionChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridSelectionChangedDetail","title":"GridSelectionChangedDetail","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/row-selection","title":"Row selection","description":"Row selection chooses targets for bulk actions such as approval, export, or assignment. Unlike cell range selection, it selects an entire order."}]}]}]},{"path":"/docs/events/rowHoverChanged","kind":"event","title":"rowHoverChanged","summary":"Emitted when the stateful hovered row changes. Unlike CSS-only hover, the app can read this state.","member":{"name":"rowHoverChanged","type":"GridRowHoverChangedDetail","description":"Emitted when the stateful hovered row changes. Unlike CSS-only hover, the app can read this state."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when the stateful hovered row changes. Unlike CSS-only hover, the app can read this state."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"rowHoverChanged: GridRowHoverChangedDetail","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('rowHoverChanged', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('rowHoverChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridRowHoverChangedDetail","title":"GridRowHoverChangedDetail","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/row-hover","title":"Follow rows","description":"Row hover highlights the row under the pointer to help users read wide tables. It differs from row selection and does not automatically select a row for business operations."}]}]}]},{"path":"/docs/events/themeChanged","kind":"event","title":"themeChanged","summary":"Emitted when the Grid theme changes. Check it alongside the surrounding app theme.","member":{"name":"themeChanged","type":"GridThemeChangedDetail","description":"Emitted when the Grid theme changes. Check it alongside the surrounding app theme."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when the Grid theme changes. Check it alongside the surrounding app theme."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"themeChanged: GridThemeChangedDetail","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('themeChanged', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('themeChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridThemeChangedDetail","title":"GridThemeChangedDetail","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/guides/theming","title":"Themes for your app","description":"Grid themes coordinate backgrounds, lines, text, and selection states inside the table. They define the table's reading environment without replacing the page background."}]}]}]},{"path":"/docs/events/localeChanged","kind":"event","title":"localeChanged","summary":"Emitted when the Grid locale changes.","member":{"name":"localeChanged","type":"GridLocaleChangedDetail","description":"Emitted when the Grid locale changes."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when the Grid locale changes."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"localeChanged: GridLocaleChangedDetail","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('localeChanged', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('localeChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridLocaleChangedDetail","title":"GridLocaleChangedDetail","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/guides/keyboard-a11y-i18n","title":"Keyboard and localization","description":"Grid is a workspace for navigating many rows and columns with a keyboard. Cell navigation, editing, menus, and paths to app buttons outside the table must all be understandable."}]}]}]},{"path":"/docs/events/gridObjectChanged","kind":"event","title":"gridObjectChanged","summary":"Emitted when public objects such as rows and columns change. Read the target and changes from detail.","member":{"name":"gridObjectChanged","type":"GridLiveObjectEvent<GridData>","description":"Emitted when public objects such as rows and columns change. Read the target and changes from detail."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when public objects such as rows and columns change. Read the target and changes from detail."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"gridObjectChanged: GridLiveObjectEvent<GridData>","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('gridObjectChanged', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('gridObjectChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridLiveObjectEvent","title":"GridLiveObjectEvent","description":""},{"path":"/docs/types/GridData","title":"GridData","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/guides/data-event-access","title":"Data and events","description":"Grid APIs read or change the current state; events report the results of user interactions or data changes. Combine them to build save buttons, detail panels, and change histories."}]}]}]},{"path":"/docs/events/stateUpdated","kind":"event","title":"stateUpdated","summary":"Emitted when combined view state updates. Adjust persistence frequency in your app for frequent events.","member":{"name":"stateUpdated","type":"SyGridStateUpdatedDetail","description":"Emitted when combined view state updates. Adjust persistence frequency in your app for frequent events."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when combined view state updates. Adjust persistence frequency in your app for frequent events."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"stateUpdated: SyGridStateUpdatedDetail","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('stateUpdated', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('stateUpdated', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridStateUpdatedDetail","title":"SyGridStateUpdatedDetail","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"Settings and data fundamentals","description":""},{"path":"/docs/guides/data-event-access","title":"API calls and event integration","description":""}]}]}]},{"path":"/docs/events/preDestroyed","kind":"event","title":"preDestroyed","summary":"Provides state and capture issues before the Grid is destroyed. Use for saving view preferences and cleaning up resources.","member":{"name":"preDestroyed","type":"SyGridPreDestroyedDetail","description":"Provides state and capture issues before the Grid is destroyed. Use for saving view preferences and cleaning up resources."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Provides state and capture issues before the Grid is destroyed. Use for saving view preferences and cleaning up resources."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"preDestroyed: SyGridPreDestroyedDetail","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('preDestroyed', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('preDestroyed', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridPreDestroyedDetail","title":"SyGridPreDestroyedDetail","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/guides/concepts","title":"Settings and data fundamentals","description":""},{"path":"/docs/guides/data-event-access","title":"API calls and event integration","description":""}]}]}]},{"path":"/docs/events/batchEditStart","kind":"event","title":"batchEditStart","summary":"Emitted when batch editing starts. Open a staged-changes UI if needed.","member":{"name":"batchEditStart","type":"SyGridBatchEditStartEventDetail","description":"Emitted when batch editing starts. Open a staged-changes UI if needed."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when batch editing starts. Open a staged-changes UI if needed."},{"kind":"paragraph","text":"API for Pro features: Batch editing"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"batchEditStart: SyGridBatchEditStartEventDetail","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('batchEditStart', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('batchEditStart', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridBatchEditStartEventDetail","title":"SyGridBatchEditStartEventDetail","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/batch-editing","title":"Batch editing","description":"Batch editing stages changes to multiple cells for a single commit or cancellation. Distinguish staged values from committed rowData to make the Save action clear."}]}]}]},{"path":"/docs/events/batchEditEnd","kind":"event","title":"batchEditEnd","summary":"Emitted when batch editing commits or cancels. Inspect the end reason and results.","member":{"name":"batchEditEnd","type":"SyGridBatchEditEndEventDetail","description":"Emitted when batch editing commits or cancels. Inspect the end reason and results."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when batch editing commits or cancels. Inspect the end reason and results."},{"kind":"paragraph","text":"API for Pro features: Batch editing"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"batchEditEnd: SyGridBatchEditEndEventDetail","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('batchEditEnd', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('batchEditEnd', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridBatchEditEndEventDetail","title":"SyGridBatchEditEndEventDetail","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/batch-editing","title":"Batch editing","description":"Batch editing stages changes to multiple cells for a single commit or cancellation. Distinguish staged values from committed rowData to make the Save action clear."}]}]}]},{"path":"/docs/events/rowValueChanged","kind":"event","title":"rowValueChanged","summary":"Reports full-row value changes. Use when defining a save unit for an entire row.","member":{"name":"rowValueChanged","type":"SyGridRowValueChangedEventDetail","description":"Reports full-row value changes. Use when defining a save unit for an entire row."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Reports full-row value changes. Use when defining a save unit for an entire row."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"rowValueChanged: SyGridRowValueChangedEventDetail","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('rowValueChanged', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('rowValueChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridRowValueChangedEventDetail","title":"SyGridRowValueChangedEventDetail","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/cell-editing","title":"Cell and row editing","description":"Cell editing changes one value immediately; full-row editing commits multiple fields as one row operation. editor specifies the input UI, while editable controls write access."}]}]}]},{"path":"/docs/events/rowEditStart","kind":"event","title":"rowEditStart","summary":"Emitted when full-row editing starts.","member":{"name":"rowEditStart","type":"SyGridRowEditStartEventDetail","description":"Emitted when full-row editing starts."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when full-row editing starts."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"rowEditStart: SyGridRowEditStartEventDetail","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('rowEditStart', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('rowEditStart', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridRowEditStartEventDetail","title":"SyGridRowEditStartEventDetail","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/cell-editing","title":"Cell and row editing","description":"Cell editing changes one value immediately; full-row editing commits multiple fields as one row operation. editor specifies the input UI, while editable controls write access."}]}]}]},{"path":"/docs/events/rowEditStop","kind":"event","title":"rowEditStop","summary":"Emitted when full-row editing ends. Distinguish commit from cancellation.","member":{"name":"rowEditStop","type":"SyGridRowEditStopEventDetail","description":"Emitted when full-row editing ends. Distinguish commit from cancellation."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when full-row editing ends. Distinguish commit from cancellation."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"rowEditStop: SyGridRowEditStopEventDetail","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('rowEditStop', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('rowEditStop', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridRowEditStopEventDetail","title":"SyGridRowEditStopEventDetail","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/cell-editing","title":"Cell and row editing","description":"Cell editing changes one value immediately; full-row editing commits multiple fields as one row operation. editor specifies the input UI, while editable controls write access."}]}]}]},{"path":"/docs/events/fillStart","kind":"event","title":"fillStart","summary":"Emitted when range filling starts.","member":{"name":"fillStart","type":"SyGridFillStartEventDetail","description":"Emitted when range filling starts."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when range filling starts."},{"kind":"paragraph","text":"API for Pro features: Fill handle"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"fillStart: SyGridFillStartEventDetail","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('fillStart', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('fillStart', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridFillStartEventDetail","title":"SyGridFillStartEventDetail","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/fill-handle","title":"Fill values","description":"The fill handle copies values or extends a pattern from a source range. Both the drag UI and fillRange API account for editability, validation, and history."}]}]}]},{"path":"/docs/events/fillEnd","kind":"event","title":"fillEnd","summary":"Emitted when range filling ends. Explain applied, skipped, and rejected results to users.","member":{"name":"fillEnd","type":"SyGridFillEndEventDetail","description":"Emitted when range filling ends. Explain applied, skipped, and rejected results to users."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when range filling ends. Explain applied, skipped, and rejected results to users."},{"kind":"paragraph","text":"API for Pro features: Fill handle"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"fillEnd: SyGridFillEndEventDetail","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('fillEnd', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('fillEnd', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridFillEndEventDetail","title":"SyGridFillEndEventDetail","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/fill-handle","title":"Fill values","description":"The fill handle copies values or extends a pattern from a source range. Both the drag UI and fillRange API account for editability, validation, and history."}]}]}]},{"path":"/docs/events/pivotCombinationConflict","kind":"event","title":"pivotCombinationConflict","summary":"Emitted when pivot settings conflict with other features. Adjust app options based on the actual compatibility decision.","member":{"name":"pivotCombinationConflict","type":"SyGridPivotCombinationConflictDetail","description":"Emitted when pivot settings conflict with other features. Adjust app options based on the actual compatibility decision."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when pivot settings conflict with other features. Adjust app options based on the actual compatibility decision."},{"kind":"paragraph","text":"API for Pro features: Pivot"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"pivotCombinationConflict: SyGridPivotCombinationConflictDetail","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('pivotCombinationConflict', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('pivotCombinationConflict', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridPivotCombinationConflictDetail","title":"SyGridPivotCombinationConflictDetail","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/pivot","title":"Pivot analysis","description":"Pivoting divides source orders into row, column, and value axes to create a cross-tabulation. Unlike collapsible row groups, unique values such as statuses become new result columns."}]}]}]},{"path":"/docs/events/pivotColumnsChanged","kind":"event","title":"pivotColumnsChanged","summary":"Emitted when the pivot result column model changes. Update chart and export code using previous result column IDs.","member":{"name":"pivotColumnsChanged","type":"SyGridPivotColumnsChangedDetail","description":"Emitted when the pivot result column model changes. Update chart and export code using previous result column IDs."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when the pivot result column model changes. Update chart and export code using previous result column IDs."},{"kind":"paragraph","text":"API for Pro features: Pivot"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"pivotColumnsChanged: SyGridPivotColumnsChangedDetail","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('pivotColumnsChanged', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('pivotColumnsChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridPivotColumnsChangedDetail","title":"SyGridPivotColumnsChangedDetail","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/pivot","title":"Pivot analysis","description":"Pivoting divides source orders into row, column, and value axes to create a cross-tabulation. Unlike collapsible row groups, unique values such as statuses become new result columns."}]}]}]},{"path":"/docs/events/serverStoreUpdated","kind":"event","title":"serverStoreUpdated","summary":"Emitted when a server row store refreshes. Inspect its path and cache state.","member":{"name":"serverStoreUpdated","type":"SyGridServerStoreUpdatedDetail","description":"Emitted when a server row store refreshes. Inspect its path and cache state."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when a server row store refreshes. Inspect its path and cache state."},{"kind":"paragraph","text":"API for Pro features: Server-Side Row Model"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"serverStoreUpdated: SyGridServerStoreUpdatedDetail","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('serverStoreUpdated', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('serverStoreUpdated', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridServerStoreUpdatedDetail","title":"SyGridServerStoreUpdatedDetail","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/server-side-row-model","title":"Server-side row model","description":"In this model, the server calculates grouping and pivots and supplies rows for each expanded group path. Its data responsibilities differ from grouping already loaded local rows with groupBy."}]}]}]},{"path":"/docs/events/rowDragEnter","kind":"event","title":"rowDragEnter","summary":"Emitted when a row drag enters a target area.","member":{"name":"rowDragEnter","type":"SyGridRowDragEventDetail","description":"Emitted when a row drag enters a target area."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when a row drag enters a target area."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"rowDragEnter: SyGridRowDragEventDetail","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('rowDragEnter', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('rowDragEnter', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridRowDragEventDetail","title":"SyGridRowDragEventDetail","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/row-drag","title":"Row dragging","description":"Managed row dragging applies user-defined order to Grid data. Manual reordering can conflict with display order determined by sorting."}]}]}]},{"path":"/docs/events/rowDragMove","kind":"event","title":"rowDragMove","summary":"Emitted during row dragging. Avoid expensive save operations on every high-frequency event.","member":{"name":"rowDragMove","type":"SyGridRowDragEventDetail","description":"Emitted during row dragging. Avoid expensive save operations on every high-frequency event."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted during row dragging. Avoid expensive save operations on every high-frequency event."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"rowDragMove: SyGridRowDragEventDetail","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('rowDragMove', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('rowDragMove', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridRowDragEventDetail","title":"SyGridRowDragEventDetail","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/row-drag","title":"Row dragging","description":"Managed row dragging applies user-defined order to Grid data. Manual reordering can conflict with display order determined by sorting."}]}]}]},{"path":"/docs/events/rowDragLeave","kind":"event","title":"rowDragLeave","summary":"Emitted when a row drag leaves an area. Different from drag completion.","member":{"name":"rowDragLeave","type":"SyGridRowDragEventDetail","description":"Emitted when a row drag leaves an area. Different from drag completion."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when a row drag leaves an area. Different from drag completion."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"rowDragLeave: SyGridRowDragEventDetail","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('rowDragLeave', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('rowDragLeave', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridRowDragEventDetail","title":"SyGridRowDragEventDetail","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/row-drag","title":"Row dragging","description":"Managed row dragging applies user-defined order to Grid data. Manual reordering can conflict with display order determined by sorting."}]}]}]},{"path":"/docs/events/rowDragEnd","kind":"event","title":"rowDragEnd","summary":"Emitted when row dragging ends. Inspect the applied result and drop position.","member":{"name":"rowDragEnd","type":"SyGridRowDragEndDetail","description":"Emitted when row dragging ends. Inspect the applied result and drop position."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when row dragging ends. Inspect the applied result and drop position."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"rowDragEnd: SyGridRowDragEndDetail","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('rowDragEnd', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('rowDragEnd', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridRowDragEndDetail","title":"SyGridRowDragEndDetail","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/row-drag","title":"Row dragging","description":"Managed row dragging applies user-defined order to Grid data. Manual reordering can conflict with display order determined by sorting."}]}]}]},{"path":"/docs/events/rowDragCancel","kind":"event","title":"rowDragCancel","summary":"Emitted when row dragging is cancelled. Do not run completion actions or save server ordering.","member":{"name":"rowDragCancel","type":"SyGridRowDragCancelDetail","description":"Emitted when row dragging is cancelled. Do not run completion actions or save server ordering."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when row dragging is cancelled. Do not run completion actions or save server ordering."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"rowDragCancel: SyGridRowDragCancelDetail","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('rowDragCancel', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('rowDragCancel', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridRowDragCancelDetail","title":"SyGridRowDragCancelDetail","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/row-drag","title":"Row dragging","description":"Managed row dragging applies user-defined order to Grid data. Manual reordering can conflict with display order determined by sorting."}]}]}]},{"path":"/docs/events/rowsTransferred","kind":"event","title":"rowsTransferred","summary":"Reports row transfers between drop areas. Inspect actual move, copy, and rejection results.","member":{"name":"rowsTransferred","type":"SyGridRowsTransferredDetail","description":"Reports row transfers between drop areas. Inspect actual move, copy, and rejection results."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Reports row transfers between drop areas. Inspect actual move, copy, and rejection results."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"rowsTransferred: SyGridRowsTransferredDetail","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('rowsTransferred', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('rowsTransferred', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridRowsTransferredDetail","title":"SyGridRowsTransferredDetail","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/row-drag","title":"Row dragging","description":"Managed row dragging applies user-defined order to Grid data. Manual reordering can conflict with display order determined by sorting."}]}]}]},{"path":"/docs/events/spanConflict","kind":"event","title":"spanConflict","summary":"Emitted when cell spans conflict with other ranges or layouts.","member":{"name":"spanConflict","type":"SyGridSpanConflictEventDetail","description":"Emitted when cell spans conflict with other ranges or layouts."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when cell spans conflict with other ranges or layouts."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"spanConflict: SyGridSpanConflictEventDetail","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('spanConflict', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('spanConflict', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridSpanConflictEventDetail","title":"SyGridSpanConflictEventDetail","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/row-layout","title":"Row height and pinned rows","description":"Row height, top/bottom pinned rows, full-width rows, and merged cells are separate layout features. Choose based on whether you need persistent summaries or wide detail content."}]}]}]},{"path":"/docs/events/treeReparented","kind":"event","title":"treeReparented","summary":"Reports tree reparenting results. Connect to parent-relationship saving on your app server.","member":{"name":"treeReparented","type":"SyGridTreeReparentedDetail","description":"Reports tree reparenting results. Connect to parent-relationship saving on your app server."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Reports tree reparenting results. Connect to parent-relationship saving on your app server."},{"kind":"paragraph","text":"API for Pro features: Tree data"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"treeReparented: SyGridTreeReparentedDetail","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('treeReparented', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('treeReparented', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridTreeReparentedDetail","title":"SyGridTreeReparentedDetail","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/tree-data","title":"Tree data","description":"Trees display parent-child data, such as folders or organizations, with indentation and expansion controls. Unlike grouping equal values, the parent relationship already exists in the data."}]}]}]},{"path":"/docs/events/pinnedRowsChanged","kind":"event","title":"pinnedRowsChanged","summary":"Emitted when top/bottom pinned row data changes.","member":{"name":"pinnedRowsChanged","type":"SyGridPinnedRowsChangedDetail<GridRow>","description":"Emitted when top/bottom pinned row data changes."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when top/bottom pinned row data changes."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"pinnedRowsChanged: SyGridPinnedRowsChangedDetail<GridRow>","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('pinnedRowsChanged', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('pinnedRowsChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridPinnedRowsChangedDetail","title":"SyGridPinnedRowsChangedDetail","description":""},{"path":"/docs/types/GridRow","title":"GridRow","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/row-layout","title":"Row height and pinned rows","description":"Row height, top/bottom pinned rows, full-width rows, and merged cells are separate layout features. Choose based on whether you need persistent summaries or wide detail content."}]}]}]},{"path":"/docs/events/rowLayoutRefused","kind":"event","title":"rowLayoutRefused","summary":"Emitted when a requested row layout cannot be applied. Adjust the combination according to the rejection reason.","member":{"name":"rowLayoutRefused","type":"SyGridRowLayoutRefusedDetail","description":"Emitted when a requested row layout cannot be applied. Adjust the combination according to the rejection reason."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when a requested row layout cannot be applied. Adjust the combination according to the rejection reason."}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"rowLayoutRefused: SyGridRowLayoutRefusedDetail","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('rowLayoutRefused', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('rowLayoutRefused', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridRowLayoutRefusedDetail","title":"SyGridRowLayoutRefusedDetail","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/row-layout","title":"Row height and pinned rows","description":"Row height, top/bottom pinned rows, full-width rows, and merged cells are separate layout features. Choose based on whether you need persistent summaries or wide detail content."}]}]}]},{"path":"/docs/events/workbookValuesPropagated","kind":"event","title":"workbookValuesPropagated","summary":"Emitted after cross-sheet value propagation. Inspect results and generation information.","member":{"name":"workbookValuesPropagated","type":"SyGridWorkbookPropagationDetail","description":"Emitted after cross-sheet value propagation. Inspect results and generation information."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted after cross-sheet value propagation. Inspect results and generation information."},{"kind":"paragraph","text":"API for Pro features: Built-in formulas, references, dependency recalculation and calculated columns"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"workbookValuesPropagated: SyGridWorkbookPropagationDetail","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('workbookValuesPropagated', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('workbookValuesPropagated', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridWorkbookPropagationDetail","title":"SyGridWorkbookPropagationDetail","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/formulas","title":"Formula calculation","description":"Formulas evaluate strings beginning with = and display the result in a cell. For example, =SUM(A1:A3) references the first column in the original column definitions and the first three source rows."}]}]}]},{"path":"/docs/events/chartCreated","kind":"event","title":"chartCreated","summary":"Emitted when an integrated Grid chart is created. Manage your app's chart list by chart ID.","member":{"name":"chartCreated","type":"SyGridChartEvent","description":"Emitted when an integrated Grid chart is created. Manage your app's chart list by chart ID."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when an integrated Grid chart is created. Manage your app's chart list by chart ID."},{"kind":"paragraph","text":"API for Pro features: Integrated range charts and pivot chart tools"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"chartCreated: SyGridChartEvent","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('chartCreated', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('chartCreated', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridChartEvent","title":"SyGridChartEvent","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/integrated-charts","title":"Chart selected data","description":"Connect a Grid range to a chart to view the same data as both a table and a graph. Select category and value columns appropriate to the chart type, rather than simply selecting numeric values."}]}]}]},{"path":"/docs/events/chartRangeChanged","kind":"event","title":"chartRangeChanged","summary":"Emitted when an integrated chart's source range changes.","member":{"name":"chartRangeChanged","type":"SyGridChartEvent","description":"Emitted when an integrated chart's source range changes."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when an integrated chart's source range changes."},{"kind":"paragraph","text":"API for Pro features: Integrated range charts and pivot chart tools"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"chartRangeChanged: SyGridChartEvent","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('chartRangeChanged', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('chartRangeChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridChartEvent","title":"SyGridChartEvent","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/integrated-charts","title":"Chart selected data","description":"Connect a Grid range to a chart to view the same data as both a table and a graph. Select category and value columns appropriate to the chart type, rather than simply selecting numeric values."}]}]}]},{"path":"/docs/events/chartOptionsChanged","kind":"event","title":"chartOptionsChanged","summary":"Emitted when integrated chart settings change. Update saved chart models if needed.","member":{"name":"chartOptionsChanged","type":"SyGridChartEvent","description":"Emitted when integrated chart settings change. Update saved chart models if needed."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when integrated chart settings change. Update saved chart models if needed."},{"kind":"paragraph","text":"API for Pro features: Integrated range charts and pivot chart tools"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"chartOptionsChanged: SyGridChartEvent","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('chartOptionsChanged', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('chartOptionsChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridChartEvent","title":"SyGridChartEvent","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/integrated-charts","title":"Chart selected data","description":"Connect a Grid range to a chart to view the same data as both a table and a graph. Select category and value columns appropriate to the chart type, rather than simply selecting numeric values."}]}]}]},{"path":"/docs/events/chartDestroyed","kind":"event","title":"chartDestroyed","summary":"Emitted when an integrated chart is destroyed. Clean up app-held references and external resources.","member":{"name":"chartDestroyed","type":"SyGridChartEvent","description":"Emitted when an integrated chart is destroyed. Clean up app-held references and external resources."},"apiKind":"events","sections":[{"id":"meaning","title":"What does this API do?","blocks":[{"kind":"paragraph","text":"Emitted when an integrated chart is destroyed. Clean up app-held references and external resources."},{"kind":"paragraph","text":"API for Pro features: Integrated range charts and pivot chart tools"}]},{"id":"contract","title":"Exact input and result types","blocks":[{"kind":"code","source":"chartDestroyed: SyGridChartEvent","language":"typescript"}]},{"id":"usage","title":"Usage flow","blocks":[{"kind":"paragraph","text":"Subscribe with grid.addEventListener('chartDestroyed', handler). The result is in event.detail, and event names are case-sensitive. Remove subscriptions when disposing of the view."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('chartDestroyed', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// On view disposal: controller.abort();","language":"javascript"}]},{"id":"types","title":"Read related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridChartEvent","title":"SyGridChartEvent","description":""}]}]},{"id":"recipes","title":"Feature explanations and examples","blocks":[{"kind":"links","items":[{"path":"/docs/features/integrated-charts","title":"Chart selected data","description":"Connect a Grid range to a chart to view the same data as both a table and a graph. Select category and value columns appropriate to the chart type, rather than simply selecting numeric values."}]}]}]},{"path":"/docs/types","kind":"index","title":"Grid type reference","summary":"Inspect the structure of input objects and result reports. Select another type name to open its definition.","sections":[{"id":"index","title":"Type list","blocks":[{"kind":"links","items":[{"path":"/docs/types/ActiveCell","title":"ActiveCell","description":""},{"path":"/docs/types/ActiveFilter","title":"ActiveFilter","description":""},{"path":"/docs/types/ActiveFilterMap","title":"ActiveFilterMap","description":""},{"path":"/docs/types/ActivePagination","title":"ActivePagination","description":""},{"path":"/docs/types/ActiveSort","title":"ActiveSort","description":""},{"path":"/docs/types/ApplyColumnStateOptions","title":"ApplyColumnStateOptions","description":""},{"path":"/docs/types/ApplyColumnStateResult","title":"ApplyColumnStateResult","description":""},{"path":"/docs/types/ApplyRowTransactionResult","title":"ApplyRowTransactionResult","description":""},{"path":"/docs/types/AuditCellEntry","title":"AuditCellEntry","description":""},{"path":"/docs/types/AuditEntry","title":"AuditEntry","description":""},{"path":"/docs/types/AuditEntryCommon","title":"AuditEntryCommon","description":""},{"path":"/docs/types/AuditHistoryEntry","title":"AuditHistoryEntry","description":""},{"path":"/docs/types/AuditLogFilter","title":"AuditLogFilter","description":""},{"path":"/docs/types/AuditRowsEntry","title":"AuditRowsEntry","description":""},{"path":"/docs/types/AuditSelectionEntry","title":"AuditSelectionEntry","description":""},{"path":"/docs/types/AuditSource","title":"AuditSource","description":""},{"path":"/docs/types/CanEditCellFn","title":"CanEditCellFn","description":""},{"path":"/docs/types/CanReadCellFn","title":"CanReadCellFn","description":""},{"path":"/docs/types/CanonicalCell","title":"CanonicalCell","description":""},{"path":"/docs/types/CanonicalRange","title":"CanonicalRange","description":""},{"path":"/docs/types/CanonicalRangeChange","title":"CanonicalRangeChange","description":""},{"path":"/docs/types/CellCallbackParams","title":"CellCallbackParams","description":""},{"path":"/docs/types/CellRange","title":"CellRange","description":""},{"path":"/docs/types/CellRangeBounds","title":"CellRangeBounds","description":""},{"path":"/docs/types/CellRenderOutput","title":"CellRenderOutput","description":""},{"path":"/docs/types/CellRenderer","title":"CellRenderer","description":""},{"path":"/docs/types/CellRendererInput","title":"CellRendererInput","description":""},{"path":"/docs/types/CfCondition","title":"CfCondition","description":""},{"path":"/docs/types/CfConditionType","title":"CfConditionType","description":""},{"path":"/docs/types/CfStyle","title":"CfStyle","description":""},{"path":"/docs/types/ChartDataTable","title":"ChartDataTable","description":""},{"path":"/docs/types/ChartLinkAccessibleReport","title":"ChartLinkAccessibleReport","description":""},{"path":"/docs/types/ChartLinkChartReport","title":"ChartLinkChartReport","description":""},{"path":"/docs/types/ChartLinkCreateParams","title":"ChartLinkCreateParams","description":""},{"path":"/docs/types/ChartLinkCreateResult","title":"ChartLinkCreateResult","description":""},{"path":"/docs/types/ChartLinkDestroyResult","title":"ChartLinkDestroyResult","description":""},{"path":"/docs/types/ChartLinkExportResult","title":"ChartLinkExportResult","description":""},{"path":"/docs/types/ChartLinkFleetReport","title":"ChartLinkFleetReport","description":""},{"path":"/docs/types/ChartLinkMenuReport","title":"ChartLinkMenuReport","description":""},{"path":"/docs/types/ChartLinkPanelReport","title":"ChartLinkPanelReport","description":""},{"path":"/docs/types/ChartLinkPanelStop","title":"ChartLinkPanelStop","description":""},{"path":"/docs/types/ChartLinkSourceInput","title":"ChartLinkSourceInput","description":""},{"path":"/docs/types/ChartLinkUpdateResult","title":"ChartLinkUpdateResult","description":""},{"path":"/docs/types/ColumnDef","title":"ColumnDef","description":""},{"path":"/docs/types/ColumnFilterDecl","title":"ColumnFilterDecl","description":""},{"path":"/docs/types/ColumnFilterKind","title":"ColumnFilterKind","description":""},{"path":"/docs/types/ColumnFilterType","title":"ColumnFilterType","description":""},{"path":"/docs/types/ColumnGroupDef","title":"ColumnGroupDef","description":""},{"path":"/docs/types/ColumnPinSide","title":"ColumnPinSide","description":""},{"path":"/docs/types/ColumnStateEntry","title":"ColumnStateEntry","description":""},{"path":"/docs/types/ColumnsSliceApplyResult","title":"ColumnsSliceApplyResult","description":""},{"path":"/docs/types/ConditionGroup","title":"ConditionGroup","description":""},{"path":"/docs/types/ConditionLeaf","title":"ConditionLeaf","description":""},{"path":"/docs/types/ConditionNode","title":"ConditionNode","description":""},{"path":"/docs/types/ConditionalFormatRule","title":"ConditionalFormatRule","description":""},{"path":"/docs/types/ContextMenuActionId","title":"ContextMenuActionId","description":""},{"path":"/docs/types/ContextMenuContext","title":"ContextMenuContext","description":""},{"path":"/docs/types/ContextMenuItem","title":"ContextMenuItem","description":""},{"path":"/docs/types/CsvDelimiter","title":"CsvDelimiter","description":""},{"path":"/docs/types/CsvDownloadOptions","title":"CsvDownloadOptions","description":""},{"path":"/docs/types/CsvExportColumn","title":"CsvExportColumn","description":""},{"path":"/docs/types/CsvExportOptions","title":"CsvExportOptions","description":""},{"path":"/docs/types/CsvExportResult","title":"CsvExportResult","description":""},{"path":"/docs/types/DateFilterOp","title":"DateFilterOp","description":""},{"path":"/docs/types/DateFilterSpec","title":"DateFilterSpec","description":""},{"path":"/docs/types/DateValue","title":"DateValue","description":""},{"path":"/docs/types/DetailGridOptions","title":"DetailGridOptions","description":""},{"path":"/docs/types/DetailRowDataParams","title":"DetailRowDataParams","description":""},{"path":"/docs/types/EditTransaction","title":"EditTransaction","description":""},{"path":"/docs/types/EditTransactionPhase","title":"EditTransactionPhase","description":""},{"path":"/docs/types/EmptyStateKind","title":"EmptyStateKind","description":""},{"path":"/docs/types/FillDirection","title":"FillDirection","description":""},{"path":"/docs/types/FillPlanMode","title":"FillPlanMode","description":""},{"path":"/docs/types/FilterSliceApplyResult","title":"FilterSliceApplyResult","description":""},{"path":"/docs/types/FilterSliceIssue","title":"FilterSliceIssue","description":""},{"path":"/docs/types/GridActiveCellChangedDetail","title":"GridActiveCellChangedDetail","description":""},{"path":"/docs/types/GridAsyncValueLoadContext","title":"GridAsyncValueLoadContext","description":""},{"path":"/docs/types/GridAsyncValueLoader","title":"GridAsyncValueLoader","description":""},{"path":"/docs/types/GridCallback","title":"GridCallback","description":""},{"path":"/docs/types/GridCellClickedDetail","title":"GridCellClickedDetail","description":""},{"path":"/docs/types/GridCellComment","title":"GridCellComment","description":""},{"path":"/docs/types/GridCellDoubleClickedDetail","title":"GridCellDoubleClickedDetail","description":""},{"path":"/docs/types/GridCellEditingCancelledDetail","title":"GridCellEditingCancelledDetail","description":""},{"path":"/docs/types/GridCellEditingCommittedDetail","title":"GridCellEditingCommittedDetail","description":""},{"path":"/docs/types/GridCellEditingRequestedDetail","title":"GridCellEditingRequestedDetail","description":""},{"path":"/docs/types/GridCellEditorDeclaration","title":"GridCellEditorDeclaration","description":""},{"path":"/docs/types/GridCellNote","title":"GridCellNote","description":""},{"path":"/docs/types/GridCellNotesAdapter","title":"GridCellNotesAdapter","description":""},{"path":"/docs/types/GridCellValueChangedDetail","title":"GridCellValueChangedDetail","description":""},{"path":"/docs/types/GridChartAccessibleSummary","title":"GridChartAccessibleSummary","description":""},{"path":"/docs/types/GridChartContainerRequest","title":"GridChartContainerRequest","description":""},{"path":"/docs/types/GridChartCrossFilterAction","title":"GridChartCrossFilterAction","description":""},{"path":"/docs/types/GridChartCrossFilterDelta","title":"GridChartCrossFilterDelta","description":""},{"path":"/docs/types/GridChartCrossFilterIssues","title":"GridChartCrossFilterIssues","description":""},{"path":"/docs/types/GridChartCrossFilterResult","title":"GridChartCrossFilterResult","description":""},{"path":"/docs/types/GridChartDestroyCause","title":"GridChartDestroyCause","description":""},{"path":"/docs/types/GridChartEvent","title":"GridChartEvent","description":""},{"path":"/docs/types/GridChartEventSpine","title":"GridChartEventSpine","description":""},{"path":"/docs/types/GridChartExportFormat","title":"GridChartExportFormat","description":""},{"path":"/docs/types/GridChartExportRefusal","title":"GridChartExportRefusal","description":""},{"path":"/docs/types/GridChartExportRequest","title":"GridChartExportRequest","description":""},{"path":"/docs/types/GridChartExportResult","title":"GridChartExportResult","description":""},{"path":"/docs/types/GridChartExportSpec","title":"GridChartExportSpec","description":""},{"path":"/docs/types/GridChartFocusStop","title":"GridChartFocusStop","description":""},{"path":"/docs/types/GridChartFocusStopKind","title":"GridChartFocusStopKind","description":""},{"path":"/docs/types/GridChartMenuColumn","title":"GridChartMenuColumn","description":""},{"path":"/docs/types/GridChartMenuEntry","title":"GridChartMenuEntry","description":""},{"path":"/docs/types/GridChartMenuPermissions","title":"GridChartMenuPermissions","description":""},{"path":"/docs/types/GridChartMenuSelectionShape","title":"GridChartMenuSelectionShape","description":""},{"path":"/docs/types/GridChartMenuUnavailableReason","title":"GridChartMenuUnavailableReason","description":""},{"path":"/docs/types/GridChartModel","title":"GridChartModel","description":""},{"path":"/docs/types/GridChartModelCaptureIssue","title":"GridChartModelCaptureIssue","description":""},{"path":"/docs/types/GridChartModelCaptureProblem","title":"GridChartModelCaptureProblem","description":""},{"path":"/docs/types/GridChartModelCaptureResult","title":"GridChartModelCaptureResult","description":""},{"path":"/docs/types/GridChartModelEnvelope","title":"GridChartModelEnvelope","description":""},{"path":"/docs/types/GridChartModelEnvelopeIssue","title":"GridChartModelEnvelopeIssue","description":""},{"path":"/docs/types/GridChartModelEnvelopeIssueCode","title":"GridChartModelEnvelopeIssueCode","description":""},{"path":"/docs/types/GridChartModelRestoreEntry","title":"GridChartModelRestoreEntry","description":""},{"path":"/docs/types/GridChartModelRestoreIssue","title":"GridChartModelRestoreIssue","description":""},{"path":"/docs/types/GridChartModelRestoreReport","title":"GridChartModelRestoreReport","description":""},{"path":"/docs/types/GridChartModelRestoreStatus","title":"GridChartModelRestoreStatus","description":""},{"path":"/docs/types/GridChartModelSource","title":"GridChartModelSource","description":""},{"path":"/docs/types/GridChartModelVersion","title":"GridChartModelVersion","description":""},{"path":"/docs/types/GridChartOptionKey","title":"GridChartOptionKey","description":""},{"path":"/docs/types/GridChartOptions","title":"GridChartOptions","description":""},{"path":"/docs/types/GridChartPivotSelectionState","title":"GridChartPivotSelectionState","description":""},{"path":"/docs/types/GridChartPivotTotalColumnMode","title":"GridChartPivotTotalColumnMode","description":""},{"path":"/docs/types/GridChartPivotTotalRowMode","title":"GridChartPivotTotalRowMode","description":""},{"path":"/docs/types/GridChartPivotTotalsPolicy","title":"GridChartPivotTotalsPolicy","description":""},{"path":"/docs/types/GridChartProjectionKind","title":"GridChartProjectionKind","description":""},{"path":"/docs/types/GridChartProperties","title":"GridChartProperties","description":""},{"path":"/docs/types/GridChartSourceSnapshot","title":"GridChartSourceSnapshot","description":""},{"path":"/docs/types/GridChartSyncMutation","title":"GridChartSyncMutation","description":""},{"path":"/docs/types/GridChartTypeRefusalReason","title":"GridChartTypeRefusalReason","description":""},{"path":"/docs/types/GridChartTypeVerdict","title":"GridChartTypeVerdict","description":""},{"path":"/docs/types/GridChunkFailureReason","title":"GridChunkFailureReason","description":""},{"path":"/docs/types/GridChunkId","title":"GridChunkId","description":""},{"path":"/docs/types/GridChunkKind","title":"GridChunkKind","description":""},{"path":"/docs/types/GridChunkLoadEventDetail","title":"GridChunkLoadEventDetail","description":""},{"path":"/docs/types/GridChunkTier","title":"GridChunkTier","description":""},{"path":"/docs/types/GridCollabConflict","title":"GridCollabConflict","description":""},{"path":"/docs/types/GridCollabSelection","title":"GridCollabSelection","description":""},{"path":"/docs/types/GridCollaboratorInfo","title":"GridCollaboratorInfo","description":""},{"path":"/docs/types/GridColumnDef","title":"GridColumnDef","description":""},{"path":"/docs/types/GridColumnDefinition","title":"GridColumnDefinition","description":""},{"path":"/docs/types/GridColumnGroupDef","title":"GridColumnGroupDef","description":""},{"path":"/docs/types/GridColumnGroupRef","title":"GridColumnGroupRef","description":""},{"path":"/docs/types/GridColumnMenuContext","title":"GridColumnMenuContext","description":""},{"path":"/docs/types/GridColumnMenuItem","title":"GridColumnMenuItem","description":""},{"path":"/docs/types/GridColumnRef","title":"GridColumnRef","description":""},{"path":"/docs/types/GridColumnReorderedDetail","title":"GridColumnReorderedDetail","description":""},{"path":"/docs/types/GridColumnResizedDetail","title":"GridColumnResizedDetail","description":""},{"path":"/docs/types/GridColumnSortState","title":"GridColumnSortState","description":""},{"path":"/docs/types/GridColumnVisibilityChangedDetail","title":"GridColumnVisibilityChangedDetail","description":""},{"path":"/docs/types/GridComponentClassDefinition","title":"GridComponentClassDefinition","description":""},{"path":"/docs/types/GridComponentConstructor","title":"GridComponentConstructor","description":""},{"path":"/docs/types/GridComponentDefinition","title":"GridComponentDefinition","description":""},{"path":"/docs/types/GridComponentDefinitionFor","title":"GridComponentDefinitionFor","description":""},{"path":"/docs/types/GridComponentDefinitionMap","title":"GridComponentDefinitionMap","description":""},{"path":"/docs/types/GridComponentErrorCode","title":"GridComponentErrorCode","description":""},{"path":"/docs/types/GridComponentErrorDetails","title":"GridComponentErrorDetails","description":""},{"path":"/docs/types/GridComponentFactory","title":"GridComponentFactory","description":""},{"path":"/docs/types/GridComponentFactoryContext","title":"GridComponentFactoryContext","description":""},{"path":"/docs/types/GridComponentFactoryDefinition","title":"GridComponentFactoryDefinition","description":""},{"path":"/docs/types/GridComponentKind","title":"GridComponentKind","description":""},{"path":"/docs/types/GridComponentLazyDefinition","title":"GridComponentLazyDefinition","description":""},{"path":"/docs/types/GridComponentLifecyclePhase","title":"GridComponentLifecyclePhase","description":""},{"path":"/docs/types/GridComponentLocalDefinitions","title":"GridComponentLocalDefinitions","description":""},{"path":"/docs/types/GridComponentParams","title":"GridComponentParams","description":""},{"path":"/docs/types/GridComponentRegistrationScope","title":"GridComponentRegistrationScope","description":""},{"path":"/docs/types/GridData","title":"GridData","description":""},{"path":"/docs/types/GridEagerComponentDefinition","title":"GridEagerComponentDefinition","description":""},{"path":"/docs/types/GridEditSource","title":"GridEditSource","description":""},{"path":"/docs/types/GridEditorDefinition","title":"GridEditorDefinition","description":""},{"path":"/docs/types/GridEditorInstance","title":"GridEditorInstance","description":""},{"path":"/docs/types/GridEditorParams","title":"GridEditorParams","description":""},{"path":"/docs/types/GridEditorValidationError","title":"GridEditorValidationError","description":""},{"path":"/docs/types/GridEmptyStateActionDetail","title":"GridEmptyStateActionDetail","description":""},{"path":"/docs/types/GridEngineMode","title":"GridEngineMode","description":""},{"path":"/docs/types/GridEngineTier","title":"GridEngineTier","description":""},{"path":"/docs/types/GridEventSource","title":"GridEventSource","description":""},{"path":"/docs/types/GridExternalFilterCallbacks","title":"GridExternalFilterCallbacks","description":""},{"path":"/docs/types/GridExternalFilterInstance","title":"GridExternalFilterInstance","description":""},{"path":"/docs/types/GridFieldLeaf","title":"GridFieldLeaf","description":""},{"path":"/docs/types/GridFieldPath","title":"GridFieldPath","description":""},{"path":"/docs/types/GridFieldPathLevel2","title":"GridFieldPathLevel2","description":""},{"path":"/docs/types/GridFilterChangedDetail","title":"GridFilterChangedDetail","description":""},{"path":"/docs/types/GridFilterDefinition","title":"GridFilterDefinition","description":""},{"path":"/docs/types/GridFilterInstance","title":"GridFilterInstance","description":""},{"path":"/docs/types/GridFilterModifiedDetail","title":"GridFilterModifiedDetail","description":""},{"path":"/docs/types/GridFilterParams","title":"GridFilterParams","description":""},{"path":"/docs/types/GridFloatingFilterDefinition","title":"GridFloatingFilterDefinition","description":""},{"path":"/docs/types/GridFloatingFilterInstance","title":"GridFloatingFilterInstance","description":""},{"path":"/docs/types/GridFloatingFilterParams","title":"GridFloatingFilterParams","description":""},{"path":"/docs/types/GridFocusHandoff","title":"GridFocusHandoff","description":""},{"path":"/docs/types/GridFormulaErrorDetail","title":"GridFormulaErrorDetail","description":""},{"path":"/docs/types/GridFormulaEvaluatedDetail","title":"GridFormulaEvaluatedDetail","description":""},{"path":"/docs/types/GridGetRowId","title":"GridGetRowId","description":""},{"path":"/docs/types/GridGuiComponent","title":"GridGuiComponent","description":""},{"path":"/docs/types/GridHistoryChangedDetail","title":"GridHistoryChangedDetail","description":""},{"path":"/docs/types/GridLazyComponentContext","title":"GridLazyComponentContext","description":""},{"path":"/docs/types/GridLiveObjectEvent","title":"GridLiveObjectEvent","description":""},{"path":"/docs/types/GridLiveObjectEventType","title":"GridLiveObjectEventType","description":""},{"path":"/docs/types/GridLiveObjectKind","title":"GridLiveObjectKind","description":""},{"path":"/docs/types/GridLiveObjectListener","title":"GridLiveObjectListener","description":""},{"path":"/docs/types/GridLiveRef","title":"GridLiveRef","description":""},{"path":"/docs/types/GridLocale","title":"GridLocale","description":""},{"path":"/docs/types/GridLocaleChangedDetail","title":"GridLocaleChangedDetail","description":""},{"path":"/docs/types/GridLocaleObject","title":"GridLocaleObject","description":""},{"path":"/docs/types/GridLocalePresetName","title":"GridLocalePresetName","description":""},{"path":"/docs/types/GridMaybePromise","title":"GridMaybePromise","description":""},{"path":"/docs/types/GridMessageOverrides","title":"GridMessageOverrides","description":""},{"path":"/docs/types/GridMountedComponentLookup","title":"GridMountedComponentLookup","description":""},{"path":"/docs/types/GridMutationId","title":"GridMutationId","description":""},{"path":"/docs/types/GridNoteCell","title":"GridNoteCell","description":""},{"path":"/docs/types/GridNoteSaveResult","title":"GridNoteSaveResult","description":""},{"path":"/docs/types/GridPaginationChangedDetail","title":"GridPaginationChangedDetail","description":""},{"path":"/docs/types/GridPathValue","title":"GridPathValue","description":""},{"path":"/docs/types/GridPresenceChangedDetail","title":"GridPresenceChangedDetail","description":""},{"path":"/docs/types/GridQueryResult","title":"GridQueryResult","description":""},{"path":"/docs/types/GridQuickFilterChangedDetail","title":"GridQuickFilterChangedDetail","description":""},{"path":"/docs/types/GridRefInvalidationReason","title":"GridRefInvalidationReason","description":""},{"path":"/docs/types/GridRemoteEditAppliedDetail","title":"GridRemoteEditAppliedDetail","description":""},{"path":"/docs/types/GridRendererCellIdentity","title":"GridRendererCellIdentity","description":""},{"path":"/docs/types/GridRendererDefinition","title":"GridRendererDefinition","description":""},{"path":"/docs/types/GridRendererDiscovery","title":"GridRendererDiscovery","description":""},{"path":"/docs/types/GridRendererGui","title":"GridRendererGui","description":""},{"path":"/docs/types/GridRendererHost","title":"GridRendererHost","description":""},{"path":"/docs/types/GridRendererInstance","title":"GridRendererInstance","description":""},{"path":"/docs/types/GridRendererParams","title":"GridRendererParams","description":""},{"path":"/docs/types/GridRichSelectEditorOptions","title":"GridRichSelectEditorOptions","description":""},{"path":"/docs/types/GridRichSelectOption","title":"GridRichSelectOption","description":""},{"path":"/docs/types/GridRow","title":"GridRow","description":""},{"path":"/docs/types/GridRowClickedDetail","title":"GridRowClickedDetail","description":""},{"path":"/docs/types/GridRowDataChangedDetail","title":"GridRowDataChangedDetail","description":""},{"path":"/docs/types/GridRowHoverChangedDetail","title":"GridRowHoverChangedDetail","description":""},{"path":"/docs/types/GridRowId","title":"GridRowId","description":""},{"path":"/docs/types/GridRowRef","title":"GridRowRef","description":""},{"path":"/docs/types/GridRowTransaction","title":"GridRowTransaction","description":""},{"path":"/docs/types/GridSelectionChangedDetail","title":"GridSelectionChangedDetail","description":""},{"path":"/docs/types/GridSortChangedDetail","title":"GridSortChangedDetail","description":""},{"path":"/docs/types/GridSortDirection","title":"GridSortDirection","description":""},{"path":"/docs/types/GridStateApplyOptions","title":"GridStateApplyOptions","description":""},{"path":"/docs/types/GridSyncStatus","title":"GridSyncStatus","description":""},{"path":"/docs/types/GridTheme","title":"GridTheme","description":""},{"path":"/docs/types/GridThemeChangedDetail","title":"GridThemeChangedDetail","description":""},{"path":"/docs/types/GridThemeObject","title":"GridThemeObject","description":""},{"path":"/docs/types/GridThemePresetName","title":"GridThemePresetName","description":""},{"path":"/docs/types/GridTokenName","title":"GridTokenName","description":""},{"path":"/docs/types/GridTokenOverrides","title":"GridTokenOverrides","description":""},{"path":"/docs/types/GridUnavailableBehaviour","title":"GridUnavailableBehaviour","description":""},{"path":"/docs/types/GridWorkbookBinding","title":"GridWorkbookBinding","description":""},{"path":"/docs/types/GridWorkbookBindingChangeKind","title":"GridWorkbookBindingChangeKind","description":""},{"path":"/docs/types/GridWorkbookBindingChangedDetail","title":"GridWorkbookBindingChangedDetail","description":""},{"path":"/docs/types/GridWorkbookBindingErrorDetail","title":"GridWorkbookBindingErrorDetail","description":""},{"path":"/docs/types/GridWorkbookBindingReason","title":"GridWorkbookBindingReason","description":""},{"path":"/docs/types/GridXlsxImportedDetail","title":"GridXlsxImportedDetail","description":""},{"path":"/docs/types/GroupableLeaf","title":"GroupableLeaf","description":""},{"path":"/docs/types/InfiniteGetRowsParams","title":"InfiniteGetRowsParams","description":""},{"path":"/docs/types/InfiniteRowDatasource","title":"InfiniteRowDatasource","description":""},{"path":"/docs/types/LoadingMode","title":"LoadingMode","description":""},{"path":"/docs/types/MergedRangeInfo","title":"MergedRangeInfo","description":""},{"path":"/docs/types/MessageKey","title":"MessageKey","description":""},{"path":"/docs/types/MultiFilterPart","title":"MultiFilterPart","description":""},{"path":"/docs/types/MultiFilterSpec","title":"MultiFilterSpec","description":""},{"path":"/docs/types/NestedObject","title":"NestedObject","description":""},{"path":"/docs/types/NumberFilterOp","title":"NumberFilterOp","description":""},{"path":"/docs/types/NumberFilterSpec","title":"NumberFilterSpec","description":""},{"path":"/docs/types/PdfDownloadOptions","title":"PdfDownloadOptions","description":""},{"path":"/docs/types/PdfExportColumn","title":"PdfExportColumn","description":""},{"path":"/docs/types/PdfExportFontBytes","title":"PdfExportFontBytes","description":""},{"path":"/docs/types/PdfExportOptions","title":"PdfExportOptions","description":""},{"path":"/docs/types/PdfExportOrientation","title":"PdfExportOrientation","description":""},{"path":"/docs/types/PdfExportPageSize","title":"PdfExportPageSize","description":""},{"path":"/docs/types/PdfExportResult","title":"PdfExportResult","description":""},{"path":"/docs/types/PivotPanelAxis","title":"PivotPanelAxis","description":""},{"path":"/docs/types/PivotPanelChangeDetail","title":"PivotPanelChangeDetail","description":""},{"path":"/docs/types/PivotPanelChangeOperation","title":"PivotPanelChangeOperation","description":""},{"path":"/docs/types/PivotPanelConfig","title":"PivotPanelConfig","description":""},{"path":"/docs/types/PivotPanelLane","title":"PivotPanelLane","description":""},{"path":"/docs/types/PivotPanelLocation","title":"PivotPanelLocation","description":""},{"path":"/docs/types/RbacCellReadParams","title":"RbacCellReadParams","description":""},{"path":"/docs/types/RowClickButton","title":"RowClickButton","description":""},{"path":"/docs/types/RowClickModifiers","title":"RowClickModifiers","description":""},{"path":"/docs/types/RowDataTransaction","title":"RowDataTransaction","description":""},{"path":"/docs/types/RowSelectionMode","title":"RowSelectionMode","description":""},{"path":"/docs/types/RowsSlicesApplyResult","title":"RowsSlicesApplyResult","description":""},{"path":"/docs/types/ServerSideColumn","title":"ServerSideColumn","description":""},{"path":"/docs/types/ServerSideColumnRef","title":"ServerSideColumnRef","description":""},{"path":"/docs/types/ServerSideDatasource","title":"ServerSideDatasource","description":""},{"path":"/docs/types/ServerSideGetRowsParams","title":"ServerSideGetRowsParams","description":""},{"path":"/docs/types/ServerSideGetRowsResult","title":"ServerSideGetRowsResult","description":""},{"path":"/docs/types/ServerSidePivotResultColumn","title":"ServerSidePivotResultColumn","description":""},{"path":"/docs/types/SetFilterSpec","title":"SetFilterSpec","description":""},{"path":"/docs/types/SheetToRowDataOptions","title":"SheetToRowDataOptions","description":""},{"path":"/docs/types/SideBarPanelId","title":"SideBarPanelId","description":""},{"path":"/docs/types/SnapshotDiff","title":"SnapshotDiff","description":""},{"path":"/docs/types/SnapshotFieldChange","title":"SnapshotFieldChange","description":""},{"path":"/docs/types/SnapshotMeta","title":"SnapshotMeta","description":""},{"path":"/docs/types/SnapshotRowChange","title":"SnapshotRowChange","description":""},{"path":"/docs/types/SortModelEntry","title":"SortModelEntry","description":""},{"path":"/docs/types/StateUpdateSource","title":"StateUpdateSource","description":""},{"path":"/docs/types/StringKey","title":"StringKey","description":""},{"path":"/docs/types/SyChartConcreteType","title":"SyChartConcreteType","description":""},{"path":"/docs/types/SyGridActiveCell","title":"SyGridActiveCell","description":""},{"path":"/docs/types/SyGridActiveCellChangedEventDetail","title":"SyGridActiveCellChangedEventDetail","description":""},{"path":"/docs/types/SyGridAlignedColumnState","title":"SyGridAlignedColumnState","description":""},{"path":"/docs/types/SyGridAlignedGridsInput","title":"SyGridAlignedGridsInput","description":""},{"path":"/docs/types/SyGridAlignedGridsRefusalReason","title":"SyGridAlignedGridsRefusalReason","description":""},{"path":"/docs/types/SyGridAlignedGridsReport","title":"SyGridAlignedGridsReport","description":""},{"path":"/docs/types/SyGridAlignedGridsResult","title":"SyGridAlignedGridsResult","description":""},{"path":"/docs/types/SyGridAlignedMismatch","title":"SyGridAlignedMismatch","description":""},{"path":"/docs/types/SyGridAlignedMismatchReason","title":"SyGridAlignedMismatchReason","description":""},{"path":"/docs/types/SyGridAlignedPinSide","title":"SyGridAlignedPinSide","description":""},{"path":"/docs/types/SyGridAlignedStats","title":"SyGridAlignedStats","description":""},{"path":"/docs/types/SyGridApi","title":"SyGridApi","description":""},{"path":"/docs/types/SyGridApiPdfAutoFontOptions","title":"SyGridApiPdfAutoFontOptions","description":""},{"path":"/docs/types/SyGridApiPdfDownloadOptions","title":"SyGridApiPdfDownloadOptions","description":""},{"path":"/docs/types/SyGridApiPdfExportOptions","title":"SyGridApiPdfExportOptions","description":""},{"path":"/docs/types/SyGridApplyColumnStateOptions","title":"SyGridApplyColumnStateOptions","description":""},{"path":"/docs/types/SyGridBatchCommitOptions","title":"SyGridBatchCommitOptions","description":""},{"path":"/docs/types/SyGridBatchCommitReport","title":"SyGridBatchCommitReport","description":""},{"path":"/docs/types/SyGridBatchEditEndEventDetail","title":"SyGridBatchEditEndEventDetail","description":""},{"path":"/docs/types/SyGridBatchEditStartEventDetail","title":"SyGridBatchEditStartEventDetail","description":""},{"path":"/docs/types/SyGridBatchStartOptions","title":"SyGridBatchStartOptions","description":""},{"path":"/docs/types/SyGridCanonicalChange","title":"SyGridCanonicalChange","description":""},{"path":"/docs/types/SyGridCanonicalRange","title":"SyGridCanonicalRange","description":""},{"path":"/docs/types/SyGridCellClickedEventDetail","title":"SyGridCellClickedEventDetail","description":""},{"path":"/docs/types/SyGridCellDoubleClickedEventDetail","title":"SyGridCellDoubleClickedEventDetail","description":""},{"path":"/docs/types/SyGridCellEditingCancelledEventDetail","title":"SyGridCellEditingCancelledEventDetail","description":""},{"path":"/docs/types/SyGridCellEditingCommittedEventDetail","title":"SyGridCellEditingCommittedEventDetail","description":""},{"path":"/docs/types/SyGridCellEditingRequestedEventDetail","title":"SyGridCellEditingRequestedEventDetail","description":""},{"path":"/docs/types/SyGridCellRangeInput","title":"SyGridCellRangeInput","description":""},{"path":"/docs/types/SyGridCellSpanInfo","title":"SyGridCellSpanInfo","description":""},{"path":"/docs/types/SyGridCellTooltipTarget","title":"SyGridCellTooltipTarget","description":""},{"path":"/docs/types/SyGridCellValueChangedEventDetail","title":"SyGridCellValueChangedEventDetail","description":""},{"path":"/docs/types/SyGridChartAccessibleReport","title":"SyGridChartAccessibleReport","description":""},{"path":"/docs/types/SyGridChartCaptureResult","title":"SyGridChartCaptureResult","description":""},{"path":"/docs/types/SyGridChartCreateParams","title":"SyGridChartCreateParams","description":""},{"path":"/docs/types/SyGridChartCreateResult","title":"SyGridChartCreateResult","description":""},{"path":"/docs/types/SyGridChartCrossFilterAction","title":"SyGridChartCrossFilterAction","description":""},{"path":"/docs/types/SyGridChartCrossFilterResult","title":"SyGridChartCrossFilterResult","description":""},{"path":"/docs/types/SyGridChartDestroyResult","title":"SyGridChartDestroyResult","description":""},{"path":"/docs/types/SyGridChartEvent","title":"SyGridChartEvent","description":""},{"path":"/docs/types/SyGridChartExportRequest","title":"SyGridChartExportRequest","description":""},{"path":"/docs/types/SyGridChartExportResult","title":"SyGridChartExportResult","description":""},{"path":"/docs/types/SyGridChartFleetReport","title":"SyGridChartFleetReport","description":""},{"path":"/docs/types/SyGridChartMenuReport","title":"SyGridChartMenuReport","description":""},{"path":"/docs/types/SyGridChartPanelReport","title":"SyGridChartPanelReport","description":""},{"path":"/docs/types/SyGridChartPermissions","title":"SyGridChartPermissions","description":""},{"path":"/docs/types/SyGridChartProperties","title":"SyGridChartProperties","description":""},{"path":"/docs/types/SyGridChartReport","title":"SyGridChartReport","description":""},{"path":"/docs/types/SyGridChartRestoreResult","title":"SyGridChartRestoreResult","description":""},{"path":"/docs/types/SyGridChartSourceInput","title":"SyGridChartSourceInput","description":""},{"path":"/docs/types/SyGridChartSyncMutation","title":"SyGridChartSyncMutation","description":""},{"path":"/docs/types/SyGridChartSyncReport","title":"SyGridChartSyncReport","description":""},{"path":"/docs/types/SyGridChartUpdatePatch","title":"SyGridChartUpdatePatch","description":""},{"path":"/docs/types/SyGridChartUpdateResult","title":"SyGridChartUpdateResult","description":""},{"path":"/docs/types/SyGridClipboardPastedEventDetail","title":"SyGridClipboardPastedEventDetail","description":""},{"path":"/docs/types/SyGridColSpanParams","title":"SyGridColSpanParams","description":""},{"path":"/docs/types/SyGridColSpanRejection","title":"SyGridColSpanRejection","description":""},{"path":"/docs/types/SyGridCollabConnectOptions","title":"SyGridCollabConnectOptions","description":""},{"path":"/docs/types/SyGridColumnReorderedEventDetail","title":"SyGridColumnReorderedEventDetail","description":""},{"path":"/docs/types/SyGridColumnResizedEventDetail","title":"SyGridColumnResizedEventDetail","description":""},{"path":"/docs/types/SyGridColumnState","title":"SyGridColumnState","description":""},{"path":"/docs/types/SyGridColumnVisibilityChangedEventDetail","title":"SyGridColumnVisibilityChangedEventDetail","description":""},{"path":"/docs/types/SyGridCsvImportOptions","title":"SyGridCsvImportOptions","description":""},{"path":"/docs/types/SyGridCustomEvent","title":"SyGridCustomEvent","description":""},{"path":"/docs/types/SyGridDisplayRowDecision","title":"SyGridDisplayRowDecision","description":""},{"path":"/docs/types/SyGridDisplayRowFeature","title":"SyGridDisplayRowFeature","description":""},{"path":"/docs/types/SyGridDisplayRowIdentity","title":"SyGridDisplayRowIdentity","description":""},{"path":"/docs/types/SyGridDisplayRowInfo","title":"SyGridDisplayRowInfo","description":""},{"path":"/docs/types/SyGridDisplayRowKind","title":"SyGridDisplayRowKind","description":""},{"path":"/docs/types/SyGridDisplayRowPolicy","title":"SyGridDisplayRowPolicy","description":""},{"path":"/docs/types/SyGridDisplayRowRefusal","title":"SyGridDisplayRowRefusal","description":""},{"path":"/docs/types/SyGridDragOrphanCause","title":"SyGridDragOrphanCause","description":""},{"path":"/docs/types/SyGridDragSafetyReport","title":"SyGridDragSafetyReport","description":""},{"path":"/docs/types/SyGridDropZoneInput","title":"SyGridDropZoneInput","description":""},{"path":"/docs/types/SyGridDropZoneRegistration","title":"SyGridDropZoneRegistration","description":""},{"path":"/docs/types/SyGridDropZonesReport","title":"SyGridDropZonesReport","description":""},{"path":"/docs/types/SyGridEditRejectedCell","title":"SyGridEditRejectedCell","description":""},{"path":"/docs/types/SyGridEditSource","title":"SyGridEditSource","description":""},{"path":"/docs/types/SyGridEventListener","title":"SyGridEventListener","description":""},{"path":"/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""},{"path":"/docs/types/SyGridExcelDownloadOptions","title":"SyGridExcelDownloadOptions","description":""},{"path":"/docs/types/SyGridExcelGenerateOptions","title":"SyGridExcelGenerateOptions","description":""},{"path":"/docs/types/SyGridFillEndEventDetail","title":"SyGridFillEndEventDetail","description":""},{"path":"/docs/types/SyGridFillRangeOptions","title":"SyGridFillRangeOptions","description":""},{"path":"/docs/types/SyGridFillRangeReport","title":"SyGridFillRangeReport","description":""},{"path":"/docs/types/SyGridFillRejectedCell","title":"SyGridFillRejectedCell","description":""},{"path":"/docs/types/SyGridFillStartEventDetail","title":"SyGridFillStartEventDetail","description":""},{"path":"/docs/types/SyGridFilterSlice","title":"SyGridFilterSlice","description":""},{"path":"/docs/types/SyGridFocusSlice","title":"SyGridFocusSlice","description":""},{"path":"/docs/types/SyGridFullWidthContainer","title":"SyGridFullWidthContainer","description":""},{"path":"/docs/types/SyGridFullWidthLayoutReport","title":"SyGridFullWidthLayoutReport","description":""},{"path":"/docs/types/SyGridFullWidthMode","title":"SyGridFullWidthMode","description":""},{"path":"/docs/types/SyGridFullWidthRefusalReason","title":"SyGridFullWidthRefusalReason","description":""},{"path":"/docs/types/SyGridFullWidthRenderParams","title":"SyGridFullWidthRenderParams","description":""},{"path":"/docs/types/SyGridFullWidthRenderer","title":"SyGridFullWidthRenderer","description":""},{"path":"/docs/types/SyGridFullWidthRowInfo","title":"SyGridFullWidthRowInfo","description":""},{"path":"/docs/types/SyGridFullWidthRowKind","title":"SyGridFullWidthRowKind","description":""},{"path":"/docs/types/SyGridFullWidthSegment","title":"SyGridFullWidthSegment","description":""},{"path":"/docs/types/SyGridGroupCheckEvidence","title":"SyGridGroupCheckEvidence","description":""},{"path":"/docs/types/SyGridGroupCheckState","title":"SyGridGroupCheckState","description":""},{"path":"/docs/types/SyGridGroupCheckStateEntry","title":"SyGridGroupCheckStateEntry","description":""},{"path":"/docs/types/SyGridGroupCheckStatesOptions","title":"SyGridGroupCheckStatesOptions","description":""},{"path":"/docs/types/SyGridGroupCheckStatesReport","title":"SyGridGroupCheckStatesReport","description":""},{"path":"/docs/types/SyGridGroupCheckUnavailableReason","title":"SyGridGroupCheckUnavailableReason","description":""},{"path":"/docs/types/SyGridGroupDescendantScope","title":"SyGridGroupDescendantScope","description":""},{"path":"/docs/types/SyGridHistoryChangedEventDetail","title":"SyGridHistoryChangedEventDetail","description":""},{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""},{"path":"/docs/types/SyGridPaginationSlice","title":"SyGridPaginationSlice","description":""},{"path":"/docs/types/SyGridPdfAutoFontOptions","title":"SyGridPdfAutoFontOptions","description":""},{"path":"/docs/types/SyGridPdfDownloadOptions","title":"SyGridPdfDownloadOptions","description":""},{"path":"/docs/types/SyGridPdfExportOptions","title":"SyGridPdfExportOptions","description":""},{"path":"/docs/types/SyGridPendingBatchCell","title":"SyGridPendingBatchCell","description":""},{"path":"/docs/types/SyGridPinnedRow","title":"SyGridPinnedRow","description":""},{"path":"/docs/types/SyGridPinnedRowBand","title":"SyGridPinnedRowBand","description":""},{"path":"/docs/types/SyGridPinnedRowChange","title":"SyGridPinnedRowChange","description":""},{"path":"/docs/types/SyGridPinnedRowFeature","title":"SyGridPinnedRowFeature","description":""},{"path":"/docs/types/SyGridPinnedRowInfo","title":"SyGridPinnedRowInfo","description":""},{"path":"/docs/types/SyGridPinnedRowInput","title":"SyGridPinnedRowInput","description":""},{"path":"/docs/types/SyGridPinnedRowPolicyDecision","title":"SyGridPinnedRowPolicyDecision","description":""},{"path":"/docs/types/SyGridPinnedRowRejection","title":"SyGridPinnedRowRejection","description":""},{"path":"/docs/types/SyGridPinnedRowRejectionReason","title":"SyGridPinnedRowRejectionReason","description":""},{"path":"/docs/types/SyGridPinnedRowSection","title":"SyGridPinnedRowSection","description":""},{"path":"/docs/types/SyGridPinnedRowSetInput","title":"SyGridPinnedRowSetInput","description":""},{"path":"/docs/types/SyGridPinnedRowsChangedDetail","title":"SyGridPinnedRowsChangedDetail","description":""},{"path":"/docs/types/SyGridPinnedRowsReport","title":"SyGridPinnedRowsReport","description":""},{"path":"/docs/types/SyGridPinnedRowsResult","title":"SyGridPinnedRowsResult","description":""},{"path":"/docs/types/SyGridPinnedRowsSlice","title":"SyGridPinnedRowsSlice","description":""},{"path":"/docs/types/SyGridPivotAxes","title":"SyGridPivotAxes","description":""},{"path":"/docs/types/SyGridPivotColumnIdentity","title":"SyGridPivotColumnIdentity","description":""},{"path":"/docs/types/SyGridPivotColumnKind","title":"SyGridPivotColumnKind","description":""},{"path":"/docs/types/SyGridPivotColumnMove","title":"SyGridPivotColumnMove","description":""},{"path":"/docs/types/SyGridPivotColumnsChangedDetail","title":"SyGridPivotColumnsChangedDetail","description":""},{"path":"/docs/types/SyGridPivotCombinationConflictDetail","title":"SyGridPivotCombinationConflictDetail","description":""},{"path":"/docs/types/SyGridPivotCombinationEntry","title":"SyGridPivotCombinationEntry","description":""},{"path":"/docs/types/SyGridPivotCombinationFeature","title":"SyGridPivotCombinationFeature","description":""},{"path":"/docs/types/SyGridPivotCombinationReport","title":"SyGridPivotCombinationReport","description":""},{"path":"/docs/types/SyGridPivotCombinationSupport","title":"SyGridPivotCombinationSupport","description":""},{"path":"/docs/types/SyGridPivotCombinationWinner","title":"SyGridPivotCombinationWinner","description":""},{"path":"/docs/types/SyGridPivotSecondaryColumn","title":"SyGridPivotSecondaryColumn","description":""},{"path":"/docs/types/SyGridPivotSecondaryColumns","title":"SyGridPivotSecondaryColumns","description":""},{"path":"/docs/types/SyGridPreDestroyedDetail","title":"SyGridPreDestroyedDetail","description":""},{"path":"/docs/types/SyGridRemoteEditAppliedEventDetail","title":"SyGridRemoteEditAppliedEventDetail","description":""},{"path":"/docs/types/SyGridReparentAtomicity","title":"SyGridReparentAtomicity","description":""},{"path":"/docs/types/SyGridReparentEntry","title":"SyGridReparentEntry","description":""},{"path":"/docs/types/SyGridReparentRefusalReason","title":"SyGridReparentRefusalReason","description":""},{"path":"/docs/types/SyGridReparentRequest","title":"SyGridReparentRequest","description":""},{"path":"/docs/types/SyGridReparentResult","title":"SyGridReparentResult","description":""},{"path":"/docs/types/SyGridRowClickButton","title":"SyGridRowClickButton","description":""},{"path":"/docs/types/SyGridRowClickModifiers","title":"SyGridRowClickModifiers","description":""},{"path":"/docs/types/SyGridRowClickedEventDetail","title":"SyGridRowClickedEventDetail","description":""},{"path":"/docs/types/SyGridRowDataChangedEventDetail","title":"SyGridRowDataChangedEventDetail","description":""},{"path":"/docs/types/SyGridRowDragCancelDetail","title":"SyGridRowDragCancelDetail","description":""},{"path":"/docs/types/SyGridRowDragEndDetail","title":"SyGridRowDragEndDetail","description":""},{"path":"/docs/types/SyGridRowDragEndReason","title":"SyGridRowDragEndReason","description":""},{"path":"/docs/types/SyGridRowDragEventDetail","title":"SyGridRowDragEventDetail","description":""},{"path":"/docs/types/SyGridRowDragItem","title":"SyGridRowDragItem","description":""},{"path":"/docs/types/SyGridRowDragSessionReport","title":"SyGridRowDragSessionReport","description":""},{"path":"/docs/types/SyGridRowDragStartInput","title":"SyGridRowDragStartInput","description":""},{"path":"/docs/types/SyGridRowDragStartResult","title":"SyGridRowDragStartResult","description":""},{"path":"/docs/types/SyGridRowDragTarget","title":"SyGridRowDragTarget","description":""},{"path":"/docs/types/SyGridRowDropPosition","title":"SyGridRowDropPosition","description":""},{"path":"/docs/types/SyGridRowEditReport","title":"SyGridRowEditReport","description":""},{"path":"/docs/types/SyGridRowEditStartEventDetail","title":"SyGridRowEditStartEventDetail","description":""},{"path":"/docs/types/SyGridRowEditStopEventDetail","title":"SyGridRowEditStopEventDetail","description":""},{"path":"/docs/types/SyGridRowId","title":"SyGridRowId","description":""},{"path":"/docs/types/SyGridRowLayoutRefusedDetail","title":"SyGridRowLayoutRefusedDetail","description":""},{"path":"/docs/types/SyGridRowLayoutStatus","title":"SyGridRowLayoutStatus","description":""},{"path":"/docs/types/SyGridRowSpanParams","title":"SyGridRowSpanParams","description":""},{"path":"/docs/types/SyGridRowSpanRejection","title":"SyGridRowSpanRejection","description":""},{"path":"/docs/types/SyGridRowSpanReport","title":"SyGridRowSpanReport","description":""},{"path":"/docs/types/SyGridRowTransactionResult","title":"SyGridRowTransactionResult","description":""},{"path":"/docs/types/SyGridRowTransferEntry","title":"SyGridRowTransferEntry","description":""},{"path":"/docs/types/SyGridRowTransferReport","title":"SyGridRowTransferReport","description":""},{"path":"/docs/types/SyGridRowValueChangedEventDetail","title":"SyGridRowValueChangedEventDetail","description":""},{"path":"/docs/types/SyGridRowsTransferredDetail","title":"SyGridRowsTransferredDetail","description":""},{"path":"/docs/types/SyGridScrollSlice","title":"SyGridScrollSlice","description":""},{"path":"/docs/types/SyGridSelectionChangedEventDetail","title":"SyGridSelectionChangedEventDetail","description":""},{"path":"/docs/types/SyGridServerBlockSnapshot","title":"SyGridServerBlockSnapshot","description":""},{"path":"/docs/types/SyGridServerCacheSnapshot","title":"SyGridServerCacheSnapshot","description":""},{"path":"/docs/types/SyGridServerFlushCause","title":"SyGridServerFlushCause","description":""},{"path":"/docs/types/SyGridServerFlushReport","title":"SyGridServerFlushReport","description":""},{"path":"/docs/types/SyGridServerFlushStatus","title":"SyGridServerFlushStatus","description":""},{"path":"/docs/types/SyGridServerGroupChildrenResult","title":"SyGridServerGroupChildrenResult","description":""},{"path":"/docs/types/SyGridServerGroupToggledNode","title":"SyGridServerGroupToggledNode","description":""},{"path":"/docs/types/SyGridServerPivotColumnAudit","title":"SyGridServerPivotColumnAudit","description":""},{"path":"/docs/types/SyGridServerPivotColumnDescriptor","title":"SyGridServerPivotColumnDescriptor","description":""},{"path":"/docs/types/SyGridServerPivotColumnsReport","title":"SyGridServerPivotColumnsReport","description":""},{"path":"/docs/types/SyGridServerPivotUsageDisposition","title":"SyGridServerPivotUsageDisposition","description":""},{"path":"/docs/types/SyGridServerRefreshInput","title":"SyGridServerRefreshInput","description":""},{"path":"/docs/types/SyGridServerRefreshMode","title":"SyGridServerRefreshMode","description":""},{"path":"/docs/types/SyGridServerRefreshResult","title":"SyGridServerRefreshResult","description":""},{"path":"/docs/types/SyGridServerRefreshStatus","title":"SyGridServerRefreshStatus","description":""},{"path":"/docs/types/SyGridServerSelectAllResult","title":"SyGridServerSelectAllResult","description":""},{"path":"/docs/types/SyGridServerSelectionModel","title":"SyGridServerSelectionModel","description":""},{"path":"/docs/types/SyGridServerSelectionSetResult","title":"SyGridServerSelectionSetResult","description":""},{"path":"/docs/types/SyGridServerSelectionSetStatus","title":"SyGridServerSelectionSetStatus","description":""},{"path":"/docs/types/SyGridServerSelectionState","title":"SyGridServerSelectionState","description":""},{"path":"/docs/types/SyGridServerSelectionStatus","title":"SyGridServerSelectionStatus","description":""},{"path":"/docs/types/SyGridServerStateReport","title":"SyGridServerStateReport","description":""},{"path":"/docs/types/SyGridServerStoreSnapshot","title":"SyGridServerStoreSnapshot","description":""},{"path":"/docs/types/SyGridServerStoreStatus","title":"SyGridServerStoreStatus","description":""},{"path":"/docs/types/SyGridServerStoreUpdateKind","title":"SyGridServerStoreUpdateKind","description":""},{"path":"/docs/types/SyGridServerStoreUpdatedDetail","title":"SyGridServerStoreUpdatedDetail","description":""},{"path":"/docs/types/SyGridServerTransactionEnqueue","title":"SyGridServerTransactionEnqueue","description":""},{"path":"/docs/types/SyGridServerTransactionEnqueueStatus","title":"SyGridServerTransactionEnqueueStatus","description":""},{"path":"/docs/types/SyGridServerTransactionInput","title":"SyGridServerTransactionInput","description":""},{"path":"/docs/types/SyGridServerTransactionResult","title":"SyGridServerTransactionResult","description":""},{"path":"/docs/types/SyGridServerTransactionSettlement","title":"SyGridServerTransactionSettlement","description":""},{"path":"/docs/types/SyGridServerTransactionStatus","title":"SyGridServerTransactionStatus","description":""},{"path":"/docs/types/SyGridSideBarSlice","title":"SyGridSideBarSlice","description":""},{"path":"/docs/types/SyGridSortChangedEventDetail","title":"SyGridSortChangedEventDetail","description":""},{"path":"/docs/types/SyGridSortModelEntry","title":"SyGridSortModelEntry","description":""},{"path":"/docs/types/SyGridSpanAddress","title":"SyGridSpanAddress","description":""},{"path":"/docs/types/SyGridSpanCombination","title":"SyGridSpanCombination","description":""},{"path":"/docs/types/SyGridSpanConflict","title":"SyGridSpanConflict","description":""},{"path":"/docs/types/SyGridSpanConflictEventDetail","title":"SyGridSpanConflictEventDetail","description":""},{"path":"/docs/types/SyGridSpanFeature","title":"SyGridSpanFeature","description":""},{"path":"/docs/types/SyGridSpanInteractionQuery","title":"SyGridSpanInteractionQuery","description":""},{"path":"/docs/types/SyGridSpanInteractionReport","title":"SyGridSpanInteractionReport","description":""},{"path":"/docs/types/SyGridSpillApplyInput","title":"SyGridSpillApplyInput","description":""},{"path":"/docs/types/SyGridSpillApplyResult","title":"SyGridSpillApplyResult","description":""},{"path":"/docs/types/SyGridSpillClearResult","title":"SyGridSpillClearResult","description":""},{"path":"/docs/types/SyGridSpillCollision","title":"SyGridSpillCollision","description":""},{"path":"/docs/types/SyGridSpillRangeReport","title":"SyGridSpillRangeReport","description":""},{"path":"/docs/types/SyGridSpillRefusalReason","title":"SyGridSpillRefusalReason","description":""},{"path":"/docs/types/SyGridSpillReport","title":"SyGridSpillReport","description":""},{"path":"/docs/types/SyGridSpillTarget","title":"SyGridSpillTarget","description":""},{"path":"/docs/types/SyGridSpillUndoResult","title":"SyGridSpillUndoResult","description":""},{"path":"/docs/types/SyGridState","title":"SyGridState","description":""},{"path":"/docs/types/SyGridStateApplyReport","title":"SyGridStateApplyReport","description":""},{"path":"/docs/types/SyGridStateCaptureReport","title":"SyGridStateCaptureReport","description":""},{"path":"/docs/types/SyGridStateEnvelopeIssue","title":"SyGridStateEnvelopeIssue","description":""},{"path":"/docs/types/SyGridStateEnvelopeIssueCode","title":"SyGridStateEnvelopeIssueCode","description":""},{"path":"/docs/types/SyGridStateSliceKey","title":"SyGridStateSliceKey","description":""},{"path":"/docs/types/SyGridStateUpdatedDetail","title":"SyGridStateUpdatedDetail","description":""},{"path":"/docs/types/SyGridStateVersion","title":"SyGridStateVersion","description":""},{"path":"/docs/types/SyGridTreeReparentedDetail","title":"SyGridTreeReparentedDetail","description":""},{"path":"/docs/types/SyGridWorkbookCellVerdict","title":"SyGridWorkbookCellVerdict","description":""},{"path":"/docs/types/SyGridWorkbookFlushCause","title":"SyGridWorkbookFlushCause","description":""},{"path":"/docs/types/SyGridWorkbookFlushReport","title":"SyGridWorkbookFlushReport","description":""},{"path":"/docs/types/SyGridWorkbookInactiveReason","title":"SyGridWorkbookInactiveReason","description":""},{"path":"/docs/types/SyGridWorkbookIntegrityCell","title":"SyGridWorkbookIntegrityCell","description":""},{"path":"/docs/types/SyGridWorkbookIntegrityReport","title":"SyGridWorkbookIntegrityReport","description":""},{"path":"/docs/types/SyGridWorkbookPropagationDetail","title":"SyGridWorkbookPropagationDetail","description":""},{"path":"/docs/types/SyGridWorkbookPropagationState","title":"SyGridWorkbookPropagationState","description":""},{"path":"/docs/types/SyGridWorkbookPublicationStamp","title":"SyGridWorkbookPublicationStamp","description":""},{"path":"/docs/types/SyGridWorkbookRegistrationFailure","title":"SyGridWorkbookRegistrationFailure","description":""},{"path":"/docs/types/SyGridWorkbookRegistrationFailureCode","title":"SyGridWorkbookRegistrationFailureCode","description":""},{"path":"/docs/types/SyGridWorkbookSnapshotCell","title":"SyGridWorkbookSnapshotCell","description":""},{"path":"/docs/types/SyGridWorkbookSnapshotReport","title":"SyGridWorkbookSnapshotReport","description":""},{"path":"/docs/types/SyGridXlsxImportOptions","title":"SyGridXlsxImportOptions","description":""},{"path":"/docs/types/TextFilterOp","title":"TextFilterOp","description":""},{"path":"/docs/types/TextFilterSpec","title":"TextFilterSpec","description":""},{"path":"/docs/types/UiRestorePlan","title":"UiRestorePlan","description":""},{"path":"/docs/types/UiUnavailableEntry","title":"UiUnavailableEntry","description":""},{"path":"/docs/types/ValidationRule","title":"ValidationRule","description":""},{"path":"/docs/types/ValidationRuleType","title":"ValidationRuleType","description":""},{"path":"/docs/types/ValueFormatterParams","title":"ValueFormatterParams","description":""},{"path":"/docs/types/ValueGetterParams","title":"ValueGetterParams","description":""},{"path":"/docs/types/ValueParserParams","title":"ValueParserParams","description":""},{"path":"/docs/types/ValueSetterParams","title":"ValueSetterParams","description":""},{"path":"/docs/types/ViewportDatasource","title":"ViewportDatasource","description":""},{"path":"/docs/types/ViewportRequestContext","title":"ViewportRequestContext","description":""},{"path":"/docs/types/WorkbookRegistryErrorCode","title":"WorkbookRegistryErrorCode","description":""},{"path":"/docs/types/XlsxAlignment","title":"XlsxAlignment","description":""},{"path":"/docs/types/XlsxBorder","title":"XlsxBorder","description":""},{"path":"/docs/types/XlsxBorderEdge","title":"XlsxBorderEdge","description":""},{"path":"/docs/types/XlsxBorderStyle","title":"XlsxBorderStyle","description":""},{"path":"/docs/types/XlsxCell","title":"XlsxCell","description":""},{"path":"/docs/types/XlsxCellStyle","title":"XlsxCellStyle","description":""},{"path":"/docs/types/XlsxCellValue","title":"XlsxCellValue","description":""},{"path":"/docs/types/XlsxCellXf","title":"XlsxCellXf","description":""},{"path":"/docs/types/XlsxColumnDef","title":"XlsxColumnDef","description":""},{"path":"/docs/types/XlsxDefinedName","title":"XlsxDefinedName","description":""},{"path":"/docs/types/XlsxFill","title":"XlsxFill","description":""},{"path":"/docs/types/XlsxFont","title":"XlsxFont","description":""},{"path":"/docs/types/XlsxGridSnapshot","title":"XlsxGridSnapshot","description":""},{"path":"/docs/types/XlsxImportResult","title":"XlsxImportResult","description":""},{"path":"/docs/types/XlsxImportSheet","title":"XlsxImportSheet","description":""},{"path":"/docs/types/XlsxRow","title":"XlsxRow","description":""},{"path":"/docs/types/XlsxSheet","title":"XlsxSheet","description":""},{"path":"/docs/types/XlsxStyleSheet","title":"XlsxStyleSheet","description":""},{"path":"/docs/types/XlsxWorkbook","title":"XlsxWorkbook","description":""},{"path":"/docs/types/XlsxWorkbookSheet","title":"XlsxWorkbookSheet","description":""}]}]}]},{"path":"/docs/types/ActiveCell","kind":"type","title":"ActiveCell","summary":"Fields, allowed values, and APIs that use ActiveCell.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface ActiveCell {\n  rowIndex: number;\n  colIndex: number;\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridActiveCellChangedDetail","title":"GridActiveCellChangedDetail","description":""}]}]}]},{"path":"/docs/types/ActiveFilter","kind":"type","title":"ActiveFilter","summary":"Fields, allowed values, and APIs that use ActiveFilter.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/ActiveFilterMap","title":"ActiveFilterMap","description":""},{"path":"/docs/types/FilterSliceApplyResult","title":"FilterSliceApplyResult","description":""},{"path":"/docs/types/GridFilterChangedDetail","title":"GridFilterChangedDetail","description":""},{"path":"/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/TextFilterSpec","title":"TextFilterSpec","description":""},{"path":"/docs/types/NumberFilterSpec","title":"NumberFilterSpec","description":""},{"path":"/docs/types/DateFilterSpec","title":"DateFilterSpec","description":""},{"path":"/docs/types/SetFilterSpec","title":"SetFilterSpec","description":""},{"path":"/docs/types/MultiFilterSpec","title":"MultiFilterSpec","description":""}]}]}]},{"path":"/docs/types/ActiveFilterMap","kind":"type","title":"ActiveFilterMap","summary":"Fields, allowed values, and APIs that use ActiveFilterMap.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type ActiveFilterMap = Readonly<Record<string, ActiveFilter>>;","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChartCrossFilterDelta","title":"GridChartCrossFilterDelta","description":""},{"path":"/docs/types/GridFilterChangedDetail","title":"GridFilterChangedDetail","description":""},{"path":"/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/ActiveFilter","title":"ActiveFilter","description":""}]}]}]},{"path":"/docs/types/ActivePagination","kind":"type","title":"ActivePagination","summary":"Fields, allowed values, and APIs that use ActivePagination.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface ActivePagination {\n  readonly pageIndex: number;\n  readonly pageSize: number;\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridPaginationChangedDetail","title":"GridPaginationChangedDetail","description":""},{"path":"/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]}]},{"path":"/docs/types/ActiveSort","kind":"type","title":"ActiveSort","summary":"Fields, allowed values, and APIs that use ActiveSort.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface ActiveSort {\n  field: string;\n  direction: 'asc' | 'desc';\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridSortChangedDetail","title":"GridSortChangedDetail","description":""}]}]}]},{"path":"/docs/types/ApplyColumnStateOptions","kind":"type","title":"ApplyColumnStateOptions","summary":"Fields, allowed values, and APIs that use ApplyColumnStateOptions.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface ApplyColumnStateOptions {\n  applyOrder?: boolean;\n}","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/applyColumnState","title":"applyColumnState","description":"Restores saved column state. Verify that IDs match current columns."}]}]}]},{"path":"/docs/types/ApplyColumnStateResult","kind":"type","title":"ApplyColumnStateResult","summary":"Fields, allowed values, and APIs that use ApplyColumnStateResult.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/ColumnsSliceApplyResult","title":"ColumnsSliceApplyResult","description":""}]}]}]},{"path":"/docs/types/ApplyRowTransactionResult","kind":"type","title":"ApplyRowTransactionResult","summary":"Fields, allowed values, and APIs that use ApplyRowTransactionResult.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/applyTransaction","title":"applyTransaction","description":"Adds, updates, and removes source rows by stable ID. Inspect results separately from app server saving."}]}]}]},{"path":"/docs/types/AuditCellEntry","kind":"type","title":"AuditCellEntry","summary":"Fields, allowed values, and APIs that use AuditCellEntry.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/AuditEntry","title":"AuditEntry","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/AuditEntryCommon","title":"AuditEntryCommon","description":""}]}]}]},{"path":"/docs/types/AuditEntry","kind":"type","title":"AuditEntry","summary":"Fields, allowed values, and APIs that use AuditEntry.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type AuditEntry = AuditRowsEntry | AuditCellEntry | AuditSelectionEntry | AuditHistoryEntry;","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/getAuditLog","title":"getAuditLog","description":"Reads audit records as an array, optionally filtered by type, sequence, or time. Returns an empty array when recording is disabled."},{"path":"/docs/events/auditLogChanged","title":"auditLogChanged","description":"Emitted when an audit record is added. Read entry to connect your app's retention flow."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/AuditLogFilter","title":"AuditLogFilter","description":""},{"path":"/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""},{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/AuditRowsEntry","title":"AuditRowsEntry","description":""},{"path":"/docs/types/AuditCellEntry","title":"AuditCellEntry","description":""},{"path":"/docs/types/AuditSelectionEntry","title":"AuditSelectionEntry","description":""},{"path":"/docs/types/AuditHistoryEntry","title":"AuditHistoryEntry","description":""}]}]}]},{"path":"/docs/types/AuditEntryCommon","kind":"type","title":"AuditEntryCommon","summary":"Fields, allowed values, and APIs that use AuditEntryCommon.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"interface AuditEntryCommon {\n  readonly seq: number;\n  readonly ts: number;\n  readonly source: AuditSource;\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/AuditCellEntry","title":"AuditCellEntry","description":""},{"path":"/docs/types/AuditHistoryEntry","title":"AuditHistoryEntry","description":""},{"path":"/docs/types/AuditRowsEntry","title":"AuditRowsEntry","description":""},{"path":"/docs/types/AuditSelectionEntry","title":"AuditSelectionEntry","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/AuditSource","title":"AuditSource","description":""}]}]}]},{"path":"/docs/types/AuditHistoryEntry","kind":"type","title":"AuditHistoryEntry","summary":"Fields, allowed values, and APIs that use AuditHistoryEntry.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/AuditEntry","title":"AuditEntry","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/AuditEntryCommon","title":"AuditEntryCommon","description":""}]}]}]},{"path":"/docs/types/AuditLogFilter","kind":"type","title":"AuditLogFilter","summary":"Fields, allowed values, and APIs that use AuditLogFilter.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/getAuditLog","title":"getAuditLog","description":"Reads audit records as an array, optionally filtered by type, sequence, or time. Returns an empty array when recording is disabled."},{"path":"/docs/methods/getAuditLogAsCsv","title":"getAuditLogAsCsv","description":"Converts audit records to CSV text for inspection or transfer without downloading a file."},{"path":"/docs/methods/getAuditLogAsJson","title":"getAuditLogAsJson","description":"Reads audit records as a structured JSON array string. Use pretty for readable indentation."},{"path":"/docs/methods/exportAuditLogAsCsv","title":"exportAuditLogAsCsv","description":"Downloads selected audit records as a CSV file."},{"path":"/docs/methods/exportAuditLogAsJson","title":"exportAuditLogAsJson","description":"Downloads selected audit records as a JSON file."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/AuditEntry","title":"AuditEntry","description":""},{"path":"/docs/types/AuditSource","title":"AuditSource","description":""}]}]}]},{"path":"/docs/types/AuditRowsEntry","kind":"type","title":"AuditRowsEntry","summary":"Fields, allowed values, and APIs that use AuditRowsEntry.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/AuditEntry","title":"AuditEntry","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/AuditEntryCommon","title":"AuditEntryCommon","description":""}]}]}]},{"path":"/docs/types/AuditSelectionEntry","kind":"type","title":"AuditSelectionEntry","summary":"Fields, allowed values, and APIs that use AuditSelectionEntry.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/AuditEntry","title":"AuditEntry","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/AuditEntryCommon","title":"AuditEntryCommon","description":""}]}]}]},{"path":"/docs/types/AuditSource","kind":"type","title":"AuditSource","summary":"Fields, allowed values, and APIs that use AuditSource.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type AuditSource = 'local' | 'remote' | 'undo' | 'redo' | 'clipboard';","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/AuditEntryCommon","title":"AuditEntryCommon","description":""},{"path":"/docs/types/AuditLogFilter","title":"AuditLogFilter","description":""}]}]}]},{"path":"/docs/types/CanEditCellFn","kind":"type","title":"CanEditCellFn","summary":"Fields, allowed values, and APIs that use CanEditCellFn.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type CanEditCellFn = (params: RbacCellReadParams) => boolean;","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/options/canEditCell","title":"canEditCell","description":"Determines edit permission from the row, column, current value, and app permissions."}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/RbacCellReadParams","title":"RbacCellReadParams","description":""}]}]}]},{"path":"/docs/types/CanReadCellFn","kind":"type","title":"CanReadCellFn","summary":"Fields, allowed values, and APIs that use CanReadCellFn.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type CanReadCellFn = (params: RbacCellReadParams) => boolean;","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/options/canReadCell","title":"canReadCell","description":"Synchronous permission callback determining whether a cell can be read. Use alongside server access control."}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/RbacCellReadParams","title":"RbacCellReadParams","description":""}]}]}]},{"path":"/docs/types/CanonicalCell","kind":"type","title":"CanonicalCell","summary":"Fields, allowed values, and APIs that use CanonicalCell.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface CanonicalCell {\n  readonly row: number;\n  readonly col: number;\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/CanonicalRange","title":"CanonicalRange","description":""}]}]}]},{"path":"/docs/types/CanonicalRange","kind":"type","title":"CanonicalRange","summary":"Fields, allowed values, and APIs that use CanonicalRange.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface CanonicalRange {\n  readonly id: number;\n  readonly anchor: CanonicalCell;\n  readonly focus: CanonicalCell;\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/CanonicalRangeChange","title":"CanonicalRangeChange","description":""},{"path":"/docs/types/SyGridCanonicalRange","title":"SyGridCanonicalRange","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/CanonicalCell","title":"CanonicalCell","description":""}]}]}]},{"path":"/docs/types/CanonicalRangeChange","kind":"type","title":"CanonicalRangeChange","summary":"Fields, allowed values, and APIs that use CanonicalRangeChange.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridCanonicalChange","title":"SyGridCanonicalChange","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/CanonicalRange","title":"CanonicalRange","description":""}]}]}]},{"path":"/docs/types/CellCallbackParams","kind":"type","title":"CellCallbackParams","summary":"Fields, allowed values, and APIs that use CellCallbackParams.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/columns/cellClass","title":"cellClass","description":"CSS classes for the cell or a callback returning classes."},{"path":"/docs/columns/cellClassRules","title":"cellClassRules","description":"Rules for applying CSS classes conditionally."},{"path":"/docs/columns/cellStyle","title":"cellStyle","description":"Inline style object, callback, or array of these for the cell."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/ColumnDef","title":"ColumnDef","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridData","title":"GridData","description":""},{"path":"/docs/types/ColumnDef","title":"ColumnDef","description":""},{"path":"/docs/types/SyGridApi","title":"SyGridApi","description":""}]}]}]},{"path":"/docs/types/CellRange","kind":"type","title":"CellRange","summary":"Fields, allowed values, and APIs that use CellRange.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/MergedRangeInfo","title":"MergedRangeInfo","description":""},{"path":"/docs/types/RowsSlicesApplyResult","title":"RowsSlicesApplyResult","description":""},{"path":"/docs/types/SyGridCellRangeInput","title":"SyGridCellRangeInput","description":""}]}]}]},{"path":"/docs/types/CellRangeBounds","kind":"type","title":"CellRangeBounds","summary":"Fields, allowed values, and APIs that use CellRangeBounds.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/getCellRanges","title":"getCellRanges","description":"Reads current cell selection boundaries. Review the meaning of display row/column coordinates."},{"path":"/docs/events/rangeSelectionChanged","title":"rangeSelectionChanged","description":"Emitted when cell selection ranges change. Use the boundaries for copying or summaries."},{"path":"/docs/events/clipboardCopied","title":"clipboardCopied","description":"Emitted after clipboard copying completes. Output text and ranges are available, so avoid logging sensitive values."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""},{"path":"/docs/types/SyGridFillEndEventDetail","title":"SyGridFillEndEventDetail","description":""},{"path":"/docs/types/SyGridFillRangeOptions","title":"SyGridFillRangeOptions","description":""},{"path":"/docs/types/SyGridFillRangeReport","title":"SyGridFillRangeReport","description":""},{"path":"/docs/types/SyGridFillStartEventDetail","title":"SyGridFillStartEventDetail","description":""},{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]}]},{"path":"/docs/types/CellRenderOutput","kind":"type","title":"CellRenderOutput","summary":"Fields, allowed values, and APIs that use CellRenderOutput.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/options/detailCellRenderer","title":"detailCellRenderer","description":"Builds detail content using the text, html, or vnode contract. Takes precedence over declarative nested Grids."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/CellRenderer","title":"CellRenderer","description":""},{"path":"/docs/types/GridRendererGui","title":"GridRendererGui","description":""}]}]}]},{"path":"/docs/types/CellRenderer","kind":"type","title":"CellRenderer","summary":"Fields, allowed values, and APIs that use CellRenderer.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/columns/cellRenderer","title":"cellRenderer","description":"Displays cells through text, html, vnode, or a registered custom renderer."},{"path":"/docs/methods/registerCellRenderer","title":"registerCellRenderer","description":"Registers a named cell renderer and returns the result."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/ColumnDef","title":"ColumnDef","description":""},{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/CellRendererInput","title":"CellRendererInput","description":""},{"path":"/docs/types/CellRenderOutput","title":"CellRenderOutput","description":""}]}]}]},{"path":"/docs/types/CellRendererInput","kind":"type","title":"CellRendererInput","summary":"Fields, allowed values, and APIs that use CellRendererInput.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/CellRenderer","title":"CellRenderer","description":""},{"path":"/docs/types/GridRendererParams","title":"GridRendererParams","description":""}]}]}]},{"path":"/docs/types/CfCondition","kind":"type","title":"CfCondition","summary":"Fields, allowed values, and APIs that use CfCondition.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface CfCondition {\n  type: CfConditionType;\n  value?: unknown;\n  value2?: unknown;\n  caseSensitive?: boolean;\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/ConditionalFormatRule","title":"ConditionalFormatRule","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/CfConditionType","title":"CfConditionType","description":""}]}]}]},{"path":"/docs/types/CfConditionType","kind":"type","title":"CfConditionType","summary":"Fields, allowed values, and APIs that use CfConditionType.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/CfCondition","title":"CfCondition","description":""}]}]}]},{"path":"/docs/types/CfStyle","kind":"type","title":"CfStyle","summary":"Fields, allowed values, and APIs that use CfStyle.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/ConditionalFormatRule","title":"ConditionalFormatRule","description":""}]}]}]},{"path":"/docs/types/ChartDataTable","kind":"type","title":"ChartDataTable","summary":"Fields, allowed values, and APIs that use ChartDataTable.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface ChartDataTable {\n  readonly columns: string[];\n  readonly rows: Array<Array<string | number | null>>;\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChartAccessibleSummary","title":"GridChartAccessibleSummary","description":""}]}]}]},{"path":"/docs/types/ChartLinkAccessibleReport","kind":"type","title":"ChartLinkAccessibleReport","summary":"Fields, allowed values, and APIs that use ChartLinkAccessibleReport.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridChartAccessibleReport","title":"SyGridChartAccessibleReport","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChartAccessibleSummary","title":"GridChartAccessibleSummary","description":""},{"path":"/docs/types/GridChartFocusStop","title":"GridChartFocusStop","description":""}]}]}]},{"path":"/docs/types/ChartLinkChartReport","kind":"type","title":"ChartLinkChartReport","summary":"Fields, allowed values, and APIs that use ChartLinkChartReport.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/ChartLinkCreateResult","title":"ChartLinkCreateResult","description":""},{"path":"/docs/types/ChartLinkUpdateResult","title":"ChartLinkUpdateResult","description":""},{"path":"/docs/types/SyGridChartReport","title":"SyGridChartReport","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyChartConcreteType","title":"SyChartConcreteType","description":""},{"path":"/docs/types/GridChartProjectionKind","title":"GridChartProjectionKind","description":""}]}]}]},{"path":"/docs/types/ChartLinkCreateParams","kind":"type","title":"ChartLinkCreateParams","summary":"Fields, allowed values, and APIs that use ChartLinkCreateParams.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridChartCreateParams","title":"SyGridChartCreateParams","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/ChartLinkSourceInput","title":"ChartLinkSourceInput","description":""},{"path":"/docs/types/GridChartProperties","title":"GridChartProperties","description":""}]}]}]},{"path":"/docs/types/ChartLinkCreateResult","kind":"type","title":"ChartLinkCreateResult","summary":"Fields, allowed values, and APIs that use ChartLinkCreateResult.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridChartCreateResult","title":"SyGridChartCreateResult","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/ChartLinkChartReport","title":"ChartLinkChartReport","description":""}]}]}]},{"path":"/docs/types/ChartLinkDestroyResult","kind":"type","title":"ChartLinkDestroyResult","summary":"Fields, allowed values, and APIs that use ChartLinkDestroyResult.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridChartDestroyResult","title":"SyGridChartDestroyResult","description":""}]}]}]},{"path":"/docs/types/ChartLinkExportResult","kind":"type","title":"ChartLinkExportResult","summary":"Fields, allowed values, and APIs that use ChartLinkExportResult.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridChartExportResult","title":"SyGridChartExportResult","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChartExportResult","title":"GridChartExportResult","description":""}]}]}]},{"path":"/docs/types/ChartLinkFleetReport","kind":"type","title":"ChartLinkFleetReport","summary":"Fields, allowed values, and APIs that use ChartLinkFleetReport.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridChartFleetReport","title":"SyGridChartFleetReport","description":""}]}]}]},{"path":"/docs/types/ChartLinkMenuReport","kind":"type","title":"ChartLinkMenuReport","summary":"Fields, allowed values, and APIs that use ChartLinkMenuReport.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridChartMenuReport","title":"SyGridChartMenuReport","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChartMenuEntry","title":"GridChartMenuEntry","description":""},{"path":"/docs/types/GridChartMenuSelectionShape","title":"GridChartMenuSelectionShape","description":""},{"path":"/docs/types/GridChartMenuPermissions","title":"GridChartMenuPermissions","description":""}]}]}]},{"path":"/docs/types/ChartLinkPanelReport","kind":"type","title":"ChartLinkPanelReport","summary":"Fields, allowed values, and APIs that use ChartLinkPanelReport.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridChartPanelReport","title":"SyGridChartPanelReport","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/ChartLinkPanelStop","title":"ChartLinkPanelStop","description":""}]}]}]},{"path":"/docs/types/ChartLinkPanelStop","kind":"type","title":"ChartLinkPanelStop","summary":"Fields, allowed values, and APIs that use ChartLinkPanelStop.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/ChartLinkPanelReport","title":"ChartLinkPanelReport","description":""}]}]}]},{"path":"/docs/types/ChartLinkSourceInput","kind":"type","title":"ChartLinkSourceInput","summary":"Fields, allowed values, and APIs that use ChartLinkSourceInput.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/ChartLinkCreateParams","title":"ChartLinkCreateParams","description":""},{"path":"/docs/types/SyGridChartSourceInput","title":"SyGridChartSourceInput","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChartPivotSelectionState","title":"GridChartPivotSelectionState","description":""}]}]}]},{"path":"/docs/types/ChartLinkUpdateResult","kind":"type","title":"ChartLinkUpdateResult","summary":"Fields, allowed values, and APIs that use ChartLinkUpdateResult.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridChartUpdateResult","title":"SyGridChartUpdateResult","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/ChartLinkChartReport","title":"ChartLinkChartReport","description":""}]}]}]},{"path":"/docs/types/ColumnDef","kind":"type","title":"ColumnDef","summary":"Fields, allowed values, and APIs that use ColumnDef.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/options/columnDefs","title":"columnDefs","description":"Defines column data fields, headings, sizes, visibility, and editing. Include column groups to create multi-level headers."},{"path":"/docs/options/defaultColDef","title":"defaultColDef","description":"Defaults shared by all columns. Override individual values in columnDefs for specific columns."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/CellCallbackParams","title":"CellCallbackParams","description":""},{"path":"/docs/types/ContextMenuContext","title":"ContextMenuContext","description":""},{"path":"/docs/types/CsvExportColumn","title":"CsvExportColumn","description":""},{"path":"/docs/types/DetailGridOptions","title":"DetailGridOptions","description":""},{"path":"/docs/types/GridColumnDefinition","title":"GridColumnDefinition","description":""},{"path":"/docs/types/GridColumnGroupDef","title":"GridColumnGroupDef","description":""},{"path":"/docs/types/GridColumnMenuContext","title":"GridColumnMenuContext","description":""},{"path":"/docs/types/GridColumnRef","title":"GridColumnRef","description":""},{"path":"/docs/types/PdfExportColumn","title":"PdfExportColumn","description":""},{"path":"/docs/types/SyGridColSpanParams","title":"SyGridColSpanParams","description":""},{"path":"/docs/types/SyGridRowSpanParams","title":"SyGridRowSpanParams","description":""},{"path":"/docs/types/ValueFormatterParams","title":"ValueFormatterParams","description":""},{"path":"/docs/types/ValueGetterParams","title":"ValueGetterParams","description":""},{"path":"/docs/types/ValueParserParams","title":"ValueParserParams","description":""},{"path":"/docs/types/ValueSetterParams","title":"ValueSetterParams","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridData","title":"GridData","description":""},{"path":"/docs/types/GridFieldPath","title":"GridFieldPath","description":""},{"path":"/docs/types/ColumnFilterDecl","title":"ColumnFilterDecl","description":""},{"path":"/docs/types/GridFilterDefinition","title":"GridFilterDefinition","description":""},{"path":"/docs/types/GridCallback","title":"GridCallback","description":""},{"path":"/docs/types/ValueGetterParams","title":"ValueGetterParams","description":""},{"path":"/docs/types/ValueFormatterParams","title":"ValueFormatterParams","description":""},{"path":"/docs/types/CellRenderer","title":"CellRenderer","description":""},{"path":"/docs/types/GridRendererDefinition","title":"GridRendererDefinition","description":""},{"path":"/docs/types/GridCellEditorDeclaration","title":"GridCellEditorDeclaration","description":""},{"path":"/docs/types/GridFloatingFilterDefinition","title":"GridFloatingFilterDefinition","description":""},{"path":"/docs/types/CellCallbackParams","title":"CellCallbackParams","description":""},{"path":"/docs/types/ValueParserParams","title":"ValueParserParams","description":""},{"path":"/docs/types/ValueSetterParams","title":"ValueSetterParams","description":""},{"path":"/docs/types/SyGridRowSpanParams","title":"SyGridRowSpanParams","description":""},{"path":"/docs/types/SyGridColSpanParams","title":"SyGridColSpanParams","description":""}]}]}]},{"path":"/docs/types/ColumnFilterDecl","kind":"type","title":"ColumnFilterDecl","summary":"Fields, allowed values, and APIs that use ColumnFilterDecl.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type ColumnFilterDecl = ColumnFilterType | ReadonlyArray<ColumnFilterKind>;","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/columns/filter","title":"filter","description":"Built-in filter type or custom filter definition for this column."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/ColumnDef","title":"ColumnDef","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/ColumnFilterType","title":"ColumnFilterType","description":""},{"path":"/docs/types/ColumnFilterKind","title":"ColumnFilterKind","description":""}]}]}]},{"path":"/docs/types/ColumnFilterKind","kind":"type","title":"ColumnFilterKind","summary":"Fields, allowed values, and APIs that use ColumnFilterKind.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type ColumnFilterKind = 'text' | 'number' | 'date' | 'set';","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/ColumnFilterDecl","title":"ColumnFilterDecl","description":""},{"path":"/docs/types/ColumnFilterType","title":"ColumnFilterType","description":""}]}]}]},{"path":"/docs/types/ColumnFilterType","kind":"type","title":"ColumnFilterType","summary":"Fields, allowed values, and APIs that use ColumnFilterType.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type ColumnFilterType = ColumnFilterKind | boolean;","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/ColumnFilterDecl","title":"ColumnFilterDecl","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/ColumnFilterKind","title":"ColumnFilterKind","description":""}]}]}]},{"path":"/docs/types/ColumnGroupDef","kind":"type","title":"ColumnGroupDef","summary":"Fields, allowed values, and APIs that use ColumnGroupDef.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridColumnGroupDef","title":"GridColumnGroupDef","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GroupableLeaf","title":"GroupableLeaf","description":""}]}]}]},{"path":"/docs/types/ColumnPinSide","kind":"type","title":"ColumnPinSide","summary":"Fields, allowed values, and APIs that use ColumnPinSide.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type ColumnPinSide = 'left' | 'right';","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/setColumnPinned","title":"setColumnPinned","description":"Pins a column left/right or unpins it."},{"path":"/docs/methods/getColumnPinned","title":"getColumnPinned","description":"Reads the column's current pinning direction."}]}]}]},{"path":"/docs/types/ColumnStateEntry","kind":"type","title":"ColumnStateEntry","summary":"Fields, allowed values, and APIs that use ColumnStateEntry.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/getColumnState","title":"getColumnState","description":"Reads serializable column width, order, visibility, sorting, and pinning state."},{"path":"/docs/methods/applyColumnState","title":"applyColumnState","description":"Restores saved column state. Verify that IDs match current columns."}]}]}]},{"path":"/docs/types/ColumnsSliceApplyResult","kind":"type","title":"ColumnsSliceApplyResult","summary":"Fields, allowed values, and APIs that use ColumnsSliceApplyResult.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridStateApplyReport","title":"SyGridStateApplyReport","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/ApplyColumnStateResult","title":"ApplyColumnStateResult","description":""}]}]}]},{"path":"/docs/types/ConditionGroup","kind":"type","title":"ConditionGroup","summary":"Fields, allowed values, and APIs that use ConditionGroup.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface ConditionGroup<TRow = unknown> {\n  op: 'and' | 'or';\n  children: ReadonlyArray<ConditionNode<TRow>>;\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/ConditionNode","title":"ConditionNode","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/ConditionNode","title":"ConditionNode","description":""}]}]}]},{"path":"/docs/types/ConditionLeaf","kind":"type","title":"ConditionLeaf","summary":"Fields, allowed values, and APIs that use ConditionLeaf.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type ConditionLeaf<TRow = unknown> = MultiFilterPart<TRow>;","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/ConditionNode","title":"ConditionNode","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/MultiFilterPart","title":"MultiFilterPart","description":""}]}]}]},{"path":"/docs/types/ConditionNode","kind":"type","title":"ConditionNode","summary":"Fields, allowed values, and APIs that use ConditionNode.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type ConditionNode<TRow = unknown> = ConditionGroup<TRow> | ConditionLeaf<TRow>;","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/setConditionFilter","title":"setConditionFilter","description":"Applies an advanced AND/OR condition tree. null clears it; inspect results for invalid models."},{"path":"/docs/methods/getConditionFilter","title":"getConditionFilter","description":"Reads the current advanced condition tree or null."},{"path":"/docs/events/conditionFilterChanged","title":"conditionFilterChanged","description":"Emitted when the AND/OR condition tree changes. A null model means advanced conditions were cleared."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/ConditionGroup","title":"ConditionGroup","description":""},{"path":"/docs/types/FilterSliceApplyResult","title":"FilterSliceApplyResult","description":""},{"path":"/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""},{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/ConditionGroup","title":"ConditionGroup","description":""},{"path":"/docs/types/ConditionLeaf","title":"ConditionLeaf","description":""}]}]}]},{"path":"/docs/types/ConditionalFormatRule","kind":"type","title":"ConditionalFormatRule","summary":"Fields, allowed values, and APIs that use ConditionalFormatRule.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/options/conditionalFormats","title":"conditionalFormats","description":"Rules changing matching cells' visual properties, such as backgrounds and text. Does not mutate source values."},{"path":"/docs/events/conditionalFormatsChanged","title":"conditionalFormatsChanged","description":"Emitted when conditional formatting rules change. Save rules as user preferences."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/CfCondition","title":"CfCondition","description":""},{"path":"/docs/types/CfStyle","title":"CfStyle","description":""}]}]}]},{"path":"/docs/types/ContextMenuActionId","kind":"type","title":"ContextMenuActionId","summary":"Fields, allowed values, and APIs that use ContextMenuActionId.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type ContextMenuActionId =\n  | 'copy-cell'\n  | 'copy-row'\n  | 'export-csv'\n  | (string & {});","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/ContextMenuItem","title":"ContextMenuItem","description":""}]}]}]},{"path":"/docs/types/ContextMenuContext","kind":"type","title":"ContextMenuContext","summary":"Fields, allowed values, and APIs that use ContextMenuContext.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/options/contextMenuItemsCallback","title":"contextMenuItemsCallback","description":"Returns cell context-menu items. Replaces the entire default list rather than appending to it."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/ContextMenuItem","title":"ContextMenuItem","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/ColumnDef","title":"ColumnDef","description":""}]}]}]},{"path":"/docs/types/ContextMenuItem","kind":"type","title":"ContextMenuItem","summary":"Fields, allowed values, and APIs that use ContextMenuItem.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/options/contextMenuItemsCallback","title":"contextMenuItemsCallback","description":"Returns cell context-menu items. Replaces the entire default list rather than appending to it."},{"path":"/docs/methods/getContextMenuItems","title":"getContextMenuItems","description":"Calculates context-menu items for a displayed row and field."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/ContextMenuActionId","title":"ContextMenuActionId","description":""},{"path":"/docs/types/ContextMenuContext","title":"ContextMenuContext","description":""}]}]}]},{"path":"/docs/types/CsvDelimiter","kind":"type","title":"CsvDelimiter","summary":"Fields, allowed values, and APIs that use CsvDelimiter.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type CsvDelimiter = string;","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/importCsvText","title":"importCsvText","description":"Parses CSV text and replaces columns and source data. For appending rows, parse separately and use transactions."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridCsvImportOptions","title":"SyGridCsvImportOptions","description":""}]}]}]},{"path":"/docs/types/CsvDownloadOptions","kind":"type","title":"CsvDownloadOptions","summary":"Fields, allowed values, and APIs that use CsvDownloadOptions.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface CsvDownloadOptions<TRow = Record<string, unknown>> extends CsvExportOptions<TRow> {\n  fileName?: string;\n}","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/exportDataAsCsv","title":"exportDataAsCsv","description":"Downloads CSV using current export conditions and returns the export result."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/CsvExportOptions","title":"CsvExportOptions","description":""}]}]}]},{"path":"/docs/types/CsvExportColumn","kind":"type","title":"CsvExportColumn","summary":"Fields, allowed values, and APIs that use CsvExportColumn.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/CsvExportOptions","title":"CsvExportOptions","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/ColumnDef","title":"ColumnDef","description":""}]}]}]},{"path":"/docs/types/CsvExportOptions","kind":"type","title":"CsvExportOptions","summary":"Fields, allowed values, and APIs that use CsvExportOptions.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/getDataAsCsv","title":"getDataAsCsv","description":"Returns an object with CSV text and output row/column counts. Read the string from its csv field."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/CsvDownloadOptions","title":"CsvDownloadOptions","description":""},{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/CsvExportColumn","title":"CsvExportColumn","description":""}]}]}]},{"path":"/docs/types/CsvExportResult","kind":"type","title":"CsvExportResult","summary":"Fields, allowed values, and APIs that use CsvExportResult.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface CsvExportResult {\n  csv: string;\n  rowCount: number;\n  columnCount: number;\n}","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/getDataAsCsv","title":"getDataAsCsv","description":"Returns an object with CSV text and output row/column counts. Read the string from its csv field."},{"path":"/docs/methods/exportDataAsCsv","title":"exportDataAsCsv","description":"Downloads CSV using current export conditions and returns the export result."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]}]},{"path":"/docs/types/DateFilterOp","kind":"type","title":"DateFilterOp","summary":"Fields, allowed values, and APIs that use DateFilterOp.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/DateFilterSpec","title":"DateFilterSpec","description":""}]}]}]},{"path":"/docs/types/DateFilterSpec","kind":"type","title":"DateFilterSpec","summary":"Fields, allowed values, and APIs that use DateFilterSpec.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/ActiveFilter","title":"ActiveFilter","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/DateFilterOp","title":"DateFilterOp","description":""},{"path":"/docs/types/DateValue","title":"DateValue","description":""}]}]}]},{"path":"/docs/types/DateValue","kind":"type","title":"DateValue","summary":"Fields, allowed values, and APIs that use DateValue.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type DateValue = Date | string | number;","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/DateFilterSpec","title":"DateFilterSpec","description":""}]}]}]},{"path":"/docs/types/DetailGridOptions","kind":"type","title":"DetailGridOptions","summary":"Fields, allowed values, and APIs that use DetailGridOptions.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/options/detailGridOptions","title":"detailGridOptions","description":"Columns and options for an automatically generated nested Grid in the detail panel. Use with getDetailRowData."}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/ColumnDef","title":"ColumnDef","description":""},{"path":"/docs/types/GridColumnGroupDef","title":"GridColumnGroupDef","description":""},{"path":"/docs/types/DetailRowDataParams","title":"DetailRowDataParams","description":""}]}]}]},{"path":"/docs/types/DetailRowDataParams","kind":"type","title":"DetailRowDataParams","summary":"Fields, allowed values, and APIs that use DetailRowDataParams.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface DetailRowDataParams {\n  row: Record<string, unknown>;\n  rowId: string | number;\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/DetailGridOptions","title":"DetailGridOptions","description":""}]}]}]},{"path":"/docs/types/EditTransaction","kind":"type","title":"EditTransaction","summary":"Fields, allowed values, and APIs that use EditTransaction.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/getActiveEditTransaction","title":"getActiveEditTransaction","description":"Reads the active cell editing transaction, or null when not editing."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/EditTransactionPhase","title":"EditTransactionPhase","description":""}]}]}]},{"path":"/docs/types/EditTransactionPhase","kind":"type","title":"EditTransactionPhase","summary":"Fields, allowed values, and APIs that use EditTransactionPhase.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type EditTransactionPhase =\n  | 'idle'\n  | 'pending'\n  | 'committed'\n  | 'cancelled'\n  | 'rolled-back';","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/EditTransaction","title":"EditTransaction","description":""}]}]}]},{"path":"/docs/types/EmptyStateKind","kind":"type","title":"EmptyStateKind","summary":"Fields, allowed values, and APIs that use EmptyStateKind.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type EmptyStateKind = 'none' | 'no-data' | 'no-matches' | 'loading';","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridEmptyStateActionDetail","title":"GridEmptyStateActionDetail","description":""},{"path":"/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]}]},{"path":"/docs/types/FillDirection","kind":"type","title":"FillDirection","summary":"Fields, allowed values, and APIs that use FillDirection.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type FillDirection = 'up' | 'down' | 'left' | 'right';","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridFillRangeOptions","title":"SyGridFillRangeOptions","description":""},{"path":"/docs/types/SyGridFillStartEventDetail","title":"SyGridFillStartEventDetail","description":""}]}]}]},{"path":"/docs/types/FillPlanMode","kind":"type","title":"FillPlanMode","summary":"Fields, allowed values, and APIs that use FillPlanMode.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type FillPlanMode = 'fill' | 'reduce';","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridFillStartEventDetail","title":"SyGridFillStartEventDetail","description":""}]}]}]},{"path":"/docs/types/FilterSliceApplyResult","kind":"type","title":"FilterSliceApplyResult","summary":"Fields, allowed values, and APIs that use FilterSliceApplyResult.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/setFilterModel","title":"setFilterModel","description":"Applies a validated combined filter model. null clears all filter families; inspect reports for invalid models."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""},{"path":"/docs/types/SyGridStateApplyReport","title":"SyGridStateApplyReport","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/ActiveFilter","title":"ActiveFilter","description":""},{"path":"/docs/types/ConditionNode","title":"ConditionNode","description":""},{"path":"/docs/types/FilterSliceIssue","title":"FilterSliceIssue","description":""}]}]}]},{"path":"/docs/types/FilterSliceIssue","kind":"type","title":"FilterSliceIssue","summary":"Fields, allowed values, and APIs that use FilterSliceIssue.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface FilterSliceIssue {\n  readonly path: string;\n  readonly detail: string;\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/FilterSliceApplyResult","title":"FilterSliceApplyResult","description":""}]}]}]},{"path":"/docs/types/GridActiveCellChangedDetail","kind":"type","title":"GridActiveCellChangedDetail","summary":"Fields, allowed values, and APIs that use GridActiveCellChangedDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface GridActiveCellChangedDetail {\n  active: ActiveCell | null;\n  previous: ActiveCell | null;\n}","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/events/activeCellChanged","title":"activeCellChanged","description":"Emitted when keyboard or pointer input changes the active cell. Separate from range or row selection."}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/ActiveCell","title":"ActiveCell","description":""}]}]}]},{"path":"/docs/types/GridAsyncValueLoadContext","kind":"type","title":"GridAsyncValueLoadContext","summary":"Fields, allowed values, and APIs that use GridAsyncValueLoadContext.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface GridAsyncValueLoadContext {\n  readonly query: string;\n  readonly signal: AbortSignal;\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridAsyncValueLoader","title":"GridAsyncValueLoader","description":""}]}]}]},{"path":"/docs/types/GridAsyncValueLoader","kind":"type","title":"GridAsyncValueLoader","summary":"Fields, allowed values, and APIs that use GridAsyncValueLoader.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type GridAsyncValueLoader<TValue> = (\n  context: GridAsyncValueLoadContext,\n) => GridMaybePromise<ReadonlyArray<TValue>>;","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridRichSelectEditorOptions","title":"GridRichSelectEditorOptions","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridAsyncValueLoadContext","title":"GridAsyncValueLoadContext","description":""},{"path":"/docs/types/GridMaybePromise","title":"GridMaybePromise","description":""}]}]}]},{"path":"/docs/types/GridCallback","kind":"type","title":"GridCallback","summary":"Fields, allowed values, and APIs that use GridCallback.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type GridCallback<TArgs extends readonly unknown[], TResult> = {\n  bivarianceHack(...args: TArgs): TResult;\n}['bivarianceHack'];","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/columns/valueGetter","title":"valueGetter","description":"Returns a cell value calculated from the source row. Use valueFormatter for display-text changes only."},{"path":"/docs/columns/valueFormatter","title":"valueFormatter","description":"Displays values as readable currency, dates, or other strings without changing the stored source type."},{"path":"/docs/columns/tooltipValueGetter","title":"tooltipValueGetter","description":"Calculates tooltip content from the current cell context. Do not expose unauthorized values indirectly."},{"path":"/docs/columns/cellClass","title":"cellClass","description":"CSS classes for the cell or a callback returning classes."},{"path":"/docs/columns/cellClassRules","title":"cellClassRules","description":"Rules for applying CSS classes conditionally."},{"path":"/docs/columns/cellStyle","title":"cellStyle","description":"Inline style object, callback, or array of these for the cell."},{"path":"/docs/columns/valueParser","title":"valueParser","description":"Converts input text to the stored type, for example by normalizing numbers or dates."},{"path":"/docs/columns/valueSetter","title":"valueSetter","description":"Custom logic for writing a converted value into the source row. Follow the return contract indicating whether a change occurred."},{"path":"/docs/columns/comparator","title":"comparator","description":"Compares two values and rows for sorting. Negative, zero, and positive results mean before, equal, and after."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/ColumnDef","title":"ColumnDef","description":""}]}]}]},{"path":"/docs/types/GridCellClickedDetail","kind":"type","title":"GridCellClickedDetail","summary":"Fields, allowed values, and APIs that use GridCellClickedDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/events/cellClicked","title":"cellClicked","description":"Emitted on a cell click. Read the row, field, and input context from detail."}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridData","title":"GridData","description":""},{"path":"/docs/types/RowClickButton","title":"RowClickButton","description":""},{"path":"/docs/types/RowClickModifiers","title":"RowClickModifiers","description":""}]}]}]},{"path":"/docs/types/GridCellComment","kind":"type","title":"GridCellComment","summary":"Fields, allowed values, and APIs that use GridCellComment.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/getCellComments","title":"getCellComments","description":"Reads collaboration comments associated with a row ID and field."},{"path":"/docs/events/cellCommentsChanged","title":"cellCommentsChanged","description":"Emitted when cell collaboration comments change. Read the row ID, field, and latest comments."},{"path":"/docs/events/commentMentioned","title":"commentMentioned","description":"Reports a mention in collaboration comments. Connect app notifications using the target cell and comment."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""},{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]}]},{"path":"/docs/types/GridCellDoubleClickedDetail","kind":"type","title":"GridCellDoubleClickedDetail","summary":"Fields, allowed values, and APIs that use GridCellDoubleClickedDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/events/cellDoubleClicked","title":"cellDoubleClicked","description":"Emitted on a cell double-click. Avoid conflicts between starting editing and opening app details."}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridData","title":"GridData","description":""},{"path":"/docs/types/RowClickButton","title":"RowClickButton","description":""},{"path":"/docs/types/RowClickModifiers","title":"RowClickModifiers","description":""}]}]}]},{"path":"/docs/types/GridCellEditingCancelledDetail","kind":"type","title":"GridCellEditingCancelledDetail","summary":"Fields, allowed values, and APIs that use GridCellEditingCancelledDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface GridCellEditingCancelledDetail {\n  rowIndex: number;\n  colIndex: number;\n}","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/events/cellEditingCancelled","title":"cellEditingCancelled","description":"Emitted when cell editing is cancelled. Do not treat it as a successful server save."}]}]}]},{"path":"/docs/types/GridCellEditingCommittedDetail","kind":"type","title":"GridCellEditingCommittedDetail","summary":"Fields, allowed values, and APIs that use GridCellEditingCommittedDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/events/cellEditingCommitted","title":"cellEditingCommitted","description":"Emitted when cell editing is committed. Also inspect cellValueChanged for actual value changes."}]}]}]},{"path":"/docs/types/GridCellEditingRequestedDetail","kind":"type","title":"GridCellEditingRequestedDetail","summary":"Fields, allowed values, and APIs that use GridCellEditingRequestedDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/events/cellEditingRequested","title":"cellEditingRequested","description":"Emitted when cell editing is requested. Distinguish later cancellation, commit, and value-change events."}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridData","title":"GridData","description":""}]}]}]},{"path":"/docs/types/GridCellEditorDeclaration","kind":"type","title":"GridCellEditorDeclaration","summary":"Fields, allowed values, and APIs that use GridCellEditorDeclaration.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/columns/cellEditor","title":"cellEditor","description":"Declares a custom cell editor. Use editor to select a built-in editor type."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/ColumnDef","title":"ColumnDef","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridData","title":"GridData","description":""},{"path":"/docs/types/GridEditorDefinition","title":"GridEditorDefinition","description":""},{"path":"/docs/types/GridRichSelectEditorOptions","title":"GridRichSelectEditorOptions","description":""}]}]}]},{"path":"/docs/types/GridCellNote","kind":"type","title":"GridCellNote","summary":"Fields, allowed values, and APIs that use GridCellNote.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface GridCellNote {\n  readonly text: string;\n  readonly revision: string;\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridCellNotesAdapter","title":"GridCellNotesAdapter","description":""},{"path":"/docs/types/GridNoteSaveResult","title":"GridNoteSaveResult","description":""}]}]}]},{"path":"/docs/types/GridCellNotesAdapter","kind":"type","title":"GridCellNotesAdapter","summary":"Fields, allowed values, and APIs that use GridCellNotesAdapter.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/options/cellNotesAdapter","title":"cellNotesAdapter","description":"Implements standalone note loading and atomic revision-based saving. Does not automatically fall back to temporary built-in storage."}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridNoteCell","title":"GridNoteCell","description":""},{"path":"/docs/types/GridCellNote","title":"GridCellNote","description":""},{"path":"/docs/types/GridNoteSaveResult","title":"GridNoteSaveResult","description":""}]}]}]},{"path":"/docs/types/GridCellValueChangedDetail","kind":"type","title":"GridCellValueChangedDetail","summary":"Fields, allowed values, and APIs that use GridCellValueChangedDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/events/clipboardPasted","title":"clipboardPasted","description":"Reports paste results. Inspect applied/skipped counts, starting position, and actual changes together."},{"path":"/docs/events/cellValueChanged","title":"cellValueChanged","description":"Emitted when an actual cell value changes. Use the row, field, and before/after values for saving or activity history."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridRemoteEditAppliedDetail","title":"GridRemoteEditAppliedDetail","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridData","title":"GridData","description":""},{"path":"/docs/types/GridEditSource","title":"GridEditSource","description":""}]}]}]},{"path":"/docs/types/GridChartAccessibleSummary","kind":"type","title":"GridChartAccessibleSummary","summary":"Fields, allowed values, and APIs that use GridChartAccessibleSummary.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/ChartLinkAccessibleReport","title":"ChartLinkAccessibleReport","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/ChartDataTable","title":"ChartDataTable","description":""},{"path":"/docs/types/GridChartFocusStop","title":"GridChartFocusStop","description":""}]}]}]},{"path":"/docs/types/GridChartContainerRequest","kind":"type","title":"GridChartContainerRequest","summary":"Fields, allowed values, and APIs that use GridChartContainerRequest.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type GridChartContainerRequest =\n  | { readonly kind: 'grid-owned' }\n  | { readonly kind: 'caller-owned'; readonly containerId: string };","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChartModel","title":"GridChartModel","description":""}]}]}]},{"path":"/docs/types/GridChartCrossFilterAction","kind":"type","title":"GridChartCrossFilterAction","summary":"Fields, allowed values, and APIs that use GridChartCrossFilterAction.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type GridChartCrossFilterAction =\n  \"replace\" | \"add\" | \"remove\" | \"toggle\";","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridChartCrossFilterAction","title":"SyGridChartCrossFilterAction","description":""}]}]}]},{"path":"/docs/types/GridChartCrossFilterDelta","kind":"type","title":"GridChartCrossFilterDelta","summary":"Fields, allowed values, and APIs that use GridChartCrossFilterDelta.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChartCrossFilterResult","title":"GridChartCrossFilterResult","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/ActiveFilterMap","title":"ActiveFilterMap","description":""},{"path":"/docs/types/GridChartCrossFilterIssues","title":"GridChartCrossFilterIssues","description":""}]}]}]},{"path":"/docs/types/GridChartCrossFilterIssues","kind":"type","title":"GridChartCrossFilterIssues","summary":"Fields, allowed values, and APIs that use GridChartCrossFilterIssues.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChartCrossFilterDelta","title":"GridChartCrossFilterDelta","description":""}]}]}]},{"path":"/docs/types/GridChartCrossFilterResult","kind":"type","title":"GridChartCrossFilterResult","summary":"Fields, allowed values, and APIs that use GridChartCrossFilterResult.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridChartCrossFilterResult","title":"SyGridChartCrossFilterResult","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChartCrossFilterDelta","title":"GridChartCrossFilterDelta","description":""}]}]}]},{"path":"/docs/types/GridChartDestroyCause","kind":"type","title":"GridChartDestroyCause","summary":"Fields, allowed values, and APIs that use GridChartDestroyCause.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type GridChartDestroyCause = \"api-destroy\" | \"grid-disconnect\" | \"materialize-failed\";","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChartEvent","title":"GridChartEvent","description":""}]}]}]},{"path":"/docs/types/GridChartEvent","kind":"type","title":"GridChartEvent","summary":"Fields, allowed values, and APIs that use GridChartEvent.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridChartEvent","title":"SyGridChartEvent","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChartEventSpine","title":"GridChartEventSpine","description":""},{"path":"/docs/types/SyChartConcreteType","title":"SyChartConcreteType","description":""},{"path":"/docs/types/GridChartProjectionKind","title":"GridChartProjectionKind","description":""},{"path":"/docs/types/GridChartModelSource","title":"GridChartModelSource","description":""},{"path":"/docs/types/GridChartOptions","title":"GridChartOptions","description":""},{"path":"/docs/types/GridChartOptionKey","title":"GridChartOptionKey","description":""},{"path":"/docs/types/GridChartDestroyCause","title":"GridChartDestroyCause","description":""}]}]}]},{"path":"/docs/types/GridChartEventSpine","kind":"type","title":"GridChartEventSpine","summary":"Fields, allowed values, and APIs that use GridChartEventSpine.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChartEvent","title":"GridChartEvent","description":""}]}]}]},{"path":"/docs/types/GridChartExportFormat","kind":"type","title":"GridChartExportFormat","summary":"Fields, allowed values, and APIs that use GridChartExportFormat.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type GridChartExportFormat = \"png\" | \"svg\" | \"csv\";","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChartExportSpec","title":"GridChartExportSpec","description":""}]}]}]},{"path":"/docs/types/GridChartExportRefusal","kind":"type","title":"GridChartExportRefusal","summary":"Fields, allowed values, and APIs that use GridChartExportRefusal.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type GridChartExportRefusal = \"unknown-format\" | \"invalid-size\" | \"unknown-chart\";","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChartExportResult","title":"GridChartExportResult","description":""}]}]}]},{"path":"/docs/types/GridChartExportRequest","kind":"type","title":"GridChartExportRequest","summary":"Fields, allowed values, and APIs that use GridChartExportRequest.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridChartExportRequest","title":"SyGridChartExportRequest","description":""}]}]}]},{"path":"/docs/types/GridChartExportResult","kind":"type","title":"GridChartExportResult","summary":"Fields, allowed values, and APIs that use GridChartExportResult.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/ChartLinkExportResult","title":"ChartLinkExportResult","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChartExportSpec","title":"GridChartExportSpec","description":""},{"path":"/docs/types/GridChartExportRefusal","title":"GridChartExportRefusal","description":""}]}]}]},{"path":"/docs/types/GridChartExportSpec","kind":"type","title":"GridChartExportSpec","summary":"Fields, allowed values, and APIs that use GridChartExportSpec.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChartExportResult","title":"GridChartExportResult","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChartExportFormat","title":"GridChartExportFormat","description":""}]}]}]},{"path":"/docs/types/GridChartFocusStop","kind":"type","title":"GridChartFocusStop","summary":"Fields, allowed values, and APIs that use GridChartFocusStop.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/ChartLinkAccessibleReport","title":"ChartLinkAccessibleReport","description":""},{"path":"/docs/types/GridChartAccessibleSummary","title":"GridChartAccessibleSummary","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChartFocusStopKind","title":"GridChartFocusStopKind","description":""}]}]}]},{"path":"/docs/types/GridChartFocusStopKind","kind":"type","title":"GridChartFocusStopKind","summary":"Fields, allowed values, and APIs that use GridChartFocusStopKind.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type GridChartFocusStopKind = \"series\" | \"chart\" | \"legend-item\" | \"data-table\" | \"export\";","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChartFocusStop","title":"GridChartFocusStop","description":""}]}]}]},{"path":"/docs/types/GridChartMenuColumn","kind":"type","title":"GridChartMenuColumn","summary":"Fields, allowed values, and APIs that use GridChartMenuColumn.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChartMenuSelectionShape","title":"GridChartMenuSelectionShape","description":""}]}]}]},{"path":"/docs/types/GridChartMenuEntry","kind":"type","title":"GridChartMenuEntry","summary":"Fields, allowed values, and APIs that use GridChartMenuEntry.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/ChartLinkMenuReport","title":"ChartLinkMenuReport","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyChartConcreteType","title":"SyChartConcreteType","description":""},{"path":"/docs/types/GridChartProjectionKind","title":"GridChartProjectionKind","description":""},{"path":"/docs/types/GridChartMenuUnavailableReason","title":"GridChartMenuUnavailableReason","description":""},{"path":"/docs/types/GridChartTypeVerdict","title":"GridChartTypeVerdict","description":""}]}]}]},{"path":"/docs/types/GridChartMenuPermissions","kind":"type","title":"GridChartMenuPermissions","summary":"Fields, allowed values, and APIs that use GridChartMenuPermissions.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface GridChartMenuPermissions {\n  readonly readOnly: boolean;\n  readonly canCreate: boolean;\n  readonly canEditProperties: boolean;\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/ChartLinkMenuReport","title":"ChartLinkMenuReport","description":""},{"path":"/docs/types/SyGridChartPermissions","title":"SyGridChartPermissions","description":""}]}]}]},{"path":"/docs/types/GridChartMenuSelectionShape","kind":"type","title":"GridChartMenuSelectionShape","summary":"Fields, allowed values, and APIs that use GridChartMenuSelectionShape.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/ChartLinkMenuReport","title":"ChartLinkMenuReport","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChartMenuColumn","title":"GridChartMenuColumn","description":""}]}]}]},{"path":"/docs/types/GridChartMenuUnavailableReason","kind":"type","title":"GridChartMenuUnavailableReason","summary":"Fields, allowed values, and APIs that use GridChartMenuUnavailableReason.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChartMenuEntry","title":"GridChartMenuEntry","description":""}]}]}]},{"path":"/docs/types/GridChartModel","kind":"type","title":"GridChartModel","summary":"Fields, allowed values, and APIs that use GridChartModel.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChartModelEnvelope","title":"GridChartModelEnvelope","description":""},{"path":"/docs/types/GridChartModelRestoreEntry","title":"GridChartModelRestoreEntry","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyChartConcreteType","title":"SyChartConcreteType","description":""},{"path":"/docs/types/GridChartModelSource","title":"GridChartModelSource","description":""},{"path":"/docs/types/GridChartContainerRequest","title":"GridChartContainerRequest","description":""},{"path":"/docs/types/GridChartProperties","title":"GridChartProperties","description":""},{"path":"/docs/types/GridChartPivotSelectionState","title":"GridChartPivotSelectionState","description":""}]}]}]},{"path":"/docs/types/GridChartModelCaptureIssue","kind":"type","title":"GridChartModelCaptureIssue","summary":"Fields, allowed values, and APIs that use GridChartModelCaptureIssue.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChartModelCaptureProblem","title":"GridChartModelCaptureProblem","description":""}]}]}]},{"path":"/docs/types/GridChartModelCaptureProblem","kind":"type","title":"GridChartModelCaptureProblem","summary":"Fields, allowed values, and APIs that use GridChartModelCaptureProblem.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface GridChartModelCaptureProblem {\n  readonly chartKey: string;\n  readonly issue: GridChartModelCaptureIssue;\n  readonly detail: string;\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChartModelCaptureResult","title":"GridChartModelCaptureResult","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChartModelCaptureIssue","title":"GridChartModelCaptureIssue","description":""}]}]}]},{"path":"/docs/types/GridChartModelCaptureResult","kind":"type","title":"GridChartModelCaptureResult","summary":"Fields, allowed values, and APIs that use GridChartModelCaptureResult.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridChartCaptureResult","title":"SyGridChartCaptureResult","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChartModelEnvelope","title":"GridChartModelEnvelope","description":""},{"path":"/docs/types/GridChartModelCaptureProblem","title":"GridChartModelCaptureProblem","description":""}]}]}]},{"path":"/docs/types/GridChartModelEnvelope","kind":"type","title":"GridChartModelEnvelope","summary":"Fields, allowed values, and APIs that use GridChartModelEnvelope.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface GridChartModelEnvelope {\n  readonly version: GridChartModelVersion;\n  readonly charts: readonly GridChartModel[];\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChartModelCaptureResult","title":"GridChartModelCaptureResult","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChartModelVersion","title":"GridChartModelVersion","description":""},{"path":"/docs/types/GridChartModel","title":"GridChartModel","description":""}]}]}]},{"path":"/docs/types/GridChartModelEnvelopeIssue","kind":"type","title":"GridChartModelEnvelopeIssue","summary":"Fields, allowed values, and APIs that use GridChartModelEnvelopeIssue.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface GridChartModelEnvelopeIssue {\n  readonly code: GridChartModelEnvelopeIssueCode;\n  readonly path: string;\n  readonly detail: string;\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChartModelRestoreReport","title":"GridChartModelRestoreReport","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChartModelEnvelopeIssueCode","title":"GridChartModelEnvelopeIssueCode","description":""}]}]}]},{"path":"/docs/types/GridChartModelEnvelopeIssueCode","kind":"type","title":"GridChartModelEnvelopeIssueCode","summary":"Fields, allowed values, and APIs that use GridChartModelEnvelopeIssueCode.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChartModelEnvelopeIssue","title":"GridChartModelEnvelopeIssue","description":""}]}]}]},{"path":"/docs/types/GridChartModelRestoreEntry","kind":"type","title":"GridChartModelRestoreEntry","summary":"Fields, allowed values, and APIs that use GridChartModelRestoreEntry.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChartModelRestoreReport","title":"GridChartModelRestoreReport","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChartModelRestoreStatus","title":"GridChartModelRestoreStatus","description":""},{"path":"/docs/types/GridChartModel","title":"GridChartModel","description":""},{"path":"/docs/types/GridChartModelRestoreIssue","title":"GridChartModelRestoreIssue","description":""}]}]}]},{"path":"/docs/types/GridChartModelRestoreIssue","kind":"type","title":"GridChartModelRestoreIssue","summary":"Fields, allowed values, and APIs that use GridChartModelRestoreIssue.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChartModelRestoreEntry","title":"GridChartModelRestoreEntry","description":""}]}]}]},{"path":"/docs/types/GridChartModelRestoreReport","kind":"type","title":"GridChartModelRestoreReport","summary":"Fields, allowed values, and APIs that use GridChartModelRestoreReport.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridChartRestoreResult","title":"SyGridChartRestoreResult","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChartModelRestoreEntry","title":"GridChartModelRestoreEntry","description":""},{"path":"/docs/types/GridChartModelEnvelopeIssue","title":"GridChartModelEnvelopeIssue","description":""}]}]}]},{"path":"/docs/types/GridChartModelRestoreStatus","kind":"type","title":"GridChartModelRestoreStatus","summary":"Fields, allowed values, and APIs that use GridChartModelRestoreStatus.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type GridChartModelRestoreStatus =\n  | 'restored'\n  | 'degraded'\n  | 'unrestorable';","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChartModelRestoreEntry","title":"GridChartModelRestoreEntry","description":""}]}]}]},{"path":"/docs/types/GridChartModelSource","kind":"type","title":"GridChartModelSource","summary":"Fields, allowed values, and APIs that use GridChartModelSource.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type GridChartModelSource = Extract<GridChartSourceSnapshot, { kind: 'params' }>;","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChartEvent","title":"GridChartEvent","description":""},{"path":"/docs/types/GridChartModel","title":"GridChartModel","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChartSourceSnapshot","title":"GridChartSourceSnapshot","description":""}]}]}]},{"path":"/docs/types/GridChartModelVersion","kind":"type","title":"GridChartModelVersion","summary":"Fields, allowed values, and APIs that use GridChartModelVersion.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type GridChartModelVersion =\n  `sy-grid-chart-model/${number}.${number}.${number}`;","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChartModelEnvelope","title":"GridChartModelEnvelope","description":""}]}]}]},{"path":"/docs/types/GridChartOptionKey","kind":"type","title":"GridChartOptionKey","summary":"Fields, allowed values, and APIs that use GridChartOptionKey.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type GridChartOptionKey = \"title\" | \"subtitle\" | \"legend\" | \"stacked\" | \"xAxisTitle\" | \"yAxisTitle\" | \"theme\" | \"background\";","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChartEvent","title":"GridChartEvent","description":""}]}]}]},{"path":"/docs/types/GridChartOptions","kind":"type","title":"GridChartOptions","summary":"Fields, allowed values, and APIs that use GridChartOptions.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface GridChartOptions extends GridChartProperties {\n  readonly theme: string | null;\n  readonly background: string | null;\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChartEvent","title":"GridChartEvent","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChartProperties","title":"GridChartProperties","description":""}]}]}]},{"path":"/docs/types/GridChartPivotSelectionState","kind":"type","title":"GridChartPivotSelectionState","summary":"Fields, allowed values, and APIs that use GridChartPivotSelectionState.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/ChartLinkSourceInput","title":"ChartLinkSourceInput","description":""},{"path":"/docs/types/GridChartModel","title":"GridChartModel","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChartPivotTotalsPolicy","title":"GridChartPivotTotalsPolicy","description":""}]}]}]},{"path":"/docs/types/GridChartPivotTotalColumnMode","kind":"type","title":"GridChartPivotTotalColumnMode","summary":"Fields, allowed values, and APIs that use GridChartPivotTotalColumnMode.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type GridChartPivotTotalColumnMode =\n  \"exclude\" | \"include\" | \"only\";","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChartPivotTotalsPolicy","title":"GridChartPivotTotalsPolicy","description":""}]}]}]},{"path":"/docs/types/GridChartPivotTotalRowMode","kind":"type","title":"GridChartPivotTotalRowMode","summary":"Fields, allowed values, and APIs that use GridChartPivotTotalRowMode.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type GridChartPivotTotalRowMode = \"exclude\" | \"include\";","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChartPivotTotalsPolicy","title":"GridChartPivotTotalsPolicy","description":""}]}]}]},{"path":"/docs/types/GridChartPivotTotalsPolicy","kind":"type","title":"GridChartPivotTotalsPolicy","summary":"Fields, allowed values, and APIs that use GridChartPivotTotalsPolicy.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface GridChartPivotTotalsPolicy {\n  readonly totalColumns: GridChartPivotTotalColumnMode;\n  readonly subtotalRows: GridChartPivotTotalRowMode;\n  readonly grandTotalRow: GridChartPivotTotalRowMode;\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChartPivotSelectionState","title":"GridChartPivotSelectionState","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChartPivotTotalColumnMode","title":"GridChartPivotTotalColumnMode","description":""},{"path":"/docs/types/GridChartPivotTotalRowMode","title":"GridChartPivotTotalRowMode","description":""}]}]}]},{"path":"/docs/types/GridChartProjectionKind","kind":"type","title":"GridChartProjectionKind","summary":"Fields, allowed values, and APIs that use GridChartProjectionKind.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type GridChartProjectionKind = \"category-series\" | \"category-value\" | \"xy-pairs\";","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/ChartLinkChartReport","title":"ChartLinkChartReport","description":""},{"path":"/docs/types/GridChartEvent","title":"GridChartEvent","description":""},{"path":"/docs/types/GridChartMenuEntry","title":"GridChartMenuEntry","description":""},{"path":"/docs/types/GridChartTypeVerdict","title":"GridChartTypeVerdict","description":""}]}]}]},{"path":"/docs/types/GridChartProperties","kind":"type","title":"GridChartProperties","summary":"Fields, allowed values, and APIs that use GridChartProperties.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/ChartLinkCreateParams","title":"ChartLinkCreateParams","description":""},{"path":"/docs/types/GridChartModel","title":"GridChartModel","description":""},{"path":"/docs/types/GridChartOptions","title":"GridChartOptions","description":""},{"path":"/docs/types/SyGridChartProperties","title":"SyGridChartProperties","description":""}]}]}]},{"path":"/docs/types/GridChartSourceSnapshot","kind":"type","title":"GridChartSourceSnapshot","summary":"Fields, allowed values, and APIs that use GridChartSourceSnapshot.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChartModelSource","title":"GridChartModelSource","description":""}]}]}]},{"path":"/docs/types/GridChartSyncMutation","kind":"type","title":"GridChartSyncMutation","summary":"Fields, allowed values, and APIs that use GridChartSyncMutation.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type GridChartSyncMutation = \"filter\" | \"column\" | \"sort\" | \"edit\" | \"transaction\" | \"range-handle\";","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridChartSyncMutation","title":"SyGridChartSyncMutation","description":""}]}]}]},{"path":"/docs/types/GridChartTypeRefusalReason","kind":"type","title":"GridChartTypeRefusalReason","summary":"Fields, allowed values, and APIs that use GridChartTypeRefusalReason.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type GridChartTypeRefusalReason =\n  \"variant-datum-shape\" | \"single-value-shape\" | \"stage-shape\" | \"unknown-chart-type\";","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChartTypeVerdict","title":"GridChartTypeVerdict","description":""}]}]}]},{"path":"/docs/types/GridChartTypeVerdict","kind":"type","title":"GridChartTypeVerdict","summary":"Fields, allowed values, and APIs that use GridChartTypeVerdict.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChartMenuEntry","title":"GridChartMenuEntry","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyChartConcreteType","title":"SyChartConcreteType","description":""},{"path":"/docs/types/GridChartProjectionKind","title":"GridChartProjectionKind","description":""},{"path":"/docs/types/GridChartTypeRefusalReason","title":"GridChartTypeRefusalReason","description":""}]}]}]},{"path":"/docs/types/GridChunkFailureReason","kind":"type","title":"GridChunkFailureReason","summary":"Fields, allowed values, and APIs that use GridChunkFailureReason.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type GridChunkFailureReason = \"aborted\" | \"timeout\" | \"tier-unavailable\" | \"integrity\" | \"csp\" | \"offline\" | \"network\" | \"invalid-module\" | \"unknown\";","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChunkLoadEventDetail","title":"GridChunkLoadEventDetail","description":""}]}]}]},{"path":"/docs/types/GridChunkId","kind":"type","title":"GridChunkId","summary":"Fields, allowed values, and APIs that use GridChunkId.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/preloadChunks","title":"preloadChunks","description":"Preloads feature code. Does not activate entitlements or prefetch data."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChunkLoadEventDetail","title":"GridChunkLoadEventDetail","description":""},{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]}]},{"path":"/docs/types/GridChunkKind","kind":"type","title":"GridChunkKind","summary":"Fields, allowed values, and APIs that use GridChunkKind.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type GridChunkKind = 'esm' | 'wasm' | 'worker';","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChunkLoadEventDetail","title":"GridChunkLoadEventDetail","description":""}]}]}]},{"path":"/docs/types/GridChunkLoadEventDetail","kind":"type","title":"GridChunkLoadEventDetail","summary":"Fields, allowed values, and APIs that use GridChunkLoadEventDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/events/chunkLoading","title":"chunkLoading","description":"Emitted when feature code starts loading. Separate from row data query events."},{"path":"/docs/events/chunkLoaded","title":"chunkLoaded","description":"Emitted when feature code has loaded."},{"path":"/docs/events/chunkLoadFailed","title":"chunkLoadFailed","description":"Emitted when feature code loading fails. Use the error and feature name for retry or fallback guidance."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChunkId","title":"GridChunkId","description":""},{"path":"/docs/types/GridChunkKind","title":"GridChunkKind","description":""},{"path":"/docs/types/GridChunkTier","title":"GridChunkTier","description":""},{"path":"/docs/types/GridChunkFailureReason","title":"GridChunkFailureReason","description":""}]}]}]},{"path":"/docs/types/GridChunkTier","kind":"type","title":"GridChunkTier","summary":"Fields, allowed values, and APIs that use GridChunkTier.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type GridChunkTier = 'community' | 'pro';","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChunkLoadEventDetail","title":"GridChunkLoadEventDetail","description":""}]}]}]},{"path":"/docs/types/GridCollabConflict","kind":"type","title":"GridCollabConflict","summary":"Fields, allowed values, and APIs that use GridCollabConflict.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/events/collabConflictResolved","title":"collabConflictResolved","description":"Emitted when a concurrent editing conflict is resolved. Read the actual outcome before explaining it to users."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]}]},{"path":"/docs/types/GridCollabSelection","kind":"type","title":"GridCollabSelection","summary":"Fields, allowed values, and APIs that use GridCollabSelection.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface GridCollabSelection {\n  startRow: number;\n  startCol: number;\n  endRow: number;\n  endCol: number;\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridCollaboratorInfo","title":"GridCollaboratorInfo","description":""}]}]}]},{"path":"/docs/types/GridCollaboratorInfo","kind":"type","title":"GridCollaboratorInfo","summary":"Fields, allowed values, and APIs that use GridCollaboratorInfo.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/getCollaborators","title":"getCollaborators","description":"Reads current collaboration participant information."},{"path":"/docs/events/collaboratorJoined","title":"collaboratorJoined","description":"Emitted when a participant joins the collaboration room."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridPresenceChangedDetail","title":"GridPresenceChangedDetail","description":""},{"path":"/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""},{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridCollabSelection","title":"GridCollabSelection","description":""}]}]}]},{"path":"/docs/types/GridColumnDef","kind":"type","title":"GridColumnDef","summary":"Fields, allowed values, and APIs that use GridColumnDef.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface GridColumnDef {\n  key: string;\n  label: string;\n  width?: number;\n}","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/options/columns","title":"columns","description":"Compatibility input for column definitions. Prefer columnDefs in new configurations."}]}]}]},{"path":"/docs/types/GridColumnDefinition","kind":"type","title":"GridColumnDefinition","summary":"Fields, allowed values, and APIs that use GridColumnDefinition.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridApi","title":"SyGridApi","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridData","title":"GridData","description":""},{"path":"/docs/types/ColumnDef","title":"ColumnDef","description":""},{"path":"/docs/types/GridColumnGroupDef","title":"GridColumnGroupDef","description":""}]}]}]},{"path":"/docs/types/GridColumnGroupDef","kind":"type","title":"GridColumnGroupDef","summary":"Fields, allowed values, and APIs that use GridColumnGroupDef.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/options/columnDefs","title":"columnDefs","description":"Defines column data fields, headings, sizes, visibility, and editing. Include column groups to create multi-level headers."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/DetailGridOptions","title":"DetailGridOptions","description":""},{"path":"/docs/types/GridColumnDefinition","title":"GridColumnDefinition","description":""},{"path":"/docs/types/GridColumnGroupRef","title":"GridColumnGroupRef","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridData","title":"GridData","description":""},{"path":"/docs/types/ColumnGroupDef","title":"ColumnGroupDef","description":""},{"path":"/docs/types/ColumnDef","title":"ColumnDef","description":""}]}]}]},{"path":"/docs/types/GridColumnGroupRef","kind":"type","title":"GridColumnGroupRef","summary":"Fields, allowed values, and APIs that use GridColumnGroupRef.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/getColumnGroup","title":"getColumnGroup","description":"Finds a current column group by ID. Returns null if absent."},{"path":"/docs/methods/getColumnGroups","title":"getColumnGroups","description":"Reads current column group objects."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridColumnRef","title":"GridColumnRef","description":""},{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridData","title":"GridData","description":""},{"path":"/docs/types/GridLiveRef","title":"GridLiveRef","description":""},{"path":"/docs/types/GridColumnGroupDef","title":"GridColumnGroupDef","description":""},{"path":"/docs/types/GridColumnRef","title":"GridColumnRef","description":""}]}]}]},{"path":"/docs/types/GridColumnMenuContext","kind":"type","title":"GridColumnMenuContext","summary":"Fields, allowed values, and APIs that use GridColumnMenuContext.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface GridColumnMenuContext { readonly colId: string; readonly column: Readonly<ColumnDef>; }","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/options/columnMenuItems","title":"columnMenuItems","description":"Builds column menu items from the current column context."}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/ColumnDef","title":"ColumnDef","description":""}]}]}]},{"path":"/docs/types/GridColumnMenuItem","kind":"type","title":"GridColumnMenuItem","summary":"Fields, allowed values, and APIs that use GridColumnMenuItem.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/options/columnMenuItems","title":"columnMenuItems","description":"Builds column menu items from the current column context."}]}]}]},{"path":"/docs/types/GridColumnRef","kind":"type","title":"GridColumnRef","summary":"Fields, allowed values, and APIs that use GridColumnRef.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/getColumn","title":"getColumn","description":"Finds a current column object by ID. Returns null for missing columns and reflects live state rather than an initial columnDefs copy."},{"path":"/docs/methods/getColumns","title":"getColumns","description":"Reads current column objects to connect widths, order, and visibility to your app."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridColumnGroupRef","title":"GridColumnGroupRef","description":""},{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridData","title":"GridData","description":""},{"path":"/docs/types/GridLiveRef","title":"GridLiveRef","description":""},{"path":"/docs/types/ColumnDef","title":"ColumnDef","description":""},{"path":"/docs/types/GridColumnSortState","title":"GridColumnSortState","description":""},{"path":"/docs/types/GridColumnGroupRef","title":"GridColumnGroupRef","description":""}]}]}]},{"path":"/docs/types/GridColumnReorderedDetail","kind":"type","title":"GridColumnReorderedDetail","summary":"Fields, allowed values, and APIs that use GridColumnReorderedDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/events/columnReordered","title":"columnReordered","description":"Emitted when column order changes."}]}]}]},{"path":"/docs/types/GridColumnResizedDetail","kind":"type","title":"GridColumnResizedDetail","summary":"Fields, allowed values, and APIs that use GridColumnResizedDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/events/columnResized","title":"columnResized","description":"Emitted when column width changes. Include the current width in saved view state."}]}]}]},{"path":"/docs/types/GridColumnSortState","kind":"type","title":"GridColumnSortState","summary":"Fields, allowed values, and APIs that use GridColumnSortState.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface GridColumnSortState {\n  readonly direction: 'asc' | 'desc';\n  readonly index: number;\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridColumnRef","title":"GridColumnRef","description":""}]}]}]},{"path":"/docs/types/GridColumnVisibilityChangedDetail","kind":"type","title":"GridColumnVisibilityChangedDetail","summary":"Fields, allowed values, and APIs that use GridColumnVisibilityChangedDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface GridColumnVisibilityChangedDetail {\n  colId: string;\n  hidden: boolean;\n  hiddenIds: ReadonlyArray<string>;\n}","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/events/columnVisibilityChanged","title":"columnVisibilityChanged","description":"Emitted when column visibility changes."}]}]}]},{"path":"/docs/types/GridComponentClassDefinition","kind":"type","title":"GridComponentClassDefinition","summary":"Fields, allowed values, and APIs that use GridComponentClassDefinition.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface GridComponentClassDefinition<TInstance> {\n  readonly type: 'class';\n  readonly component: GridComponentConstructor<TInstance>;\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridEagerComponentDefinition","title":"GridEagerComponentDefinition","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridComponentConstructor","title":"GridComponentConstructor","description":""}]}]}]},{"path":"/docs/types/GridComponentConstructor","kind":"type","title":"GridComponentConstructor","summary":"Fields, allowed values, and APIs that use GridComponentConstructor.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface GridComponentConstructor<TInstance> {\n  new (): TInstance;\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridComponentClassDefinition","title":"GridComponentClassDefinition","description":""}]}]}]},{"path":"/docs/types/GridComponentDefinition","kind":"type","title":"GridComponentDefinition","summary":"Fields, allowed values, and APIs that use GridComponentDefinition.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type GridComponentDefinition<TInstance, TParams> =\n  | GridEagerComponentDefinition<TInstance, TParams>\n  | GridComponentLazyDefinition<TInstance, TParams>;","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridEditorDefinition","title":"GridEditorDefinition","description":""},{"path":"/docs/types/GridFilterDefinition","title":"GridFilterDefinition","description":""},{"path":"/docs/types/GridFloatingFilterDefinition","title":"GridFloatingFilterDefinition","description":""},{"path":"/docs/types/GridRendererDefinition","title":"GridRendererDefinition","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridEagerComponentDefinition","title":"GridEagerComponentDefinition","description":""},{"path":"/docs/types/GridComponentLazyDefinition","title":"GridComponentLazyDefinition","description":""}]}]}]},{"path":"/docs/types/GridComponentDefinitionFor","kind":"type","title":"GridComponentDefinitionFor","summary":"Fields, allowed values, and APIs that use GridComponentDefinitionFor.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/registerGridComponent","title":"registerGridComponent","description":"Registers a custom Grid component under the public component contract."},{"path":"/docs/methods/replaceGridComponent","title":"replaceGridComponent","description":"Replaces a registered custom component definition."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridComponentKind","title":"GridComponentKind","description":""},{"path":"/docs/types/GridComponentDefinitionMap","title":"GridComponentDefinitionMap","description":""}]}]}]},{"path":"/docs/types/GridComponentDefinitionMap","kind":"type","title":"GridComponentDefinitionMap","summary":"Fields, allowed values, and APIs that use GridComponentDefinitionMap.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridComponentDefinitionFor","title":"GridComponentDefinitionFor","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridRendererDefinition","title":"GridRendererDefinition","description":""},{"path":"/docs/types/GridEditorDefinition","title":"GridEditorDefinition","description":""},{"path":"/docs/types/GridFilterDefinition","title":"GridFilterDefinition","description":""},{"path":"/docs/types/GridFloatingFilterDefinition","title":"GridFloatingFilterDefinition","description":""}]}]}]},{"path":"/docs/types/GridComponentErrorCode","kind":"type","title":"GridComponentErrorCode","summary":"Fields, allowed values, and APIs that use GridComponentErrorCode.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridComponentErrorDetails","title":"GridComponentErrorDetails","description":""}]}]}]},{"path":"/docs/types/GridComponentErrorDetails","kind":"type","title":"GridComponentErrorDetails","summary":"Fields, allowed values, and APIs that use GridComponentErrorDetails.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/events/componentError","title":"componentError","description":"Reports custom component initialization or invocation errors. Handle them by target and phase rather than ignoring them."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridComponentErrorCode","title":"GridComponentErrorCode","description":""},{"path":"/docs/types/GridComponentLifecyclePhase","title":"GridComponentLifecyclePhase","description":""},{"path":"/docs/types/GridComponentKind","title":"GridComponentKind","description":""}]}]}]},{"path":"/docs/types/GridComponentFactory","kind":"type","title":"GridComponentFactory","summary":"Fields, allowed values, and APIs that use GridComponentFactory.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type GridComponentFactory<TInstance, TParams> = (\n  context: GridComponentFactoryContext<TParams>,\n) => GridMaybePromise<TInstance>;","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridComponentFactoryDefinition","title":"GridComponentFactoryDefinition","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridComponentFactoryContext","title":"GridComponentFactoryContext","description":""},{"path":"/docs/types/GridMaybePromise","title":"GridMaybePromise","description":""}]}]}]},{"path":"/docs/types/GridComponentFactoryContext","kind":"type","title":"GridComponentFactoryContext","summary":"Fields, allowed values, and APIs that use GridComponentFactoryContext.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface GridComponentFactoryContext<TParams> {\n  readonly params: TParams;\n  readonly signal: AbortSignal;\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridComponentFactory","title":"GridComponentFactory","description":""}]}]}]},{"path":"/docs/types/GridComponentFactoryDefinition","kind":"type","title":"GridComponentFactoryDefinition","summary":"Fields, allowed values, and APIs that use GridComponentFactoryDefinition.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface GridComponentFactoryDefinition<TInstance, TParams> {\n  readonly type: 'factory';\n  readonly create: GridComponentFactory<TInstance, TParams>;\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridEagerComponentDefinition","title":"GridEagerComponentDefinition","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridComponentFactory","title":"GridComponentFactory","description":""}]}]}]},{"path":"/docs/types/GridComponentKind","kind":"type","title":"GridComponentKind","summary":"Fields, allowed values, and APIs that use GridComponentKind.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type GridComponentKind = \"renderer\" | \"editor\" | \"filter\" | \"floatingFilter\";","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/registerGridComponent","title":"registerGridComponent","description":"Registers a custom Grid component under the public component contract."},{"path":"/docs/methods/replaceGridComponent","title":"replaceGridComponent","description":"Replaces a registered custom component definition."},{"path":"/docs/methods/unregisterGridComponent","title":"unregisterGridComponent","description":"Unregisters a custom component and returns success."},{"path":"/docs/methods/getRegisteredGridComponentNames","title":"getRegisteredGridComponentNames","description":"Reads registered custom Grid component names."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridComponentDefinitionFor","title":"GridComponentDefinitionFor","description":""},{"path":"/docs/types/GridComponentErrorDetails","title":"GridComponentErrorDetails","description":""},{"path":"/docs/types/GridComponentParams","title":"GridComponentParams","description":""},{"path":"/docs/types/GridLazyComponentContext","title":"GridLazyComponentContext","description":""},{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]}]},{"path":"/docs/types/GridComponentLazyDefinition","kind":"type","title":"GridComponentLazyDefinition","summary":"Fields, allowed values, and APIs that use GridComponentLazyDefinition.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridComponentDefinition","title":"GridComponentDefinition","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridLazyComponentContext","title":"GridLazyComponentContext","description":""},{"path":"/docs/types/GridEagerComponentDefinition","title":"GridEagerComponentDefinition","description":""}]}]}]},{"path":"/docs/types/GridComponentLifecyclePhase","kind":"type","title":"GridComponentLifecyclePhase","summary":"Fields, allowed values, and APIs that use GridComponentLifecyclePhase.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridComponentErrorDetails","title":"GridComponentErrorDetails","description":""}]}]}]},{"path":"/docs/types/GridComponentLocalDefinitions","kind":"type","title":"GridComponentLocalDefinitions","summary":"Fields, allowed values, and APIs that use GridComponentLocalDefinitions.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/options/components","title":"components","description":"Registers local custom renderers, editors, filters, and other components for this Grid."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridApi","title":"SyGridApi","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridRendererDefinition","title":"GridRendererDefinition","description":""},{"path":"/docs/types/GridEditorDefinition","title":"GridEditorDefinition","description":""},{"path":"/docs/types/GridFilterDefinition","title":"GridFilterDefinition","description":""},{"path":"/docs/types/GridFloatingFilterDefinition","title":"GridFloatingFilterDefinition","description":""}]}]}]},{"path":"/docs/types/GridComponentParams","kind":"type","title":"GridComponentParams","summary":"Fields, allowed values, and APIs that use GridComponentParams.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridEditorParams","title":"GridEditorParams","description":""},{"path":"/docs/types/GridFilterParams","title":"GridFilterParams","description":""},{"path":"/docs/types/GridFloatingFilterParams","title":"GridFloatingFilterParams","description":""},{"path":"/docs/types/GridRendererParams","title":"GridRendererParams","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridComponentKind","title":"GridComponentKind","description":""}]}]}]},{"path":"/docs/types/GridComponentRegistrationScope","kind":"type","title":"GridComponentRegistrationScope","summary":"Fields, allowed values, and APIs that use GridComponentRegistrationScope.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type GridComponentRegistrationScope = 'local' | 'global';","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/registerGridComponent","title":"registerGridComponent","description":"Registers a custom Grid component under the public component contract."},{"path":"/docs/methods/replaceGridComponent","title":"replaceGridComponent","description":"Replaces a registered custom component definition."},{"path":"/docs/methods/unregisterGridComponent","title":"unregisterGridComponent","description":"Unregisters a custom component and returns success."},{"path":"/docs/methods/getRegisteredGridComponentNames","title":"getRegisteredGridComponentNames","description":"Reads registered custom Grid component names."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]}]},{"path":"/docs/types/GridData","kind":"type","title":"GridData","summary":"Fields, allowed values, and APIs that use GridData.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type GridData = Record<string, unknown>;","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/options/rowData","title":"rowData","description":"The source row array for the table. Pass a new array to replace a complete query result, or use applyTransaction for partial updates."},{"path":"/docs/options/components","title":"components","description":"Registers local custom renderers, editors, filters, and other components for this Grid."},{"path":"/docs/options/externalFilter","title":"externalFilter","description":"Determines whether each row passes conditions outside the Grid. Supply activation and row predicates or a lifecycle instance."},{"path":"/docs/options/rowHeightFn","title":"rowHeightFn","description":"Calculates individual row heights from row indices and data. Call refreshRowHeights when relevant data changes."},{"path":"/docs/options/getRowId","title":"getRowId","description":"Returns a stable, unique row ID. The same business row must retain its ID after sorting, filtering, and editing."},{"path":"/docs/methods/getApi","title":"getApi","description":"Accesses the current Grid's typed API and app context. Read from a fully initialized element."},{"path":"/docs/methods/getColumn","title":"getColumn","description":"Finds a current column object by ID. Returns null for missing columns and reflects live state rather than an initial columnDefs copy."},{"path":"/docs/methods/getColumns","title":"getColumns","description":"Reads current column objects to connect widths, order, and visibility to your app."},{"path":"/docs/methods/getColumnGroup","title":"getColumnGroup","description":"Finds a current column group by ID. Returns null if absent."},{"path":"/docs/methods/getColumnGroups","title":"getColumnGroups","description":"Reads current column group objects."},{"path":"/docs/methods/getRow","title":"getRow","description":"Finds a row object by stable row ID, rather than display index."},{"path":"/docs/methods/getDisplayedRowAtIndex","title":"getDisplayedRowAtIndex","description":"Finds a row object by its current display index. Sorting, filtering, and grouping can change the row at an index."},{"path":"/docs/methods/forEachRow","title":"forEachRow","description":"Runs a callback for each row object. Use forEachDisplayedRow when display order matters."},{"path":"/docs/methods/forEachDisplayedRow","title":"forEachDisplayedRow","description":"Iterates current displayed rows for app features that distinguish source order from display order."},{"path":"/docs/methods/registerGridComponent","title":"registerGridComponent","description":"Registers a custom Grid component under the public component contract."},{"path":"/docs/methods/replaceGridComponent","title":"replaceGridComponent","description":"Replaces a registered custom component definition."},{"path":"/docs/methods/getCellRendererInstance","title":"getCellRendererInstance","description":"Queries mounted cell renderer instances. Offscreen cells may be unmounted because of virtualization."},{"path":"/docs/methods/getCellEditorInstance","title":"getCellEditorInstance","description":"Reads the mounted cell editor instance and context, or null if no editor exists."},{"path":"/docs/methods/getColumnFilterInstance","title":"getColumnFilterInstance","description":"Queries a column's custom filter instance. May return null if absent or not yet created."},{"path":"/docs/events/gridObjectChanged","title":"gridObjectChanged","description":"Emitted when public objects such as rows and columns change. Read the target and changes from detail."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/CellCallbackParams","title":"CellCallbackParams","description":""},{"path":"/docs/types/ColumnDef","title":"ColumnDef","description":""},{"path":"/docs/types/GridCellClickedDetail","title":"GridCellClickedDetail","description":""},{"path":"/docs/types/GridCellDoubleClickedDetail","title":"GridCellDoubleClickedDetail","description":""},{"path":"/docs/types/GridCellEditingRequestedDetail","title":"GridCellEditingRequestedDetail","description":""},{"path":"/docs/types/GridCellEditorDeclaration","title":"GridCellEditorDeclaration","description":""},{"path":"/docs/types/GridCellValueChangedDetail","title":"GridCellValueChangedDetail","description":""},{"path":"/docs/types/GridColumnDefinition","title":"GridColumnDefinition","description":""},{"path":"/docs/types/GridColumnGroupDef","title":"GridColumnGroupDef","description":""},{"path":"/docs/types/GridColumnGroupRef","title":"GridColumnGroupRef","description":""},{"path":"/docs/types/GridColumnRef","title":"GridColumnRef","description":""},{"path":"/docs/types/GridLiveObjectEvent","title":"GridLiveObjectEvent","description":""},{"path":"/docs/types/GridLiveObjectListener","title":"GridLiveObjectListener","description":""},{"path":"/docs/types/GridLiveRef","title":"GridLiveRef","description":""},{"path":"/docs/types/GridRemoteEditAppliedDetail","title":"GridRemoteEditAppliedDetail","description":""},{"path":"/docs/types/GridRowClickedDetail","title":"GridRowClickedDetail","description":""},{"path":"/docs/types/GridRowDataChangedDetail","title":"GridRowDataChangedDetail","description":""},{"path":"/docs/types/GridRowRef","title":"GridRowRef","description":""},{"path":"/docs/types/GridRowTransaction","title":"GridRowTransaction","description":""},{"path":"/docs/types/SyGridApi","title":"SyGridApi","description":""},{"path":"/docs/types/SyGridApiPdfDownloadOptions","title":"SyGridApiPdfDownloadOptions","description":""},{"path":"/docs/types/SyGridApiPdfExportOptions","title":"SyGridApiPdfExportOptions","description":""},{"path":"/docs/types/SyGridCellClickedEventDetail","title":"SyGridCellClickedEventDetail","description":""},{"path":"/docs/types/SyGridCellDoubleClickedEventDetail","title":"SyGridCellDoubleClickedEventDetail","description":""},{"path":"/docs/types/SyGridCellEditingRequestedEventDetail","title":"SyGridCellEditingRequestedEventDetail","description":""},{"path":"/docs/types/SyGridCellTooltipTarget","title":"SyGridCellTooltipTarget","description":""},{"path":"/docs/types/SyGridCellValueChangedEventDetail","title":"SyGridCellValueChangedEventDetail","description":""},{"path":"/docs/types/SyGridColSpanParams","title":"SyGridColSpanParams","description":""},{"path":"/docs/types/SyGridCustomEvent","title":"SyGridCustomEvent","description":""},{"path":"/docs/types/SyGridEventListener","title":"SyGridEventListener","description":""},{"path":"/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""},{"path":"/docs/types/SyGridFullWidthRenderParams","title":"SyGridFullWidthRenderParams","description":""},{"path":"/docs/types/SyGridFullWidthRenderer","title":"SyGridFullWidthRenderer","description":""},{"path":"/docs/types/SyGridFullWidthRowInfo","title":"SyGridFullWidthRowInfo","description":""},{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""},{"path":"/docs/types/SyGridPinnedRow","title":"SyGridPinnedRow","description":""},{"path":"/docs/types/SyGridPinnedRowChange","title":"SyGridPinnedRowChange","description":""},{"path":"/docs/types/SyGridPinnedRowInfo","title":"SyGridPinnedRowInfo","description":""},{"path":"/docs/types/SyGridPinnedRowInput","title":"SyGridPinnedRowInput","description":""},{"path":"/docs/types/SyGridPinnedRowSetInput","title":"SyGridPinnedRowSetInput","description":""},{"path":"/docs/types/SyGridPinnedRowsChangedDetail","title":"SyGridPinnedRowsChangedDetail","description":""},{"path":"/docs/types/SyGridPinnedRowsReport","title":"SyGridPinnedRowsReport","description":""},{"path":"/docs/types/SyGridPinnedRowsResult","title":"SyGridPinnedRowsResult","description":""},{"path":"/docs/types/SyGridRowClickedEventDetail","title":"SyGridRowClickedEventDetail","description":""},{"path":"/docs/types/SyGridRowDataChangedEventDetail","title":"SyGridRowDataChangedEventDetail","description":""},{"path":"/docs/types/SyGridRowSpanParams","title":"SyGridRowSpanParams","description":""},{"path":"/docs/types/SyGridRowTransactionResult","title":"SyGridRowTransactionResult","description":""},{"path":"/docs/types/ValueFormatterParams","title":"ValueFormatterParams","description":""},{"path":"/docs/types/ValueGetterParams","title":"ValueGetterParams","description":""},{"path":"/docs/types/ValueParserParams","title":"ValueParserParams","description":""},{"path":"/docs/types/ValueSetterParams","title":"ValueSetterParams","description":""}]}]}]},{"path":"/docs/types/GridEagerComponentDefinition","kind":"type","title":"GridEagerComponentDefinition","summary":"Fields, allowed values, and APIs that use GridEagerComponentDefinition.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type GridEagerComponentDefinition<TInstance, TParams> =\n  | GridComponentFactoryDefinition<TInstance, TParams>\n  | GridComponentClassDefinition<TInstance>;","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridComponentDefinition","title":"GridComponentDefinition","description":""},{"path":"/docs/types/GridComponentLazyDefinition","title":"GridComponentLazyDefinition","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridComponentFactoryDefinition","title":"GridComponentFactoryDefinition","description":""},{"path":"/docs/types/GridComponentClassDefinition","title":"GridComponentClassDefinition","description":""}]}]}]},{"path":"/docs/types/GridEditSource","kind":"type","title":"GridEditSource","summary":"Fields, allowed values, and APIs that use GridEditSource.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type GridEditSource = 'local' | 'remote' | 'undo' | 'redo';","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/applyTransaction","title":"applyTransaction","description":"Adds, updates, and removes source rows by stable ID. Inspect results separately from app server saving."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridCellValueChangedDetail","title":"GridCellValueChangedDetail","description":""},{"path":"/docs/types/GridRowDataChangedDetail","title":"GridRowDataChangedDetail","description":""}]}]}]},{"path":"/docs/types/GridEditorDefinition","kind":"type","title":"GridEditorDefinition","summary":"Fields, allowed values, and APIs that use GridEditorDefinition.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridCellEditorDeclaration","title":"GridCellEditorDeclaration","description":""},{"path":"/docs/types/GridComponentDefinitionMap","title":"GridComponentDefinitionMap","description":""},{"path":"/docs/types/GridComponentLocalDefinitions","title":"GridComponentLocalDefinitions","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridComponentDefinition","title":"GridComponentDefinition","description":""},{"path":"/docs/types/GridEditorInstance","title":"GridEditorInstance","description":""},{"path":"/docs/types/GridEditorParams","title":"GridEditorParams","description":""}]}]}]},{"path":"/docs/types/GridEditorInstance","kind":"type","title":"GridEditorInstance","summary":"Fields, allowed values, and APIs that use GridEditorInstance.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/getCellEditorInstance","title":"getCellEditorInstance","description":"Reads the mounted cell editor instance and context, or null if no editor exists."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridEditorDefinition","title":"GridEditorDefinition","description":""},{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridGuiComponent","title":"GridGuiComponent","description":""},{"path":"/docs/types/GridEditorParams","title":"GridEditorParams","description":""},{"path":"/docs/types/GridMaybePromise","title":"GridMaybePromise","description":""},{"path":"/docs/types/GridEditorValidationError","title":"GridEditorValidationError","description":""}]}]}]},{"path":"/docs/types/GridEditorParams","kind":"type","title":"GridEditorParams","summary":"Fields, allowed values, and APIs that use GridEditorParams.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/getCellEditorInstance","title":"getCellEditorInstance","description":"Reads the mounted cell editor instance and context, or null if no editor exists."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridEditorDefinition","title":"GridEditorDefinition","description":""},{"path":"/docs/types/GridEditorInstance","title":"GridEditorInstance","description":""},{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridComponentParams","title":"GridComponentParams","description":""}]}]}]},{"path":"/docs/types/GridEditorValidationError","kind":"type","title":"GridEditorValidationError","summary":"Fields, allowed values, and APIs that use GridEditorValidationError.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface GridEditorValidationError {\n  readonly message: string;\n  readonly code?: string;\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridEditorInstance","title":"GridEditorInstance","description":""}]}]}]},{"path":"/docs/types/GridEmptyStateActionDetail","kind":"type","title":"GridEmptyStateActionDetail","summary":"Fields, allowed values, and APIs that use GridEmptyStateActionDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface GridEmptyStateActionDetail {\n  kind: EmptyStateKind;\n  action: 'clear-filters' | 'reload';\n}","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/events/emptyStateActionClicked","title":"emptyStateActionClicked","description":"Emitted when an empty-state action button is clicked. Connect the app flow appropriate to the action type."}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/EmptyStateKind","title":"EmptyStateKind","description":""}]}]}]},{"path":"/docs/types/GridEngineMode","kind":"type","title":"GridEngineMode","summary":"Fields, allowed values, and APIs that use GridEngineMode.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type GridEngineMode = 'auto' | GridEngineTier;","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/options/engine","title":"engine","description":"Requests automatic selection, standard JavaScript, or Pro processing. Inspect the actual result with getActiveTier."}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridEngineTier","title":"GridEngineTier","description":""}]}]}]},{"path":"/docs/types/GridEngineTier","kind":"type","title":"GridEngineTier","summary":"Fields, allowed values, and APIs that use GridEngineTier.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type GridEngineTier = 'standard' | 'pro';","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/getActiveTier","title":"getActiveTier","description":"Reads the actual active processing tier, which may differ from the requested engine mode."},{"path":"/docs/events/queryComplete","title":"queryComplete","description":"Emitted when an engine query completes. Read results and actual execution tier from detail for performance and result feedback."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridEngineMode","title":"GridEngineMode","description":""},{"path":"/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""},{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]}]},{"path":"/docs/types/GridEventSource","kind":"type","title":"GridEventSource","summary":"Fields, allowed values, and APIs that use GridEventSource.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type GridEventSource =\n  | 'api'\n  | 'ui'\n  | 'state'\n  | 'rowData'\n  | 'columnDefs'\n  | 'disconnect';","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridLiveObjectEvent","title":"GridLiveObjectEvent","description":""}]}]}]},{"path":"/docs/types/GridExternalFilterCallbacks","kind":"type","title":"GridExternalFilterCallbacks","summary":"Fields, allowed values, and APIs that use GridExternalFilterCallbacks.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/options/externalFilter","title":"externalFilter","description":"Determines whether each row passes conditions outside the Grid. Supply activation and row predicates or a lifecycle instance."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridApi","title":"SyGridApi","description":""}]}]}]},{"path":"/docs/types/GridExternalFilterInstance","kind":"type","title":"GridExternalFilterInstance","summary":"Fields, allowed values, and APIs that use GridExternalFilterInstance.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/options/externalFilter","title":"externalFilter","description":"Determines whether each row passes conditions outside the Grid. Supply activation and row predicates or a lifecycle instance."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridApi","title":"SyGridApi","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridMaybePromise","title":"GridMaybePromise","description":""}]}]}]},{"path":"/docs/types/GridFieldLeaf","kind":"type","title":"GridFieldLeaf","summary":"Fields, allowed values, and APIs that use GridFieldLeaf.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/NestedObject","title":"NestedObject","description":""}]}]}]},{"path":"/docs/types/GridFieldPath","kind":"type","title":"GridFieldPath","summary":"Fields, allowed values, and APIs that use GridFieldPath.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/columns/field","title":"field","description":"Required field path for reading a value from source rows. Use the data key, not a display heading."},{"path":"/docs/columns/tooltipField","title":"tooltipField","description":"Source data field used for tooltips."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/ColumnDef","title":"ColumnDef","description":""},{"path":"/docs/types/GridRowRef","title":"GridRowRef","description":""},{"path":"/docs/types/SyGridCellClickedEventDetail","title":"SyGridCellClickedEventDetail","description":""},{"path":"/docs/types/SyGridCellDoubleClickedEventDetail","title":"SyGridCellDoubleClickedEventDetail","description":""},{"path":"/docs/types/SyGridCellEditingRequestedEventDetail","title":"SyGridCellEditingRequestedEventDetail","description":""},{"path":"/docs/types/SyGridCellTooltipTarget","title":"SyGridCellTooltipTarget","description":""},{"path":"/docs/types/SyGridCellValueChangedEventDetail","title":"SyGridCellValueChangedEventDetail","description":""},{"path":"/docs/types/ValueParserParams","title":"ValueParserParams","description":""},{"path":"/docs/types/ValueSetterParams","title":"ValueSetterParams","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/StringKey","title":"StringKey","description":""},{"path":"/docs/types/NestedObject","title":"NestedObject","description":""},{"path":"/docs/types/GridFieldPathLevel2","title":"GridFieldPathLevel2","description":""}]}]}]},{"path":"/docs/types/GridFieldPathLevel2","kind":"type","title":"GridFieldPathLevel2","summary":"Fields, allowed values, and APIs that use GridFieldPathLevel2.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridFieldPath","title":"GridFieldPath","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/StringKey","title":"StringKey","description":""},{"path":"/docs/types/NestedObject","title":"NestedObject","description":""}]}]}]},{"path":"/docs/types/GridFilterChangedDetail","kind":"type","title":"GridFilterChangedDetail","summary":"Fields, allowed values, and APIs that use GridFilterChangedDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/events/filterChanged","title":"filterChanged","description":"Emitted when applied filters change. Distinguish from filterModified, which describes input changes."}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/ActiveFilter","title":"ActiveFilter","description":""},{"path":"/docs/types/ActiveFilterMap","title":"ActiveFilterMap","description":""}]}]}]},{"path":"/docs/types/GridFilterDefinition","kind":"type","title":"GridFilterDefinition","summary":"Fields, allowed values, and APIs that use GridFilterDefinition.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/columns/filter","title":"filter","description":"Built-in filter type or custom filter definition for this column."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/ColumnDef","title":"ColumnDef","description":""},{"path":"/docs/types/GridComponentDefinitionMap","title":"GridComponentDefinitionMap","description":""},{"path":"/docs/types/GridComponentLocalDefinitions","title":"GridComponentLocalDefinitions","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridComponentDefinition","title":"GridComponentDefinition","description":""},{"path":"/docs/types/GridFilterInstance","title":"GridFilterInstance","description":""},{"path":"/docs/types/GridFilterParams","title":"GridFilterParams","description":""}]}]}]},{"path":"/docs/types/GridFilterInstance","kind":"type","title":"GridFilterInstance","summary":"Fields, allowed values, and APIs that use GridFilterInstance.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/getColumnFilterInstance","title":"getColumnFilterInstance","description":"Queries a column's custom filter instance. May return null if absent or not yet created."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridFilterDefinition","title":"GridFilterDefinition","description":""},{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridGuiComponent","title":"GridGuiComponent","description":""},{"path":"/docs/types/GridFilterParams","title":"GridFilterParams","description":""},{"path":"/docs/types/GridMaybePromise","title":"GridMaybePromise","description":""}]}]}]},{"path":"/docs/types/GridFilterModifiedDetail","kind":"type","title":"GridFilterModifiedDetail","summary":"Fields, allowed values, and APIs that use GridFilterModifiedDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface GridFilterModifiedDetail {\n  field: string;\n  source: 'component';\n}","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/events/filterModified","title":"filterModified","description":"Emitted when filter input changes. Filters with an Apply button may not yet have updated result rows."}]}]}]},{"path":"/docs/types/GridFilterParams","kind":"type","title":"GridFilterParams","summary":"Fields, allowed values, and APIs that use GridFilterParams.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridFilterDefinition","title":"GridFilterDefinition","description":""},{"path":"/docs/types/GridFilterInstance","title":"GridFilterInstance","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridComponentParams","title":"GridComponentParams","description":""}]}]}]},{"path":"/docs/types/GridFloatingFilterDefinition","kind":"type","title":"GridFloatingFilterDefinition","summary":"Fields, allowed values, and APIs that use GridFloatingFilterDefinition.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/columns/floatingFilterComponent","title":"floatingFilterComponent","description":"Custom filter input component displayed below the header."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/ColumnDef","title":"ColumnDef","description":""},{"path":"/docs/types/GridComponentDefinitionMap","title":"GridComponentDefinitionMap","description":""},{"path":"/docs/types/GridComponentLocalDefinitions","title":"GridComponentLocalDefinitions","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridComponentDefinition","title":"GridComponentDefinition","description":""},{"path":"/docs/types/GridFloatingFilterInstance","title":"GridFloatingFilterInstance","description":""},{"path":"/docs/types/GridFloatingFilterParams","title":"GridFloatingFilterParams","description":""}]}]}]},{"path":"/docs/types/GridFloatingFilterInstance","kind":"type","title":"GridFloatingFilterInstance","summary":"Fields, allowed values, and APIs that use GridFloatingFilterInstance.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridFloatingFilterDefinition","title":"GridFloatingFilterDefinition","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridGuiComponent","title":"GridGuiComponent","description":""},{"path":"/docs/types/GridFloatingFilterParams","title":"GridFloatingFilterParams","description":""},{"path":"/docs/types/GridMaybePromise","title":"GridMaybePromise","description":""}]}]}]},{"path":"/docs/types/GridFloatingFilterParams","kind":"type","title":"GridFloatingFilterParams","summary":"Fields, allowed values, and APIs that use GridFloatingFilterParams.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridFloatingFilterDefinition","title":"GridFloatingFilterDefinition","description":""},{"path":"/docs/types/GridFloatingFilterInstance","title":"GridFloatingFilterInstance","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridComponentParams","title":"GridComponentParams","description":""}]}]}]},{"path":"/docs/types/GridFocusHandoff","kind":"type","title":"GridFocusHandoff","summary":"Fields, allowed values, and APIs that use GridFocusHandoff.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridRendererParams","title":"GridRendererParams","description":""}]}]}]},{"path":"/docs/types/GridFormulaErrorDetail","kind":"type","title":"GridFormulaErrorDetail","summary":"Fields, allowed values, and APIs that use GridFormulaErrorDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/events/formulaError","title":"formulaError","description":"Emitted when formula evaluation fails. Connect target and error information to a review UI."}]}]}]},{"path":"/docs/types/GridFormulaEvaluatedDetail","kind":"type","title":"GridFormulaEvaluatedDetail","summary":"Fields, allowed values, and APIs that use GridFormulaEvaluatedDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/events/formulaEvaluated","title":"formulaEvaluated","description":"Emitted when a formula result is calculated. Distinguish formula text from its result."}]}]}]},{"path":"/docs/types/GridGetRowId","kind":"type","title":"GridGetRowId","summary":"Fields, allowed values, and APIs that use GridGetRowId.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type GridGetRowId<TData> = (data: Readonly<TData>) => GridRowId;","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridApi","title":"SyGridApi","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridRowId","title":"GridRowId","description":""}]}]}]},{"path":"/docs/types/GridGuiComponent","kind":"type","title":"GridGuiComponent","summary":"Fields, allowed values, and APIs that use GridGuiComponent.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridEditorInstance","title":"GridEditorInstance","description":""},{"path":"/docs/types/GridFilterInstance","title":"GridFilterInstance","description":""},{"path":"/docs/types/GridFloatingFilterInstance","title":"GridFloatingFilterInstance","description":""},{"path":"/docs/types/GridRendererInstance","title":"GridRendererInstance","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridMaybePromise","title":"GridMaybePromise","description":""}]}]}]},{"path":"/docs/types/GridHistoryChangedDetail","kind":"type","title":"GridHistoryChangedDetail","summary":"Fields, allowed values, and APIs that use GridHistoryChangedDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/events/historyChanged","title":"historyChanged","description":"Emitted when undo/redo history changes. Update button availability and current depths."}]}]}]},{"path":"/docs/types/GridLazyComponentContext","kind":"type","title":"GridLazyComponentContext","summary":"Fields, allowed values, and APIs that use GridLazyComponentContext.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface GridLazyComponentContext {\n  readonly componentKind: GridComponentKind;\n  readonly componentName?: string;\n  readonly signal: AbortSignal;\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridComponentLazyDefinition","title":"GridComponentLazyDefinition","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridComponentKind","title":"GridComponentKind","description":""}]}]}]},{"path":"/docs/types/GridLiveObjectEvent","kind":"type","title":"GridLiveObjectEvent","summary":"Fields, allowed values, and APIs that use GridLiveObjectEvent.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/events/gridObjectChanged","title":"gridObjectChanged","description":"Emitted when public objects such as rows and columns change. Read the target and changes from detail."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridLiveObjectListener","title":"GridLiveObjectListener","description":""},{"path":"/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridData","title":"GridData","description":""},{"path":"/docs/types/GridMutationId","title":"GridMutationId","description":""},{"path":"/docs/types/GridLiveObjectKind","title":"GridLiveObjectKind","description":""},{"path":"/docs/types/GridLiveObjectEventType","title":"GridLiveObjectEventType","description":""},{"path":"/docs/types/GridRowId","title":"GridRowId","description":""},{"path":"/docs/types/GridEventSource","title":"GridEventSource","description":""},{"path":"/docs/types/GridRefInvalidationReason","title":"GridRefInvalidationReason","description":""}]}]}]},{"path":"/docs/types/GridLiveObjectEventType","kind":"type","title":"GridLiveObjectEventType","summary":"Fields, allowed values, and APIs that use GridLiveObjectEventType.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridLiveObjectEvent","title":"GridLiveObjectEvent","description":""},{"path":"/docs/types/GridLiveRef","title":"GridLiveRef","description":""}]}]}]},{"path":"/docs/types/GridLiveObjectKind","kind":"type","title":"GridLiveObjectKind","summary":"Fields, allowed values, and APIs that use GridLiveObjectKind.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type GridLiveObjectKind = 'column' | 'columnGroup' | 'row';","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridLiveObjectEvent","title":"GridLiveObjectEvent","description":""}]}]}]},{"path":"/docs/types/GridLiveObjectListener","kind":"type","title":"GridLiveObjectListener","summary":"Fields, allowed values, and APIs that use GridLiveObjectListener.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type GridLiveObjectListener<TData = GridData, TValue = unknown> = (\n  event: GridLiveObjectEvent<TData, TValue>,\n) => void;","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridLiveRef","title":"GridLiveRef","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridData","title":"GridData","description":""},{"path":"/docs/types/GridLiveObjectEvent","title":"GridLiveObjectEvent","description":""}]}]}]},{"path":"/docs/types/GridLiveRef","kind":"type","title":"GridLiveRef","summary":"Fields, allowed values, and APIs that use GridLiveRef.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridColumnGroupRef","title":"GridColumnGroupRef","description":""},{"path":"/docs/types/GridColumnRef","title":"GridColumnRef","description":""},{"path":"/docs/types/GridRowRef","title":"GridRowRef","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridData","title":"GridData","description":""},{"path":"/docs/types/GridRowId","title":"GridRowId","description":""},{"path":"/docs/types/GridRefInvalidationReason","title":"GridRefInvalidationReason","description":""},{"path":"/docs/types/GridLiveObjectEventType","title":"GridLiveObjectEventType","description":""},{"path":"/docs/types/GridLiveObjectListener","title":"GridLiveObjectListener","description":""}]}]}]},{"path":"/docs/types/GridLocale","kind":"type","title":"GridLocale","summary":"Fields, allowed values, and APIs that use GridLocale.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type GridLocale = GridLocalePresetName | GridLocaleObject | null | undefined;","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/options/locale","title":"locale","description":"A Korean, English, or Japanese preset, or an object overriding default messages. Translate source data and column headings in your app."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridLocaleChangedDetail","title":"GridLocaleChangedDetail","description":""},{"path":"/docs/types/GridLocaleObject","title":"GridLocaleObject","description":""},{"path":"/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridLocalePresetName","title":"GridLocalePresetName","description":""},{"path":"/docs/types/GridLocaleObject","title":"GridLocaleObject","description":""}]}]}]},{"path":"/docs/types/GridLocaleChangedDetail","kind":"type","title":"GridLocaleChangedDetail","summary":"Fields, allowed values, and APIs that use GridLocaleChangedDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface GridLocaleChangedDetail {\n  locale: GridLocale;\n  resolvedMessages: Record<string, string>;\n}","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/events/localeChanged","title":"localeChanged","description":"Emitted when the Grid locale changes."}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridLocale","title":"GridLocale","description":""}]}]}]},{"path":"/docs/types/GridLocaleObject","kind":"type","title":"GridLocaleObject","summary":"Fields, allowed values, and APIs that use GridLocaleObject.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface GridLocaleObject {\n  extends?: GridLocale;\n  messages?: GridMessageOverrides;\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridLocale","title":"GridLocale","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridLocale","title":"GridLocale","description":""},{"path":"/docs/types/GridMessageOverrides","title":"GridMessageOverrides","description":""}]}]}]},{"path":"/docs/types/GridLocalePresetName","kind":"type","title":"GridLocalePresetName","summary":"Fields, allowed values, and APIs that use GridLocalePresetName.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type GridLocalePresetName = 'en' | 'ko' | 'ja';","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridLocale","title":"GridLocale","description":""}]}]}]},{"path":"/docs/types/GridMaybePromise","kind":"type","title":"GridMaybePromise","summary":"Fields, allowed values, and APIs that use GridMaybePromise.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type GridMaybePromise<T> = T | Promise<T>;","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridAsyncValueLoader","title":"GridAsyncValueLoader","description":""},{"path":"/docs/types/GridComponentFactory","title":"GridComponentFactory","description":""},{"path":"/docs/types/GridEditorInstance","title":"GridEditorInstance","description":""},{"path":"/docs/types/GridExternalFilterInstance","title":"GridExternalFilterInstance","description":""},{"path":"/docs/types/GridFilterInstance","title":"GridFilterInstance","description":""},{"path":"/docs/types/GridFloatingFilterInstance","title":"GridFloatingFilterInstance","description":""},{"path":"/docs/types/GridGuiComponent","title":"GridGuiComponent","description":""},{"path":"/docs/types/GridRendererInstance","title":"GridRendererInstance","description":""}]}]}]},{"path":"/docs/types/GridMessageOverrides","kind":"type","title":"GridMessageOverrides","summary":"Fields, allowed values, and APIs that use GridMessageOverrides.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type GridMessageOverrides = Partial<Record<MessageKey, string>>;","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridLocaleObject","title":"GridLocaleObject","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/MessageKey","title":"MessageKey","description":""}]}]}]},{"path":"/docs/types/GridMountedComponentLookup","kind":"type","title":"GridMountedComponentLookup","summary":"Fields, allowed values, and APIs that use GridMountedComponentLookup.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/getCellEditorInstance","title":"getCellEditorInstance","description":"Reads the mounted cell editor instance and context, or null if no editor exists."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]}]},{"path":"/docs/types/GridMutationId","kind":"type","title":"GridMutationId","summary":"Fields, allowed values, and APIs that use GridMutationId.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type GridMutationId = `grid-mutation-${number}`;","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/undoSpillTransaction","title":"undoSpillTransaction","description":"Undoes a dynamic array formula transaction and returns the result."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridLiveObjectEvent","title":"GridLiveObjectEvent","description":""},{"path":"/docs/types/SyGridBatchCommitReport","title":"SyGridBatchCommitReport","description":""},{"path":"/docs/types/SyGridBatchEditEndEventDetail","title":"SyGridBatchEditEndEventDetail","description":""},{"path":"/docs/types/SyGridBatchEditStartEventDetail","title":"SyGridBatchEditStartEventDetail","description":""},{"path":"/docs/types/SyGridFillEndEventDetail","title":"SyGridFillEndEventDetail","description":""},{"path":"/docs/types/SyGridFillRangeReport","title":"SyGridFillRangeReport","description":""},{"path":"/docs/types/SyGridFillStartEventDetail","title":"SyGridFillStartEventDetail","description":""},{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""},{"path":"/docs/types/SyGridRowEditReport","title":"SyGridRowEditReport","description":""},{"path":"/docs/types/SyGridRowValueChangedEventDetail","title":"SyGridRowValueChangedEventDetail","description":""},{"path":"/docs/types/SyGridServerStoreUpdatedDetail","title":"SyGridServerStoreUpdatedDetail","description":""},{"path":"/docs/types/SyGridSpillApplyResult","title":"SyGridSpillApplyResult","description":""},{"path":"/docs/types/SyGridSpillClearResult","title":"SyGridSpillClearResult","description":""},{"path":"/docs/types/SyGridSpillUndoResult","title":"SyGridSpillUndoResult","description":""}]}]}]},{"path":"/docs/types/GridNoteCell","kind":"type","title":"GridNoteCell","summary":"Fields, allowed values, and APIs that use GridNoteCell.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface GridNoteCell {\n  readonly rowId: string | number;\n  readonly colId: string;\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridCellNotesAdapter","title":"GridCellNotesAdapter","description":""}]}]}]},{"path":"/docs/types/GridNoteSaveResult","kind":"type","title":"GridNoteSaveResult","summary":"Fields, allowed values, and APIs that use GridNoteSaveResult.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridCellNotesAdapter","title":"GridCellNotesAdapter","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridCellNote","title":"GridCellNote","description":""}]}]}]},{"path":"/docs/types/GridPaginationChangedDetail","kind":"type","title":"GridPaginationChangedDetail","summary":"Fields, allowed values, and APIs that use GridPaginationChangedDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/events/paginationChanged","title":"paginationChanged","description":"Emitted when the page or page size changes. Synchronize external page indicators."}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/ActivePagination","title":"ActivePagination","description":""}]}]}]},{"path":"/docs/types/GridPathValue","kind":"type","title":"GridPathValue","summary":"Fields, allowed values, and APIs that use GridPathValue.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridRowRef","title":"GridRowRef","description":""}]}]}]},{"path":"/docs/types/GridPresenceChangedDetail","kind":"type","title":"GridPresenceChangedDetail","summary":"Fields, allowed values, and APIs that use GridPresenceChangedDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface GridPresenceChangedDetail {\n  collaborators: ReadonlyArray<GridCollaboratorInfo>;\n}","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/events/presenceChanged","title":"presenceChanged","description":"Emitted when participant positions or presence change."}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridCollaboratorInfo","title":"GridCollaboratorInfo","description":""}]}]}]},{"path":"/docs/types/GridQueryResult","kind":"type","title":"GridQueryResult","summary":"Fields, allowed values, and APIs that use GridQueryResult.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface GridQueryResult {\n  totalRows: number;\n  visibleRows: GridRow[];\n  computeMs: number;\n}","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/events/queryComplete","title":"queryComplete","description":"Emitted when an engine query completes. Read results and actual execution tier from detail for performance and result feedback."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridRow","title":"GridRow","description":""}]}]}]},{"path":"/docs/types/GridQuickFilterChangedDetail","kind":"type","title":"GridQuickFilterChangedDetail","summary":"Fields, allowed values, and APIs that use GridQuickFilterChangedDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface GridQuickFilterChangedDetail {\n  value: string;\n  previous: string;\n}","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/events/quickFilterChanged","title":"quickFilterChanged","description":"Emitted when quick-filter conditions change. Synchronize external search input values if needed."}]}]}]},{"path":"/docs/types/GridRefInvalidationReason","kind":"type","title":"GridRefInvalidationReason","summary":"Fields, allowed values, and APIs that use GridRefInvalidationReason.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type GridRefInvalidationReason =\n  | 'removed'\n  | 'definitions-replaced'\n  | 'data-replaced'\n  | 'disconnected';","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridLiveObjectEvent","title":"GridLiveObjectEvent","description":""},{"path":"/docs/types/GridLiveRef","title":"GridLiveRef","description":""}]}]}]},{"path":"/docs/types/GridRemoteEditAppliedDetail","kind":"type","title":"GridRemoteEditAppliedDetail","summary":"Fields, allowed values, and APIs that use GridRemoteEditAppliedDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/events/remoteEditApplied","title":"remoteEditApplied","description":"Emitted when a collaborator's edit is applied. Track its origin to avoid resending it as a local edit and creating a loop."}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridData","title":"GridData","description":""},{"path":"/docs/types/GridCellValueChangedDetail","title":"GridCellValueChangedDetail","description":""}]}]}]},{"path":"/docs/types/GridRendererCellIdentity","kind":"type","title":"GridRendererCellIdentity","summary":"Fields, allowed values, and APIs that use GridRendererCellIdentity.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface GridRendererCellIdentity {\n  readonly rowId: string | number;\n  readonly colId: string;\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridRendererDiscovery","title":"GridRendererDiscovery","description":""}]}]}]},{"path":"/docs/types/GridRendererDefinition","kind":"type","title":"GridRendererDefinition","summary":"Fields, allowed values, and APIs that use GridRendererDefinition.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/columns/cellRenderer","title":"cellRenderer","description":"Displays cells through text, html, vnode, or a registered custom renderer."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/ColumnDef","title":"ColumnDef","description":""},{"path":"/docs/types/GridComponentDefinitionMap","title":"GridComponentDefinitionMap","description":""},{"path":"/docs/types/GridComponentLocalDefinitions","title":"GridComponentLocalDefinitions","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridComponentDefinition","title":"GridComponentDefinition","description":""},{"path":"/docs/types/GridRendererInstance","title":"GridRendererInstance","description":""},{"path":"/docs/types/GridRendererParams","title":"GridRendererParams","description":""}]}]}]},{"path":"/docs/types/GridRendererDiscovery","kind":"type","title":"GridRendererDiscovery","summary":"Fields, allowed values, and APIs that use GridRendererDiscovery.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/getCellRendererInstance","title":"getCellRendererInstance","description":"Queries mounted cell renderer instances. Offscreen cells may be unmounted because of virtualization."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridRendererCellIdentity","title":"GridRendererCellIdentity","description":""},{"path":"/docs/types/GridRendererHost","title":"GridRendererHost","description":""},{"path":"/docs/types/GridRendererInstance","title":"GridRendererInstance","description":""},{"path":"/docs/types/GridRendererGui","title":"GridRendererGui","description":""},{"path":"/docs/types/GridRendererParams","title":"GridRendererParams","description":""}]}]}]},{"path":"/docs/types/GridRendererGui","kind":"type","title":"GridRendererGui","summary":"Fields, allowed values, and APIs that use GridRendererGui.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type GridRendererGui = HTMLElement | CellRenderOutput;","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridRendererDiscovery","title":"GridRendererDiscovery","description":""},{"path":"/docs/types/GridRendererInstance","title":"GridRendererInstance","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/CellRenderOutput","title":"CellRenderOutput","description":""}]}]}]},{"path":"/docs/types/GridRendererHost","kind":"type","title":"GridRendererHost","summary":"Fields, allowed values, and APIs that use GridRendererHost.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type GridRendererHost = Pick<\n  HTMLElement,\n  'innerHTML' | 'replaceChildren' | 'textContent'\n> & Partial<Pick<HTMLElement, 'firstChild' | 'childNodes'>>;","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridRendererDiscovery","title":"GridRendererDiscovery","description":""}]}]}]},{"path":"/docs/types/GridRendererInstance","kind":"type","title":"GridRendererInstance","summary":"Fields, allowed values, and APIs that use GridRendererInstance.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridRendererDefinition","title":"GridRendererDefinition","description":""},{"path":"/docs/types/GridRendererDiscovery","title":"GridRendererDiscovery","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridGuiComponent","title":"GridGuiComponent","description":""},{"path":"/docs/types/GridRendererParams","title":"GridRendererParams","description":""},{"path":"/docs/types/GridRendererGui","title":"GridRendererGui","description":""},{"path":"/docs/types/GridMaybePromise","title":"GridMaybePromise","description":""}]}]}]},{"path":"/docs/types/GridRendererParams","kind":"type","title":"GridRendererParams","summary":"Fields, allowed values, and APIs that use GridRendererParams.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridRendererDefinition","title":"GridRendererDefinition","description":""},{"path":"/docs/types/GridRendererDiscovery","title":"GridRendererDiscovery","description":""},{"path":"/docs/types/GridRendererInstance","title":"GridRendererInstance","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/CellRendererInput","title":"CellRendererInput","description":""},{"path":"/docs/types/GridComponentParams","title":"GridComponentParams","description":""},{"path":"/docs/types/GridFocusHandoff","title":"GridFocusHandoff","description":""}]}]}]},{"path":"/docs/types/GridRichSelectEditorOptions","kind":"type","title":"GridRichSelectEditorOptions","summary":"Fields, allowed values, and APIs that use GridRichSelectEditorOptions.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridCellEditorDeclaration","title":"GridCellEditorDeclaration","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridRichSelectOption","title":"GridRichSelectOption","description":""},{"path":"/docs/types/GridAsyncValueLoader","title":"GridAsyncValueLoader","description":""}]}]}]},{"path":"/docs/types/GridRichSelectOption","kind":"type","title":"GridRichSelectOption","summary":"Fields, allowed values, and APIs that use GridRichSelectOption.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridRichSelectEditorOptions","title":"GridRichSelectEditorOptions","description":""}]}]}]},{"path":"/docs/types/GridRow","kind":"type","title":"GridRow","summary":"Fields, allowed values, and APIs that use GridRow.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface GridRow {\n  [key: string]: string | number | boolean | null;\n}","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/options/serverSideDatasource","title":"serverSideDatasource","description":"Data provider for a row model where the server handles sorting, filtering, grouping, and related requests."},{"path":"/docs/options/viewportDatasource","title":"viewportDatasource","description":"Viewport model supplying data for visible row ranges. Implement initialization, range changes, and cleanup."},{"path":"/docs/options/contextMenuItemsCallback","title":"contextMenuItemsCallback","description":"Returns cell context-menu items. Replaces the entire default list rather than appending to it."},{"path":"/docs/options/rows","title":"rows","description":"Compatibility input for source rows. Prefer rowData in new configurations and avoid conflicting inputs."},{"path":"/docs/options/isFullWidthRow","title":"isFullWidthRow","description":"Determines whether a row uses a full-width layout instead of individual column cells."},{"path":"/docs/options/fullWidthCellRenderer","title":"fullWidthCellRenderer","description":"Renderer for full-width row content. Uses a different input contract from regular cell renderers."},{"path":"/docs/options/fullWidthRowHeight","title":"fullWidthRowHeight","description":"Fixed height or per-row height function for full-width rows."},{"path":"/docs/options/pinnedTopRowData","title":"pinnedTopRowData","description":"Row data pinned above the scrolling table."},{"path":"/docs/options/pinnedBottomRowData","title":"pinnedBottomRowData","description":"Row data pinned below the scrolling table."},{"path":"/docs/methods/diffSnapshots","title":"diffSnapshots","description":"Compares two snapshots or a snapshot with current data. Omit the second ID to compare against current data."},{"path":"/docs/methods/applyTransaction","title":"applyTransaction","description":"Adds, updates, and removes source rows by stable ID. Inspect results separately from app server saving."},{"path":"/docs/methods/getDataAsCsv","title":"getDataAsCsv","description":"Returns an object with CSV text and output row/column counts. Read the string from its csv field."},{"path":"/docs/methods/exportDataAsCsv","title":"exportDataAsCsv","description":"Downloads CSV using current export conditions and returns the export result."},{"path":"/docs/methods/getFullWidthRowInfo","title":"getFullWidthRowInfo","description":"Reads one full-width row's information, or the complete layout report when no argument is supplied."},{"path":"/docs/methods/setPinnedRows","title":"setPinnedRows","description":"Sets top/bottom pinned row data and returns the application result."},{"path":"/docs/methods/getPinnedRows","title":"getPinnedRows","description":"Reads current pinned row data as a report."},{"path":"/docs/methods/getPinnedRowInfo","title":"getPinnedRowInfo","description":"Reads details of a specified pinned row."},{"path":"/docs/events/detailRowCreated","title":"detailRowCreated","description":"Emitted when a detail panel is created. Connect app resources using its row ID and parent data."},{"path":"/docs/events/pinnedRowsChanged","title":"pinnedRowsChanged","description":"Emitted when top/bottom pinned row data changes."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridQueryResult","title":"GridQueryResult","description":""},{"path":"/docs/types/SyGridPdfDownloadOptions","title":"SyGridPdfDownloadOptions","description":""},{"path":"/docs/types/SyGridPdfExportOptions","title":"SyGridPdfExportOptions","description":""}]}]}]},{"path":"/docs/types/GridRowClickedDetail","kind":"type","title":"GridRowClickedDetail","summary":"Fields, allowed values, and APIs that use GridRowClickedDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/events/rowClicked","title":"rowClicked","description":"Emitted on a row click. Distinguish the click itself from the resulting selection."}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridData","title":"GridData","description":""},{"path":"/docs/types/RowClickButton","title":"RowClickButton","description":""},{"path":"/docs/types/RowClickModifiers","title":"RowClickModifiers","description":""}]}]}]},{"path":"/docs/types/GridRowDataChangedDetail","kind":"type","title":"GridRowDataChangedDetail","summary":"Fields, allowed values, and APIs that use GridRowDataChangedDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/events/rowDataChanged","title":"rowDataChanged","description":"Emitted when source row data changes. Different from a change in display sorting."}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridData","title":"GridData","description":""},{"path":"/docs/types/GridEditSource","title":"GridEditSource","description":""}]}]}]},{"path":"/docs/types/GridRowHoverChangedDetail","kind":"type","title":"GridRowHoverChangedDetail","summary":"Fields, allowed values, and APIs that use GridRowHoverChangedDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface GridRowHoverChangedDetail {\n  hoveredRowId: string | number | null;\n  previousRowId: string | number | null;\n}","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/events/rowHoverChanged","title":"rowHoverChanged","description":"Emitted when the stateful hovered row changes. Unlike CSS-only hover, the app can read this state."}]}]}]},{"path":"/docs/types/GridRowId","kind":"type","title":"GridRowId","summary":"Fields, allowed values, and APIs that use GridRowId.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type GridRowId = string | number;","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/options/getRowId","title":"getRowId","description":"Returns a stable, unique row ID. The same business row must retain its ID after sorting, filtering, and editing."},{"path":"/docs/methods/getRow","title":"getRow","description":"Finds a row object by stable row ID, rather than display index."},{"path":"/docs/methods/stageBatchCell","title":"stageBatchCell","description":"Stages a batch value by row and column ID. Does not immediately persist final data."},{"path":"/docs/methods/startRowEdit","title":"startRowEdit","description":"Starts full-row editing for a row ID."},{"path":"/docs/methods/getCellRendererInstance","title":"getCellRendererInstance","description":"Queries mounted cell renderer instances. Offscreen cells may be unmounted because of virtualization."},{"path":"/docs/methods/destroyCellRendererInstance","title":"destroyCellRendererInstance","description":"Destroys a specified mounted cell renderer instance."},{"path":"/docs/methods/focusCellRendererInstance","title":"focusCellRendererInstance","description":"Moves focus into a mounted cell renderer and returns the result."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridGetRowId","title":"GridGetRowId","description":""},{"path":"/docs/types/GridLiveObjectEvent","title":"GridLiveObjectEvent","description":""},{"path":"/docs/types/GridLiveRef","title":"GridLiveRef","description":""},{"path":"/docs/types/GridRowRef","title":"GridRowRef","description":""},{"path":"/docs/types/SyGridBatchCommitReport","title":"SyGridBatchCommitReport","description":""},{"path":"/docs/types/SyGridCellValueChangedEventDetail","title":"SyGridCellValueChangedEventDetail","description":""},{"path":"/docs/types/SyGridEditRejectedCell","title":"SyGridEditRejectedCell","description":""},{"path":"/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""},{"path":"/docs/types/SyGridFillRangeReport","title":"SyGridFillRangeReport","description":""},{"path":"/docs/types/SyGridFullWidthLayoutReport","title":"SyGridFullWidthLayoutReport","description":""},{"path":"/docs/types/SyGridFullWidthRenderParams","title":"SyGridFullWidthRenderParams","description":""},{"path":"/docs/types/SyGridFullWidthRowInfo","title":"SyGridFullWidthRowInfo","description":""},{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""},{"path":"/docs/types/SyGridPendingBatchCell","title":"SyGridPendingBatchCell","description":""},{"path":"/docs/types/SyGridPinnedRow","title":"SyGridPinnedRow","description":""},{"path":"/docs/types/SyGridPinnedRowChange","title":"SyGridPinnedRowChange","description":""},{"path":"/docs/types/SyGridPinnedRowInput","title":"SyGridPinnedRowInput","description":""},{"path":"/docs/types/SyGridPinnedRowRejection","title":"SyGridPinnedRowRejection","description":""},{"path":"/docs/types/SyGridPinnedRowsChangedDetail","title":"SyGridPinnedRowsChangedDetail","description":""},{"path":"/docs/types/SyGridPinnedRowsReport","title":"SyGridPinnedRowsReport","description":""},{"path":"/docs/types/SyGridPinnedRowsResult","title":"SyGridPinnedRowsResult","description":""},{"path":"/docs/types/SyGridRowDragStartInput","title":"SyGridRowDragStartInput","description":""},{"path":"/docs/types/SyGridRowEditReport","title":"SyGridRowEditReport","description":""},{"path":"/docs/types/SyGridRowEditStartEventDetail","title":"SyGridRowEditStartEventDetail","description":""},{"path":"/docs/types/SyGridRowEditStopEventDetail","title":"SyGridRowEditStopEventDetail","description":""},{"path":"/docs/types/SyGridRowValueChangedEventDetail","title":"SyGridRowValueChangedEventDetail","description":""},{"path":"/docs/types/SyGridSelectionChangedEventDetail","title":"SyGridSelectionChangedEventDetail","description":""}]}]}]},{"path":"/docs/types/GridRowRef","kind":"type","title":"GridRowRef","summary":"Fields, allowed values, and APIs that use GridRowRef.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/getRow","title":"getRow","description":"Finds a row object by stable row ID, rather than display index."},{"path":"/docs/methods/getDisplayedRowAtIndex","title":"getDisplayedRowAtIndex","description":"Finds a row object by its current display index. Sorting, filtering, and grouping can change the row at an index."},{"path":"/docs/methods/forEachRow","title":"forEachRow","description":"Runs a callback for each row object. Use forEachDisplayedRow when display order matters."},{"path":"/docs/methods/forEachDisplayedRow","title":"forEachDisplayedRow","description":"Iterates current displayed rows for app features that distinguish source order from display order."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridData","title":"GridData","description":""},{"path":"/docs/types/GridLiveRef","title":"GridLiveRef","description":""},{"path":"/docs/types/GridRowId","title":"GridRowId","description":""},{"path":"/docs/types/GridFieldPath","title":"GridFieldPath","description":""},{"path":"/docs/types/GridPathValue","title":"GridPathValue","description":""}]}]}]},{"path":"/docs/types/GridRowTransaction","kind":"type","title":"GridRowTransaction","summary":"Fields, allowed values, and APIs that use GridRowTransaction.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridData","title":"GridData","description":""}]}]}]},{"path":"/docs/types/GridSelectionChangedDetail","kind":"type","title":"GridSelectionChangedDetail","summary":"Fields, allowed values, and APIs that use GridSelectionChangedDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/events/selectionChanged","title":"selectionChanged","description":"Emitted when row selection changes. Use selected IDs to define bulk-operation targets."}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/RowSelectionMode","title":"RowSelectionMode","description":""},{"path":"/docs/types/SyGridServerSelectionState","title":"SyGridServerSelectionState","description":""}]}]}]},{"path":"/docs/types/GridSortChangedDetail","kind":"type","title":"GridSortChangedDetail","summary":"Fields, allowed values, and APIs that use GridSortChangedDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/events/sortChanged","title":"sortChanged","description":"Emitted when sorting changes. Reflect the current model in app query conditions or saved view state."}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/ActiveSort","title":"ActiveSort","description":""},{"path":"/docs/types/SortModelEntry","title":"SortModelEntry","description":""}]}]}]},{"path":"/docs/types/GridSortDirection","kind":"type","title":"GridSortDirection","summary":"Fields, allowed values, and APIs that use GridSortDirection.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type GridSortDirection = 'asc' | 'desc';","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/sortBy","title":"sortBy","description":"Sets one column's sorting. Omitted direction cycles sorting; null clears that column. Use setSortModel for the full multi-column model."}]}]}]},{"path":"/docs/types/GridStateApplyOptions","kind":"type","title":"GridStateApplyOptions","summary":"Fields, allowed values, and APIs that use GridStateApplyOptions.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface GridStateApplyOptions {\n  readonly applyOrder?: boolean;\n  readonly slices?: readonly SyGridStateSliceKey[];\n}","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/setState","title":"setState","description":"Restores complete or selected state slices and returns applied/issue reports. Only slices in appliedSlices were actually applied."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridStateSliceKey","title":"SyGridStateSliceKey","description":""}]}]}]},{"path":"/docs/types/GridSyncStatus","kind":"type","title":"GridSyncStatus","summary":"Fields, allowed values, and APIs that use GridSyncStatus.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type GridSyncStatus = 'offline' | 'connecting' | 'synced';","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/connectCollabRoom","title":"connectCollabRoom","description":"Starts the configured collaboration room connection and returns synchronization state."},{"path":"/docs/methods/getSyncStatus","title":"getSyncStatus","description":"Reads current collaboration connection and synchronization state."},{"path":"/docs/events/syncStatusChanged","title":"syncStatusChanged","description":"Emitted when collaboration synchronization changes. Distinguish connection state from completed persistent server saving."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""},{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]}]},{"path":"/docs/types/GridTheme","kind":"type","title":"GridTheme","summary":"Fields, allowed values, and APIs that use GridTheme.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type GridTheme = GridThemePresetName | GridThemeObject | null | undefined;","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/options/theme","title":"theme","description":"Sets Grid colors and appearance with a light/dark preset or a token object extending a preset."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridThemeChangedDetail","title":"GridThemeChangedDetail","description":""},{"path":"/docs/types/GridThemeObject","title":"GridThemeObject","description":""},{"path":"/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridThemePresetName","title":"GridThemePresetName","description":""},{"path":"/docs/types/GridThemeObject","title":"GridThemeObject","description":""}]}]}]},{"path":"/docs/types/GridThemeChangedDetail","kind":"type","title":"GridThemeChangedDetail","summary":"Fields, allowed values, and APIs that use GridThemeChangedDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface GridThemeChangedDetail {\n  theme: GridTheme;\n  resolvedTokens: Record<string, string>;\n}","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/events/themeChanged","title":"themeChanged","description":"Emitted when the Grid theme changes. Check it alongside the surrounding app theme."}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridTheme","title":"GridTheme","description":""}]}]}]},{"path":"/docs/types/GridThemeObject","kind":"type","title":"GridThemeObject","summary":"Fields, allowed values, and APIs that use GridThemeObject.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface GridThemeObject {\n  extends?: GridTheme;\n  tokens?: GridTokenOverrides;\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridTheme","title":"GridTheme","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridTheme","title":"GridTheme","description":""},{"path":"/docs/types/GridTokenOverrides","title":"GridTokenOverrides","description":""}]}]}]},{"path":"/docs/types/GridThemePresetName","kind":"type","title":"GridThemePresetName","summary":"Fields, allowed values, and APIs that use GridThemePresetName.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type GridThemePresetName = 'alpine' | 'balham' | 'alpine-dark' | 'balham-dark';","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridTheme","title":"GridTheme","description":""}]}]}]},{"path":"/docs/types/GridTokenName","kind":"type","title":"GridTokenName","summary":"Fields, allowed values, and APIs that use GridTokenName.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type GridTokenName = string;","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridTokenOverrides","title":"GridTokenOverrides","description":""}]}]}]},{"path":"/docs/types/GridTokenOverrides","kind":"type","title":"GridTokenOverrides","summary":"Fields, allowed values, and APIs that use GridTokenOverrides.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type GridTokenOverrides = Partial<Record<GridTokenName, string>>;","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridThemeObject","title":"GridThemeObject","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridTokenName","title":"GridTokenName","description":""}]}]}]},{"path":"/docs/types/GridUnavailableBehaviour","kind":"type","title":"GridUnavailableBehaviour","summary":"Fields, allowed values, and APIs that use GridUnavailableBehaviour.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type GridUnavailableBehaviour = 'fallback' | 'error';","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/options/unavailable","title":"unavailable","description":"Chooses fallback execution or an error when the requested engine is unavailable."}]}]}]},{"path":"/docs/types/GridWorkbookBinding","kind":"type","title":"GridWorkbookBinding","summary":"Fields, allowed values, and APIs that use GridWorkbookBinding.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/getWorkbookBinding","title":"getWorkbookBinding","description":"Reads current workbook and sheet connection information, or null when disconnected."},{"path":"/docs/methods/reconnectWorkbook","title":"reconnectWorkbook","description":"Rebuilds the connection from current workbook settings and returns the result."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridWorkbookBindingChangedDetail","title":"GridWorkbookBindingChangedDetail","description":""},{"path":"/docs/types/GridWorkbookBindingErrorDetail","title":"GridWorkbookBindingErrorDetail","description":""},{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]}]},{"path":"/docs/types/GridWorkbookBindingChangeKind","kind":"type","title":"GridWorkbookBindingChangeKind","summary":"Fields, allowed values, and APIs that use GridWorkbookBindingChangeKind.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type GridWorkbookBindingChangeKind =\n  | 'connected'\n  | 'renamed'\n  | 'reconnected'\n  | 'disconnected';","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridWorkbookBindingChangedDetail","title":"GridWorkbookBindingChangedDetail","description":""}]}]}]},{"path":"/docs/types/GridWorkbookBindingChangedDetail","kind":"type","title":"GridWorkbookBindingChangedDetail","summary":"Fields, allowed values, and APIs that use GridWorkbookBindingChangedDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/events/workbookBindingChanged","title":"workbookBindingChanged","description":"Emitted when the Grid's workbook/sheet connection changes."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridWorkbookBindingChangeKind","title":"GridWorkbookBindingChangeKind","description":""},{"path":"/docs/types/GridWorkbookBindingReason","title":"GridWorkbookBindingReason","description":""},{"path":"/docs/types/GridWorkbookBinding","title":"GridWorkbookBinding","description":""}]}]}]},{"path":"/docs/types/GridWorkbookBindingErrorDetail","kind":"type","title":"GridWorkbookBindingErrorDetail","summary":"Fields, allowed values, and APIs that use GridWorkbookBindingErrorDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/events/workbookBindingError","title":"workbookBindingError","description":"Emitted when a workbook connection cannot be configured. Inspect identifiers and connection errors."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/WorkbookRegistryErrorCode","title":"WorkbookRegistryErrorCode","description":""},{"path":"/docs/types/GridWorkbookBindingReason","title":"GridWorkbookBindingReason","description":""},{"path":"/docs/types/GridWorkbookBinding","title":"GridWorkbookBinding","description":""}]}]}]},{"path":"/docs/types/GridWorkbookBindingReason","kind":"type","title":"GridWorkbookBindingReason","summary":"Fields, allowed values, and APIs that use GridWorkbookBindingReason.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridWorkbookBindingChangedDetail","title":"GridWorkbookBindingChangedDetail","description":""},{"path":"/docs/types/GridWorkbookBindingErrorDetail","title":"GridWorkbookBindingErrorDetail","description":""}]}]}]},{"path":"/docs/types/GridXlsxImportedDetail","kind":"type","title":"GridXlsxImportedDetail","summary":"Fields, allowed values, and APIs that use GridXlsxImportedDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface GridXlsxImportedDetail {\n  sheetName: string;\n  snapshot: XlsxGridSnapshot;\n  workbookSheetCount: number;\n}","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/events/xlsxImported","title":"xlsxImported","description":"Emits the selected sheet's Grid snapshot after XLSX parsing. Apply snapshot.columnDefs and snapshot.rowData in your app if needed."}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/XlsxGridSnapshot","title":"XlsxGridSnapshot","description":""}]}]}]},{"path":"/docs/types/GroupableLeaf","kind":"type","title":"GroupableLeaf","summary":"Fields, allowed values, and APIs that use GroupableLeaf.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface GroupableLeaf {\n  field?: string;\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/ColumnGroupDef","title":"ColumnGroupDef","description":""}]}]}]},{"path":"/docs/types/InfiniteGetRowsParams","kind":"type","title":"InfiniteGetRowsParams","summary":"Fields, allowed values, and APIs that use InfiniteGetRowsParams.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/InfiniteRowDatasource","title":"InfiniteRowDatasource","description":""}]}]}]},{"path":"/docs/types/InfiniteRowDatasource","kind":"type","title":"InfiniteRowDatasource","summary":"Fields, allowed values, and APIs that use InfiniteRowDatasource.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface InfiniteRowDatasource {\n  getRows: (params: InfiniteGetRowsParams) => void;\n}","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/options/datasource","title":"datasource","description":"Data provider for the infinite row model. Complete each requested range through its success or failure callback."}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/InfiniteGetRowsParams","title":"InfiniteGetRowsParams","description":""}]}]}]},{"path":"/docs/types/LoadingMode","kind":"type","title":"LoadingMode","summary":"Fields, allowed values, and APIs that use LoadingMode.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type LoadingMode = 'auto' | 'manual' | 'off';","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/options/loadingMode","title":"loadingMode","description":"Selects the Grid loading indicator. See LoadingMode for supported values."}]}]}]},{"path":"/docs/types/MergedRangeInfo","kind":"type","title":"MergedRangeInfo","summary":"Fields, allowed values, and APIs that use MergedRangeInfo.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface MergedRangeInfo {\n  readonly rangeRef: string;\n  readonly range: CellRange;\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/XlsxImportSheet","title":"XlsxImportSheet","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/CellRange","title":"CellRange","description":""}]}]}]},{"path":"/docs/types/MessageKey","kind":"type","title":"MessageKey","summary":"Fields, allowed values, and APIs that use MessageKey.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type MessageKey = string;","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridMessageOverrides","title":"GridMessageOverrides","description":""}]}]}]},{"path":"/docs/types/MultiFilterPart","kind":"type","title":"MultiFilterPart","summary":"Fields, allowed values, and APIs that use MultiFilterPart.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"type MultiFilterPart = MultiFilterSpec['parts'][number];","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/ConditionLeaf","title":"ConditionLeaf","description":""},{"path":"/docs/types/MultiFilterSpec","title":"MultiFilterSpec","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/MultiFilterSpec","title":"MultiFilterSpec","description":""}]}]}]},{"path":"/docs/types/MultiFilterSpec","kind":"type","title":"MultiFilterSpec","summary":"Fields, allowed values, and APIs that use MultiFilterSpec.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface MultiFilterSpec<TRow = unknown> {\n  field: string;\n  parts: ReadonlyArray<MultiFilterPart<TRow>>;\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/ActiveFilter","title":"ActiveFilter","description":""},{"path":"/docs/types/MultiFilterPart","title":"MultiFilterPart","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/MultiFilterPart","title":"MultiFilterPart","description":""}]}]}]},{"path":"/docs/types/NestedObject","kind":"type","title":"NestedObject","summary":"Fields, allowed values, and APIs that use NestedObject.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridFieldPath","title":"GridFieldPath","description":""},{"path":"/docs/types/GridFieldPathLevel2","title":"GridFieldPathLevel2","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridFieldLeaf","title":"GridFieldLeaf","description":""}]}]}]},{"path":"/docs/types/NumberFilterOp","kind":"type","title":"NumberFilterOp","summary":"Fields, allowed values, and APIs that use NumberFilterOp.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/NumberFilterSpec","title":"NumberFilterSpec","description":""}]}]}]},{"path":"/docs/types/NumberFilterSpec","kind":"type","title":"NumberFilterSpec","summary":"Fields, allowed values, and APIs that use NumberFilterSpec.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/ActiveFilter","title":"ActiveFilter","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/NumberFilterOp","title":"NumberFilterOp","description":""}]}]}]},{"path":"/docs/types/PdfDownloadOptions","kind":"type","title":"PdfDownloadOptions","summary":"Fields, allowed values, and APIs that use PdfDownloadOptions.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface PdfDownloadOptions<TRow = Record<string, unknown>> extends PdfExportOptions<TRow> {\n  fileName?: string;\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridApiPdfDownloadOptions","title":"SyGridApiPdfDownloadOptions","description":""},{"path":"/docs/types/SyGridPdfDownloadOptions","title":"SyGridPdfDownloadOptions","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/PdfExportOptions","title":"PdfExportOptions","description":""}]}]}]},{"path":"/docs/types/PdfExportColumn","kind":"type","title":"PdfExportColumn","summary":"Fields, allowed values, and APIs that use PdfExportColumn.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/PdfExportOptions","title":"PdfExportOptions","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/ColumnDef","title":"ColumnDef","description":""}]}]}]},{"path":"/docs/types/PdfExportFontBytes","kind":"type","title":"PdfExportFontBytes","summary":"Fields, allowed values, and APIs that use PdfExportFontBytes.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type PdfExportFontBytes = Uint8Array | ArrayBuffer | ArrayBufferView;","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/PdfExportOptions","title":"PdfExportOptions","description":""}]}]}]},{"path":"/docs/types/PdfExportOptions","kind":"type","title":"PdfExportOptions","summary":"Fields, allowed values, and APIs that use PdfExportOptions.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/PdfDownloadOptions","title":"PdfDownloadOptions","description":""},{"path":"/docs/types/SyGridApiPdfExportOptions","title":"SyGridApiPdfExportOptions","description":""},{"path":"/docs/types/SyGridPdfExportOptions","title":"SyGridPdfExportOptions","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/PdfExportColumn","title":"PdfExportColumn","description":""},{"path":"/docs/types/PdfExportPageSize","title":"PdfExportPageSize","description":""},{"path":"/docs/types/PdfExportOrientation","title":"PdfExportOrientation","description":""},{"path":"/docs/types/PdfExportFontBytes","title":"PdfExportFontBytes","description":""}]}]}]},{"path":"/docs/types/PdfExportOrientation","kind":"type","title":"PdfExportOrientation","summary":"Fields, allowed values, and APIs that use PdfExportOrientation.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type PdfExportOrientation = 'portrait' | 'landscape';","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/PdfExportOptions","title":"PdfExportOptions","description":""}]}]}]},{"path":"/docs/types/PdfExportPageSize","kind":"type","title":"PdfExportPageSize","summary":"Fields, allowed values, and APIs that use PdfExportPageSize.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type PdfExportPageSize = 'A4' | 'Letter' | 'Legal' | 'Tabloid';","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/PdfExportOptions","title":"PdfExportOptions","description":""}]}]}]},{"path":"/docs/types/PdfExportResult","kind":"type","title":"PdfExportResult","summary":"Fields, allowed values, and APIs that use PdfExportResult.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/getDataAsPdf","title":"getDataAsPdf","description":"Returns PDF generation results without downloading. Prepare a suitable font for characters such as Korean text."},{"path":"/docs/methods/exportDataAsPdf","title":"exportDataAsPdf","description":"Downloads the table as PDF and returns generation results."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]}]},{"path":"/docs/types/PivotPanelAxis","kind":"type","title":"PivotPanelAxis","summary":"Fields, allowed values, and APIs that use PivotPanelAxis.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type PivotPanelAxis = 'rowGroupColumns' | 'pivotColumns' | 'valueColumns';","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/PivotPanelLane","title":"PivotPanelLane","description":""}]}]}]},{"path":"/docs/types/PivotPanelChangeDetail","kind":"type","title":"PivotPanelChangeDetail","summary":"Fields, allowed values, and APIs that use PivotPanelChangeDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/events/pivotPanelChanged","title":"pivotPanelChanged","description":"Emitted when axes change in the pivot panel. Inspect the changed axis and current pivot state."},{"path":"/docs/events/pivotChanged","title":"pivotChanged","description":"Reports pivot configuration changes. Avoid duplicate saves from subscribing to both compatibility and panel events."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/PivotPanelConfig","title":"PivotPanelConfig","description":""},{"path":"/docs/types/PivotPanelChangeOperation","title":"PivotPanelChangeOperation","description":""},{"path":"/docs/types/PivotPanelLocation","title":"PivotPanelLocation","description":""}]}]}]},{"path":"/docs/types/PivotPanelChangeOperation","kind":"type","title":"PivotPanelChangeOperation","summary":"Fields, allowed values, and APIs that use PivotPanelChangeOperation.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type PivotPanelChangeOperation = 'assign' | 'remove' | 'move' | 'reorder' | 'aggregation';","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/PivotPanelChangeDetail","title":"PivotPanelChangeDetail","description":""}]}]}]},{"path":"/docs/types/PivotPanelConfig","kind":"type","title":"PivotPanelConfig","summary":"Fields, allowed values, and APIs that use PivotPanelConfig.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/PivotPanelChangeDetail","title":"PivotPanelChangeDetail","description":""}]}]}]},{"path":"/docs/types/PivotPanelLane","kind":"type","title":"PivotPanelLane","summary":"Fields, allowed values, and APIs that use PivotPanelLane.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type PivotPanelLane = 'availableFields' | PivotPanelAxis;","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/PivotPanelLocation","title":"PivotPanelLocation","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/PivotPanelAxis","title":"PivotPanelAxis","description":""}]}]}]},{"path":"/docs/types/PivotPanelLocation","kind":"type","title":"PivotPanelLocation","summary":"Fields, allowed values, and APIs that use PivotPanelLocation.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface PivotPanelLocation {\n  readonly lane: PivotPanelLane;\n  readonly index: number;\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/PivotPanelChangeDetail","title":"PivotPanelChangeDetail","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/PivotPanelLane","title":"PivotPanelLane","description":""}]}]}]},{"path":"/docs/types/RbacCellReadParams","kind":"type","title":"RbacCellReadParams","summary":"Fields, allowed values, and APIs that use RbacCellReadParams.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/CanEditCellFn","title":"CanEditCellFn","description":""},{"path":"/docs/types/CanReadCellFn","title":"CanReadCellFn","description":""}]}]}]},{"path":"/docs/types/RowClickButton","kind":"type","title":"RowClickButton","summary":"Fields, allowed values, and APIs that use RowClickButton.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type RowClickButton = 'left' | 'middle' | 'right' | 'other';","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridCellClickedDetail","title":"GridCellClickedDetail","description":""},{"path":"/docs/types/GridCellDoubleClickedDetail","title":"GridCellDoubleClickedDetail","description":""},{"path":"/docs/types/GridRowClickedDetail","title":"GridRowClickedDetail","description":""}]}]}]},{"path":"/docs/types/RowClickModifiers","kind":"type","title":"RowClickModifiers","summary":"Fields, allowed values, and APIs that use RowClickModifiers.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface RowClickModifiers {\n  ctrl: boolean;\n  shift: boolean;\n  meta: boolean;\n  alt: boolean;\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridCellClickedDetail","title":"GridCellClickedDetail","description":""},{"path":"/docs/types/GridCellDoubleClickedDetail","title":"GridCellDoubleClickedDetail","description":""},{"path":"/docs/types/GridRowClickedDetail","title":"GridRowClickedDetail","description":""}]}]}]},{"path":"/docs/types/RowDataTransaction","kind":"type","title":"RowDataTransaction","summary":"Fields, allowed values, and APIs that use RowDataTransaction.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/applyTransaction","title":"applyTransaction","description":"Adds, updates, and removes source rows by stable ID. Inspect results separately from app server saving."}]}]}]},{"path":"/docs/types/RowSelectionMode","kind":"type","title":"RowSelectionMode","summary":"Fields, allowed values, and APIs that use RowSelectionMode.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type RowSelectionMode = 'single' | 'multi' | 'none';","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/options/rowSelection","title":"rowSelection","description":"Disables row selection or enables single/multiple selection. Independent of cell range selection."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridSelectionChangedDetail","title":"GridSelectionChangedDetail","description":""}]}]}]},{"path":"/docs/types/RowsSlicesApplyResult","kind":"type","title":"RowsSlicesApplyResult","summary":"Fields, allowed values, and APIs that use RowsSlicesApplyResult.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridStateApplyReport","title":"SyGridStateApplyReport","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridRowId","title":"SyGridRowId","description":""},{"path":"/docs/types/CellRange","title":"CellRange","description":""}]}]}]},{"path":"/docs/types/ServerSideColumn","kind":"type","title":"ServerSideColumn","summary":"Fields, allowed values, and APIs that use ServerSideColumn.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/ServerSideColumnRef","title":"ServerSideColumnRef","description":""}]}]}]},{"path":"/docs/types/ServerSideColumnRef","kind":"type","title":"ServerSideColumnRef","summary":"Fields, allowed values, and APIs that use ServerSideColumnRef.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type ServerSideColumnRef = string | ServerSideColumn;","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/ServerSideGetRowsParams","title":"ServerSideGetRowsParams","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/ServerSideColumn","title":"ServerSideColumn","description":""}]}]}]},{"path":"/docs/types/ServerSideDatasource","kind":"type","title":"ServerSideDatasource","summary":"Fields, allowed values, and APIs that use ServerSideDatasource.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/options/serverSideDatasource","title":"serverSideDatasource","description":"Data provider for a row model where the server handles sorting, filtering, grouping, and related requests."}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/ServerSideGetRowsParams","title":"ServerSideGetRowsParams","description":""},{"path":"/docs/types/ServerSideGetRowsResult","title":"ServerSideGetRowsResult","description":""}]}]}]},{"path":"/docs/types/ServerSideGetRowsParams","kind":"type","title":"ServerSideGetRowsParams","summary":"Fields, allowed values, and APIs that use ServerSideGetRowsParams.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/ServerSideDatasource","title":"ServerSideDatasource","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/ServerSideColumnRef","title":"ServerSideColumnRef","description":""}]}]}]},{"path":"/docs/types/ServerSideGetRowsResult","kind":"type","title":"ServerSideGetRowsResult","summary":"Fields, allowed values, and APIs that use ServerSideGetRowsResult.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/ServerSideDatasource","title":"ServerSideDatasource","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/ServerSidePivotResultColumn","title":"ServerSidePivotResultColumn","description":""}]}]}]},{"path":"/docs/types/ServerSidePivotResultColumn","kind":"type","title":"ServerSidePivotResultColumn","summary":"Fields, allowed values, and APIs that use ServerSidePivotResultColumn.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/ServerSideGetRowsResult","title":"ServerSideGetRowsResult","description":""}]}]}]},{"path":"/docs/types/SetFilterSpec","kind":"type","title":"SetFilterSpec","summary":"Fields, allowed values, and APIs that use SetFilterSpec.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/ActiveFilter","title":"ActiveFilter","description":""}]}]}]},{"path":"/docs/types/SheetToRowDataOptions","kind":"type","title":"SheetToRowDataOptions","summary":"Fields, allowed values, and APIs that use SheetToRowDataOptions.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/importDataFromXlsx","title":"importDataFromXlsx","description":"Parses file bytes into a workbook and returns XlsxImportResult. Read the Grid snapshot from the xlsxImported event."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridXlsxImportOptions","title":"SyGridXlsxImportOptions","description":""}]}]}]},{"path":"/docs/types/SideBarPanelId","kind":"type","title":"SideBarPanelId","summary":"Fields, allowed values, and APIs that use SideBarPanelId.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type SideBarPanelId = 'columns' | 'filters';","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/events/toolPanelToggled","title":"toolPanelToggled","description":"Emitted when column/filter tool panel visibility changes."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]}]},{"path":"/docs/types/SnapshotDiff","kind":"type","title":"SnapshotDiff","summary":"Fields, allowed values, and APIs that use SnapshotDiff.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/diffSnapshots","title":"diffSnapshots","description":"Compares two snapshots or a snapshot with current data. Omit the second ID to compare against current data."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SnapshotRowChange","title":"SnapshotRowChange","description":""}]}]}]},{"path":"/docs/types/SnapshotFieldChange","kind":"type","title":"SnapshotFieldChange","summary":"Fields, allowed values, and APIs that use SnapshotFieldChange.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface SnapshotFieldChange {\n  readonly field: string;\n  readonly before: unknown;\n  readonly after: unknown;\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SnapshotRowChange","title":"SnapshotRowChange","description":""}]}]}]},{"path":"/docs/types/SnapshotMeta","kind":"type","title":"SnapshotMeta","summary":"Fields, allowed values, and APIs that use SnapshotMeta.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/listSnapshots","title":"listSnapshots","description":"Reads metadata for retained data snapshots."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]}]},{"path":"/docs/types/SnapshotRowChange","kind":"type","title":"SnapshotRowChange","summary":"Fields, allowed values, and APIs that use SnapshotRowChange.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface SnapshotRowChange {\n  readonly rowId: unknown;\n  readonly fields: SnapshotFieldChange[];\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SnapshotDiff","title":"SnapshotDiff","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SnapshotFieldChange","title":"SnapshotFieldChange","description":""}]}]}]},{"path":"/docs/types/SortModelEntry","kind":"type","title":"SortModelEntry","summary":"Fields, allowed values, and APIs that use SortModelEntry.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface SortModelEntry {\n  field: string;\n  direction: 'asc' | 'desc';\n}","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/getSortModel","title":"getSortModel","description":"Reads current sort columns, directions, and priorities."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridSortChangedDetail","title":"GridSortChangedDetail","description":""}]}]}]},{"path":"/docs/types/StateUpdateSource","kind":"type","title":"StateUpdateSource","summary":"Fields, allowed values, and APIs that use StateUpdateSource.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type StateUpdateSource = 'interactive' | 'api' | 'restore' | 'initial-state';","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridStateUpdatedDetail","title":"SyGridStateUpdatedDetail","description":""}]}]}]},{"path":"/docs/types/StringKey","kind":"type","title":"StringKey","summary":"Fields, allowed values, and APIs that use StringKey.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"type StringKey<T> = Extract<keyof T, string>;","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridFieldPath","title":"GridFieldPath","description":""},{"path":"/docs/types/GridFieldPathLevel2","title":"GridFieldPathLevel2","description":""}]}]}]},{"path":"/docs/types/SyChartConcreteType","kind":"type","title":"SyChartConcreteType","summary":"Fields, allowed values, and APIs that use SyChartConcreteType.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/ChartLinkChartReport","title":"ChartLinkChartReport","description":""},{"path":"/docs/types/GridChartEvent","title":"GridChartEvent","description":""},{"path":"/docs/types/GridChartMenuEntry","title":"GridChartMenuEntry","description":""},{"path":"/docs/types/GridChartModel","title":"GridChartModel","description":""},{"path":"/docs/types/GridChartTypeVerdict","title":"GridChartTypeVerdict","description":""}]}]}]},{"path":"/docs/types/SyGridActiveCell","kind":"type","title":"SyGridActiveCell","summary":"Fields, allowed values, and APIs that use SyGridActiveCell.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface SyGridActiveCell {\n  rowIndex: number;\n  colIndex: number;\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridActiveCellChangedEventDetail","title":"SyGridActiveCellChangedEventDetail","description":""}]}]}]},{"path":"/docs/types/SyGridActiveCellChangedEventDetail","kind":"type","title":"SyGridActiveCellChangedEventDetail","summary":"Fields, allowed values, and APIs that use SyGridActiveCellChangedEventDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface SyGridActiveCellChangedEventDetail {\n  active: SyGridActiveCell | null;\n  previous: SyGridActiveCell | null;\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridActiveCell","title":"SyGridActiveCell","description":""}]}]}]},{"path":"/docs/types/SyGridAlignedColumnState","kind":"type","title":"SyGridAlignedColumnState","summary":"Fields, allowed values, and APIs that use SyGridAlignedColumnState.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridAlignedGridsReport","title":"SyGridAlignedGridsReport","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridAlignedPinSide","title":"SyGridAlignedPinSide","description":""}]}]}]},{"path":"/docs/types/SyGridAlignedGridsInput","kind":"type","title":"SyGridAlignedGridsInput","summary":"Fields, allowed values, and APIs that use SyGridAlignedGridsInput.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type SyGridAlignedGridsInput =\n  | { readonly group: string }\n  | ReadonlyArray<HTMLElement>\n  | null;","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/options/alignedGrids","title":"alignedGrids","description":"Specifies linked Grids for synchronized column layouts and related state. Inspect connection results and cycle restrictions in aligned Grid reports."},{"path":"/docs/methods/setAlignedGrids","title":"setAlignedGrids","description":"Configures aligned Grid connections and returns the result."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]}]},{"path":"/docs/types/SyGridAlignedGridsRefusalReason","kind":"type","title":"SyGridAlignedGridsRefusalReason","summary":"Fields, allowed values, and APIs that use SyGridAlignedGridsRefusalReason.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridAlignedGridsResult","title":"SyGridAlignedGridsResult","description":""}]}]}]},{"path":"/docs/types/SyGridAlignedGridsReport","kind":"type","title":"SyGridAlignedGridsReport","summary":"Fields, allowed values, and APIs that use SyGridAlignedGridsReport.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/getAlignedGrids","title":"getAlignedGrids","description":"Reads connected Grids and alignment state."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridAlignedColumnState","title":"SyGridAlignedColumnState","description":""},{"path":"/docs/types/SyGridAlignedMismatch","title":"SyGridAlignedMismatch","description":""},{"path":"/docs/types/SyGridAlignedStats","title":"SyGridAlignedStats","description":""}]}]}]},{"path":"/docs/types/SyGridAlignedGridsResult","kind":"type","title":"SyGridAlignedGridsResult","summary":"Fields, allowed values, and APIs that use SyGridAlignedGridsResult.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/setAlignedGrids","title":"setAlignedGrids","description":"Configures aligned Grid connections and returns the result."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridAlignedGridsRefusalReason","title":"SyGridAlignedGridsRefusalReason","description":""},{"path":"/docs/types/SyGridAlignedMismatch","title":"SyGridAlignedMismatch","description":""}]}]}]},{"path":"/docs/types/SyGridAlignedMismatch","kind":"type","title":"SyGridAlignedMismatch","summary":"Fields, allowed values, and APIs that use SyGridAlignedMismatch.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridAlignedGridsReport","title":"SyGridAlignedGridsReport","description":""},{"path":"/docs/types/SyGridAlignedGridsResult","title":"SyGridAlignedGridsResult","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridAlignedMismatchReason","title":"SyGridAlignedMismatchReason","description":""}]}]}]},{"path":"/docs/types/SyGridAlignedMismatchReason","kind":"type","title":"SyGridAlignedMismatchReason","summary":"Fields, allowed values, and APIs that use SyGridAlignedMismatchReason.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridAlignedMismatch","title":"SyGridAlignedMismatch","description":""}]}]}]},{"path":"/docs/types/SyGridAlignedPinSide","kind":"type","title":"SyGridAlignedPinSide","summary":"Fields, allowed values, and APIs that use SyGridAlignedPinSide.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type SyGridAlignedPinSide = 'left' | 'right' | null;","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridAlignedColumnState","title":"SyGridAlignedColumnState","description":""}]}]}]},{"path":"/docs/types/SyGridAlignedStats","kind":"type","title":"SyGridAlignedStats","summary":"Fields, allowed values, and APIs that use SyGridAlignedStats.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridAlignedGridsReport","title":"SyGridAlignedGridsReport","description":""}]}]}]},{"path":"/docs/types/SyGridApi","kind":"type","title":"SyGridApi","summary":"Fields, allowed values, and APIs that use SyGridApi.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/getApi","title":"getApi","description":"Accesses the current Grid's typed API and app context. Read from a fully initialized element."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/CellCallbackParams","title":"CellCallbackParams","description":""},{"path":"/docs/types/SyGridCustomEvent","title":"SyGridCustomEvent","description":""},{"path":"/docs/types/SyGridEventListener","title":"SyGridEventListener","description":""},{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""},{"path":"/docs/types/ValueFormatterParams","title":"ValueFormatterParams","description":""},{"path":"/docs/types/ValueGetterParams","title":"ValueGetterParams","description":""},{"path":"/docs/types/ValueParserParams","title":"ValueParserParams","description":""},{"path":"/docs/types/ValueSetterParams","title":"ValueSetterParams","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridData","title":"GridData","description":""},{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""},{"path":"/docs/types/GridColumnDefinition","title":"GridColumnDefinition","description":""},{"path":"/docs/types/GridGetRowId","title":"GridGetRowId","description":""},{"path":"/docs/types/GridComponentLocalDefinitions","title":"GridComponentLocalDefinitions","description":""},{"path":"/docs/types/GridExternalFilterCallbacks","title":"GridExternalFilterCallbacks","description":""},{"path":"/docs/types/GridExternalFilterInstance","title":"GridExternalFilterInstance","description":""},{"path":"/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""},{"path":"/docs/types/SyGridEventListener","title":"SyGridEventListener","description":""}]}]}]},{"path":"/docs/types/SyGridApiPdfAutoFontOptions","kind":"type","title":"SyGridApiPdfAutoFontOptions","summary":"Fields, allowed values, and APIs that use SyGridApiPdfAutoFontOptions.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface SyGridApiPdfAutoFontOptions {\n  autoFont?: boolean;\n  fallbackFontUrl?: string;\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridApiPdfDownloadOptions","title":"SyGridApiPdfDownloadOptions","description":""},{"path":"/docs/types/SyGridApiPdfExportOptions","title":"SyGridApiPdfExportOptions","description":""}]}]}]},{"path":"/docs/types/SyGridApiPdfDownloadOptions","kind":"type","title":"SyGridApiPdfDownloadOptions","summary":"Fields, allowed values, and APIs that use SyGridApiPdfDownloadOptions.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type SyGridApiPdfDownloadOptions<TData = GridData> =\n  Omit<PdfDownloadOptions<TData>, 'columns' | 'rows'> & SyGridApiPdfAutoFontOptions;","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridData","title":"GridData","description":""},{"path":"/docs/types/PdfDownloadOptions","title":"PdfDownloadOptions","description":""},{"path":"/docs/types/SyGridApiPdfAutoFontOptions","title":"SyGridApiPdfAutoFontOptions","description":""}]}]}]},{"path":"/docs/types/SyGridApiPdfExportOptions","kind":"type","title":"SyGridApiPdfExportOptions","summary":"Fields, allowed values, and APIs that use SyGridApiPdfExportOptions.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type SyGridApiPdfExportOptions<TData = GridData> =\n  Omit<PdfExportOptions<TData>, 'columns' | 'rows'> & SyGridApiPdfAutoFontOptions;","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridData","title":"GridData","description":""},{"path":"/docs/types/PdfExportOptions","title":"PdfExportOptions","description":""},{"path":"/docs/types/SyGridApiPdfAutoFontOptions","title":"SyGridApiPdfAutoFontOptions","description":""}]}]}]},{"path":"/docs/types/SyGridApplyColumnStateOptions","kind":"type","title":"SyGridApplyColumnStateOptions","summary":"Fields, allowed values, and APIs that use SyGridApplyColumnStateOptions.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface SyGridApplyColumnStateOptions {\n  applyOrder?: boolean;\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]}]},{"path":"/docs/types/SyGridBatchCommitOptions","kind":"type","title":"SyGridBatchCommitOptions","summary":"Fields, allowed values, and APIs that use SyGridBatchCommitOptions.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface SyGridBatchCommitOptions {\n  atomicity?: 'atomic' | 'best-effort';\n  partialInvalid?: 'reject-all' | 'commit-valid';\n}","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/commitBatchEdit","title":"commitBatchEdit","description":"Validates and commits staged changes, reporting per-cell results."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]}]},{"path":"/docs/types/SyGridBatchCommitReport","kind":"type","title":"SyGridBatchCommitReport","summary":"Fields, allowed values, and APIs that use SyGridBatchCommitReport.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/commitBatchEdit","title":"commitBatchEdit","description":"Validates and commits staged changes, reporting per-cell results."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridMutationId","title":"GridMutationId","description":""},{"path":"/docs/types/SyGridEditRejectedCell","title":"SyGridEditRejectedCell","description":""},{"path":"/docs/types/GridRowId","title":"GridRowId","description":""}]}]}]},{"path":"/docs/types/SyGridBatchEditEndEventDetail","kind":"type","title":"SyGridBatchEditEndEventDetail","summary":"Fields, allowed values, and APIs that use SyGridBatchEditEndEventDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/events/batchEditEnd","title":"batchEditEnd","description":"Emitted when batch editing commits or cancels. Inspect the end reason and results."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridMutationId","title":"GridMutationId","description":""},{"path":"/docs/types/SyGridEditRejectedCell","title":"SyGridEditRejectedCell","description":""}]}]}]},{"path":"/docs/types/SyGridBatchEditStartEventDetail","kind":"type","title":"SyGridBatchEditStartEventDetail","summary":"Fields, allowed values, and APIs that use SyGridBatchEditStartEventDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface SyGridBatchEditStartEventDetail {\n  mutationId: GridMutationId;\n  sessionId: number;\n  stagedCount: number;\n}","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/events/batchEditStart","title":"batchEditStart","description":"Emitted when batch editing starts. Open a staged-changes UI if needed."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridMutationId","title":"GridMutationId","description":""}]}]}]},{"path":"/docs/types/SyGridBatchStartOptions","kind":"type","title":"SyGridBatchStartOptions","summary":"Fields, allowed values, and APIs that use SyGridBatchStartOptions.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface SyGridBatchStartOptions {\n  reentrant?: 'reject' | 'join';\n}","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/startBatchEdit","title":"startBatchEdit","description":"Starts batch editing to collect multiple cell changes for a single commit."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]}]},{"path":"/docs/types/SyGridCanonicalChange","kind":"type","title":"SyGridCanonicalChange","summary":"Fields, allowed values, and APIs that use SyGridCanonicalChange.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type SyGridCanonicalChange = CanonicalRangeChange;","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/setCanonicalRanges","title":"setCanonicalRanges","description":"Changes cell selection from normalized range input and returns the change result."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/CanonicalRangeChange","title":"CanonicalRangeChange","description":""}]}]}]},{"path":"/docs/types/SyGridCanonicalRange","kind":"type","title":"SyGridCanonicalRange","summary":"Fields, allowed values, and APIs that use SyGridCanonicalRange.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type SyGridCanonicalRange = CanonicalRange;","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/getCanonicalRanges","title":"getCanonicalRanges","description":"Reads current selection as normalized ranges including stable row and column IDs."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/CanonicalRange","title":"CanonicalRange","description":""}]}]}]},{"path":"/docs/types/SyGridCellClickedEventDetail","kind":"type","title":"SyGridCellClickedEventDetail","summary":"Fields, allowed values, and APIs that use SyGridCellClickedEventDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridData","title":"GridData","description":""},{"path":"/docs/types/GridFieldPath","title":"GridFieldPath","description":""},{"path":"/docs/types/SyGridRowClickButton","title":"SyGridRowClickButton","description":""},{"path":"/docs/types/SyGridRowClickModifiers","title":"SyGridRowClickModifiers","description":""}]}]}]},{"path":"/docs/types/SyGridCellDoubleClickedEventDetail","kind":"type","title":"SyGridCellDoubleClickedEventDetail","summary":"Fields, allowed values, and APIs that use SyGridCellDoubleClickedEventDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridData","title":"GridData","description":""},{"path":"/docs/types/GridFieldPath","title":"GridFieldPath","description":""},{"path":"/docs/types/SyGridRowClickButton","title":"SyGridRowClickButton","description":""},{"path":"/docs/types/SyGridRowClickModifiers","title":"SyGridRowClickModifiers","description":""}]}]}]},{"path":"/docs/types/SyGridCellEditingCancelledEventDetail","kind":"type","title":"SyGridCellEditingCancelledEventDetail","summary":"Fields, allowed values, and APIs that use SyGridCellEditingCancelledEventDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface SyGridCellEditingCancelledEventDetail {\n  rowIndex: number;\n  colIndex: number;\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]}]},{"path":"/docs/types/SyGridCellEditingCommittedEventDetail","kind":"type","title":"SyGridCellEditingCommittedEventDetail","summary":"Fields, allowed values, and APIs that use SyGridCellEditingCommittedEventDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]}]},{"path":"/docs/types/SyGridCellEditingRequestedEventDetail","kind":"type","title":"SyGridCellEditingRequestedEventDetail","summary":"Fields, allowed values, and APIs that use SyGridCellEditingRequestedEventDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridData","title":"GridData","description":""},{"path":"/docs/types/GridFieldPath","title":"GridFieldPath","description":""}]}]}]},{"path":"/docs/types/SyGridCellRangeInput","kind":"type","title":"SyGridCellRangeInput","summary":"Fields, allowed values, and APIs that use SyGridCellRangeInput.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type SyGridCellRangeInput = CellRange;","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/setCanonicalRanges","title":"setCanonicalRanges","description":"Changes cell selection from normalized range input and returns the change result."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/CellRange","title":"CellRange","description":""}]}]}]},{"path":"/docs/types/SyGridCellSpanInfo","kind":"type","title":"SyGridCellSpanInfo","summary":"Fields, allowed values, and APIs that use SyGridCellSpanInfo.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/getCellSpan","title":"getCellSpan","description":"Reads horizontal and vertical span information for a cell."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridRowLayoutStatus","title":"SyGridRowLayoutStatus","description":""},{"path":"/docs/types/SyGridSpanAddress","title":"SyGridSpanAddress","description":""},{"path":"/docs/types/SyGridSpanCombination","title":"SyGridSpanCombination","description":""},{"path":"/docs/types/SyGridRowSpanRejection","title":"SyGridRowSpanRejection","description":""},{"path":"/docs/types/SyGridColSpanRejection","title":"SyGridColSpanRejection","description":""}]}]}]},{"path":"/docs/types/SyGridCellTooltipTarget","kind":"type","title":"SyGridCellTooltipTarget","summary":"Fields, allowed values, and APIs that use SyGridCellTooltipTarget.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridData","title":"GridData","description":""},{"path":"/docs/types/GridFieldPath","title":"GridFieldPath","description":""}]}]}]},{"path":"/docs/types/SyGridCellValueChangedEventDetail","kind":"type","title":"SyGridCellValueChangedEventDetail","summary":"Fields, allowed values, and APIs that use SyGridCellValueChangedEventDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridClipboardPastedEventDetail","title":"SyGridClipboardPastedEventDetail","description":""},{"path":"/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""},{"path":"/docs/types/SyGridRemoteEditAppliedEventDetail","title":"SyGridRemoteEditAppliedEventDetail","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridData","title":"GridData","description":""},{"path":"/docs/types/GridFieldPath","title":"GridFieldPath","description":""},{"path":"/docs/types/GridRowId","title":"GridRowId","description":""},{"path":"/docs/types/SyGridEditSource","title":"SyGridEditSource","description":""}]}]}]},{"path":"/docs/types/SyGridChartAccessibleReport","kind":"type","title":"SyGridChartAccessibleReport","summary":"Fields, allowed values, and APIs that use SyGridChartAccessibleReport.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type SyGridChartAccessibleReport = ChartLinkAccessibleReport;","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/getChartAccessibleSummary","title":"getChartAccessibleSummary","description":"Reads chart data summaries and accessibility checks."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/ChartLinkAccessibleReport","title":"ChartLinkAccessibleReport","description":""}]}]}]},{"path":"/docs/types/SyGridChartCaptureResult","kind":"type","title":"SyGridChartCaptureResult","summary":"Fields, allowed values, and APIs that use SyGridChartCaptureResult.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type SyGridChartCaptureResult = GridChartModelCaptureResult;","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/getChartModels","title":"getChartModels","description":"Captures active charts in a versioned envelope with capture issues. Pass the result's envelope to restoration."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChartModelCaptureResult","title":"GridChartModelCaptureResult","description":""}]}]}]},{"path":"/docs/types/SyGridChartCreateParams","kind":"type","title":"SyGridChartCreateParams","summary":"Fields, allowed values, and APIs that use SyGridChartCreateParams.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type SyGridChartCreateParams = ChartLinkCreateParams;","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/createRangeChart","title":"createRangeChart","description":"Creates an integrated chart from a selection or explicit source. Read chartId on success or the rejection reason on failure."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/ChartLinkCreateParams","title":"ChartLinkCreateParams","description":""}]}]}]},{"path":"/docs/types/SyGridChartCreateResult","kind":"type","title":"SyGridChartCreateResult","summary":"Fields, allowed values, and APIs that use SyGridChartCreateResult.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type SyGridChartCreateResult = ChartLinkCreateResult;","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/createRangeChart","title":"createRangeChart","description":"Creates an integrated chart from a selection or explicit source. Read chartId on success or the rejection reason on failure."},{"path":"/docs/methods/activateChartToolPanelItem","title":"activateChartToolPanelItem","description":"Creates a chart by activating the currently focused chart panel item."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/ChartLinkCreateResult","title":"ChartLinkCreateResult","description":""}]}]}]},{"path":"/docs/types/SyGridChartCrossFilterAction","kind":"type","title":"SyGridChartCrossFilterAction","summary":"Fields, allowed values, and APIs that use SyGridChartCrossFilterAction.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type SyGridChartCrossFilterAction = GridChartCrossFilterAction;","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/applyChartCrossFilter","title":"applyChartCrossFilter","description":"Applies chart selection actions to the Grid filter model."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChartCrossFilterAction","title":"GridChartCrossFilterAction","description":""}]}]}]},{"path":"/docs/types/SyGridChartCrossFilterResult","kind":"type","title":"SyGridChartCrossFilterResult","summary":"Fields, allowed values, and APIs that use SyGridChartCrossFilterResult.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type SyGridChartCrossFilterResult = GridChartCrossFilterResult;","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/applyChartCrossFilter","title":"applyChartCrossFilter","description":"Applies chart selection actions to the Grid filter model."},{"path":"/docs/methods/resetChartCrossFilter","title":"resetChartCrossFilter","description":"Clears chart-owned cross-filters while retaining the app's external filters."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChartCrossFilterResult","title":"GridChartCrossFilterResult","description":""}]}]}]},{"path":"/docs/types/SyGridChartDestroyResult","kind":"type","title":"SyGridChartDestroyResult","summary":"Fields, allowed values, and APIs that use SyGridChartDestroyResult.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type SyGridChartDestroyResult = ChartLinkDestroyResult;","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/destroyChart","title":"destroyChart","description":"Closes the specified chart and releases its resources."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/ChartLinkDestroyResult","title":"ChartLinkDestroyResult","description":""}]}]}]},{"path":"/docs/types/SyGridChartEvent","kind":"type","title":"SyGridChartEvent","summary":"Fields, allowed values, and APIs that use SyGridChartEvent.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type SyGridChartEvent = GridChartEvent;","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/events/chartCreated","title":"chartCreated","description":"Emitted when an integrated Grid chart is created. Manage your app's chart list by chart ID."},{"path":"/docs/events/chartRangeChanged","title":"chartRangeChanged","description":"Emitted when an integrated chart's source range changes."},{"path":"/docs/events/chartOptionsChanged","title":"chartOptionsChanged","description":"Emitted when integrated chart settings change. Update saved chart models if needed."},{"path":"/docs/events/chartDestroyed","title":"chartDestroyed","description":"Emitted when an integrated chart is destroyed. Clean up app-held references and external resources."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChartEvent","title":"GridChartEvent","description":""}]}]}]},{"path":"/docs/types/SyGridChartExportRequest","kind":"type","title":"SyGridChartExportRequest","summary":"Fields, allowed values, and APIs that use SyGridChartExportRequest.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type SyGridChartExportRequest = GridChartExportRequest;","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/exportChartImage","title":"exportChartImage","description":"Requests image export for an integrated chart and returns the result."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChartExportRequest","title":"GridChartExportRequest","description":""}]}]}]},{"path":"/docs/types/SyGridChartExportResult","kind":"type","title":"SyGridChartExportResult","summary":"Fields, allowed values, and APIs that use SyGridChartExportResult.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type SyGridChartExportResult = ChartLinkExportResult;","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/exportChartImage","title":"exportChartImage","description":"Requests image export for an integrated chart and returns the result."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/ChartLinkExportResult","title":"ChartLinkExportResult","description":""}]}]}]},{"path":"/docs/types/SyGridChartFleetReport","kind":"type","title":"SyGridChartFleetReport","summary":"Fields, allowed values, and APIs that use SyGridChartFleetReport.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type SyGridChartFleetReport = ChartLinkFleetReport;","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/getChartFleetReport","title":"getChartFleetReport","description":"Reports the current chart set, open resources, and cleanup state."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/ChartLinkFleetReport","title":"ChartLinkFleetReport","description":""}]}]}]},{"path":"/docs/types/SyGridChartMenuReport","kind":"type","title":"SyGridChartMenuReport","summary":"Fields, allowed values, and APIs that use SyGridChartMenuReport.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type SyGridChartMenuReport = ChartLinkMenuReport;","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/getChartMenuModel","title":"getChartMenuModel","description":"Reads the chart menu model available for the current selection and permissions."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/ChartLinkMenuReport","title":"ChartLinkMenuReport","description":""}]}]}]},{"path":"/docs/types/SyGridChartPanelReport","kind":"type","title":"SyGridChartPanelReport","summary":"Fields, allowed values, and APIs that use SyGridChartPanelReport.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type SyGridChartPanelReport = ChartLinkPanelReport;","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/openChartToolPanel","title":"openChartToolPanel","description":"Opens the tool panel for choosing an available chart."},{"path":"/docs/methods/closeChartToolPanel","title":"closeChartToolPanel","description":"Closes the chart creation panel and cleans up its selection flow."},{"path":"/docs/methods/getChartToolPanelReport","title":"getChartToolPanelReport","description":"Reads chart panel open, focus, and accessibility state."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/ChartLinkPanelReport","title":"ChartLinkPanelReport","description":""}]}]}]},{"path":"/docs/types/SyGridChartPermissions","kind":"type","title":"SyGridChartPermissions","summary":"Fields, allowed values, and APIs that use SyGridChartPermissions.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type SyGridChartPermissions = GridChartMenuPermissions;","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/getChartMenuModel","title":"getChartMenuModel","description":"Reads the chart menu model available for the current selection and permissions."},{"path":"/docs/methods/openChartToolPanel","title":"openChartToolPanel","description":"Opens the tool panel for choosing an available chart."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChartMenuPermissions","title":"GridChartMenuPermissions","description":""}]}]}]},{"path":"/docs/types/SyGridChartProperties","kind":"type","title":"SyGridChartProperties","summary":"Fields, allowed values, and APIs that use SyGridChartProperties.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type SyGridChartProperties = GridChartProperties;","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridChartUpdatePatch","title":"SyGridChartUpdatePatch","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChartProperties","title":"GridChartProperties","description":""}]}]}]},{"path":"/docs/types/SyGridChartReport","kind":"type","title":"SyGridChartReport","summary":"Fields, allowed values, and APIs that use SyGridChartReport.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type SyGridChartReport = ChartLinkChartReport;","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/getChartRefs","title":"getChartRefs","description":"Reads IDs and states of active integrated charts."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridChartRestoreResult","title":"SyGridChartRestoreResult","description":""},{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/ChartLinkChartReport","title":"ChartLinkChartReport","description":""}]}]}]},{"path":"/docs/types/SyGridChartRestoreResult","kind":"type","title":"SyGridChartRestoreResult","summary":"Fields, allowed values, and APIs that use SyGridChartRestoreResult.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface SyGridChartRestoreResult {\n  readonly report: GridChartModelRestoreReport;\n  readonly created: readonly SyGridChartReport[];\n}","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/restoreChartModels","title":"restoreChartModels","description":"Restores a saved chart envelope against the current Grid data contract and returns results."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChartModelRestoreReport","title":"GridChartModelRestoreReport","description":""},{"path":"/docs/types/SyGridChartReport","title":"SyGridChartReport","description":""}]}]}]},{"path":"/docs/types/SyGridChartSourceInput","kind":"type","title":"SyGridChartSourceInput","summary":"Fields, allowed values, and APIs that use SyGridChartSourceInput.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type SyGridChartSourceInput = ChartLinkSourceInput;","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridChartUpdatePatch","title":"SyGridChartUpdatePatch","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/ChartLinkSourceInput","title":"ChartLinkSourceInput","description":""}]}]}]},{"path":"/docs/types/SyGridChartSyncMutation","kind":"type","title":"SyGridChartSyncMutation","summary":"Fields, allowed values, and APIs that use SyGridChartSyncMutation.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type SyGridChartSyncMutation = GridChartSyncMutation;","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/syncCharts","title":"syncCharts","description":"Recalculates integrated chart data projections from the current Grid view."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridChartSyncReport","title":"SyGridChartSyncReport","description":""},{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridChartSyncMutation","title":"GridChartSyncMutation","description":""}]}]}]},{"path":"/docs/types/SyGridChartSyncReport","kind":"type","title":"SyGridChartSyncReport","summary":"Fields, allowed values, and APIs that use SyGridChartSyncReport.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/syncCharts","title":"syncCharts","description":"Recalculates integrated chart data projections from the current Grid view."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridChartSyncMutation","title":"SyGridChartSyncMutation","description":""}]}]}]},{"path":"/docs/types/SyGridChartUpdatePatch","kind":"type","title":"SyGridChartUpdatePatch","summary":"Fields, allowed values, and APIs that use SyGridChartUpdatePatch.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/updateChart","title":"updateChart","description":"Changes an existing chart's type, source range, or properties and returns the result."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridChartSourceInput","title":"SyGridChartSourceInput","description":""},{"path":"/docs/types/SyGridChartProperties","title":"SyGridChartProperties","description":""}]}]}]},{"path":"/docs/types/SyGridChartUpdateResult","kind":"type","title":"SyGridChartUpdateResult","summary":"Fields, allowed values, and APIs that use SyGridChartUpdateResult.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type SyGridChartUpdateResult = ChartLinkUpdateResult;","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/updateChart","title":"updateChart","description":"Changes an existing chart's type, source range, or properties and returns the result."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/ChartLinkUpdateResult","title":"ChartLinkUpdateResult","description":""}]}]}]},{"path":"/docs/types/SyGridClipboardPastedEventDetail","kind":"type","title":"SyGridClipboardPastedEventDetail","summary":"Fields, allowed values, and APIs that use SyGridClipboardPastedEventDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridCellValueChangedEventDetail","title":"SyGridCellValueChangedEventDetail","description":""}]}]}]},{"path":"/docs/types/SyGridColSpanParams","kind":"type","title":"SyGridColSpanParams","summary":"Fields, allowed values, and APIs that use SyGridColSpanParams.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/columns/colSpan","title":"colSpan","description":"Returns the horizontal column span from cell context. Account for pinned boundaries and hidden columns."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/ColumnDef","title":"ColumnDef","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridData","title":"GridData","description":""},{"path":"/docs/types/ColumnDef","title":"ColumnDef","description":""}]}]}]},{"path":"/docs/types/SyGridColSpanRejection","kind":"type","title":"SyGridColSpanRejection","summary":"Fields, allowed values, and APIs that use SyGridColSpanRejection.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridCellSpanInfo","title":"SyGridCellSpanInfo","description":""}]}]}]},{"path":"/docs/types/SyGridCollabConnectOptions","kind":"type","title":"SyGridCollabConnectOptions","summary":"Fields, allowed values, and APIs that use SyGridCollabConnectOptions.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]}]},{"path":"/docs/types/SyGridColumnReorderedEventDetail","kind":"type","title":"SyGridColumnReorderedEventDetail","summary":"Fields, allowed values, and APIs that use SyGridColumnReorderedEventDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]}]},{"path":"/docs/types/SyGridColumnResizedEventDetail","kind":"type","title":"SyGridColumnResizedEventDetail","summary":"Fields, allowed values, and APIs that use SyGridColumnResizedEventDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface SyGridColumnResizedEventDetail {\n  colId: string;\n  oldWidth: number;\n  newWidth: number;\n  wasClamped: boolean;\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]}]},{"path":"/docs/types/SyGridColumnState","kind":"type","title":"SyGridColumnState","summary":"Fields, allowed values, and APIs that use SyGridColumnState.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]}]},{"path":"/docs/types/SyGridColumnVisibilityChangedEventDetail","kind":"type","title":"SyGridColumnVisibilityChangedEventDetail","summary":"Fields, allowed values, and APIs that use SyGridColumnVisibilityChangedEventDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface SyGridColumnVisibilityChangedEventDetail {\n  colId: string;\n  hidden: boolean;\n  hiddenIds: ReadonlyArray<string>;\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]}]},{"path":"/docs/types/SyGridCsvImportOptions","kind":"type","title":"SyGridCsvImportOptions","summary":"Fields, allowed values, and APIs that use SyGridCsvImportOptions.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface SyGridCsvImportOptions {\n  delimiter?: CsvDelimiter;\n  hasHeader?: boolean;\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/CsvDelimiter","title":"CsvDelimiter","description":""}]}]}]},{"path":"/docs/types/SyGridCustomEvent","kind":"type","title":"SyGridCustomEvent","summary":"Fields, allowed values, and APIs that use SyGridCustomEvent.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridEventListener","title":"SyGridEventListener","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridData","title":"GridData","description":""},{"path":"/docs/types/SyGridApi","title":"SyGridApi","description":""}]}]}]},{"path":"/docs/types/SyGridDisplayRowDecision","kind":"type","title":"SyGridDisplayRowDecision","summary":"Fields, allowed values, and APIs that use SyGridDisplayRowDecision.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridDisplayRowInfo","title":"SyGridDisplayRowInfo","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridDisplayRowFeature","title":"SyGridDisplayRowFeature","description":""},{"path":"/docs/types/SyGridDisplayRowKind","title":"SyGridDisplayRowKind","description":""},{"path":"/docs/types/SyGridDisplayRowRefusal","title":"SyGridDisplayRowRefusal","description":""}]}]}]},{"path":"/docs/types/SyGridDisplayRowFeature","kind":"type","title":"SyGridDisplayRowFeature","summary":"Fields, allowed values, and APIs that use SyGridDisplayRowFeature.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type SyGridDisplayRowFeature =\n  | 'select'\n  | 'focus'\n  | 'edit'\n  | 'export'\n  | 'quick-filter'\n  | 'expand';","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridDisplayRowDecision","title":"SyGridDisplayRowDecision","description":""}]}]}]},{"path":"/docs/types/SyGridDisplayRowIdentity","kind":"type","title":"SyGridDisplayRowIdentity","summary":"Fields, allowed values, and APIs that use SyGridDisplayRowIdentity.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type SyGridDisplayRowIdentity = 'row-id' | 'key-path' | 'singleton';","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridDisplayRowPolicy","title":"SyGridDisplayRowPolicy","description":""}]}]}]},{"path":"/docs/types/SyGridDisplayRowInfo","kind":"type","title":"SyGridDisplayRowInfo","summary":"Fields, allowed values, and APIs that use SyGridDisplayRowInfo.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/getDisplayRowInfo","title":"getDisplayRowInfo","description":"Reads the displayed row kind, such as data, group, or detail."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridDisplayRowKind","title":"SyGridDisplayRowKind","description":""},{"path":"/docs/types/SyGridDisplayRowPolicy","title":"SyGridDisplayRowPolicy","description":""},{"path":"/docs/types/SyGridDisplayRowDecision","title":"SyGridDisplayRowDecision","description":""}]}]}]},{"path":"/docs/types/SyGridDisplayRowKind","kind":"type","title":"SyGridDisplayRowKind","summary":"Fields, allowed values, and APIs that use SyGridDisplayRowKind.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridDisplayRowDecision","title":"SyGridDisplayRowDecision","description":""},{"path":"/docs/types/SyGridDisplayRowInfo","title":"SyGridDisplayRowInfo","description":""},{"path":"/docs/types/SyGridDisplayRowPolicy","title":"SyGridDisplayRowPolicy","description":""}]}]}]},{"path":"/docs/types/SyGridDisplayRowPolicy","kind":"type","title":"SyGridDisplayRowPolicy","summary":"Fields, allowed values, and APIs that use SyGridDisplayRowPolicy.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridDisplayRowInfo","title":"SyGridDisplayRowInfo","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridDisplayRowKind","title":"SyGridDisplayRowKind","description":""},{"path":"/docs/types/SyGridDisplayRowIdentity","title":"SyGridDisplayRowIdentity","description":""}]}]}]},{"path":"/docs/types/SyGridDisplayRowRefusal","kind":"type","title":"SyGridDisplayRowRefusal","summary":"Fields, allowed values, and APIs that use SyGridDisplayRowRefusal.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridDisplayRowDecision","title":"SyGridDisplayRowDecision","description":""}]}]}]},{"path":"/docs/types/SyGridDragOrphanCause","kind":"type","title":"SyGridDragOrphanCause","summary":"Fields, allowed values, and APIs that use SyGridDragOrphanCause.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridDragSafetyReport","title":"SyGridDragSafetyReport","description":""},{"path":"/docs/types/SyGridRowDragCancelDetail","title":"SyGridRowDragCancelDetail","description":""}]}]}]},{"path":"/docs/types/SyGridDragSafetyReport","kind":"type","title":"SyGridDragSafetyReport","summary":"Fields, allowed values, and APIs that use SyGridDragSafetyReport.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/getDragSafetyReport","title":"getDragSafetyReport","description":"Reports whether row dragging is safe under current settings and describes restrictions."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridDragOrphanCause","title":"SyGridDragOrphanCause","description":""}]}]}]},{"path":"/docs/types/SyGridDropZoneInput","kind":"type","title":"SyGridDropZoneInput","summary":"Fields, allowed values, and APIs that use SyGridDropZoneInput.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/registerDropZone","title":"registerDropZone","description":"Registers a drop area for receiving rows and returns the registration result."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]}]},{"path":"/docs/types/SyGridDropZoneRegistration","kind":"type","title":"SyGridDropZoneRegistration","summary":"Fields, allowed values, and APIs that use SyGridDropZoneRegistration.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/registerDropZone","title":"registerDropZone","description":"Registers a drop area for receiving rows and returns the registration result."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]}]},{"path":"/docs/types/SyGridDropZonesReport","kind":"type","title":"SyGridDropZonesReport","summary":"Fields, allowed values, and APIs that use SyGridDropZonesReport.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/getDropZones","title":"getDropZones","description":"Reads current drop-area registration state."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]}]},{"path":"/docs/types/SyGridEditRejectedCell","kind":"type","title":"SyGridEditRejectedCell","summary":"Fields, allowed values, and APIs that use SyGridEditRejectedCell.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridBatchCommitReport","title":"SyGridBatchCommitReport","description":""},{"path":"/docs/types/SyGridBatchEditEndEventDetail","title":"SyGridBatchEditEndEventDetail","description":""},{"path":"/docs/types/SyGridRowEditReport","title":"SyGridRowEditReport","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridRowId","title":"GridRowId","description":""}]}]}]},{"path":"/docs/types/SyGridEditSource","kind":"type","title":"SyGridEditSource","summary":"Fields, allowed values, and APIs that use SyGridEditSource.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type SyGridEditSource = 'local' | 'remote' | 'undo' | 'redo';","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridCellValueChangedEventDetail","title":"SyGridCellValueChangedEventDetail","description":""},{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""},{"path":"/docs/types/SyGridRowDataChangedEventDetail","title":"SyGridRowDataChangedEventDetail","description":""}]}]}]},{"path":"/docs/types/SyGridEventListener","kind":"type","title":"SyGridEventListener","summary":"Fields, allowed values, and APIs that use SyGridEventListener.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridApi","title":"SyGridApi","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridData","title":"GridData","description":""},{"path":"/docs/types/SyGridApi","title":"SyGridApi","description":""},{"path":"/docs/types/SyGridCustomEvent","title":"SyGridCustomEvent","description":""}]}]}]},{"path":"/docs/types/SyGridEventMap","kind":"type","title":"SyGridEventMap","summary":"Fields, allowed values, and APIs that use SyGridEventMap.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridApi","title":"SyGridApi","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridData","title":"GridData","description":""},{"path":"/docs/types/GridQueryResult","title":"GridQueryResult","description":""},{"path":"/docs/types/GridEngineTier","title":"GridEngineTier","description":""},{"path":"/docs/types/SyGridSortChangedEventDetail","title":"SyGridSortChangedEventDetail","description":""},{"path":"/docs/types/ActiveFilter","title":"ActiveFilter","description":""},{"path":"/docs/types/ActiveFilterMap","title":"ActiveFilterMap","description":""},{"path":"/docs/types/ConditionNode","title":"ConditionNode","description":""},{"path":"/docs/types/GridRowId","title":"GridRowId","description":""},{"path":"/docs/types/CellRangeBounds","title":"CellRangeBounds","description":""},{"path":"/docs/types/SideBarPanelId","title":"SideBarPanelId","description":""},{"path":"/docs/types/SyGridClipboardPastedEventDetail","title":"SyGridClipboardPastedEventDetail","description":""},{"path":"/docs/types/ActivePagination","title":"ActivePagination","description":""},{"path":"/docs/types/EmptyStateKind","title":"EmptyStateKind","description":""},{"path":"/docs/types/SyGridActiveCellChangedEventDetail","title":"SyGridActiveCellChangedEventDetail","description":""},{"path":"/docs/types/SyGridCellClickedEventDetail","title":"SyGridCellClickedEventDetail","description":""},{"path":"/docs/types/SyGridCellDoubleClickedEventDetail","title":"SyGridCellDoubleClickedEventDetail","description":""},{"path":"/docs/types/SyGridRowClickedEventDetail","title":"SyGridRowClickedEventDetail","description":""},{"path":"/docs/types/SyGridCellEditingRequestedEventDetail","title":"SyGridCellEditingRequestedEventDetail","description":""},{"path":"/docs/types/SyGridCellEditingCancelledEventDetail","title":"SyGridCellEditingCancelledEventDetail","description":""},{"path":"/docs/types/SyGridCellEditingCommittedEventDetail","title":"SyGridCellEditingCommittedEventDetail","description":""},{"path":"/docs/types/GridWorkbookBindingChangedDetail","title":"GridWorkbookBindingChangedDetail","description":""},{"path":"/docs/types/GridWorkbookBindingErrorDetail","title":"GridWorkbookBindingErrorDetail","description":""},{"path":"/docs/types/GridChunkLoadEventDetail","title":"GridChunkLoadEventDetail","description":""},{"path":"/docs/types/GridComponentErrorDetails","title":"GridComponentErrorDetails","description":""},{"path":"/docs/types/SyGridRowDataChangedEventDetail","title":"SyGridRowDataChangedEventDetail","description":""},{"path":"/docs/types/SyGridCellValueChangedEventDetail","title":"SyGridCellValueChangedEventDetail","description":""},{"path":"/docs/types/PivotPanelChangeDetail","title":"PivotPanelChangeDetail","description":""},{"path":"/docs/types/SyGridRemoteEditAppliedEventDetail","title":"SyGridRemoteEditAppliedEventDetail","description":""},{"path":"/docs/types/GridCollaboratorInfo","title":"GridCollaboratorInfo","description":""},{"path":"/docs/types/GridCollabConflict","title":"GridCollabConflict","description":""},{"path":"/docs/types/GridSyncStatus","title":"GridSyncStatus","description":""},{"path":"/docs/types/GridCellComment","title":"GridCellComment","description":""},{"path":"/docs/types/AuditEntry","title":"AuditEntry","description":""},{"path":"/docs/types/ConditionalFormatRule","title":"ConditionalFormatRule","description":""},{"path":"/docs/types/XlsxGridSnapshot","title":"XlsxGridSnapshot","description":""},{"path":"/docs/types/SyGridHistoryChangedEventDetail","title":"SyGridHistoryChangedEventDetail","description":""},{"path":"/docs/types/SyGridColumnResizedEventDetail","title":"SyGridColumnResizedEventDetail","description":""},{"path":"/docs/types/SyGridColumnReorderedEventDetail","title":"SyGridColumnReorderedEventDetail","description":""},{"path":"/docs/types/SyGridColumnVisibilityChangedEventDetail","title":"SyGridColumnVisibilityChangedEventDetail","description":""},{"path":"/docs/types/SyGridSelectionChangedEventDetail","title":"SyGridSelectionChangedEventDetail","description":""},{"path":"/docs/types/SyGridSpanConflictEventDetail","title":"SyGridSpanConflictEventDetail","description":""},{"path":"/docs/types/SyGridRowDragEventDetail","title":"SyGridRowDragEventDetail","description":""},{"path":"/docs/types/SyGridRowDragEndDetail","title":"SyGridRowDragEndDetail","description":""},{"path":"/docs/types/SyGridRowDragCancelDetail","title":"SyGridRowDragCancelDetail","description":""},{"path":"/docs/types/SyGridRowsTransferredDetail","title":"SyGridRowsTransferredDetail","description":""},{"path":"/docs/types/SyGridPinnedRowsChangedDetail","title":"SyGridPinnedRowsChangedDetail","description":""},{"path":"/docs/types/SyGridRowLayoutRefusedDetail","title":"SyGridRowLayoutRefusedDetail","description":""},{"path":"/docs/types/SyGridTreeReparentedDetail","title":"SyGridTreeReparentedDetail","description":""},{"path":"/docs/types/GridTheme","title":"GridTheme","description":""},{"path":"/docs/types/GridLocale","title":"GridLocale","description":""},{"path":"/docs/types/GridLiveObjectEvent","title":"GridLiveObjectEvent","description":""},{"path":"/docs/types/SyGridStateUpdatedDetail","title":"SyGridStateUpdatedDetail","description":""},{"path":"/docs/types/SyGridPreDestroyedDetail","title":"SyGridPreDestroyedDetail","description":""},{"path":"/docs/types/SyGridBatchEditStartEventDetail","title":"SyGridBatchEditStartEventDetail","description":""},{"path":"/docs/types/SyGridBatchEditEndEventDetail","title":"SyGridBatchEditEndEventDetail","description":""},{"path":"/docs/types/SyGridRowValueChangedEventDetail","title":"SyGridRowValueChangedEventDetail","description":""},{"path":"/docs/types/SyGridRowEditStartEventDetail","title":"SyGridRowEditStartEventDetail","description":""},{"path":"/docs/types/SyGridRowEditStopEventDetail","title":"SyGridRowEditStopEventDetail","description":""},{"path":"/docs/types/SyGridFillStartEventDetail","title":"SyGridFillStartEventDetail","description":""},{"path":"/docs/types/SyGridFillEndEventDetail","title":"SyGridFillEndEventDetail","description":""},{"path":"/docs/types/SyGridPivotCombinationConflictDetail","title":"SyGridPivotCombinationConflictDetail","description":""},{"path":"/docs/types/SyGridPivotColumnsChangedDetail","title":"SyGridPivotColumnsChangedDetail","description":""},{"path":"/docs/types/SyGridServerStoreUpdatedDetail","title":"SyGridServerStoreUpdatedDetail","description":""},{"path":"/docs/types/SyGridWorkbookPropagationDetail","title":"SyGridWorkbookPropagationDetail","description":""},{"path":"/docs/types/SyGridChartEvent","title":"SyGridChartEvent","description":""}]}]}]},{"path":"/docs/types/SyGridExcelDownloadOptions","kind":"type","title":"SyGridExcelDownloadOptions","summary":"Fields, allowed values, and APIs that use SyGridExcelDownloadOptions.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface SyGridExcelDownloadOptions extends SyGridExcelGenerateOptions {\n  fileName?: string;\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridExcelGenerateOptions","title":"SyGridExcelGenerateOptions","description":""}]}]}]},{"path":"/docs/types/SyGridExcelGenerateOptions","kind":"type","title":"SyGridExcelGenerateOptions","summary":"Fields, allowed values, and APIs that use SyGridExcelGenerateOptions.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridExcelDownloadOptions","title":"SyGridExcelDownloadOptions","description":""},{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]}]},{"path":"/docs/types/SyGridFillEndEventDetail","kind":"type","title":"SyGridFillEndEventDetail","summary":"Fields, allowed values, and APIs that use SyGridFillEndEventDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/events/fillEnd","title":"fillEnd","description":"Emitted when range filling ends. Explain applied, skipped, and rejected results to users."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridMutationId","title":"GridMutationId","description":""},{"path":"/docs/types/SyGridFillRejectedCell","title":"SyGridFillRejectedCell","description":""},{"path":"/docs/types/CellRangeBounds","title":"CellRangeBounds","description":""}]}]}]},{"path":"/docs/types/SyGridFillRangeOptions","kind":"type","title":"SyGridFillRangeOptions","summary":"Fields, allowed values, and APIs that use SyGridFillRangeOptions.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/fillRange","title":"fillRange","description":"Fills a target range from source values or patterns and reports applied and rejected results."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/CellRangeBounds","title":"CellRangeBounds","description":""},{"path":"/docs/types/FillDirection","title":"FillDirection","description":""}]}]}]},{"path":"/docs/types/SyGridFillRangeReport","kind":"type","title":"SyGridFillRangeReport","summary":"Fields, allowed values, and APIs that use SyGridFillRangeReport.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/fillRange","title":"fillRange","description":"Fills a target range from source values or patterns and reports applied and rejected results."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridMutationId","title":"GridMutationId","description":""},{"path":"/docs/types/SyGridFillRejectedCell","title":"SyGridFillRejectedCell","description":""},{"path":"/docs/types/CellRangeBounds","title":"CellRangeBounds","description":""},{"path":"/docs/types/GridRowId","title":"GridRowId","description":""}]}]}]},{"path":"/docs/types/SyGridFillRejectedCell","kind":"type","title":"SyGridFillRejectedCell","summary":"Fields, allowed values, and APIs that use SyGridFillRejectedCell.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface SyGridFillRejectedCell {\n  row: number;\n  col: number;\n  reason: 'rbac' | 'validation' | 'formula-protected';\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridFillEndEventDetail","title":"SyGridFillEndEventDetail","description":""},{"path":"/docs/types/SyGridFillRangeReport","title":"SyGridFillRangeReport","description":""}]}]}]},{"path":"/docs/types/SyGridFillStartEventDetail","kind":"type","title":"SyGridFillStartEventDetail","summary":"Fields, allowed values, and APIs that use SyGridFillStartEventDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/events/fillStart","title":"fillStart","description":"Emitted when range filling starts."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/FillPlanMode","title":"FillPlanMode","description":""},{"path":"/docs/types/CellRangeBounds","title":"CellRangeBounds","description":""},{"path":"/docs/types/FillDirection","title":"FillDirection","description":""},{"path":"/docs/types/GridMutationId","title":"GridMutationId","description":""}]}]}]},{"path":"/docs/types/SyGridFilterSlice","kind":"type","title":"SyGridFilterSlice","summary":"Fields, allowed values, and APIs that use SyGridFilterSlice.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/getFilterModel","title":"getFilterModel","description":"Reads combined state across current filter families."},{"path":"/docs/methods/setFilterModel","title":"setFilterModel","description":"Applies a validated combined filter model. null clears all filter families; inspect reports for invalid models."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]}]},{"path":"/docs/types/SyGridFocusSlice","kind":"type","title":"SyGridFocusSlice","summary":"Fields, allowed values, and APIs that use SyGridFocusSlice.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface SyGridFocusSlice {\n  readonly activeCell: { readonly rowIndex: number; readonly colIndex: number } | null;\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/UiRestorePlan","title":"UiRestorePlan","description":""}]}]}]},{"path":"/docs/types/SyGridFullWidthContainer","kind":"type","title":"SyGridFullWidthContainer","summary":"Fields, allowed values, and APIs that use SyGridFullWidthContainer.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type SyGridFullWidthContainer = 'left' | 'middle' | 'right';","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridFullWidthRenderParams","title":"SyGridFullWidthRenderParams","description":""},{"path":"/docs/types/SyGridFullWidthSegment","title":"SyGridFullWidthSegment","description":""}]}]}]},{"path":"/docs/types/SyGridFullWidthLayoutReport","kind":"type","title":"SyGridFullWidthLayoutReport","summary":"Fields, allowed values, and APIs that use SyGridFullWidthLayoutReport.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/getFullWidthRowInfo","title":"getFullWidthRowInfo","description":"Reads one full-width row's information, or the complete layout report when no argument is supplied."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridFullWidthRefusalReason","title":"SyGridFullWidthRefusalReason","description":""},{"path":"/docs/types/GridRowId","title":"GridRowId","description":""}]}]}]},{"path":"/docs/types/SyGridFullWidthMode","kind":"type","title":"SyGridFullWidthMode","summary":"Fields, allowed values, and APIs that use SyGridFullWidthMode.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type SyGridFullWidthMode = 'full-width' | 'embedded';","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridFullWidthRenderer","title":"SyGridFullWidthRenderer","description":""},{"path":"/docs/types/SyGridFullWidthRowInfo","title":"SyGridFullWidthRowInfo","description":""}]}]}]},{"path":"/docs/types/SyGridFullWidthRefusalReason","kind":"type","title":"SyGridFullWidthRefusalReason","summary":"Fields, allowed values, and APIs that use SyGridFullWidthRefusalReason.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridFullWidthLayoutReport","title":"SyGridFullWidthLayoutReport","description":""}]}]}]},{"path":"/docs/types/SyGridFullWidthRenderParams","kind":"type","title":"SyGridFullWidthRenderParams","summary":"Fields, allowed values, and APIs that use SyGridFullWidthRenderParams.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridFullWidthRenderer","title":"SyGridFullWidthRenderer","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridData","title":"GridData","description":""},{"path":"/docs/types/GridRowId","title":"GridRowId","description":""},{"path":"/docs/types/SyGridFullWidthRowKind","title":"SyGridFullWidthRowKind","description":""},{"path":"/docs/types/SyGridFullWidthContainer","title":"SyGridFullWidthContainer","description":""}]}]}]},{"path":"/docs/types/SyGridFullWidthRenderer","kind":"type","title":"SyGridFullWidthRenderer","summary":"Fields, allowed values, and APIs that use SyGridFullWidthRenderer.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/options/fullWidthCellRenderer","title":"fullWidthCellRenderer","description":"Renderer for full-width row content. Uses a different input contract from regular cell renderers."}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridData","title":"GridData","description":""},{"path":"/docs/types/SyGridFullWidthMode","title":"SyGridFullWidthMode","description":""},{"path":"/docs/types/SyGridFullWidthRenderParams","title":"SyGridFullWidthRenderParams","description":""}]}]}]},{"path":"/docs/types/SyGridFullWidthRowInfo","kind":"type","title":"SyGridFullWidthRowInfo","summary":"Fields, allowed values, and APIs that use SyGridFullWidthRowInfo.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/getFullWidthRowInfo","title":"getFullWidthRowInfo","description":"Reads one full-width row's information, or the complete layout report when no argument is supplied."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridData","title":"GridData","description":""},{"path":"/docs/types/GridRowId","title":"GridRowId","description":""},{"path":"/docs/types/SyGridFullWidthMode","title":"SyGridFullWidthMode","description":""},{"path":"/docs/types/SyGridFullWidthSegment","title":"SyGridFullWidthSegment","description":""}]}]}]},{"path":"/docs/types/SyGridFullWidthRowKind","kind":"type","title":"SyGridFullWidthRowKind","summary":"Fields, allowed values, and APIs that use SyGridFullWidthRowKind.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type SyGridFullWidthRowKind = 'detail' | 'group' | 'group-footer' | 'loading' | 'custom';","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridFullWidthRenderParams","title":"SyGridFullWidthRenderParams","description":""}]}]}]},{"path":"/docs/types/SyGridFullWidthSegment","kind":"type","title":"SyGridFullWidthSegment","summary":"Fields, allowed values, and APIs that use SyGridFullWidthSegment.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridFullWidthRowInfo","title":"SyGridFullWidthRowInfo","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridFullWidthContainer","title":"SyGridFullWidthContainer","description":""}]}]}]},{"path":"/docs/types/SyGridGroupCheckEvidence","kind":"type","title":"SyGridGroupCheckEvidence","summary":"Fields, allowed values, and APIs that use SyGridGroupCheckEvidence.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type SyGridGroupCheckEvidence = 'complete' | 'partial';","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridGroupCheckStateEntry","title":"SyGridGroupCheckStateEntry","description":""}]}]}]},{"path":"/docs/types/SyGridGroupCheckState","kind":"type","title":"SyGridGroupCheckState","summary":"Fields, allowed values, and APIs that use SyGridGroupCheckState.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type SyGridGroupCheckState = 'checked' | 'unchecked' | 'indeterminate';","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridGroupCheckStateEntry","title":"SyGridGroupCheckStateEntry","description":""}]}]}]},{"path":"/docs/types/SyGridGroupCheckStateEntry","kind":"type","title":"SyGridGroupCheckStateEntry","summary":"Fields, allowed values, and APIs that use SyGridGroupCheckStateEntry.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridGroupCheckStatesReport","title":"SyGridGroupCheckStatesReport","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridGroupCheckState","title":"SyGridGroupCheckState","description":""},{"path":"/docs/types/SyGridGroupCheckEvidence","title":"SyGridGroupCheckEvidence","description":""}]}]}]},{"path":"/docs/types/SyGridGroupCheckStatesOptions","kind":"type","title":"SyGridGroupCheckStatesOptions","summary":"Fields, allowed values, and APIs that use SyGridGroupCheckStatesOptions.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface SyGridGroupCheckStatesOptions {\n  descendantScope?: SyGridGroupDescendantScope;\n}","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/getGroupCheckStates","title":"getGroupCheckStates","description":"Calculates group selection state. Returns rejection reasons when collapsed groups, missing row IDs, or other row models prevent a reliable result."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridGroupDescendantScope","title":"SyGridGroupDescendantScope","description":""}]}]}]},{"path":"/docs/types/SyGridGroupCheckStatesReport","kind":"type","title":"SyGridGroupCheckStatesReport","summary":"Fields, allowed values, and APIs that use SyGridGroupCheckStatesReport.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/getGroupCheckStates","title":"getGroupCheckStates","description":"Calculates group selection state. Returns rejection reasons when collapsed groups, missing row IDs, or other row models prevent a reliable result."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridGroupCheckUnavailableReason","title":"SyGridGroupCheckUnavailableReason","description":""},{"path":"/docs/types/SyGridGroupDescendantScope","title":"SyGridGroupDescendantScope","description":""},{"path":"/docs/types/SyGridGroupCheckStateEntry","title":"SyGridGroupCheckStateEntry","description":""}]}]}]},{"path":"/docs/types/SyGridGroupCheckUnavailableReason","kind":"type","title":"SyGridGroupCheckUnavailableReason","summary":"Fields, allowed values, and APIs that use SyGridGroupCheckUnavailableReason.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridGroupCheckStatesReport","title":"SyGridGroupCheckStatesReport","description":""}]}]}]},{"path":"/docs/types/SyGridGroupDescendantScope","kind":"type","title":"SyGridGroupDescendantScope","summary":"Fields, allowed values, and APIs that use SyGridGroupDescendantScope.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type SyGridGroupDescendantScope = 'all' | 'filtered';","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridGroupCheckStatesOptions","title":"SyGridGroupCheckStatesOptions","description":""},{"path":"/docs/types/SyGridGroupCheckStatesReport","title":"SyGridGroupCheckStatesReport","description":""}]}]}]},{"path":"/docs/types/SyGridHistoryChangedEventDetail","kind":"type","title":"SyGridHistoryChangedEventDetail","summary":"Fields, allowed values, and APIs that use SyGridHistoryChangedEventDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]}]},{"path":"/docs/types/SyGridImperativeMethods","kind":"type","title":"SyGridImperativeMethods","summary":"Fields, allowed values, and APIs that use SyGridImperativeMethods.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridApi","title":"SyGridApi","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridData","title":"GridData","description":""},{"path":"/docs/types/AuditLogFilter","title":"AuditLogFilter","description":""},{"path":"/docs/types/AuditEntry","title":"AuditEntry","description":""},{"path":"/docs/types/GridRowId","title":"GridRowId","description":""},{"path":"/docs/types/SyGridApi","title":"SyGridApi","description":""},{"path":"/docs/types/GridColumnRef","title":"GridColumnRef","description":""},{"path":"/docs/types/GridColumnGroupRef","title":"GridColumnGroupRef","description":""},{"path":"/docs/types/GridRowRef","title":"GridRowRef","description":""},{"path":"/docs/types/GridWorkbookBinding","title":"GridWorkbookBinding","description":""},{"path":"/docs/types/SyGridSortModelEntry","title":"SyGridSortModelEntry","description":""},{"path":"/docs/types/GridEngineTier","title":"GridEngineTier","description":""},{"path":"/docs/types/SnapshotMeta","title":"SnapshotMeta","description":""},{"path":"/docs/types/SnapshotDiff","title":"SnapshotDiff","description":""},{"path":"/docs/types/CellRangeBounds","title":"CellRangeBounds","description":""},{"path":"/docs/types/GridRowTransaction","title":"GridRowTransaction","description":""},{"path":"/docs/types/SyGridEditSource","title":"SyGridEditSource","description":""},{"path":"/docs/types/SyGridRowTransactionResult","title":"SyGridRowTransactionResult","description":""},{"path":"/docs/types/SyGridCollabConnectOptions","title":"SyGridCollabConnectOptions","description":""},{"path":"/docs/types/GridSyncStatus","title":"GridSyncStatus","description":""},{"path":"/docs/types/GridChunkId","title":"GridChunkId","description":""},{"path":"/docs/types/GridCollaboratorInfo","title":"GridCollaboratorInfo","description":""},{"path":"/docs/types/GridCellComment","title":"GridCellComment","description":""},{"path":"/docs/types/CsvExportOptions","title":"CsvExportOptions","description":""},{"path":"/docs/types/CsvExportResult","title":"CsvExportResult","description":""},{"path":"/docs/types/CsvDownloadOptions","title":"CsvDownloadOptions","description":""},{"path":"/docs/types/SyGridExcelGenerateOptions","title":"SyGridExcelGenerateOptions","description":""},{"path":"/docs/types/SyGridExcelDownloadOptions","title":"SyGridExcelDownloadOptions","description":""},{"path":"/docs/types/SyGridCsvImportOptions","title":"SyGridCsvImportOptions","description":""},{"path":"/docs/types/SyGridApiPdfExportOptions","title":"SyGridApiPdfExportOptions","description":""},{"path":"/docs/types/PdfExportResult","title":"PdfExportResult","description":""},{"path":"/docs/types/SyGridApiPdfDownloadOptions","title":"SyGridApiPdfDownloadOptions","description":""},{"path":"/docs/types/SyGridXlsxImportOptions","title":"SyGridXlsxImportOptions","description":""},{"path":"/docs/types/XlsxImportResult","title":"XlsxImportResult","description":""},{"path":"/docs/types/ContextMenuItem","title":"ContextMenuItem","description":""},{"path":"/docs/types/SyGridCellTooltipTarget","title":"SyGridCellTooltipTarget","description":""},{"path":"/docs/types/SyGridColumnState","title":"SyGridColumnState","description":""},{"path":"/docs/types/SyGridApplyColumnStateOptions","title":"SyGridApplyColumnStateOptions","description":""},{"path":"/docs/types/SyGridState","title":"SyGridState","description":""},{"path":"/docs/types/GridStateApplyOptions","title":"GridStateApplyOptions","description":""},{"path":"/docs/types/SyGridStateApplyReport","title":"SyGridStateApplyReport","description":""},{"path":"/docs/types/SyGridFilterSlice","title":"SyGridFilterSlice","description":""},{"path":"/docs/types/FilterSliceApplyResult","title":"FilterSliceApplyResult","description":""},{"path":"/docs/types/EditTransaction","title":"EditTransaction","description":""},{"path":"/docs/types/CellRenderer","title":"CellRenderer","description":""},{"path":"/docs/types/GridComponentKind","title":"GridComponentKind","description":""},{"path":"/docs/types/GridComponentRegistrationScope","title":"GridComponentRegistrationScope","description":""},{"path":"/docs/types/GridComponentDefinitionFor","title":"GridComponentDefinitionFor","description":""},{"path":"/docs/types/GridRendererDiscovery","title":"GridRendererDiscovery","description":""},{"path":"/docs/types/GridMountedComponentLookup","title":"GridMountedComponentLookup","description":""},{"path":"/docs/types/GridEditorInstance","title":"GridEditorInstance","description":""},{"path":"/docs/types/GridEditorParams","title":"GridEditorParams","description":""},{"path":"/docs/types/GridFilterInstance","title":"GridFilterInstance","description":""},{"path":"/docs/types/ConditionNode","title":"ConditionNode","description":""},{"path":"/docs/types/SyGridCanonicalRange","title":"SyGridCanonicalRange","description":""},{"path":"/docs/types/SyGridCellRangeInput","title":"SyGridCellRangeInput","description":""},{"path":"/docs/types/SyGridCanonicalChange","title":"SyGridCanonicalChange","description":""},{"path":"/docs/types/SyGridBatchStartOptions","title":"SyGridBatchStartOptions","description":""},{"path":"/docs/types/SyGridPendingBatchCell","title":"SyGridPendingBatchCell","description":""},{"path":"/docs/types/SyGridBatchCommitOptions","title":"SyGridBatchCommitOptions","description":""},{"path":"/docs/types/SyGridBatchCommitReport","title":"SyGridBatchCommitReport","description":""},{"path":"/docs/types/SyGridRowEditReport","title":"SyGridRowEditReport","description":""},{"path":"/docs/types/SyGridStateCaptureReport","title":"SyGridStateCaptureReport","description":""},{"path":"/docs/types/SyGridFillRangeOptions","title":"SyGridFillRangeOptions","description":""},{"path":"/docs/types/SyGridFillRangeReport","title":"SyGridFillRangeReport","description":""},{"path":"/docs/types/SyGridDisplayRowInfo","title":"SyGridDisplayRowInfo","description":""},{"path":"/docs/types/SyGridPivotCombinationReport","title":"SyGridPivotCombinationReport","description":""},{"path":"/docs/types/SyGridPivotSecondaryColumns","title":"SyGridPivotSecondaryColumns","description":""},{"path":"/docs/types/SyGridGroupCheckStatesOptions","title":"SyGridGroupCheckStatesOptions","description":""},{"path":"/docs/types/SyGridGroupCheckStatesReport","title":"SyGridGroupCheckStatesReport","description":""},{"path":"/docs/types/SyGridServerRefreshInput","title":"SyGridServerRefreshInput","description":""},{"path":"/docs/types/SyGridServerRefreshResult","title":"SyGridServerRefreshResult","description":""},{"path":"/docs/types/SyGridServerTransactionInput","title":"SyGridServerTransactionInput","description":""},{"path":"/docs/types/SyGridServerTransactionResult","title":"SyGridServerTransactionResult","description":""},{"path":"/docs/types/SyGridServerTransactionSettlement","title":"SyGridServerTransactionSettlement","description":""},{"path":"/docs/types/SyGridServerTransactionEnqueue","title":"SyGridServerTransactionEnqueue","description":""},{"path":"/docs/types/SyGridServerFlushReport","title":"SyGridServerFlushReport","description":""},{"path":"/docs/types/SyGridServerStateReport","title":"SyGridServerStateReport","description":""},{"path":"/docs/types/SyGridServerPivotColumnsReport","title":"SyGridServerPivotColumnsReport","description":""},{"path":"/docs/types/SyGridServerPivotColumnAudit","title":"SyGridServerPivotColumnAudit","description":""},{"path":"/docs/types/SyGridServerSelectionState","title":"SyGridServerSelectionState","description":""},{"path":"/docs/types/SyGridServerSelectionSetResult","title":"SyGridServerSelectionSetResult","description":""},{"path":"/docs/types/SyGridServerSelectAllResult","title":"SyGridServerSelectAllResult","description":""},{"path":"/docs/types/SyGridServerGroupChildrenResult","title":"SyGridServerGroupChildrenResult","description":""},{"path":"/docs/types/SyGridRowSpanReport","title":"SyGridRowSpanReport","description":""},{"path":"/docs/types/SyGridCellSpanInfo","title":"SyGridCellSpanInfo","description":""},{"path":"/docs/types/SyGridSpanInteractionQuery","title":"SyGridSpanInteractionQuery","description":""},{"path":"/docs/types/SyGridSpanInteractionReport","title":"SyGridSpanInteractionReport","description":""},{"path":"/docs/types/SyGridRowDragStartInput","title":"SyGridRowDragStartInput","description":""},{"path":"/docs/types/SyGridRowDragStartResult","title":"SyGridRowDragStartResult","description":""},{"path":"/docs/types/SyGridRowDragSessionReport","title":"SyGridRowDragSessionReport","description":""},{"path":"/docs/types/SyGridDropZoneInput","title":"SyGridDropZoneInput","description":""},{"path":"/docs/types/SyGridDropZoneRegistration","title":"SyGridDropZoneRegistration","description":""},{"path":"/docs/types/SyGridDropZonesReport","title":"SyGridDropZonesReport","description":""},{"path":"/docs/types/SyGridDragSafetyReport","title":"SyGridDragSafetyReport","description":""},{"path":"/docs/types/SyGridPinnedRowSetInput","title":"SyGridPinnedRowSetInput","description":""},{"path":"/docs/types/SyGridPinnedRowsResult","title":"SyGridPinnedRowsResult","description":""},{"path":"/docs/types/SyGridPinnedRowsReport","title":"SyGridPinnedRowsReport","description":""},{"path":"/docs/types/SyGridPinnedRowInfo","title":"SyGridPinnedRowInfo","description":""},{"path":"/docs/types/SyGridFullWidthRowInfo","title":"SyGridFullWidthRowInfo","description":""},{"path":"/docs/types/SyGridFullWidthLayoutReport","title":"SyGridFullWidthLayoutReport","description":""},{"path":"/docs/types/SyGridAlignedGridsInput","title":"SyGridAlignedGridsInput","description":""},{"path":"/docs/types/SyGridAlignedGridsResult","title":"SyGridAlignedGridsResult","description":""},{"path":"/docs/types/SyGridAlignedGridsReport","title":"SyGridAlignedGridsReport","description":""},{"path":"/docs/types/SyGridReparentRequest","title":"SyGridReparentRequest","description":""},{"path":"/docs/types/SyGridReparentResult","title":"SyGridReparentResult","description":""},{"path":"/docs/types/SyGridWorkbookPropagationState","title":"SyGridWorkbookPropagationState","description":""},{"path":"/docs/types/SyGridWorkbookFlushReport","title":"SyGridWorkbookFlushReport","description":""},{"path":"/docs/types/SyGridWorkbookSnapshotReport","title":"SyGridWorkbookSnapshotReport","description":""},{"path":"/docs/types/SyGridWorkbookIntegrityReport","title":"SyGridWorkbookIntegrityReport","description":""},{"path":"/docs/types/SyGridSpillApplyInput","title":"SyGridSpillApplyInput","description":""},{"path":"/docs/types/SyGridSpillApplyResult","title":"SyGridSpillApplyResult","description":""},{"path":"/docs/types/SyGridSpillTarget","title":"SyGridSpillTarget","description":""},{"path":"/docs/types/SyGridSpillClearResult","title":"SyGridSpillClearResult","description":""},{"path":"/docs/types/GridMutationId","title":"GridMutationId","description":""},{"path":"/docs/types/SyGridSpillUndoResult","title":"SyGridSpillUndoResult","description":""},{"path":"/docs/types/SyGridSpillReport","title":"SyGridSpillReport","description":""},{"path":"/docs/types/SyGridChartCreateParams","title":"SyGridChartCreateParams","description":""},{"path":"/docs/types/SyGridChartCreateResult","title":"SyGridChartCreateResult","description":""},{"path":"/docs/types/SyGridChartUpdatePatch","title":"SyGridChartUpdatePatch","description":""},{"path":"/docs/types/SyGridChartUpdateResult","title":"SyGridChartUpdateResult","description":""},{"path":"/docs/types/SyGridChartDestroyResult","title":"SyGridChartDestroyResult","description":""},{"path":"/docs/types/SyGridChartReport","title":"SyGridChartReport","description":""},{"path":"/docs/types/SyGridChartSyncMutation","title":"SyGridChartSyncMutation","description":""},{"path":"/docs/types/SyGridChartSyncReport","title":"SyGridChartSyncReport","description":""},{"path":"/docs/types/SyGridChartPermissions","title":"SyGridChartPermissions","description":""},{"path":"/docs/types/SyGridChartMenuReport","title":"SyGridChartMenuReport","description":""},{"path":"/docs/types/SyGridChartPanelReport","title":"SyGridChartPanelReport","description":""},{"path":"/docs/types/SyGridChartCaptureResult","title":"SyGridChartCaptureResult","description":""},{"path":"/docs/types/SyGridChartRestoreResult","title":"SyGridChartRestoreResult","description":""},{"path":"/docs/types/SyGridChartExportRequest","title":"SyGridChartExportRequest","description":""},{"path":"/docs/types/SyGridChartExportResult","title":"SyGridChartExportResult","description":""},{"path":"/docs/types/SyGridChartCrossFilterAction","title":"SyGridChartCrossFilterAction","description":""},{"path":"/docs/types/SyGridChartCrossFilterResult","title":"SyGridChartCrossFilterResult","description":""},{"path":"/docs/types/SyGridChartAccessibleReport","title":"SyGridChartAccessibleReport","description":""},{"path":"/docs/types/SyGridChartFleetReport","title":"SyGridChartFleetReport","description":""}]}]}]},{"path":"/docs/types/SyGridPaginationSlice","kind":"type","title":"SyGridPaginationSlice","summary":"Fields, allowed values, and APIs that use SyGridPaginationSlice.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface SyGridPaginationSlice {\n  readonly pageIndex: number;\n  readonly pageSize: number;\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/UiRestorePlan","title":"UiRestorePlan","description":""}]}]}]},{"path":"/docs/types/SyGridPdfAutoFontOptions","kind":"type","title":"SyGridPdfAutoFontOptions","summary":"Fields, allowed values, and APIs that use SyGridPdfAutoFontOptions.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type SyGridPdfAutoFontOptions = {\n  autoFont?: boolean;\n  fontUrl?: string;\n};","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridPdfDownloadOptions","title":"SyGridPdfDownloadOptions","description":""},{"path":"/docs/types/SyGridPdfExportOptions","title":"SyGridPdfExportOptions","description":""}]}]}]},{"path":"/docs/types/SyGridPdfDownloadOptions","kind":"type","title":"SyGridPdfDownloadOptions","summary":"Fields, allowed values, and APIs that use SyGridPdfDownloadOptions.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type SyGridPdfDownloadOptions = Omit<PdfDownloadOptions<GridRow>, 'columns' | 'rows'> & SyGridPdfAutoFontOptions;","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/exportDataAsPdf","title":"exportDataAsPdf","description":"Downloads the table as PDF and returns generation results."}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/PdfDownloadOptions","title":"PdfDownloadOptions","description":""},{"path":"/docs/types/GridRow","title":"GridRow","description":""},{"path":"/docs/types/SyGridPdfAutoFontOptions","title":"SyGridPdfAutoFontOptions","description":""}]}]}]},{"path":"/docs/types/SyGridPdfExportOptions","kind":"type","title":"SyGridPdfExportOptions","summary":"Fields, allowed values, and APIs that use SyGridPdfExportOptions.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type SyGridPdfExportOptions = Omit<PdfExportOptions<GridRow>, 'columns' | 'rows'> & SyGridPdfAutoFontOptions;","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/getDataAsPdf","title":"getDataAsPdf","description":"Returns PDF generation results without downloading. Prepare a suitable font for characters such as Korean text."}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/PdfExportOptions","title":"PdfExportOptions","description":""},{"path":"/docs/types/GridRow","title":"GridRow","description":""},{"path":"/docs/types/SyGridPdfAutoFontOptions","title":"SyGridPdfAutoFontOptions","description":""}]}]}]},{"path":"/docs/types/SyGridPendingBatchCell","kind":"type","title":"SyGridPendingBatchCell","summary":"Fields, allowed values, and APIs that use SyGridPendingBatchCell.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/getPendingBatchCells","title":"getPendingBatchCells","description":"Reads uncommitted batch editing cells."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridRowId","title":"GridRowId","description":""}]}]}]},{"path":"/docs/types/SyGridPinnedRow","kind":"type","title":"SyGridPinnedRow","summary":"Fields, allowed values, and APIs that use SyGridPinnedRow.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridPinnedRowChange","title":"SyGridPinnedRowChange","description":""},{"path":"/docs/types/SyGridPinnedRowInfo","title":"SyGridPinnedRowInfo","description":""},{"path":"/docs/types/SyGridPinnedRowsReport","title":"SyGridPinnedRowsReport","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridData","title":"GridData","description":""},{"path":"/docs/types/GridRowId","title":"GridRowId","description":""},{"path":"/docs/types/SyGridPinnedRowSection","title":"SyGridPinnedRowSection","description":""}]}]}]},{"path":"/docs/types/SyGridPinnedRowBand","kind":"type","title":"SyGridPinnedRowBand","summary":"Fields, allowed values, and APIs that use SyGridPinnedRowBand.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type SyGridPinnedRowBand = 'top' | 'center' | 'bottom';","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridPinnedRowInfo","title":"SyGridPinnedRowInfo","description":""}]}]}]},{"path":"/docs/types/SyGridPinnedRowChange","kind":"type","title":"SyGridPinnedRowChange","summary":"Fields, allowed values, and APIs that use SyGridPinnedRowChange.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridPinnedRowsChangedDetail","title":"SyGridPinnedRowsChangedDetail","description":""},{"path":"/docs/types/SyGridPinnedRowsResult","title":"SyGridPinnedRowsResult","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridData","title":"GridData","description":""},{"path":"/docs/types/GridRowId","title":"GridRowId","description":""},{"path":"/docs/types/SyGridPinnedRowSection","title":"SyGridPinnedRowSection","description":""},{"path":"/docs/types/SyGridPinnedRow","title":"SyGridPinnedRow","description":""}]}]}]},{"path":"/docs/types/SyGridPinnedRowFeature","kind":"type","title":"SyGridPinnedRowFeature","summary":"Fields, allowed values, and APIs that use SyGridPinnedRowFeature.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridPinnedRowPolicyDecision","title":"SyGridPinnedRowPolicyDecision","description":""}]}]}]},{"path":"/docs/types/SyGridPinnedRowInfo","kind":"type","title":"SyGridPinnedRowInfo","summary":"Fields, allowed values, and APIs that use SyGridPinnedRowInfo.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/getPinnedRowInfo","title":"getPinnedRowInfo","description":"Reads details of a specified pinned row."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridData","title":"GridData","description":""},{"path":"/docs/types/SyGridPinnedRowBand","title":"SyGridPinnedRowBand","description":""},{"path":"/docs/types/SyGridPinnedRow","title":"SyGridPinnedRow","description":""},{"path":"/docs/types/SyGridPinnedRowPolicyDecision","title":"SyGridPinnedRowPolicyDecision","description":""}]}]}]},{"path":"/docs/types/SyGridPinnedRowInput","kind":"type","title":"SyGridPinnedRowInput","summary":"Fields, allowed values, and APIs that use SyGridPinnedRowInput.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface SyGridPinnedRowInput<TData = GridData> {\n  readonly id: GridRowId;\n  readonly data: TData;\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridPinnedRowSetInput","title":"SyGridPinnedRowSetInput","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridData","title":"GridData","description":""},{"path":"/docs/types/GridRowId","title":"GridRowId","description":""}]}]}]},{"path":"/docs/types/SyGridPinnedRowPolicyDecision","kind":"type","title":"SyGridPinnedRowPolicyDecision","summary":"Fields, allowed values, and APIs that use SyGridPinnedRowPolicyDecision.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridPinnedRowInfo","title":"SyGridPinnedRowInfo","description":""},{"path":"/docs/types/SyGridPinnedRowsReport","title":"SyGridPinnedRowsReport","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridPinnedRowFeature","title":"SyGridPinnedRowFeature","description":""}]}]}]},{"path":"/docs/types/SyGridPinnedRowRejection","kind":"type","title":"SyGridPinnedRowRejection","summary":"Fields, allowed values, and APIs that use SyGridPinnedRowRejection.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridPinnedRowsResult","title":"SyGridPinnedRowsResult","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridPinnedRowRejectionReason","title":"SyGridPinnedRowRejectionReason","description":""},{"path":"/docs/types/GridRowId","title":"GridRowId","description":""}]}]}]},{"path":"/docs/types/SyGridPinnedRowRejectionReason","kind":"type","title":"SyGridPinnedRowRejectionReason","summary":"Fields, allowed values, and APIs that use SyGridPinnedRowRejectionReason.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridPinnedRowRejection","title":"SyGridPinnedRowRejection","description":""}]}]}]},{"path":"/docs/types/SyGridPinnedRowSection","kind":"type","title":"SyGridPinnedRowSection","summary":"Fields, allowed values, and APIs that use SyGridPinnedRowSection.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type SyGridPinnedRowSection = 'top' | 'bottom';","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridPinnedRow","title":"SyGridPinnedRow","description":""},{"path":"/docs/types/SyGridPinnedRowChange","title":"SyGridPinnedRowChange","description":""}]}]}]},{"path":"/docs/types/SyGridPinnedRowSetInput","kind":"type","title":"SyGridPinnedRowSetInput","summary":"Fields, allowed values, and APIs that use SyGridPinnedRowSetInput.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/setPinnedRows","title":"setPinnedRows","description":"Sets top/bottom pinned row data and returns the application result."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridData","title":"GridData","description":""},{"path":"/docs/types/SyGridPinnedRowInput","title":"SyGridPinnedRowInput","description":""}]}]}]},{"path":"/docs/types/SyGridPinnedRowsChangedDetail","kind":"type","title":"SyGridPinnedRowsChangedDetail","summary":"Fields, allowed values, and APIs that use SyGridPinnedRowsChangedDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/events/pinnedRowsChanged","title":"pinnedRowsChanged","description":"Emitted when top/bottom pinned row data changes."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridData","title":"GridData","description":""},{"path":"/docs/types/SyGridPinnedRowChange","title":"SyGridPinnedRowChange","description":""},{"path":"/docs/types/GridRowId","title":"GridRowId","description":""}]}]}]},{"path":"/docs/types/SyGridPinnedRowsReport","kind":"type","title":"SyGridPinnedRowsReport","summary":"Fields, allowed values, and APIs that use SyGridPinnedRowsReport.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/getPinnedRows","title":"getPinnedRows","description":"Reads current pinned row data as a report."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridData","title":"GridData","description":""},{"path":"/docs/types/SyGridPinnedRow","title":"SyGridPinnedRow","description":""},{"path":"/docs/types/GridRowId","title":"GridRowId","description":""},{"path":"/docs/types/SyGridPinnedRowPolicyDecision","title":"SyGridPinnedRowPolicyDecision","description":""}]}]}]},{"path":"/docs/types/SyGridPinnedRowsResult","kind":"type","title":"SyGridPinnedRowsResult","summary":"Fields, allowed values, and APIs that use SyGridPinnedRowsResult.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/setPinnedRows","title":"setPinnedRows","description":"Sets top/bottom pinned row data and returns the application result."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridData","title":"GridData","description":""},{"path":"/docs/types/SyGridPinnedRowChange","title":"SyGridPinnedRowChange","description":""},{"path":"/docs/types/SyGridPinnedRowRejection","title":"SyGridPinnedRowRejection","description":""},{"path":"/docs/types/GridRowId","title":"GridRowId","description":""}]}]}]},{"path":"/docs/types/SyGridPinnedRowsSlice","kind":"type","title":"SyGridPinnedRowsSlice","summary":"Fields, allowed values, and APIs that use SyGridPinnedRowsSlice.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface SyGridPinnedRowsSlice {\n  readonly topRowIds: readonly SyGridRowId[];\n  readonly bottomRowIds: readonly SyGridRowId[];\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/UiRestorePlan","title":"UiRestorePlan","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridRowId","title":"SyGridRowId","description":""}]}]}]},{"path":"/docs/types/SyGridPivotAxes","kind":"type","title":"SyGridPivotAxes","summary":"Fields, allowed values, and APIs that use SyGridPivotAxes.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridPivotSecondaryColumns","title":"SyGridPivotSecondaryColumns","description":""}]}]}]},{"path":"/docs/types/SyGridPivotColumnIdentity","kind":"type","title":"SyGridPivotColumnIdentity","summary":"Fields, allowed values, and APIs that use SyGridPivotColumnIdentity.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface SyGridPivotColumnIdentity {\n  valueColumn: string;\n  pivotKey: string;\n  isTotal: boolean;\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridPivotSecondaryColumn","title":"SyGridPivotSecondaryColumn","description":""}]}]}]},{"path":"/docs/types/SyGridPivotColumnKind","kind":"type","title":"SyGridPivotColumnKind","summary":"Fields, allowed values, and APIs that use SyGridPivotColumnKind.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type SyGridPivotColumnKind = 'row-header' | 'value' | 'total' | 'group';","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridPivotSecondaryColumn","title":"SyGridPivotSecondaryColumn","description":""}]}]}]},{"path":"/docs/types/SyGridPivotColumnMove","kind":"type","title":"SyGridPivotColumnMove","summary":"Fields, allowed values, and APIs that use SyGridPivotColumnMove.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface SyGridPivotColumnMove {\n  colId: string;\n  from: number;\n  to: number;\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridPivotColumnsChangedDetail","title":"SyGridPivotColumnsChangedDetail","description":""}]}]}]},{"path":"/docs/types/SyGridPivotColumnsChangedDetail","kind":"type","title":"SyGridPivotColumnsChangedDetail","summary":"Fields, allowed values, and APIs that use SyGridPivotColumnsChangedDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/events/pivotColumnsChanged","title":"pivotColumnsChanged","description":"Emitted when the pivot result column model changes. Update chart and export code using previous result column IDs."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridPivotColumnMove","title":"SyGridPivotColumnMove","description":""}]}]}]},{"path":"/docs/types/SyGridPivotCombinationConflictDetail","kind":"type","title":"SyGridPivotCombinationConflictDetail","summary":"Fields, allowed values, and APIs that use SyGridPivotCombinationConflictDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/events/pivotCombinationConflict","title":"pivotCombinationConflict","description":"Emitted when pivot settings conflict with other features. Adjust app options based on the actual compatibility decision."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridPivotCombinationFeature","title":"SyGridPivotCombinationFeature","description":""},{"path":"/docs/types/SyGridPivotCombinationSupport","title":"SyGridPivotCombinationSupport","description":""},{"path":"/docs/types/SyGridPivotCombinationWinner","title":"SyGridPivotCombinationWinner","description":""}]}]}]},{"path":"/docs/types/SyGridPivotCombinationEntry","kind":"type","title":"SyGridPivotCombinationEntry","summary":"Fields, allowed values, and APIs that use SyGridPivotCombinationEntry.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridPivotCombinationReport","title":"SyGridPivotCombinationReport","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridPivotCombinationFeature","title":"SyGridPivotCombinationFeature","description":""},{"path":"/docs/types/SyGridPivotCombinationSupport","title":"SyGridPivotCombinationSupport","description":""},{"path":"/docs/types/SyGridPivotCombinationWinner","title":"SyGridPivotCombinationWinner","description":""}]}]}]},{"path":"/docs/types/SyGridPivotCombinationFeature","kind":"type","title":"SyGridPivotCombinationFeature","summary":"Fields, allowed values, and APIs that use SyGridPivotCombinationFeature.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridPivotCombinationConflictDetail","title":"SyGridPivotCombinationConflictDetail","description":""},{"path":"/docs/types/SyGridPivotCombinationEntry","title":"SyGridPivotCombinationEntry","description":""},{"path":"/docs/types/SyGridPivotCombinationReport","title":"SyGridPivotCombinationReport","description":""}]}]}]},{"path":"/docs/types/SyGridPivotCombinationReport","kind":"type","title":"SyGridPivotCombinationReport","summary":"Fields, allowed values, and APIs that use SyGridPivotCombinationReport.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/getPivotCombinationReport","title":"getPivotCombinationReport","description":"Reads activation, priority, and restriction decisions for the current combination of pivoting and other features."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridPivotCombinationFeature","title":"SyGridPivotCombinationFeature","description":""},{"path":"/docs/types/SyGridPivotCombinationEntry","title":"SyGridPivotCombinationEntry","description":""}]}]}]},{"path":"/docs/types/SyGridPivotCombinationSupport","kind":"type","title":"SyGridPivotCombinationSupport","summary":"Fields, allowed values, and APIs that use SyGridPivotCombinationSupport.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type SyGridPivotCombinationSupport =\n  | 'supported'\n  | 'delegated'\n  | 'superseded'\n  | 'yields'\n  | 'unsupported';","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridPivotCombinationConflictDetail","title":"SyGridPivotCombinationConflictDetail","description":""},{"path":"/docs/types/SyGridPivotCombinationEntry","title":"SyGridPivotCombinationEntry","description":""}]}]}]},{"path":"/docs/types/SyGridPivotCombinationWinner","kind":"type","title":"SyGridPivotCombinationWinner","summary":"Fields, allowed values, and APIs that use SyGridPivotCombinationWinner.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type SyGridPivotCombinationWinner = 'pivot' | 'other' | 'both' | 'neither';","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridPivotCombinationConflictDetail","title":"SyGridPivotCombinationConflictDetail","description":""},{"path":"/docs/types/SyGridPivotCombinationEntry","title":"SyGridPivotCombinationEntry","description":""}]}]}]},{"path":"/docs/types/SyGridPivotSecondaryColumn","kind":"type","title":"SyGridPivotSecondaryColumn","summary":"Fields, allowed values, and APIs that use SyGridPivotSecondaryColumn.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridPivotSecondaryColumns","title":"SyGridPivotSecondaryColumns","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridPivotColumnKind","title":"SyGridPivotColumnKind","description":""},{"path":"/docs/types/SyGridPivotColumnIdentity","title":"SyGridPivotColumnIdentity","description":""}]}]}]},{"path":"/docs/types/SyGridPivotSecondaryColumns","kind":"type","title":"SyGridPivotSecondaryColumns","summary":"Fields, allowed values, and APIs that use SyGridPivotSecondaryColumns.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/getPivotSecondaryColumns","title":"getPivotSecondaryColumns","description":"Reads the identity model of result columns created by the active client pivot, or null when no pivot is active."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridPivotSecondaryColumn","title":"SyGridPivotSecondaryColumn","description":""},{"path":"/docs/types/SyGridPivotAxes","title":"SyGridPivotAxes","description":""}]}]}]},{"path":"/docs/types/SyGridPreDestroyedDetail","kind":"type","title":"SyGridPreDestroyedDetail","summary":"Fields, allowed values, and APIs that use SyGridPreDestroyedDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface SyGridPreDestroyedDetail {\n  state: SyGridState;\n  captureIssues: ReadonlyArray<{ path: string; detail: string }>;\n}","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/events/preDestroyed","title":"preDestroyed","description":"Provides state and capture issues before the Grid is destroyed. Use for saving view preferences and cleaning up resources."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridState","title":"SyGridState","description":""}]}]}]},{"path":"/docs/types/SyGridRemoteEditAppliedEventDetail","kind":"type","title":"SyGridRemoteEditAppliedEventDetail","summary":"Fields, allowed values, and APIs that use SyGridRemoteEditAppliedEventDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridCellValueChangedEventDetail","title":"SyGridCellValueChangedEventDetail","description":""}]}]}]},{"path":"/docs/types/SyGridReparentAtomicity","kind":"type","title":"SyGridReparentAtomicity","summary":"Fields, allowed values, and APIs that use SyGridReparentAtomicity.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type SyGridReparentAtomicity = 'all-or-nothing' | 'best-effort';","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridReparentRequest","title":"SyGridReparentRequest","description":""}]}]}]},{"path":"/docs/types/SyGridReparentEntry","kind":"type","title":"SyGridReparentEntry","summary":"Fields, allowed values, and APIs that use SyGridReparentEntry.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridReparentResult","title":"SyGridReparentResult","description":""},{"path":"/docs/types/SyGridTreeReparentedDetail","title":"SyGridTreeReparentedDetail","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridReparentRefusalReason","title":"SyGridReparentRefusalReason","description":""}]}]}]},{"path":"/docs/types/SyGridReparentRefusalReason","kind":"type","title":"SyGridReparentRefusalReason","summary":"Fields, allowed values, and APIs that use SyGridReparentRefusalReason.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridReparentEntry","title":"SyGridReparentEntry","description":""},{"path":"/docs/types/SyGridReparentResult","title":"SyGridReparentResult","description":""}]}]}]},{"path":"/docs/types/SyGridReparentRequest","kind":"type","title":"SyGridReparentRequest","summary":"Fields, allowed values, and APIs that use SyGridReparentRequest.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/reparentRows","title":"reparentRows","description":"Reparents tree rows and reports applied/rejected results. Check cycle, permission, and row-model restrictions."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridReparentAtomicity","title":"SyGridReparentAtomicity","description":""}]}]}]},{"path":"/docs/types/SyGridReparentResult","kind":"type","title":"SyGridReparentResult","summary":"Fields, allowed values, and APIs that use SyGridReparentResult.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/reparentRows","title":"reparentRows","description":"Reparents tree rows and reports applied/rejected results. Check cycle, permission, and row-model restrictions."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridReparentEntry","title":"SyGridReparentEntry","description":""},{"path":"/docs/types/SyGridReparentRefusalReason","title":"SyGridReparentRefusalReason","description":""}]}]}]},{"path":"/docs/types/SyGridRowClickButton","kind":"type","title":"SyGridRowClickButton","summary":"Fields, allowed values, and APIs that use SyGridRowClickButton.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type SyGridRowClickButton = 'left' | 'middle' | 'right' | 'other';","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridCellClickedEventDetail","title":"SyGridCellClickedEventDetail","description":""},{"path":"/docs/types/SyGridCellDoubleClickedEventDetail","title":"SyGridCellDoubleClickedEventDetail","description":""},{"path":"/docs/types/SyGridRowClickedEventDetail","title":"SyGridRowClickedEventDetail","description":""}]}]}]},{"path":"/docs/types/SyGridRowClickModifiers","kind":"type","title":"SyGridRowClickModifiers","summary":"Fields, allowed values, and APIs that use SyGridRowClickModifiers.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface SyGridRowClickModifiers {\n  ctrl: boolean;\n  shift: boolean;\n  meta: boolean;\n  alt: boolean;\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridCellClickedEventDetail","title":"SyGridCellClickedEventDetail","description":""},{"path":"/docs/types/SyGridCellDoubleClickedEventDetail","title":"SyGridCellDoubleClickedEventDetail","description":""},{"path":"/docs/types/SyGridRowClickedEventDetail","title":"SyGridRowClickedEventDetail","description":""}]}]}]},{"path":"/docs/types/SyGridRowClickedEventDetail","kind":"type","title":"SyGridRowClickedEventDetail","summary":"Fields, allowed values, and APIs that use SyGridRowClickedEventDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridData","title":"GridData","description":""},{"path":"/docs/types/SyGridRowClickButton","title":"SyGridRowClickButton","description":""},{"path":"/docs/types/SyGridRowClickModifiers","title":"SyGridRowClickModifiers","description":""}]}]}]},{"path":"/docs/types/SyGridRowDataChangedEventDetail","kind":"type","title":"SyGridRowDataChangedEventDetail","summary":"Fields, allowed values, and APIs that use SyGridRowDataChangedEventDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridData","title":"GridData","description":""},{"path":"/docs/types/SyGridEditSource","title":"SyGridEditSource","description":""}]}]}]},{"path":"/docs/types/SyGridRowDragCancelDetail","kind":"type","title":"SyGridRowDragCancelDetail","summary":"Fields, allowed values, and APIs that use SyGridRowDragCancelDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/events/rowDragCancel","title":"rowDragCancel","description":"Emitted when row dragging is cancelled. Do not run completion actions or save server ordering."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridRowDragItem","title":"SyGridRowDragItem","description":""},{"path":"/docs/types/SyGridRowDragEndReason","title":"SyGridRowDragEndReason","description":""},{"path":"/docs/types/SyGridDragOrphanCause","title":"SyGridDragOrphanCause","description":""}]}]}]},{"path":"/docs/types/SyGridRowDragEndDetail","kind":"type","title":"SyGridRowDragEndDetail","summary":"Fields, allowed values, and APIs that use SyGridRowDragEndDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/events/rowDragEnd","title":"rowDragEnd","description":"Emitted when row dragging ends. Inspect the applied result and drop position."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridRowDragEventDetail","title":"SyGridRowDragEventDetail","description":""},{"path":"/docs/types/SyGridRowTransferReport","title":"SyGridRowTransferReport","description":""}]}]}]},{"path":"/docs/types/SyGridRowDragEndReason","kind":"type","title":"SyGridRowDragEndReason","summary":"Fields, allowed values, and APIs that use SyGridRowDragEndReason.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type SyGridRowDragEndReason =\n  | 'drop' | 'escape' | 'cancel' | 'no-target' | 'pointer-cancel' | 'capture-lost' | 'blur';","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridRowDragCancelDetail","title":"SyGridRowDragCancelDetail","description":""}]}]}]},{"path":"/docs/types/SyGridRowDragEventDetail","kind":"type","title":"SyGridRowDragEventDetail","summary":"Fields, allowed values, and APIs that use SyGridRowDragEventDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/events/rowDragEnter","title":"rowDragEnter","description":"Emitted when a row drag enters a target area."},{"path":"/docs/events/rowDragMove","title":"rowDragMove","description":"Emitted during row dragging. Avoid expensive save operations on every high-frequency event."},{"path":"/docs/events/rowDragLeave","title":"rowDragLeave","description":"Emitted when a row drag leaves an area. Different from drag completion."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""},{"path":"/docs/types/SyGridRowDragEndDetail","title":"SyGridRowDragEndDetail","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridRowDragItem","title":"SyGridRowDragItem","description":""},{"path":"/docs/types/SyGridRowDragTarget","title":"SyGridRowDragTarget","description":""}]}]}]},{"path":"/docs/types/SyGridRowDragItem","kind":"type","title":"SyGridRowDragItem","summary":"Fields, allowed values, and APIs that use SyGridRowDragItem.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridRowDragCancelDetail","title":"SyGridRowDragCancelDetail","description":""},{"path":"/docs/types/SyGridRowDragEventDetail","title":"SyGridRowDragEventDetail","description":""},{"path":"/docs/types/SyGridRowDragSessionReport","title":"SyGridRowDragSessionReport","description":""}]}]}]},{"path":"/docs/types/SyGridRowDragSessionReport","kind":"type","title":"SyGridRowDragSessionReport","summary":"Fields, allowed values, and APIs that use SyGridRowDragSessionReport.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/getRowDragSession","title":"getRowDragSession","description":"Reads current row drag session progress."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridRowDragItem","title":"SyGridRowDragItem","description":""},{"path":"/docs/types/SyGridRowDragTarget","title":"SyGridRowDragTarget","description":""}]}]}]},{"path":"/docs/types/SyGridRowDragStartInput","kind":"type","title":"SyGridRowDragStartInput","summary":"Fields, allowed values, and APIs that use SyGridRowDragStartInput.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/startRowDrag","title":"startRowDrag","description":"Starts a row drag session through the public input contract. Check whether it started and any rejection reason."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridRowId","title":"GridRowId","description":""}]}]}]},{"path":"/docs/types/SyGridRowDragStartResult","kind":"type","title":"SyGridRowDragStartResult","summary":"Fields, allowed values, and APIs that use SyGridRowDragStartResult.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/startRowDrag","title":"startRowDrag","description":"Starts a row drag session through the public input contract. Check whether it started and any rejection reason."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]}]},{"path":"/docs/types/SyGridRowDragTarget","kind":"type","title":"SyGridRowDragTarget","summary":"Fields, allowed values, and APIs that use SyGridRowDragTarget.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridRowDragEventDetail","title":"SyGridRowDragEventDetail","description":""},{"path":"/docs/types/SyGridRowDragSessionReport","title":"SyGridRowDragSessionReport","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridRowDropPosition","title":"SyGridRowDropPosition","description":""}]}]}]},{"path":"/docs/types/SyGridRowDropPosition","kind":"type","title":"SyGridRowDropPosition","summary":"Fields, allowed values, and APIs that use SyGridRowDropPosition.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type SyGridRowDropPosition = 'above' | 'below';","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridRowDragTarget","title":"SyGridRowDragTarget","description":""}]}]}]},{"path":"/docs/types/SyGridRowEditReport","kind":"type","title":"SyGridRowEditReport","summary":"Fields, allowed values, and APIs that use SyGridRowEditReport.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/stopRowEdit","title":"stopRowEdit","description":"Commits or cancels current row editing and returns a report."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridMutationId","title":"GridMutationId","description":""},{"path":"/docs/types/SyGridEditRejectedCell","title":"SyGridEditRejectedCell","description":""},{"path":"/docs/types/GridRowId","title":"GridRowId","description":""}]}]}]},{"path":"/docs/types/SyGridRowEditStartEventDetail","kind":"type","title":"SyGridRowEditStartEventDetail","summary":"Fields, allowed values, and APIs that use SyGridRowEditStartEventDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface SyGridRowEditStartEventDetail {\n  rowId: GridRowId;\n  editableColumns: string[];\n}","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/events/rowEditStart","title":"rowEditStart","description":"Emitted when full-row editing starts."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridRowId","title":"GridRowId","description":""}]}]}]},{"path":"/docs/types/SyGridRowEditStopEventDetail","kind":"type","title":"SyGridRowEditStopEventDetail","summary":"Fields, allowed values, and APIs that use SyGridRowEditStopEventDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/events/rowEditStop","title":"rowEditStop","description":"Emitted when full-row editing ends. Distinguish commit from cancellation."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridRowId","title":"GridRowId","description":""}]}]}]},{"path":"/docs/types/SyGridRowId","kind":"type","title":"SyGridRowId","summary":"Fields, allowed values, and APIs that use SyGridRowId.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type SyGridRowId = string | number;","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/RowsSlicesApplyResult","title":"RowsSlicesApplyResult","description":""},{"path":"/docs/types/SyGridPinnedRowsSlice","title":"SyGridPinnedRowsSlice","description":""}]}]}]},{"path":"/docs/types/SyGridRowLayoutRefusedDetail","kind":"type","title":"SyGridRowLayoutRefusedDetail","summary":"Fields, allowed values, and APIs that use SyGridRowLayoutRefusedDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/events/rowLayoutRefused","title":"rowLayoutRefused","description":"Emitted when a requested row layout cannot be applied. Adjust the combination according to the rejection reason."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]}]},{"path":"/docs/types/SyGridRowLayoutStatus","kind":"type","title":"SyGridRowLayoutStatus","summary":"Fields, allowed values, and APIs that use SyGridRowLayoutStatus.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type SyGridRowLayoutStatus = 'ok' | 'not-configured' | 'not-client-side' | 'auto-height';","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridCellSpanInfo","title":"SyGridCellSpanInfo","description":""},{"path":"/docs/types/SyGridRowSpanReport","title":"SyGridRowSpanReport","description":""},{"path":"/docs/types/SyGridSpanInteractionReport","title":"SyGridSpanInteractionReport","description":""}]}]}]},{"path":"/docs/types/SyGridRowSpanParams","kind":"type","title":"SyGridRowSpanParams","summary":"Fields, allowed values, and APIs that use SyGridRowSpanParams.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/columns/rowSpan","title":"rowSpan","description":"Returns the vertical row span from cell context. Inspect span reports for conflicts and display-model restrictions."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/ColumnDef","title":"ColumnDef","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridData","title":"GridData","description":""},{"path":"/docs/types/ColumnDef","title":"ColumnDef","description":""}]}]}]},{"path":"/docs/types/SyGridRowSpanRejection","kind":"type","title":"SyGridRowSpanRejection","summary":"Fields, allowed values, and APIs that use SyGridRowSpanRejection.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridCellSpanInfo","title":"SyGridCellSpanInfo","description":""},{"path":"/docs/types/SyGridRowSpanReport","title":"SyGridRowSpanReport","description":""}]}]}]},{"path":"/docs/types/SyGridRowSpanReport","kind":"type","title":"SyGridRowSpanReport","summary":"Fields, allowed values, and APIs that use SyGridRowSpanReport.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/getRowSpan","title":"getRowSpan","description":"Reads calculated vertical span ranges."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridRowLayoutStatus","title":"SyGridRowLayoutStatus","description":""},{"path":"/docs/types/SyGridRowSpanRejection","title":"SyGridRowSpanRejection","description":""}]}]}]},{"path":"/docs/types/SyGridRowTransactionResult","kind":"type","title":"SyGridRowTransactionResult","summary":"Fields, allowed values, and APIs that use SyGridRowTransactionResult.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridData","title":"GridData","description":""}]}]}]},{"path":"/docs/types/SyGridRowTransferEntry","kind":"type","title":"SyGridRowTransferEntry","summary":"Fields, allowed values, and APIs that use SyGridRowTransferEntry.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridRowTransferReport","title":"SyGridRowTransferReport","description":""}]}]}]},{"path":"/docs/types/SyGridRowTransferReport","kind":"type","title":"SyGridRowTransferReport","summary":"Fields, allowed values, and APIs that use SyGridRowTransferReport.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridRowDragEndDetail","title":"SyGridRowDragEndDetail","description":""},{"path":"/docs/types/SyGridRowsTransferredDetail","title":"SyGridRowsTransferredDetail","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridRowTransferEntry","title":"SyGridRowTransferEntry","description":""}]}]}]},{"path":"/docs/types/SyGridRowValueChangedEventDetail","kind":"type","title":"SyGridRowValueChangedEventDetail","summary":"Fields, allowed values, and APIs that use SyGridRowValueChangedEventDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/events/rowValueChanged","title":"rowValueChanged","description":"Reports full-row value changes. Use when defining a save unit for an entire row."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridMutationId","title":"GridMutationId","description":""},{"path":"/docs/types/GridRowId","title":"GridRowId","description":""}]}]}]},{"path":"/docs/types/SyGridRowsTransferredDetail","kind":"type","title":"SyGridRowsTransferredDetail","summary":"Fields, allowed values, and APIs that use SyGridRowsTransferredDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/events/rowsTransferred","title":"rowsTransferred","description":"Reports row transfers between drop areas. Inspect actual move, copy, and rejection results."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridRowTransferReport","title":"SyGridRowTransferReport","description":""}]}]}]},{"path":"/docs/types/SyGridScrollSlice","kind":"type","title":"SyGridScrollSlice","summary":"Fields, allowed values, and APIs that use SyGridScrollSlice.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface SyGridScrollSlice {\n  readonly top: number;\n  readonly left: number;\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/UiRestorePlan","title":"UiRestorePlan","description":""}]}]}]},{"path":"/docs/types/SyGridSelectionChangedEventDetail","kind":"type","title":"SyGridSelectionChangedEventDetail","summary":"Fields, allowed values, and APIs that use SyGridSelectionChangedEventDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridRowId","title":"GridRowId","description":""}]}]}]},{"path":"/docs/types/SyGridServerBlockSnapshot","kind":"type","title":"SyGridServerBlockSnapshot","summary":"Fields, allowed values, and APIs that use SyGridServerBlockSnapshot.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridServerCacheSnapshot","title":"SyGridServerCacheSnapshot","description":""}]}]}]},{"path":"/docs/types/SyGridServerCacheSnapshot","kind":"type","title":"SyGridServerCacheSnapshot","summary":"Fields, allowed values, and APIs that use SyGridServerCacheSnapshot.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridServerStoreSnapshot","title":"SyGridServerStoreSnapshot","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridServerBlockSnapshot","title":"SyGridServerBlockSnapshot","description":""}]}]}]},{"path":"/docs/types/SyGridServerFlushCause","kind":"type","title":"SyGridServerFlushCause","summary":"Fields, allowed values, and APIs that use SyGridServerFlushCause.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type SyGridServerFlushCause = 'window' | 'api' | 'destroy-drain';","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridServerTransactionSettlement","title":"SyGridServerTransactionSettlement","description":""}]}]}]},{"path":"/docs/types/SyGridServerFlushReport","kind":"type","title":"SyGridServerFlushReport","summary":"Fields, allowed values, and APIs that use SyGridServerFlushReport.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/flushServerSideAsyncTransactions","title":"flushServerSideAsyncTransactions","description":"Processes pending server row transactions and returns a completion report."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridServerFlushStatus","title":"SyGridServerFlushStatus","description":""}]}]}]},{"path":"/docs/types/SyGridServerFlushStatus","kind":"type","title":"SyGridServerFlushStatus","summary":"Fields, allowed values, and APIs that use SyGridServerFlushStatus.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type SyGridServerFlushStatus =\n  | 'flushed'\n  | 'empty'\n  | 'refused-reentrant'\n  | 'refused-destroyed';","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridServerFlushReport","title":"SyGridServerFlushReport","description":""}]}]}]},{"path":"/docs/types/SyGridServerGroupChildrenResult","kind":"type","title":"SyGridServerGroupChildrenResult","summary":"Fields, allowed values, and APIs that use SyGridServerGroupChildrenResult.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/selectServerGroupChildren","title":"selectServerGroupChildren","description":"Selects or deselects server descendants beneath a group-key path."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]}]},{"path":"/docs/types/SyGridServerGroupToggledNode","kind":"type","title":"SyGridServerGroupToggledNode","summary":"Fields, allowed values, and APIs that use SyGridServerGroupToggledNode.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface SyGridServerGroupToggledNode {\n  rowId: string;\n  selectAllChildren?: boolean;\n  toggledNodes?: ReadonlyArray<SyGridServerGroupToggledNode>;\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridServerSelectionState","title":"SyGridServerSelectionState","description":""}]}]}]},{"path":"/docs/types/SyGridServerPivotColumnAudit","kind":"type","title":"SyGridServerPivotColumnAudit","summary":"Fields, allowed values, and APIs that use SyGridServerPivotColumnAudit.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/auditServerPivotResultColumns","title":"auditServerPivotResultColumns","description":"Checks whether server pivot column IDs used for charts, export, or restoration still exist in the current model."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridServerPivotUsageDisposition","title":"SyGridServerPivotUsageDisposition","description":""}]}]}]},{"path":"/docs/types/SyGridServerPivotColumnDescriptor","kind":"type","title":"SyGridServerPivotColumnDescriptor","summary":"Fields, allowed values, and APIs that use SyGridServerPivotColumnDescriptor.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridServerPivotColumnsReport","title":"SyGridServerPivotColumnsReport","description":""}]}]}]},{"path":"/docs/types/SyGridServerPivotColumnsReport","kind":"type","title":"SyGridServerPivotColumnsReport","summary":"Fields, allowed values, and APIs that use SyGridServerPivotColumnsReport.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/getServerPivotResultColumns","title":"getServerPivotResultColumns","description":"Reads the server-supplied pivot result column model. Distinguish stale metadata from absent metadata."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridServerPivotColumnDescriptor","title":"SyGridServerPivotColumnDescriptor","description":""}]}]}]},{"path":"/docs/types/SyGridServerPivotUsageDisposition","kind":"type","title":"SyGridServerPivotUsageDisposition","summary":"Fields, allowed values, and APIs that use SyGridServerPivotUsageDisposition.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type SyGridServerPivotUsageDisposition = 'live' | 'live-stale' | 'unknown-column';","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridServerPivotColumnAudit","title":"SyGridServerPivotColumnAudit","description":""}]}]}]},{"path":"/docs/types/SyGridServerRefreshInput","kind":"type","title":"SyGridServerRefreshInput","summary":"Fields, allowed values, and APIs that use SyGridServerRefreshInput.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface SyGridServerRefreshInput {\n  route?: ReadonlyArray<string>;\n  mode?: SyGridServerRefreshMode;\n}","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/refreshServerSide","title":"refreshServerSide","description":"Refetches the specified server store scope and returns the result."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridServerRefreshMode","title":"SyGridServerRefreshMode","description":""}]}]}]},{"path":"/docs/types/SyGridServerRefreshMode","kind":"type","title":"SyGridServerRefreshMode","summary":"Fields, allowed values, and APIs that use SyGridServerRefreshMode.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type SyGridServerRefreshMode = 'soft' | 'purge';","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridServerRefreshInput","title":"SyGridServerRefreshInput","description":""},{"path":"/docs/types/SyGridServerRefreshResult","title":"SyGridServerRefreshResult","description":""}]}]}]},{"path":"/docs/types/SyGridServerRefreshResult","kind":"type","title":"SyGridServerRefreshResult","summary":"Fields, allowed values, and APIs that use SyGridServerRefreshResult.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/refreshServerSide","title":"refreshServerSide","description":"Refetches the specified server store scope and returns the result."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridServerRefreshStatus","title":"SyGridServerRefreshStatus","description":""},{"path":"/docs/types/SyGridServerRefreshMode","title":"SyGridServerRefreshMode","description":""}]}]}]},{"path":"/docs/types/SyGridServerRefreshStatus","kind":"type","title":"SyGridServerRefreshStatus","summary":"Fields, allowed values, and APIs that use SyGridServerRefreshStatus.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type SyGridServerRefreshStatus =\n  | 'accepted'\n  | 'invalid-route'\n  | 'store-not-open'\n  | 'not-server-side';","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridServerRefreshResult","title":"SyGridServerRefreshResult","description":""}]}]}]},{"path":"/docs/types/SyGridServerSelectAllResult","kind":"type","title":"SyGridServerSelectAllResult","summary":"Fields, allowed values, and APIs that use SyGridServerSelectAllResult.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/selectAllServerSide","title":"selectAllServerSide","description":"Sets server-wide selection conditions without materializing every server row in memory."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridServerSelectionModel","title":"SyGridServerSelectionModel","description":""}]}]}]},{"path":"/docs/types/SyGridServerSelectionModel","kind":"type","title":"SyGridServerSelectionModel","summary":"Fields, allowed values, and APIs that use SyGridServerSelectionModel.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type SyGridServerSelectionModel = 'flat' | 'group';","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridServerSelectAllResult","title":"SyGridServerSelectAllResult","description":""},{"path":"/docs/types/SyGridServerSelectionSetResult","title":"SyGridServerSelectionSetResult","description":""},{"path":"/docs/types/SyGridServerSelectionState","title":"SyGridServerSelectionState","description":""}]}]}]},{"path":"/docs/types/SyGridServerSelectionSetResult","kind":"type","title":"SyGridServerSelectionSetResult","summary":"Fields, allowed values, and APIs that use SyGridServerSelectionSetResult.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/setServerSideSelectionState","title":"setServerSideSelectionState","description":"Replaces select-all conditions and exception IDs in the flat server row model."},{"path":"/docs/methods/setServerGroupSelectionState","title":"setServerGroupSelectionState","description":"Replaces hierarchical selection state in the grouped server row model."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridServerSelectionSetStatus","title":"SyGridServerSelectionSetStatus","description":""},{"path":"/docs/types/SyGridServerSelectionModel","title":"SyGridServerSelectionModel","description":""}]}]}]},{"path":"/docs/types/SyGridServerSelectionSetStatus","kind":"type","title":"SyGridServerSelectionSetStatus","summary":"Fields, allowed values, and APIs that use SyGridServerSelectionSetStatus.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridServerSelectionSetResult","title":"SyGridServerSelectionSetResult","description":""}]}]}]},{"path":"/docs/types/SyGridServerSelectionState","kind":"type","title":"SyGridServerSelectionState","summary":"Fields, allowed values, and APIs that use SyGridServerSelectionState.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/getServerSideSelectionState","title":"getServerSideSelectionState","description":"Reads select-all conditions and exception IDs for the flat server row model. Reports a model mismatch for grouped models."},{"path":"/docs/methods/getServerGroupSelectionState","title":"getServerGroupSelectionState","description":"Reads hierarchical select-all and exception state for the grouped server row model."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridSelectionChangedDetail","title":"GridSelectionChangedDetail","description":""},{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridServerSelectionStatus","title":"SyGridServerSelectionStatus","description":""},{"path":"/docs/types/SyGridServerSelectionModel","title":"SyGridServerSelectionModel","description":""},{"path":"/docs/types/SyGridServerGroupToggledNode","title":"SyGridServerGroupToggledNode","description":""}]}]}]},{"path":"/docs/types/SyGridServerSelectionStatus","kind":"type","title":"SyGridServerSelectionStatus","summary":"Fields, allowed values, and APIs that use SyGridServerSelectionStatus.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type SyGridServerSelectionStatus =\n  | 'ok'\n  | 'not-server-side'\n  | 'no-row-id'\n  | 'model-mismatch';","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridServerSelectionState","title":"SyGridServerSelectionState","description":""}]}]}]},{"path":"/docs/types/SyGridServerStateReport","kind":"type","title":"SyGridServerStateReport","summary":"Fields, allowed values, and APIs that use SyGridServerStateReport.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/getServerSideStoreState","title":"getServerSideStoreState","description":"Reads server store paths, states, and block caches. Assess loading through block counts and complete as well as state names."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridServerStoreSnapshot","title":"SyGridServerStoreSnapshot","description":""}]}]}]},{"path":"/docs/types/SyGridServerStoreSnapshot","kind":"type","title":"SyGridServerStoreSnapshot","summary":"Fields, allowed values, and APIs that use SyGridServerStoreSnapshot.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridServerStateReport","title":"SyGridServerStateReport","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridServerStoreStatus","title":"SyGridServerStoreStatus","description":""},{"path":"/docs/types/SyGridServerCacheSnapshot","title":"SyGridServerCacheSnapshot","description":""}]}]}]},{"path":"/docs/types/SyGridServerStoreStatus","kind":"type","title":"SyGridServerStoreStatus","summary":"Fields, allowed values, and APIs that use SyGridServerStoreStatus.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type SyGridServerStoreStatus =\n  | 'empty'\n  | 'loading'\n  | 'partial'\n  | 'loaded'\n  | 'failed'\n  | 'stale';","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridServerStoreSnapshot","title":"SyGridServerStoreSnapshot","description":""},{"path":"/docs/types/SyGridServerStoreUpdatedDetail","title":"SyGridServerStoreUpdatedDetail","description":""}]}]}]},{"path":"/docs/types/SyGridServerStoreUpdateKind","kind":"type","title":"SyGridServerStoreUpdateKind","summary":"Fields, allowed values, and APIs that use SyGridServerStoreUpdateKind.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridServerStoreUpdatedDetail","title":"SyGridServerStoreUpdatedDetail","description":""}]}]}]},{"path":"/docs/types/SyGridServerStoreUpdatedDetail","kind":"type","title":"SyGridServerStoreUpdatedDetail","summary":"Fields, allowed values, and APIs that use SyGridServerStoreUpdatedDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/events/serverStoreUpdated","title":"serverStoreUpdated","description":"Emitted when a server row store refreshes. Inspect its path and cache state."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridMutationId","title":"GridMutationId","description":""},{"path":"/docs/types/SyGridServerStoreUpdateKind","title":"SyGridServerStoreUpdateKind","description":""},{"path":"/docs/types/SyGridServerStoreStatus","title":"SyGridServerStoreStatus","description":""}]}]}]},{"path":"/docs/types/SyGridServerTransactionEnqueue","kind":"type","title":"SyGridServerTransactionEnqueue","summary":"Fields, allowed values, and APIs that use SyGridServerTransactionEnqueue.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface SyGridServerTransactionEnqueue {\n  status: SyGridServerTransactionEnqueueStatus;\n  txnId: number;\n  issue: string;\n}","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/applyServerSideTransactionAsync","title":"applyServerSideTransactionAsync","description":"Queues a server row transaction asynchronously. Queue acceptance differs from final application."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridServerTransactionEnqueueStatus","title":"SyGridServerTransactionEnqueueStatus","description":""}]}]}]},{"path":"/docs/types/SyGridServerTransactionEnqueueStatus","kind":"type","title":"SyGridServerTransactionEnqueueStatus","summary":"Fields, allowed values, and APIs that use SyGridServerTransactionEnqueueStatus.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type SyGridServerTransactionEnqueueStatus =\n  | 'queued'\n  | 'refused-destroyed'\n  | 'not-server-side'\n  | 'no-row-id';","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridServerTransactionEnqueue","title":"SyGridServerTransactionEnqueue","description":""}]}]}]},{"path":"/docs/types/SyGridServerTransactionInput","kind":"type","title":"SyGridServerTransactionInput","summary":"Fields, allowed values, and APIs that use SyGridServerTransactionInput.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/applyServerSideTransaction","title":"applyServerSideTransaction","description":"Applies row changes to the server row model's cache, separately from saving server source data."},{"path":"/docs/methods/applyServerSideTransactionAsync","title":"applyServerSideTransactionAsync","description":"Queues a server row transaction asynchronously. Queue acceptance differs from final application."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]}]},{"path":"/docs/types/SyGridServerTransactionResult","kind":"type","title":"SyGridServerTransactionResult","summary":"Fields, allowed values, and APIs that use SyGridServerTransactionResult.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/applyServerSideTransaction","title":"applyServerSideTransaction","description":"Applies row changes to the server row model's cache, separately from saving server source data."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""},{"path":"/docs/types/SyGridServerTransactionSettlement","title":"SyGridServerTransactionSettlement","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridServerTransactionStatus","title":"SyGridServerTransactionStatus","description":""}]}]}]},{"path":"/docs/types/SyGridServerTransactionSettlement","kind":"type","title":"SyGridServerTransactionSettlement","summary":"Fields, allowed values, and APIs that use SyGridServerTransactionSettlement.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/applyServerSideTransactionAsync","title":"applyServerSideTransactionAsync","description":"Queues a server row transaction asynchronously. Queue acceptance differs from final application."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridServerFlushCause","title":"SyGridServerFlushCause","description":""},{"path":"/docs/types/SyGridServerTransactionResult","title":"SyGridServerTransactionResult","description":""}]}]}]},{"path":"/docs/types/SyGridServerTransactionStatus","kind":"type","title":"SyGridServerTransactionStatus","summary":"Fields, allowed values, and APIs that use SyGridServerTransactionStatus.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridServerTransactionResult","title":"SyGridServerTransactionResult","description":""}]}]}]},{"path":"/docs/types/SyGridSideBarSlice","kind":"type","title":"SyGridSideBarSlice","summary":"Fields, allowed values, and APIs that use SyGridSideBarSlice.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface SyGridSideBarSlice {\n  readonly openPanelId: 'columns' | 'filters' | null;\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/UiRestorePlan","title":"UiRestorePlan","description":""}]}]}]},{"path":"/docs/types/SyGridSortChangedEventDetail","kind":"type","title":"SyGridSortChangedEventDetail","summary":"Fields, allowed values, and APIs that use SyGridSortChangedEventDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridSortModelEntry","title":"SyGridSortModelEntry","description":""}]}]}]},{"path":"/docs/types/SyGridSortModelEntry","kind":"type","title":"SyGridSortModelEntry","summary":"Fields, allowed values, and APIs that use SyGridSortModelEntry.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface SyGridSortModelEntry {\n  field: string;\n  direction: 'asc' | 'desc';\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""},{"path":"/docs/types/SyGridSortChangedEventDetail","title":"SyGridSortChangedEventDetail","description":""}]}]}]},{"path":"/docs/types/SyGridSpanAddress","kind":"type","title":"SyGridSpanAddress","summary":"Fields, allowed values, and APIs that use SyGridSpanAddress.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface SyGridSpanAddress {\n  readonly rowIndex: number;\n  readonly colIndex: number;\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridCellSpanInfo","title":"SyGridCellSpanInfo","description":""},{"path":"/docs/types/SyGridSpanInteractionReport","title":"SyGridSpanInteractionReport","description":""}]}]}]},{"path":"/docs/types/SyGridSpanCombination","kind":"type","title":"SyGridSpanCombination","summary":"Fields, allowed values, and APIs that use SyGridSpanCombination.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type SyGridSpanCombination = 'single' | 'row' | 'column' | 'rectangular';","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridCellSpanInfo","title":"SyGridCellSpanInfo","description":""},{"path":"/docs/types/SyGridSpanInteractionReport","title":"SyGridSpanInteractionReport","description":""}]}]}]},{"path":"/docs/types/SyGridSpanConflict","kind":"type","title":"SyGridSpanConflict","summary":"Fields, allowed values, and APIs that use SyGridSpanConflict.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridSpanConflictEventDetail","title":"SyGridSpanConflictEventDetail","description":""},{"path":"/docs/types/SyGridSpanInteractionReport","title":"SyGridSpanInteractionReport","description":""}]}]}]},{"path":"/docs/types/SyGridSpanConflictEventDetail","kind":"type","title":"SyGridSpanConflictEventDetail","summary":"Fields, allowed values, and APIs that use SyGridSpanConflictEventDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/events/spanConflict","title":"spanConflict","description":"Emitted when cell spans conflict with other ranges or layouts."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridSpanConflict","title":"SyGridSpanConflict","description":""}]}]}]},{"path":"/docs/types/SyGridSpanFeature","kind":"type","title":"SyGridSpanFeature","summary":"Fields, allowed values, and APIs that use SyGridSpanFeature.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type SyGridSpanFeature = 'selection' | 'focus' | 'edit' | 'copy' | 'fill' | 'export' | 'aria';","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridSpanInteractionQuery","title":"SyGridSpanInteractionQuery","description":""},{"path":"/docs/types/SyGridSpanInteractionReport","title":"SyGridSpanInteractionReport","description":""}]}]}]},{"path":"/docs/types/SyGridSpanInteractionQuery","kind":"type","title":"SyGridSpanInteractionQuery","summary":"Fields, allowed values, and APIs that use SyGridSpanInteractionQuery.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/getSpanInteraction","title":"getSpanInteraction","description":"Inspects how merged cells interact with selection, copying, and related actions."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridSpanFeature","title":"SyGridSpanFeature","description":""}]}]}]},{"path":"/docs/types/SyGridSpanInteractionReport","kind":"type","title":"SyGridSpanInteractionReport","summary":"Fields, allowed values, and APIs that use SyGridSpanInteractionReport.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/getSpanInteraction","title":"getSpanInteraction","description":"Inspects how merged cells interact with selection, copying, and related actions."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridRowLayoutStatus","title":"SyGridRowLayoutStatus","description":""},{"path":"/docs/types/SyGridSpanCombination","title":"SyGridSpanCombination","description":""},{"path":"/docs/types/SyGridSpanConflict","title":"SyGridSpanConflict","description":""},{"path":"/docs/types/SyGridSpanFeature","title":"SyGridSpanFeature","description":""},{"path":"/docs/types/SyGridSpanAddress","title":"SyGridSpanAddress","description":""}]}]}]},{"path":"/docs/types/SyGridSpillApplyInput","kind":"type","title":"SyGridSpillApplyInput","summary":"Fields, allowed values, and APIs that use SyGridSpillApplyInput.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface SyGridSpillApplyInput {\n  col: number;\n  row: number;\n  source: string;\n}","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/applySpillFormula","title":"applySpillFormula","description":"Atomically applies a dynamic array formula under the conflict policy. Inspect conflicts, rejections, and unrendered areas in the report."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]}]},{"path":"/docs/types/SyGridSpillApplyResult","kind":"type","title":"SyGridSpillApplyResult","summary":"Fields, allowed values, and APIs that use SyGridSpillApplyResult.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/applySpillFormula","title":"applySpillFormula","description":"Atomically applies a dynamic array formula under the conflict policy. Inspect conflicts, rejections, and unrendered areas in the report."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridSpillRefusalReason","title":"SyGridSpillRefusalReason","description":""},{"path":"/docs/types/GridMutationId","title":"GridMutationId","description":""},{"path":"/docs/types/SyGridSpillTarget","title":"SyGridSpillTarget","description":""},{"path":"/docs/types/SyGridSpillCollision","title":"SyGridSpillCollision","description":""}]}]}]},{"path":"/docs/types/SyGridSpillClearResult","kind":"type","title":"SyGridSpillClearResult","summary":"Fields, allowed values, and APIs that use SyGridSpillClearResult.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/clearSpillFormula","title":"clearSpillFormula","description":"Clears a dynamic array formula's anchor cell and releases its occupied range."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridSpillRefusalReason","title":"SyGridSpillRefusalReason","description":""},{"path":"/docs/types/GridMutationId","title":"GridMutationId","description":""},{"path":"/docs/types/SyGridSpillTarget","title":"SyGridSpillTarget","description":""}]}]}]},{"path":"/docs/types/SyGridSpillCollision","kind":"type","title":"SyGridSpillCollision","summary":"Fields, allowed values, and APIs that use SyGridSpillCollision.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridSpillApplyResult","title":"SyGridSpillApplyResult","description":""}]}]}]},{"path":"/docs/types/SyGridSpillRangeReport","kind":"type","title":"SyGridSpillRangeReport","summary":"Fields, allowed values, and APIs that use SyGridSpillRangeReport.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridSpillReport","title":"SyGridSpillReport","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridSpillTarget","title":"SyGridSpillTarget","description":""},{"path":"/docs/types/SyGridWorkbookSnapshotCell","title":"SyGridWorkbookSnapshotCell","description":""}]}]}]},{"path":"/docs/types/SyGridSpillRefusalReason","kind":"type","title":"SyGridSpillRefusalReason","summary":"Fields, allowed values, and APIs that use SyGridSpillRefusalReason.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridSpillApplyResult","title":"SyGridSpillApplyResult","description":""},{"path":"/docs/types/SyGridSpillClearResult","title":"SyGridSpillClearResult","description":""},{"path":"/docs/types/SyGridSpillReport","title":"SyGridSpillReport","description":""},{"path":"/docs/types/SyGridSpillUndoResult","title":"SyGridSpillUndoResult","description":""}]}]}]},{"path":"/docs/types/SyGridSpillReport","kind":"type","title":"SyGridSpillReport","summary":"Fields, allowed values, and APIs that use SyGridSpillReport.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/getSpillReport","title":"getSpillReport","description":"Inspects current dynamic array formulas and their occupied ranges."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridSpillRefusalReason","title":"SyGridSpillRefusalReason","description":""},{"path":"/docs/types/SyGridSpillRangeReport","title":"SyGridSpillRangeReport","description":""},{"path":"/docs/types/SyGridSpillTarget","title":"SyGridSpillTarget","description":""}]}]}]},{"path":"/docs/types/SyGridSpillTarget","kind":"type","title":"SyGridSpillTarget","summary":"Fields, allowed values, and APIs that use SyGridSpillTarget.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface SyGridSpillTarget {\n  col: number;\n  row: number;\n}","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/clearSpillFormula","title":"clearSpillFormula","description":"Clears a dynamic array formula's anchor cell and releases its occupied range."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""},{"path":"/docs/types/SyGridSpillApplyResult","title":"SyGridSpillApplyResult","description":""},{"path":"/docs/types/SyGridSpillClearResult","title":"SyGridSpillClearResult","description":""},{"path":"/docs/types/SyGridSpillRangeReport","title":"SyGridSpillRangeReport","description":""},{"path":"/docs/types/SyGridSpillReport","title":"SyGridSpillReport","description":""}]}]}]},{"path":"/docs/types/SyGridSpillUndoResult","kind":"type","title":"SyGridSpillUndoResult","summary":"Fields, allowed values, and APIs that use SyGridSpillUndoResult.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/undoSpillTransaction","title":"undoSpillTransaction","description":"Undoes a dynamic array formula transaction and returns the result."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridSpillRefusalReason","title":"SyGridSpillRefusalReason","description":""},{"path":"/docs/types/GridMutationId","title":"GridMutationId","description":""}]}]}]},{"path":"/docs/types/SyGridState","kind":"type","title":"SyGridState","summary":"Fields, allowed values, and APIs that use SyGridState.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/options/initialState","title":"initialState","description":"Versioned view state applied once during initial Grid setup. Use setState for runtime restoration."},{"path":"/docs/methods/getState","title":"getState","description":"Reads an immutable, versioned snapshot of the complete view state. Does not back up source row data."},{"path":"/docs/methods/setState","title":"setState","description":"Restores complete or selected state slices and returns applied/issue reports. Only slices in appliedSlices were actually applied."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""},{"path":"/docs/types/SyGridPreDestroyedDetail","title":"SyGridPreDestroyedDetail","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridStateVersion","title":"SyGridStateVersion","description":""},{"path":"/docs/types/SyGridStateSliceKey","title":"SyGridStateSliceKey","description":""}]}]}]},{"path":"/docs/types/SyGridStateApplyReport","kind":"type","title":"SyGridStateApplyReport","summary":"Fields, allowed values, and APIs that use SyGridStateApplyReport.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/setState","title":"setState","description":"Restores complete or selected state slices and returns applied/issue reports. Only slices in appliedSlices were actually applied."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridStateEnvelopeIssue","title":"SyGridStateEnvelopeIssue","description":""},{"path":"/docs/types/SyGridStateSliceKey","title":"SyGridStateSliceKey","description":""},{"path":"/docs/types/ColumnsSliceApplyResult","title":"ColumnsSliceApplyResult","description":""},{"path":"/docs/types/FilterSliceApplyResult","title":"FilterSliceApplyResult","description":""},{"path":"/docs/types/RowsSlicesApplyResult","title":"RowsSlicesApplyResult","description":""},{"path":"/docs/types/UiRestorePlan","title":"UiRestorePlan","description":""}]}]}]},{"path":"/docs/types/SyGridStateCaptureReport","kind":"type","title":"SyGridStateCaptureReport","summary":"Fields, allowed values, and APIs that use SyGridStateCaptureReport.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface SyGridStateCaptureReport {\n  issues: ReadonlyArray<{ path: string; detail: string }>;\n}","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/getStateCaptureReport","title":"getStateCaptureReport","description":"Reads omissions and issues from the latest view-state capture to assess saved-state completeness."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]}]},{"path":"/docs/types/SyGridStateEnvelopeIssue","kind":"type","title":"SyGridStateEnvelopeIssue","summary":"Fields, allowed values, and APIs that use SyGridStateEnvelopeIssue.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface SyGridStateEnvelopeIssue {\n  readonly code: SyGridStateEnvelopeIssueCode;\n  readonly path: string;\n  readonly detail: string;\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridStateApplyReport","title":"SyGridStateApplyReport","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridStateEnvelopeIssueCode","title":"SyGridStateEnvelopeIssueCode","description":""}]}]}]},{"path":"/docs/types/SyGridStateEnvelopeIssueCode","kind":"type","title":"SyGridStateEnvelopeIssueCode","summary":"Fields, allowed values, and APIs that use SyGridStateEnvelopeIssueCode.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridStateEnvelopeIssue","title":"SyGridStateEnvelopeIssue","description":""}]}]}]},{"path":"/docs/types/SyGridStateSliceKey","kind":"type","title":"SyGridStateSliceKey","summary":"Fields, allowed values, and APIs that use SyGridStateSliceKey.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type SyGridStateSliceKey = \"filter\" | \"pivot\" | \"columns\" | \"rowGrouping\" | \"expansion\" | \"selection\" | \"focus\" | \"scroll\" | \"pagination\" | \"pinnedRows\" | \"sideBar\" | \"find\";","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridStateApplyOptions","title":"GridStateApplyOptions","description":""},{"path":"/docs/types/SyGridState","title":"SyGridState","description":""},{"path":"/docs/types/SyGridStateApplyReport","title":"SyGridStateApplyReport","description":""},{"path":"/docs/types/SyGridStateUpdatedDetail","title":"SyGridStateUpdatedDetail","description":""}]}]}]},{"path":"/docs/types/SyGridStateUpdatedDetail","kind":"type","title":"SyGridStateUpdatedDetail","summary":"Fields, allowed values, and APIs that use SyGridStateUpdatedDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface SyGridStateUpdatedDetail {\n  changedSlices: SyGridStateSliceKey[];\n  sources: StateUpdateSource[];\n  coalescedBatches: number;\n}","language":"typescript"}]},{"id":"used-by","title":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/events/stateUpdated","title":"stateUpdated","description":"Emitted when combined view state updates. Adjust persistence frequency in your app for frequent events."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridStateSliceKey","title":"SyGridStateSliceKey","description":""},{"path":"/docs/types/StateUpdateSource","title":"StateUpdateSource","description":""}]}]}]},{"path":"/docs/types/SyGridStateVersion","kind":"type","title":"SyGridStateVersion","summary":"Fields, allowed values, and APIs that use SyGridStateVersion.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type SyGridStateVersion = `sy-grid-state/${number}.${number}.${number}`;","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridState","title":"SyGridState","description":""}]}]}]},{"path":"/docs/types/SyGridTreeReparentedDetail","kind":"type","title":"SyGridTreeReparentedDetail","summary":"Fields, allowed values, and APIs that use SyGridTreeReparentedDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/events/treeReparented","title":"treeReparented","description":"Reports tree reparenting results. Connect to parent-relationship saving on your app server."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridReparentEntry","title":"SyGridReparentEntry","description":""}]}]}]},{"path":"/docs/types/SyGridWorkbookCellVerdict","kind":"type","title":"SyGridWorkbookCellVerdict","summary":"Fields, allowed values, and APIs that use SyGridWorkbookCellVerdict.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type SyGridWorkbookCellVerdict =\n  | 'cyclic'\n  | 'cycle-dependent'\n  | 'unproven'\n  | 'proven-acyclic';","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridWorkbookIntegrityCell","title":"SyGridWorkbookIntegrityCell","description":""}]}]}]},{"path":"/docs/types/SyGridWorkbookFlushCause","kind":"type","title":"SyGridWorkbookFlushCause","summary":"Fields, allowed values, and APIs that use SyGridWorkbookFlushCause.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type SyGridWorkbookFlushCause =\n  | 'enroll'\n  | 'resync'\n  | 'commit'\n  | 'flush'\n  | 'spill'\n  | 'spill-undo';","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridWorkbookPropagationDetail","title":"SyGridWorkbookPropagationDetail","description":""}]}]}]},{"path":"/docs/types/SyGridWorkbookFlushReport","kind":"type","title":"SyGridWorkbookFlushReport","summary":"Fields, allowed values, and APIs that use SyGridWorkbookFlushReport.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/flushWorkbookPropagation","title":"flushWorkbookPropagation","description":"Processes pending workbook value propagation and returns the result."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridWorkbookInactiveReason","title":"SyGridWorkbookInactiveReason","description":""}]}]}]},{"path":"/docs/types/SyGridWorkbookInactiveReason","kind":"type","title":"SyGridWorkbookInactiveReason","summary":"Fields, allowed values, and APIs that use SyGridWorkbookInactiveReason.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type SyGridWorkbookInactiveReason = 'formulas-off' | 'not-bound';","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridWorkbookFlushReport","title":"SyGridWorkbookFlushReport","description":""},{"path":"/docs/types/SyGridWorkbookIntegrityReport","title":"SyGridWorkbookIntegrityReport","description":""},{"path":"/docs/types/SyGridWorkbookPropagationState","title":"SyGridWorkbookPropagationState","description":""},{"path":"/docs/types/SyGridWorkbookSnapshotReport","title":"SyGridWorkbookSnapshotReport","description":""}]}]}]},{"path":"/docs/types/SyGridWorkbookIntegrityCell","kind":"type","title":"SyGridWorkbookIntegrityCell","summary":"Fields, allowed values, and APIs that use SyGridWorkbookIntegrityCell.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface SyGridWorkbookIntegrityCell {\n  col: number;\n  row: number;\n  verdict: SyGridWorkbookCellVerdict;\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridWorkbookIntegrityReport","title":"SyGridWorkbookIntegrityReport","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridWorkbookCellVerdict","title":"SyGridWorkbookCellVerdict","description":""}]}]}]},{"path":"/docs/types/SyGridWorkbookIntegrityReport","kind":"type","title":"SyGridWorkbookIntegrityReport","summary":"Fields, allowed values, and APIs that use SyGridWorkbookIntegrityReport.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/getWorkbookIntegrityReport","title":"getWorkbookIntegrityReport","description":"Reads consistency checks for workbook connections and value propagation."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridWorkbookInactiveReason","title":"SyGridWorkbookInactiveReason","description":""},{"path":"/docs/types/SyGridWorkbookIntegrityCell","title":"SyGridWorkbookIntegrityCell","description":""}]}]}]},{"path":"/docs/types/SyGridWorkbookPropagationDetail","kind":"type","title":"SyGridWorkbookPropagationDetail","summary":"Fields, allowed values, and APIs that use SyGridWorkbookPropagationDetail.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/events/workbookValuesPropagated","title":"workbookValuesPropagated","description":"Emitted after cross-sheet value propagation. Inspect results and generation information."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridWorkbookFlushCause","title":"SyGridWorkbookFlushCause","description":""}]}]}]},{"path":"/docs/types/SyGridWorkbookPropagationState","kind":"type","title":"SyGridWorkbookPropagationState","summary":"Fields, allowed values, and APIs that use SyGridWorkbookPropagationState.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/getWorkbookPropagationState","title":"getWorkbookPropagationState","description":"Reads cross-sheet formula propagation connections, registrations, rejections, and latest publication information."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridWorkbookInactiveReason","title":"SyGridWorkbookInactiveReason","description":""},{"path":"/docs/types/SyGridWorkbookRegistrationFailure","title":"SyGridWorkbookRegistrationFailure","description":""},{"path":"/docs/types/SyGridWorkbookPublicationStamp","title":"SyGridWorkbookPublicationStamp","description":""}]}]}]},{"path":"/docs/types/SyGridWorkbookPublicationStamp","kind":"type","title":"SyGridWorkbookPublicationStamp","summary":"Fields, allowed values, and APIs that use SyGridWorkbookPublicationStamp.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface SyGridWorkbookPublicationStamp {\n  txId: number;\n  generation: number;\n  snapshotHash: string;\n  publishedCellCount: number;\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridWorkbookPropagationState","title":"SyGridWorkbookPropagationState","description":""}]}]}]},{"path":"/docs/types/SyGridWorkbookRegistrationFailure","kind":"type","title":"SyGridWorkbookRegistrationFailure","summary":"Fields, allowed values, and APIs that use SyGridWorkbookRegistrationFailure.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridWorkbookPropagationState","title":"SyGridWorkbookPropagationState","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridWorkbookRegistrationFailureCode","title":"SyGridWorkbookRegistrationFailureCode","description":""}]}]}]},{"path":"/docs/types/SyGridWorkbookRegistrationFailureCode","kind":"type","title":"SyGridWorkbookRegistrationFailureCode","summary":"Fields, allowed values, and APIs that use SyGridWorkbookRegistrationFailureCode.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridWorkbookRegistrationFailure","title":"SyGridWorkbookRegistrationFailure","description":""}]}]}]},{"path":"/docs/types/SyGridWorkbookSnapshotCell","kind":"type","title":"SyGridWorkbookSnapshotCell","summary":"Fields, allowed values, and APIs that use SyGridWorkbookSnapshotCell.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridSpillRangeReport","title":"SyGridSpillRangeReport","description":""},{"path":"/docs/types/SyGridWorkbookSnapshotReport","title":"SyGridWorkbookSnapshotReport","description":""}]}]}]},{"path":"/docs/types/SyGridWorkbookSnapshotReport","kind":"type","title":"SyGridWorkbookSnapshotReport","summary":"Fields, allowed values, and APIs that use SyGridWorkbookSnapshotReport.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/getWorkbookSnapshotReport","title":"getWorkbookSnapshotReport","description":"Reads the last published workbook cells, hashes, and generations. Do not assume all Grid data was published."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridWorkbookInactiveReason","title":"SyGridWorkbookInactiveReason","description":""},{"path":"/docs/types/SyGridWorkbookSnapshotCell","title":"SyGridWorkbookSnapshotCell","description":""}]}]}]},{"path":"/docs/types/SyGridXlsxImportOptions","kind":"type","title":"SyGridXlsxImportOptions","summary":"Fields, allowed values, and APIs that use SyGridXlsxImportOptions.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface SyGridXlsxImportOptions {\n  sheetName?: string;\n  snapshot?: SheetToRowDataOptions;\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SheetToRowDataOptions","title":"SheetToRowDataOptions","description":""}]}]}]},{"path":"/docs/types/TextFilterOp","kind":"type","title":"TextFilterOp","summary":"Fields, allowed values, and APIs that use TextFilterOp.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type TextFilterOp =\n  | 'contains'\n  | 'notContains'\n  | 'equals'\n  | 'notEqual'\n  | 'startsWith'\n  | 'endsWith';","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/TextFilterSpec","title":"TextFilterSpec","description":""}]}]}]},{"path":"/docs/types/TextFilterSpec","kind":"type","title":"TextFilterSpec","summary":"Fields, allowed values, and APIs that use TextFilterSpec.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/ActiveFilter","title":"ActiveFilter","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/TextFilterOp","title":"TextFilterOp","description":""}]}]}]},{"path":"/docs/types/UiRestorePlan","kind":"type","title":"UiRestorePlan","summary":"Fields, allowed values, and APIs that use UiRestorePlan.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridStateApplyReport","title":"SyGridStateApplyReport","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridSideBarSlice","title":"SyGridSideBarSlice","description":""},{"path":"/docs/types/SyGridPaginationSlice","title":"SyGridPaginationSlice","description":""},{"path":"/docs/types/SyGridScrollSlice","title":"SyGridScrollSlice","description":""},{"path":"/docs/types/SyGridFocusSlice","title":"SyGridFocusSlice","description":""},{"path":"/docs/types/SyGridPinnedRowsSlice","title":"SyGridPinnedRowsSlice","description":""},{"path":"/docs/types/UiUnavailableEntry","title":"UiUnavailableEntry","description":""}]}]}]},{"path":"/docs/types/UiUnavailableEntry","kind":"type","title":"UiUnavailableEntry","summary":"Fields, allowed values, and APIs that use UiUnavailableEntry.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/UiRestorePlan","title":"UiRestorePlan","description":""}]}]}]},{"path":"/docs/types/ValidationRule","kind":"type","title":"ValidationRule","summary":"Fields, allowed values, and APIs that use ValidationRule.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/options/validationRules","title":"validationRules","description":"Defines required values, ranges, lists, patterns, custom validation, and other input checks."}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/ValidationRuleType","title":"ValidationRuleType","description":""}]}]}]},{"path":"/docs/types/ValidationRuleType","kind":"type","title":"ValidationRuleType","summary":"Fields, allowed values, and APIs that use ValidationRuleType.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/ValidationRule","title":"ValidationRule","description":""}]}]}]},{"path":"/docs/types/ValueFormatterParams","kind":"type","title":"ValueFormatterParams","summary":"Fields, allowed values, and APIs that use ValueFormatterParams.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/columns/valueFormatter","title":"valueFormatter","description":"Displays values as readable currency, dates, or other strings without changing the stored source type."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/ColumnDef","title":"ColumnDef","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridData","title":"GridData","description":""},{"path":"/docs/types/ColumnDef","title":"ColumnDef","description":""},{"path":"/docs/types/SyGridApi","title":"SyGridApi","description":""}]}]}]},{"path":"/docs/types/ValueGetterParams","kind":"type","title":"ValueGetterParams","summary":"Fields, allowed values, and APIs that use ValueGetterParams.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/columns/valueGetter","title":"valueGetter","description":"Returns a cell value calculated from the source row. Use valueFormatter for display-text changes only."},{"path":"/docs/columns/tooltipValueGetter","title":"tooltipValueGetter","description":"Calculates tooltip content from the current cell context. Do not expose unauthorized values indirectly."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/ColumnDef","title":"ColumnDef","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridData","title":"GridData","description":""},{"path":"/docs/types/ColumnDef","title":"ColumnDef","description":""},{"path":"/docs/types/SyGridApi","title":"SyGridApi","description":""}]}]}]},{"path":"/docs/types/ValueParserParams","kind":"type","title":"ValueParserParams","summary":"Fields, allowed values, and APIs that use ValueParserParams.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/columns/valueParser","title":"valueParser","description":"Converts input text to the stored type, for example by normalizing numbers or dates."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/ColumnDef","title":"ColumnDef","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridData","title":"GridData","description":""},{"path":"/docs/types/GridFieldPath","title":"GridFieldPath","description":""},{"path":"/docs/types/ColumnDef","title":"ColumnDef","description":""},{"path":"/docs/types/SyGridApi","title":"SyGridApi","description":""}]}]}]},{"path":"/docs/types/ValueSetterParams","kind":"type","title":"ValueSetterParams","summary":"Fields, allowed values, and APIs that use ValueSetterParams.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/columns/valueSetter","title":"valueSetter","description":"Custom logic for writing a converted value into the source row. Follow the return contract indicating whether a change occurred."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/ColumnDef","title":"ColumnDef","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridData","title":"GridData","description":""},{"path":"/docs/types/GridFieldPath","title":"GridFieldPath","description":""},{"path":"/docs/types/ColumnDef","title":"ColumnDef","description":""},{"path":"/docs/types/SyGridApi","title":"SyGridApi","description":""}]}]}]},{"path":"/docs/types/ViewportDatasource","kind":"type","title":"ViewportDatasource","summary":"Fields, allowed values, and APIs that use ViewportDatasource.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/options/viewportDatasource","title":"viewportDatasource","description":"Viewport model supplying data for visible row ranges. Implement initialization, range changes, and cleanup."}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/ViewportRequestContext","title":"ViewportRequestContext","description":""}]}]}]},{"path":"/docs/types/ViewportRequestContext","kind":"type","title":"ViewportRequestContext","summary":"Fields, allowed values, and APIs that use ViewportRequestContext.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/ViewportDatasource","title":"ViewportDatasource","description":""}]}]}]},{"path":"/docs/types/WorkbookRegistryErrorCode","kind":"type","title":"WorkbookRegistryErrorCode","summary":"Fields, allowed values, and APIs that use WorkbookRegistryErrorCode.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridWorkbookBindingErrorDetail","title":"GridWorkbookBindingErrorDetail","description":""}]}]}]},{"path":"/docs/types/XlsxAlignment","kind":"type","title":"XlsxAlignment","summary":"Fields, allowed values, and APIs that use XlsxAlignment.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/XlsxCellStyle","title":"XlsxCellStyle","description":""}]}]}]},{"path":"/docs/types/XlsxBorder","kind":"type","title":"XlsxBorder","summary":"Fields, allowed values, and APIs that use XlsxBorder.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/XlsxCellStyle","title":"XlsxCellStyle","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/XlsxBorderEdge","title":"XlsxBorderEdge","description":""}]}]}]},{"path":"/docs/types/XlsxBorderEdge","kind":"type","title":"XlsxBorderEdge","summary":"Fields, allowed values, and APIs that use XlsxBorderEdge.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface XlsxBorderEdge {\n  readonly style?: XlsxBorderStyle;\n  readonly color?: string;\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/XlsxBorder","title":"XlsxBorder","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/XlsxBorderStyle","title":"XlsxBorderStyle","description":""}]}]}]},{"path":"/docs/types/XlsxBorderStyle","kind":"type","title":"XlsxBorderStyle","summary":"Fields, allowed values, and APIs that use XlsxBorderStyle.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/XlsxBorderEdge","title":"XlsxBorderEdge","description":""}]}]}]},{"path":"/docs/types/XlsxCell","kind":"type","title":"XlsxCell","summary":"Fields, allowed values, and APIs that use XlsxCell.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface XlsxCell {\n  readonly value: XlsxCellValue;\n  readonly style?: XlsxCellStyle;\n  readonly formula?: string;\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/XlsxRow","title":"XlsxRow","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/XlsxCellValue","title":"XlsxCellValue","description":""},{"path":"/docs/types/XlsxCellStyle","title":"XlsxCellStyle","description":""}]}]}]},{"path":"/docs/types/XlsxCellStyle","kind":"type","title":"XlsxCellStyle","summary":"Fields, allowed values, and APIs that use XlsxCellStyle.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/XlsxCell","title":"XlsxCell","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/XlsxAlignment","title":"XlsxAlignment","description":""},{"path":"/docs/types/XlsxFont","title":"XlsxFont","description":""},{"path":"/docs/types/XlsxFill","title":"XlsxFill","description":""},{"path":"/docs/types/XlsxBorder","title":"XlsxBorder","description":""}]}]}]},{"path":"/docs/types/XlsxCellValue","kind":"type","title":"XlsxCellValue","summary":"Fields, allowed values, and APIs that use XlsxCellValue.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export type XlsxCellValue = string | number | boolean | null | undefined;","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/XlsxCell","title":"XlsxCell","description":""}]}]}]},{"path":"/docs/types/XlsxCellXf","kind":"type","title":"XlsxCellXf","summary":"Fields, allowed values, and APIs that use XlsxCellXf.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/XlsxStyleSheet","title":"XlsxStyleSheet","description":""}]}]}]},{"path":"/docs/types/XlsxColumnDef","kind":"type","title":"XlsxColumnDef","summary":"Fields, allowed values, and APIs that use XlsxColumnDef.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface XlsxColumnDef {\n  readonly field: string;\n  readonly headerName: string;\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/XlsxGridSnapshot","title":"XlsxGridSnapshot","description":""}]}]}]},{"path":"/docs/types/XlsxDefinedName","kind":"type","title":"XlsxDefinedName","summary":"Fields, allowed values, and APIs that use XlsxDefinedName.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/XlsxWorkbook","title":"XlsxWorkbook","description":""}]}]}]},{"path":"/docs/types/XlsxFill","kind":"type","title":"XlsxFill","summary":"Fields, allowed values, and APIs that use XlsxFill.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface XlsxFill {\n  readonly color?: string;\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/XlsxCellStyle","title":"XlsxCellStyle","description":""}]}]}]},{"path":"/docs/types/XlsxFont","kind":"type","title":"XlsxFont","summary":"Fields, allowed values, and APIs that use XlsxFont.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/XlsxCellStyle","title":"XlsxCellStyle","description":""}]}]}]},{"path":"/docs/types/XlsxGridSnapshot","kind":"type","title":"XlsxGridSnapshot","summary":"Fields, allowed values, and APIs that use XlsxGridSnapshot.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"kind":"code","source":"export interface XlsxGridSnapshot {\n  readonly columnDefs: ReadonlyArray<XlsxColumnDef>;\n  readonly rowData: ReadonlyArray<Record<string, unknown>>;\n}","language":"typescript"}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/GridXlsxImportedDetail","title":"GridXlsxImportedDetail","description":""},{"path":"/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/XlsxColumnDef","title":"XlsxColumnDef","description":""}]}]}]},{"path":"/docs/types/XlsxImportResult","kind":"type","title":"XlsxImportResult","summary":"Fields, allowed values, and APIs that use XlsxImportResult.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"APIs using this type","blocks":[{"kind":"links","items":[{"path":"/docs/methods/importDataFromXlsx","title":"importDataFromXlsx","description":"Parses file bytes into a workbook and returns XlsxImportResult. Read the Grid snapshot from the xlsxImported event."}]}]},{"id":"parents","title":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/XlsxWorkbook","title":"XlsxWorkbook","description":""},{"path":"/docs/types/XlsxStyleSheet","title":"XlsxStyleSheet","description":""},{"path":"/docs/types/XlsxImportSheet","title":"XlsxImportSheet","description":""}]}]}]},{"path":"/docs/types/XlsxImportSheet","kind":"type","title":"XlsxImportSheet","summary":"Fields, allowed values, and APIs that use XlsxImportSheet.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/XlsxImportResult","title":"XlsxImportResult","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/XlsxWorkbookSheet","title":"XlsxWorkbookSheet","description":""},{"path":"/docs/types/XlsxSheet","title":"XlsxSheet","description":""},{"path":"/docs/types/MergedRangeInfo","title":"MergedRangeInfo","description":""}]}]}]},{"path":"/docs/types/XlsxRow","kind":"type","title":"XlsxRow","summary":"Fields, allowed values, and APIs that use XlsxRow.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/XlsxSheet","title":"XlsxSheet","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/XlsxCell","title":"XlsxCell","description":""}]}]}]},{"path":"/docs/types/XlsxSheet","kind":"type","title":"XlsxSheet","summary":"Fields, allowed values, and APIs that use XlsxSheet.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/XlsxImportSheet","title":"XlsxImportSheet","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/XlsxRow","title":"XlsxRow","description":""}]}]}]},{"path":"/docs/types/XlsxStyleSheet","kind":"type","title":"XlsxStyleSheet","summary":"Fields, allowed values, and APIs that use XlsxStyleSheet.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/XlsxImportResult","title":"XlsxImportResult","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/XlsxCellXf","title":"XlsxCellXf","description":""}]}]}]},{"path":"/docs/types/XlsxWorkbook","kind":"type","title":"XlsxWorkbook","summary":"Fields, allowed values, and APIs that use XlsxWorkbook.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/XlsxImportResult","title":"XlsxImportResult","description":""}]}]},{"id":"related","title":"Related types","blocks":[{"kind":"links","items":[{"path":"/docs/types/XlsxWorkbookSheet","title":"XlsxWorkbookSheet","description":""},{"path":"/docs/types/XlsxDefinedName","title":"XlsxDefinedName","description":""}]}]}]},{"path":"/docs/types/XlsxWorkbookSheet","kind":"type","title":"XlsxWorkbookSheet","summary":"Fields, allowed values, and APIs that use XlsxWorkbookSheet.","sections":[{"id":"definition","title":"Type definition","blocks":[{"kind":"paragraph","text":"A question mark (?) marks an optional field; readonly marks a value you should not change directly. A union (|) accepts one of the listed forms. Functions are callbacks that Grid invokes at the relevant point."},{"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":"Contracts containing this type","blocks":[{"kind":"links","items":[{"path":"/docs/types/XlsxImportSheet","title":"XlsxImportSheet","description":""},{"path":"/docs/types/XlsxWorkbook","title":"XlsxWorkbook","description":""}]}]}]}]}