{"version":3,"file":"smart-webcomponents-angular-grid.mjs","sources":["../../grid/src/smart.element.ts","../../grid/src/smart.grid.ts","../../grid/src/smart.grid.module.ts","../../grid/src/smart-webcomponents-angular-grid.ts"],"sourcesContent":["\ndeclare global {\n    interface Window {\n        Smart: any;\n}\n}\n\n\nimport { Directive, ElementRef, Input, Output, EventEmitter } from '@angular/core';\nimport { ElementRenderMode } from './../index';\n\n@Directive()\nexport class BaseElement {\n    constructor(ref: ElementRef) {\n        const that = this;\n        this.nativeElement = ref.nativeElement as any;\n\n        that.nativeElement.onAttached = () => {\n            that.onAttach.emit(that.nativeElement);\n        }\n\n        that.nativeElement.onDetached = () => {\n            that.onDetach.emit(that.nativeElement);\n        }\n    }\n\n    @Output() onCreate: EventEmitter<any> = new EventEmitter();\n    @Output() onReady: EventEmitter<any> = new EventEmitter();\n    @Output() onAttach: EventEmitter<any> = new EventEmitter();\n    @Output() onDetach: EventEmitter<any> = new EventEmitter();\n\n    public nativeElement: any;\n\n    public addEventListener(type: string, listener: EventListenerOrEventListenerObject, options: boolean | AddEventListenerOptions = false): void {\n        this.nativeElement.addEventListener(type, listener, options);\n\t}\n\n\tpublic removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options: boolean | AddEventListenerOptions = false): void {\n\t\tthis.nativeElement.removeEventListener(type, listener, options);\n\t}\n\n\tpublic dispatchEvent(event: Event): boolean {\n\t\treturn this.nativeElement.dispatchEvent(event);\n\t}\n\n\tpublic blur(): void {\n\t\tthis.nativeElement.blur();\n\t}\n\n\tpublic click(): void {\n\t\tthis.nativeElement.click();\n\t}\n\n\tpublic focus(options?: FocusOptions): void {\n\t\tthis.nativeElement.focus(options);\n\t}\n\n/** @description Sets or gets the license.  */\n\t@Input()\n\tget license(): string {\n\t\treturn this.nativeElement ? this.nativeElement.license : undefined;\n\t}\n\tset license(value: string) {\n\t\tthis.nativeElement ? this.nativeElement.license = value : undefined;\n\t}\n\t\n/** @description Sets or gets the language. Used in conjunction with the property messages.  */\n\t@Input()\n\tget locale(): string {\n\t\treturn this.nativeElement ? this.nativeElement.locale : undefined;\n\t}\n\tset locale(value: string) {\n\t\tthis.nativeElement ? this.nativeElement.locale = value : undefined;\n\t}\n\n\t/** @description Callback used to customize the format of the messages that are returned from the Localization Module. */\n\t@Input()\n\tget localizeFormatFunction(): any {\n\t\treturn this.nativeElement ? this.nativeElement.localizeFormatFunction : undefined;\n\t}\n\tset localizeFormatFunction(value: any) {\n\t\tthis.nativeElement ? this.nativeElement.localizeFormatFunction = value : undefined;\n\t}\n\n\t/** @description Sets or gets an object specifying strings used in the widget that can be localized. Used in conjunction with the property locale.  */\n\t@Input()\n\tget messages(): any {\n\t\treturn this.nativeElement ? this.nativeElement.messages : undefined;\n\t}\n\tset messages(value: any) {\n\t\tthis.nativeElement ? this.nativeElement.messages = value : undefined;\n\t}\n\n\t/** @description Sets or gets the value indicating whether the element is aligned to support locales using right-to-left fonts. */\n\t@Input()\n\tget rightToLeft(): boolean {\n\t\treturn this.nativeElement ? this.nativeElement.rightToLeft : undefined;\n\t}\n\tset rightToLeft(value: boolean) {\n\t\tthis.nativeElement ? this.nativeElement.rightToLeft = value : undefined;\n\t}\n\n\t/** @description Determines the theme. Theme defines the look of the element */\n\t@Input()\n\tget theme(): string {\n\t\treturn this.nativeElement ? this.nativeElement.theme : undefined;\n\t}\n\tset theme(value: string) {\n\t\tthis.nativeElement ? this.nativeElement.theme = value : undefined;\n\t}\n}\n\nlet Smart: any;\nif (typeof window !== \"undefined\") {\n\tSmart = window.Smart;\n}\nexport { Smart };\n\n","import { Grid } from './../index';\nimport { GridAppearanceAutoGenerateRowLabelMode, GridAppearanceAutoGenerateColumnLabelMode, GridResizeMode, GridClipboardAutoFillMode, HorizontalAlignment, VerticalAlignment, Position, GridColumnFilterMenuMode, GridColumnSortOrder, GridConditionalFormattingCondition, GridDataExportPageOrientation, GridEditingAction, LayoutPosition, GridCommandDisplayMode, GridEditingMode, GridEditingAddNewRowDisplayMode, GridFilteringFilterRowApplyMode, GridFilteringFilterMenuMode, GridGroupingExpandMode, GridGroupingRenderMode, GridHeaderSearchCommand, GridPagerAutoEllipsis, Scrolling, GridSelectionMode, GridSelectionAction, GridSelectionCheckBoxesSelectAllMode, GridSortingMode, GridSortingCommandKey, GridAppearance, GridAi, GridBehavior, GridColumnHeader, GridClipboard, GridColumn, GridContextMenu, GridContextMenuDataSource, GridCommand, GridColumnMenu, GridColumnMenuDataSource, GridColumnGroup, GridConditionalFormatting, GridCharting, Dialog, GridCheckBoxes, GridDataExport, GridEditing, GridEditingCommandKeys, GridCommandKey, GridEditingCommandBar, GridEditingCommandBarDataSource, GridEditingCommandColumn, GridEditingCommandColumnDataSource, GridEditingAddNewRow, GridEditingAddNewColumn, GridFiltering, GridFilteringFilterRow, GridFilteringFilterMenu, GridFilteringFilterBuilder, GridFooter, GridGrouping, GridGroupingGroupBar, GridGroupingSummaryRow, GridGroupHeader, GridHeader, GridLayout, GridPaging, GridPagingSpinner, GridPager, GridPagerPageSizeSelector, GridPagerSummary, GridPagerNavigationButtons, GridPagerNavigationButtonsPrevNextButtons, GridPagerNavigationButtonsFirstLastButtons, GridPagerNavigationButtonsLabels, GridPagerNavigationInput, GridPagerPageIndexSelectors, GridRowDetail, GridRow, GridCell, GridSummaryRow, GridStateSettings, GridSelection, GridSelectionCheckBoxes, GridSorting, GridUploadSettings, ElementRenderMode} from './../index';\nimport { DataAdapter, Chart } from './../index';\nimport { Component, Directive, AfterViewInit, ElementRef, Input, OnInit, OnChanges, OnDestroy, SimpleChanges, Output, EventEmitter } from '@angular/core';\nimport { BaseElement, Smart } from './smart.element';\nexport { GridAppearanceAutoGenerateRowLabelMode, GridAppearanceAutoGenerateColumnLabelMode, GridResizeMode, GridClipboardAutoFillMode, HorizontalAlignment, VerticalAlignment, Position, GridColumnFilterMenuMode, GridColumnSortOrder, GridConditionalFormattingCondition, GridDataExportPageOrientation, GridEditingAction, LayoutPosition, GridCommandDisplayMode, GridEditingMode, GridEditingAddNewRowDisplayMode, GridFilteringFilterRowApplyMode, GridFilteringFilterMenuMode, GridGroupingExpandMode, GridGroupingRenderMode, GridHeaderSearchCommand, GridPagerAutoEllipsis, Scrolling, GridSelectionMode, GridSelectionAction, GridSelectionCheckBoxesSelectAllMode, GridSortingMode, GridSortingCommandKey, GridAppearance, GridAi, GridBehavior, GridColumnHeader, GridClipboard, GridColumn, GridContextMenu, GridContextMenuDataSource, GridCommand, GridColumnMenu, GridColumnMenuDataSource, GridColumnGroup, GridConditionalFormatting, GridCharting, Dialog, GridCheckBoxes, GridDataExport, GridEditing, GridEditingCommandKeys, GridCommandKey, GridEditingCommandBar, GridEditingCommandBarDataSource, GridEditingCommandColumn, GridEditingCommandColumnDataSource, GridEditingAddNewRow, GridEditingAddNewColumn, GridFiltering, GridFilteringFilterRow, GridFilteringFilterMenu, GridFilteringFilterBuilder, GridFooter, GridGrouping, GridGroupingGroupBar, GridGroupingSummaryRow, GridGroupHeader, GridHeader, GridLayout, GridPaging, GridPagingSpinner, GridPager, GridPagerPageSizeSelector, GridPagerSummary, GridPagerNavigationButtons, GridPagerNavigationButtonsPrevNextButtons, GridPagerNavigationButtonsFirstLastButtons, GridPagerNavigationButtonsLabels, GridPagerNavigationInput, GridPagerPageIndexSelectors, GridRowDetail, GridRow, GridCell, GridSummaryRow, GridStateSettings, GridSelection, GridSelectionCheckBoxes, GridSorting, GridUploadSettings, ElementRenderMode} from './../index';\nexport { Smart } from './smart.element';\nexport { Grid } from './../index';\nexport { DataAdapter, Chart } from './../index';\n\n\n@Directive({\n\texportAs: 'smart-grid',\tselector: 'smart-grid, [smart-grid]'\n})\n\nexport class GridComponent extends BaseElement implements OnInit, AfterViewInit, OnDestroy, OnChanges {\n\tconstructor(ref: ElementRef<Grid>) {\n\t\tsuper(ref);\n\t\tthis.nativeElement = ref.nativeElement as Grid;\n\t}\n\n\tprivate eventHandlers: any[] = [];\n\n\tpublic declare nativeElement: Grid;\n\t/** @description Creates the component on demand.\n\t * @param properties An optional object of properties, which will be added to the template binded ones.\n\t */\n\tpublic createComponent(properties = {}): any {\n    \tthis.nativeElement = <Grid>document.createElement('smart-grid');\n\t\tfor (let propertyName in properties) { \n \t\t\tthis.nativeElement[propertyName] = properties[propertyName];\n\t\t}\n\t\treturn this.nativeElement;\n\t}\n\t/** @description An object that defines configurable options for customizing the visual appearance of the grid, including properties such as line color, spacing, background style, and border visibility. */\n\t@Input()\n\tget appearance(): GridAppearance {\n\t\treturn this.nativeElement ? this.nativeElement.appearance : undefined;\n\t}\n\tset appearance(value: GridAppearance) {\n\t\tthis.nativeElement ? this.nativeElement.appearance = value : undefined;\n\t}\n\n\t/** @description An object that defines configuration options for integrating AI capabilities within the grid component. This includes settings for enabling AI features, specifying AI service endpoints, setting authentication credentials, and customizing how the grid interacts with AI-powered functionalities. */\n\t@Input()\n\tget ai(): GridAi {\n\t\treturn this.nativeElement ? this.nativeElement.ai : undefined;\n\t}\n\tset ai(value: GridAi) {\n\t\tthis.nativeElement ? this.nativeElement.ai = value : undefined;\n\t}\n\n\t/** @description An object that defines configuration options controlling the grid’s behavior, such as layout properties, sorting and filtering capabilities, selection modes, and responsiveness settings. */\n\t@Input()\n\tget behavior(): GridBehavior {\n\t\treturn this.nativeElement ? this.nativeElement.behavior : undefined;\n\t}\n\tset behavior(value: GridBehavior) {\n\t\tthis.nativeElement ? this.nativeElement.behavior = value : undefined;\n\t}\n\n\t/** @description Sets or retrieves the id of the currently active user. This value must match the id of one of the entries in the users property or array. The active user's privileges and access rights are determined based on their corresponding user object. If no current user is specified (i.e., the id is unset or invalid), the default privileges for the element will apply according to its properties, potentially restricting or allowing access based on default settings. */\n\t@Input()\n\tget currentUser(): string | number {\n\t\treturn this.nativeElement ? this.nativeElement.currentUser : undefined;\n\t}\n\tset currentUser(value: string | number) {\n\t\tthis.nativeElement ? this.nativeElement.currentUser = value : undefined;\n\t}\n\n\t/** @description Provides configuration options for customizing the appearance, labels, alignment, and behavior of column headers in a data table or grid. */\n\t@Input()\n\tget columnHeader(): GridColumnHeader {\n\t\treturn this.nativeElement ? this.nativeElement.columnHeader : undefined;\n\t}\n\tset columnHeader(value: GridColumnHeader) {\n\t\tthis.nativeElement ? this.nativeElement.columnHeader = value : undefined;\n\t}\n\n\t/** @description The clipboard property controls whether users can perform clipboard operations—such as copying (Ctrl+C), cutting (Ctrl+X), and pasting (Ctrl+V)—using keyboard shortcuts within the application. Setting this property to true enables these keyboard shortcuts for clipboard actions; setting it to false disables them, preventing users from using keyboard navigation for copying, cutting, or pasting content. */\n\t@Input()\n\tget clipboard(): GridClipboard {\n\t\treturn this.nativeElement ? this.nativeElement.clipboard : undefined;\n\t}\n\tset clipboard(value: GridClipboard) {\n\t\tthis.nativeElement ? this.nativeElement.clipboard = value : undefined;\n\t}\n\n\t/** @description The columns property defines the collection of columns displayed within the Smart.Grid component. Each column configuration specifies how data is presented and interacted with. Through this property, you can control essential aspects such as column headers, data field bindings, sorting, filtering, formatting, alignment, visibility, and more. The columns property gives you full control over the structure, appearance, and behavior of the grid's columns, enabling advanced customization of both data presentation and user experience. */\n\t@Input()\n\tget columns(): {label: string, dataField: string}[] | string[] | number | GridColumn[] {\n\t\treturn this.nativeElement ? this.nativeElement.columns : undefined;\n\t}\n\tset columns(value: {label: string, dataField: string}[] | string[] | number | GridColumn[]) {\n\t\tthis.nativeElement ? this.nativeElement.columns = value : undefined;\n\t}\n\n\t/** @description The Context Menu is the drop-down menu that appears when a user right-clicks on a row within the Grid. This menu provides quick access to actions such as deleting a row or editing a cell or entire row, depending on the current editing mode configured for the Grid. You can customize the Context Menu by using the 'contextMenuItemCustom' option in the Grid's dataSource. This option lets you add your own custom menu items to enhance or extend the menu's functionality.Additionally, if you want to completely replace the default context menu with your own, you can use the 'selector' property. Set this property to the ID of a Smart.Menu component to display your custom menu when the user right-clicks on a row in the Grid. */\n\t@Input()\n\tget contextMenu(): GridContextMenu {\n\t\treturn this.nativeElement ? this.nativeElement.contextMenu : undefined;\n\t}\n\tset contextMenu(value: GridContextMenu) {\n\t\tthis.nativeElement ? this.nativeElement.contextMenu = value : undefined;\n\t}\n\n\t/** @description The Column Menu is a contextual drop-down menu that appears when you click the drop-down button in a column header, which becomes visible upon hovering over the header. This menu provides various options for customizing the behavior and appearance of the selected column. Common actions include sorting the grid by the column, applying filters to show or hide specific data, and grouping the grid rows based on the column’s values. The Column Menu offers an intuitive way for users to interact with and tailor the data grid to meet their specific needs. */\n\t@Input()\n\tget columnMenu(): GridColumnMenu {\n\t\treturn this.nativeElement ? this.nativeElement.columnMenu : undefined;\n\t}\n\tset columnMenu(value: GridColumnMenu) {\n\t\tthis.nativeElement ? this.nativeElement.columnMenu = value : undefined;\n\t}\n\n\t/** @description Provides a detailed configuration of column group settings, including group names, ordering, visibility, and any hierarchical relationships between columns within the group. */\n\t@Input()\n\tget columnGroups(): GridColumnGroup[] {\n\t\treturn this.nativeElement ? this.nativeElement.columnGroups : undefined;\n\t}\n\tset columnGroups(value: GridColumnGroup[]) {\n\t\tthis.nativeElement ? this.nativeElement.columnGroups = value : undefined;\n\t}\n\n\t/** @description Enables or disables the dropdown mode for the component. When true, the component displays as a dropdown instead of a standard input or list. */\n\t@Input()\n\tget dropDownMode(): boolean {\n\t\treturn this.nativeElement ? this.nativeElement.dropDownMode : undefined;\n\t}\n\tset dropDownMode(value: boolean) {\n\t\tthis.nativeElement ? this.nativeElement.dropDownMode = value : undefined;\n\t}\n\n\t/** @description Determines whether the dropdown mode allows text input. When true, users can type in the dropdown field; otherwise, selection is restricted to the provided list items. */\n\t@Input()\n\tget dropDownModeInput(): boolean {\n\t\treturn this.nativeElement ? this.nativeElement.dropDownModeInput : undefined;\n\t}\n\tset dropDownModeInput(value: boolean) {\n\t\tthis.nativeElement ? this.nativeElement.dropDownModeInput = value : undefined;\n\t}\n\n\t/** @description Specifies the data field or property to display in dropdown mode. This is the field from the data source that will be shown as the dropdown options. */\n\t@Input()\n\tget dropDownModeDataField(): string {\n\t\treturn this.nativeElement ? this.nativeElement.dropDownModeDataField : undefined;\n\t}\n\tset dropDownModeDataField(value: string) {\n\t\tthis.nativeElement ? this.nativeElement.dropDownModeDataField = value : undefined;\n\t}\n\n\t/** @description Defines or retrieves the rules and settings for conditional formatting applied to the Grid's cells, allowing you to customize cell appearance (such as background color, font style, or icons) based on specific conditions or cell values. */\n\t@Input()\n\tget conditionalFormatting(): GridConditionalFormatting[] {\n\t\treturn this.nativeElement ? this.nativeElement.conditionalFormatting : undefined;\n\t}\n\tset conditionalFormatting(value: GridConditionalFormatting[]) {\n\t\tthis.nativeElement ? this.nativeElement.conditionalFormatting = value : undefined;\n\t}\n\n\t/** @description Configures the data and display settings for the Grid Chart, enabling data visualization in a tabular grid format. This includes specifying the structure, appearance, and interactive features of the chart to present complex data clearly and intuitively. */\n\t@Input()\n\tget charting(): GridCharting {\n\t\treturn this.nativeElement ? this.nativeElement.charting : undefined;\n\t}\n\tset charting(value: GridCharting) {\n\t\tthis.nativeElement ? this.nativeElement.charting = value : undefined;\n\t}\n\n\t/** @description Configures the checkbox options for the TreeGrid component, allowing you to enable or customize checkbox display, selection behavior, and interaction within the hierarchical grid structure. */\n\t@Input()\n\tget checkBoxes(): GridCheckBoxes {\n\t\treturn this.nativeElement ? this.nativeElement.checkBoxes : undefined;\n\t}\n\tset checkBoxes(value: GridCheckBoxes) {\n\t\tthis.nativeElement ? this.nativeElement.checkBoxes = value : undefined;\n\t}\n\n\t/** @description Configures the export settings for grid data, including file format, selected columns, data range, export style, and additional export preferences. */\n\t@Input()\n\tget dataExport(): GridDataExport {\n\t\treturn this.nativeElement ? this.nativeElement.dataExport : undefined;\n\t}\n\tset dataExport(value: GridDataExport) {\n\t\tthis.nativeElement ? this.nativeElement.dataExport = value : undefined;\n\t}\n\n\t/** @description Specifies the source from which the grid retrieves its data. The dataSource property accepts either an instance of JQX.DataAdapter for advanced data management and operations, or a standard Array containing the data records to be displayed in the grid. This flexibility allows developers to connect the grid to various data formats and structures, making data binding straightforward and versatile. */\n\t@Input()\n\tget dataSource(): any {\n\t\treturn this.nativeElement ? this.nativeElement.dataSource : undefined;\n\t}\n\tset dataSource(value: any) {\n\t\tthis.nativeElement ? this.nativeElement.dataSource = value : undefined;\n\t}\n\n\t/** @description Configures the grid’s data source when the dataSource property is assigned either a JavaScript array (for local data) or a URL (for remote data). This setting determines how the grid retrieves and displays its data, supporting both direct array binding and remote data fetching via HTTP requests. */\n\t@Input()\n\tget dataSourceSettings(): any {\n\t\treturn this.nativeElement ? this.nativeElement.dataSourceSettings : undefined;\n\t}\n\tset dataSourceSettings(value: any) {\n\t\tthis.nativeElement ? this.nativeElement.dataSourceSettings = value : undefined;\n\t}\n\n\t/** @description Provides comprehensive configuration options for controlling the grid's editing behavior, including enabling or disabling editing features, specifying editing modes (such as inline, popup, or batch), setting validation rules, and customizing editors for specific columns. */\n\t@Input()\n\tget editing(): GridEditing {\n\t\treturn this.nativeElement ? this.nativeElement.editing : undefined;\n\t}\n\tset editing(value: GridEditing) {\n\t\tthis.nativeElement ? this.nativeElement.editing = value : undefined;\n\t}\n\n\t/** @description Provides detailed configuration options for the grid's filtering functionality, including filter types, default filter values, filter operators, and custom filter logic for columns. This determines how data within the grid can be searched, narrowed, or displayed based on user-defined criteria. */\n\t@Input()\n\tget filtering(): GridFiltering {\n\t\treturn this.nativeElement ? this.nativeElement.filtering : undefined;\n\t}\n\tset filtering(value: GridFiltering) {\n\t\tthis.nativeElement ? this.nativeElement.filtering = value : undefined;\n\t}\n\n\t/** @description Provides configuration options for customizing the appearance and behavior of the grid's footer, including visibility, content, styling, and layout settings. */\n\t@Input()\n\tget footer(): GridFooter {\n\t\treturn this.nativeElement ? this.nativeElement.footer : undefined;\n\t}\n\tset footer(value: GridFooter) {\n\t\tthis.nativeElement ? this.nativeElement.footer = value : undefined;\n\t}\n\n\t/** @description Enables or retrieves the ability to use Excel-style formulas as cell values within the table. Formulas must begin with an equal sign (=) and will be automatically recalculated whenever the referenced cell values are updated. This functionality relies on the third-party, free formula-parser plugin, so you must include the file 'formula-parser.min.js' in your project for this feature to work properly. */\n\t@Input()\n\tget formulas(): boolean {\n\t\treturn this.nativeElement ? this.nativeElement.formulas : undefined;\n\t}\n\tset formulas(value: boolean) {\n\t\tthis.nativeElement ? this.nativeElement.formulas = value : undefined;\n\t}\n\n\t/** @description Provides detailed configuration options for the grid's data grouping functionality, specifying how rows are grouped, the grouping criteria, and related display settings within the grid. */\n\t@Input()\n\tget grouping(): GridGrouping {\n\t\treturn this.nativeElement ? this.nativeElement.grouping : undefined;\n\t}\n\tset grouping(value: GridGrouping) {\n\t\tthis.nativeElement ? this.nativeElement.grouping = value : undefined;\n\t}\n\n\t/** @description Provides configuration options that define the appearance and behavior of the group header, including properties such as text, style, alignment, and visibility settings. */\n\t@Input()\n\tget groupHeader(): GridGroupHeader {\n\t\treturn this.nativeElement ? this.nativeElement.groupHeader : undefined;\n\t}\n\tset groupHeader(value: GridGroupHeader) {\n\t\tthis.nativeElement ? this.nativeElement.groupHeader = value : undefined;\n\t}\n\n\t/** @description Provides detailed configuration options for the grid's header, including display settings, styling, visibility, and customization of header rows and columns. */\n\t@Input()\n\tget header(): GridHeader {\n\t\treturn this.nativeElement ? this.nativeElement.header : undefined;\n\t}\n\tset header(value: GridHeader) {\n\t\tthis.nativeElement ? this.nativeElement.header = value : undefined;\n\t}\n\n\t/** @description An object that defines configuration options for the layout of the grid, including properties such as the number of columns, row and column spacing, alignment, and overall grid arrangement. This object allows you to customize the appearance and structure of the grid according to your requirements. */\n\t@Input()\n\tget layout(): GridLayout {\n\t\treturn this.nativeElement ? this.nativeElement.layout : undefined;\n\t}\n\tset layout(value: GridLayout) {\n\t\tthis.nativeElement ? this.nativeElement.layout = value : undefined;\n\t}\n\n\t/** @description Sets or retrieves the unlockKey used to authorize and access the full functionality of the product. The unlockKey serves as a security credential to enable locked or premium features. */\n\t@Input()\n\tget unlockKey(): string {\n\t\treturn this.nativeElement ? this.nativeElement.unlockKey : undefined;\n\t}\n\tset unlockKey(value: string) {\n\t\tthis.nativeElement ? this.nativeElement.unlockKey = value : undefined;\n\t}\n\n\t/** @description Specifies the language code to be used for displaying messages. When set, it determines which localized messages from the messages property are shown to the user. This property can be used to retrieve the current language or update it dynamically at runtime. */\n\t@Input()\n\tget locale(): string {\n\t\treturn this.nativeElement ? this.nativeElement.locale : undefined;\n\t}\n\tset locale(value: string) {\n\t\tthis.nativeElement ? this.nativeElement.locale = value : undefined;\n\t}\n\n\t/** @description 'Key Handling:'  You can customize how key presses are handled by defining key map within the configuration. For each key (e.g., '\"Enter\"'), you can assign:- 'Another key as the value' (e.g., '\"Enter\": \"Tab\"'): When the specified key is pressed, it will be treated as if the mapped key was pressed instead.- 'A predefined action' (e.g., ''copy'', ''copyPrev'', ''copyNext'', ''delete''): When the key is pressed, the associated action will be executed.- 'A custom function': Assign a function as the value to execute custom logic whenever the key is pressed.This allows you to remap keys, trigger built-in actions, or define entirely custom behaviors based on key events in your application. */\n\t@Input()\n\tget keys(): any {\n\t\treturn this.nativeElement ? this.nativeElement.keys : undefined;\n\t}\n\tset keys(value: any) {\n\t\tthis.nativeElement ? this.nativeElement.keys = value : undefined;\n\t}\n\n\t/** @description Assigns values to the messages property, which typically contains an array or object representing individual messages or notifications. This function or setting updates the content, ensuring that the correct message data is stored or displayed. */\n\t@Input()\n\tget messages(): any {\n\t\treturn this.nativeElement ? this.nativeElement.messages : undefined;\n\t}\n\tset messages(value: any) {\n\t\tthis.nativeElement ? this.nativeElement.messages = value : undefined;\n\t}\n\n\t/** @description Callback function (chart: JQX.Chart) invoked after the chart has been fully initialized. Use this function to perform additional configuration or customization of the chart instance, such as modifying chart options, adding event listeners, or updating data before the chart is rendered to the user. This allows you to tailor the chart's appearance and behavior to meet specific application requirements. */\n\t@Input()\n\tget onCellValue(): {(cell: GridCell): void} {\n\t\treturn this.nativeElement ? this.nativeElement.onCellValue : undefined;\n\t}\n\tset onCellValue(value: {(cell: GridCell): void}) {\n\t\tthis.nativeElement ? this.nativeElement.onCellValue = value : undefined;\n\t}\n\n\t/** @description A callback function that is executed immediately after the grid has finished rendering, allowing you to perform additional actions or updates once the grid display is complete. */\n\t@Input()\n\tget onCellUpdate(): {(cells: GridCell[], oldValues: any[], values: any[], confirm: {(commit: boolean): void}): void} {\n\t\treturn this.nativeElement ? this.nativeElement.onCellUpdate : undefined;\n\t}\n\tset onCellUpdate(value: {(cells: GridCell[], oldValues: any[], values: any[], confirm: {(commit: boolean): void}): void}) {\n\t\tthis.nativeElement ? this.nativeElement.onCellUpdate = value : undefined;\n\t}\n\n\t/** @description Callback function invoked after the grid has been rendered for the first time and all data bindings have been completed. At this point, the component is fully initialized and ready for interaction or further manipulation. */\n\t@Input()\n\tget onCellRender(): {(cell: GridCell): void} {\n\t\treturn this.nativeElement ? this.nativeElement.onCellRender : undefined;\n\t}\n\tset onCellRender(value: {(cell: GridCell): void}) {\n\t\tthis.nativeElement ? this.nativeElement.onCellRender = value : undefined;\n\t}\n\n\t/** @description Provides detailed configuration options for managing pagination, including parameters such as the number of items per page, current page index, and total number of pages. This section ensures efficient data retrieval and navigation across multiple pages of results. */\n\t@Input()\n\tget onCellBeginEdit(): {(id: string, dataField: string, value: any): boolean} {\n\t\treturn this.nativeElement ? this.nativeElement.onCellBeginEdit : undefined;\n\t}\n\tset onCellBeginEdit(value: {(id: string, dataField: string, value: any): boolean}) {\n\t\tthis.nativeElement ? this.nativeElement.onCellBeginEdit = value : undefined;\n\t}\n\n\t/** @description Provides detailed configuration options for pager controls, including settings for page size, navigation buttons, and display style. These options determine how pagination is displayed and how users interact with paged content in the interface. */\n\t@Input()\n\tget onCellEditRequest(): {(id: string, dataField: string, value: any, oldValue: any, data: any): void} {\n\t\treturn this.nativeElement ? this.nativeElement.onCellEditRequest : undefined;\n\t}\n\tset onCellEditRequest(value: {(id: string, dataField: string, value: any, oldValue: any, data: any): void}) {\n\t\tthis.nativeElement ? this.nativeElement.onCellEditRequest = value : undefined;\n\t}\n\n\t/** @description Configures or updates the detailed information or content associated with a specific row, often used to display additional data or expanded views for that row. */\n\t@Input()\n\tget onCellValueChanged(): {(id: string, dataField: string, value: any): boolean} {\n\t\treturn this.nativeElement ? this.nativeElement.onCellValueChanged : undefined;\n\t}\n\tset onCellValueChanged(value: {(id: string, dataField: string, value: any): boolean}) {\n\t\tthis.nativeElement ? this.nativeElement.onCellValueChanged = value : undefined;\n\t}\n\n\t/** @description Sets or gets the CSS class rules for table rows. This property allows you to conditionally apply different CSS class names to rows based on custom logic. You provide an object where the keys are CSS class names and the values are functions that determine whether the class should be applied to a particular row.Each function receives a settings object with the following properties:- 'index': The numerical index of the current row.- 'data': The data object for the current row.- 'row': The raw row element or reference (depending on the implementation).- 'api': A reference to the table's API for advanced operations.'Example usage:''''jsrowCSSRules: {  'cell-class-1': settings => settings.data.quantity === 5,  'cell-class-2': settings => settings.data.quantity   'cell-class-3': settings => settings.data.quantity > 5}'''In this example, based on the 'quantity' property of the row's data, a different CSS class will be applied to that row. Multiple rules can be defined, and each will be evaluated for every row. If the function returns 'true', the corresponding class will be added to the row. */\n\t@Input()\n\tget onBeforeInit(): {(): void} {\n\t\treturn this.nativeElement ? this.nativeElement.onBeforeInit : undefined;\n\t}\n\tset onBeforeInit(value: {(): void}) {\n\t\tthis.nativeElement ? this.nativeElement.onBeforeInit = value : undefined;\n\t}\n\n\t/** @description Gets or sets a value that determines whether the element's alignment is configured for right-to-left (RTL) languages, ensuring proper layout and text direction for locales such as Arabic or Hebrew. */\n\t@Input()\n\tget onInit(): {(): void} {\n\t\treturn this.nativeElement ? this.nativeElement.onInit : undefined;\n\t}\n\tset onInit(value: {(): void}) {\n\t\tthis.nativeElement ? this.nativeElement.onInit = value : undefined;\n\t}\n\n\t/** @description The rows property contains an array of objects, with each object representing a single row in the grid. This property defines all the data entries that are rendered and displayed as rows within the grid component. Each element in the rows array should align with the column definitions, ensuring that the grid displays structured and consistent data across all rows. */\n\t@Input()\n\tget onAfterInit(): {(): void} {\n\t\treturn this.nativeElement ? this.nativeElement.onAfterInit : undefined;\n\t}\n\tset onAfterInit(value: {(): void}) {\n\t\tthis.nativeElement ? this.nativeElement.onAfterInit = value : undefined;\n\t}\n\n\t/** @description Configures the scroll mode behavior, allowing you to define how scrolling is handled within the component or page. This setting determines options such as smooth or instant scrolling, vertical or horizontal direction, and any custom scroll-related parameters. */\n\t@Input()\n\tget onChartInit(): any {\n\t\treturn this.nativeElement ? this.nativeElement.onChartInit : undefined;\n\t}\n\tset onChartInit(value: any) {\n\t\tthis.nativeElement ? this.nativeElement.onChartInit = value : undefined;\n\t}\n\n\t/** @description Provides detailed configuration options for displaying and customizing the summary row, including its appearance, position, aggregation methods, and which columns are summarized. */\n\t@Input()\n\tget onRender(): any {\n\t\treturn this.nativeElement ? this.nativeElement.onRender : undefined;\n\t}\n\tset onRender(value: any) {\n\t\tthis.nativeElement ? this.nativeElement.onRender = value : undefined;\n\t}\n\n\t/** @description Configures the grid's state-related settings, including properties such as selection, sorting, filtering, pagination, and layout. This determines how the grid maintains and restores its current state during user interactions or when the page is reloaded. */\n\t@Input()\n\tget onLoad(): any {\n\t\treturn this.nativeElement ? this.nativeElement.onLoad : undefined;\n\t}\n\tset onLoad(value: any) {\n\t\tthis.nativeElement ? this.nativeElement.onLoad = value : undefined;\n\t}\n\n\t/** @description Provides detailed configuration options for user selection behavior, including parameters such as selection mode (single or multiple), default selections, selection limits, and customizable callbacks for selection events. */\n\t@Input()\n\tget onKey(): {(event: KeyboardEvent): void} {\n\t\treturn this.nativeElement ? this.nativeElement.onKey : undefined;\n\t}\n\tset onKey(value: {(event: KeyboardEvent): void}) {\n\t\tthis.nativeElement ? this.nativeElement.onKey = value : undefined;\n\t}\n\n\t/** @description Provides detailed configuration options for controlling how data is sorted, including criteria such as sorting field, order (ascending or descending), and support for multiple sort keys. */\n\t@Input()\n\tget onRowInit(): {(index: number, row: GridRow): void} {\n\t\treturn this.nativeElement ? this.nativeElement.onRowInit : undefined;\n\t}\n\tset onRowInit(value: {(index: number, row: GridRow): void}) {\n\t\tthis.nativeElement ? this.nativeElement.onRowInit = value : undefined;\n\t}\n\n\t/** @description Defines the users displayed on the grid. Expects an array of user objects, where each object must include an 'id' (unique identifier) and a 'name' (display name). Optionally, each user object can also include a 'color' (for customizing the user's appearance) and an 'image' (URL or path to the user's avatar image). */\n\t@Input()\n\tget onRowDetailInit(): {(index: number, row: GridRow, details: HTMLElement): void} {\n\t\treturn this.nativeElement ? this.nativeElement.onRowDetailInit : undefined;\n\t}\n\tset onRowDetailInit(value: {(index: number, row: GridRow, details: HTMLElement): void}) {\n\t\tthis.nativeElement ? this.nativeElement.onRowDetailInit = value : undefined;\n\t}\n\n\t/** @description Configures the upload settings for images and attachments in the grid's image and attachment columns, including options for file type restrictions, size limits, and image filters to be applied during the upload process. */\n\t@Input()\n\tget onRowDetailUpdated(): {(index: number, row: GridRow, details: HTMLElement): void} {\n\t\treturn this.nativeElement ? this.nativeElement.onRowDetailUpdated : undefined;\n\t}\n\tset onRowDetailUpdated(value: {(index: number, row: GridRow, details: HTMLElement): void}) {\n\t\tthis.nativeElement ? this.nativeElement.onRowDetailUpdated = value : undefined;\n\t}\n\n\t/** @description Specifies the layout mode for displaying data within the interface. Acceptable values are:- ''grid'': Presents items in a tabular, spreadsheet-like format with rows and columns.- ''kanban'': Arranges items into columns representing workflow stages, similar to task boards.- ''card'': Displays each item as an individual card, typically used for concise summaries or visual grouping.Choose one of these values to determine how data is visually organized and presented to the user. */\n\t@Input()\n\tget onRowMouseEnter(): {(row: GridRow, event: any): void} {\n\t\treturn this.nativeElement ? this.nativeElement.onRowMouseEnter : undefined;\n\t}\n\tset onRowMouseEnter(value: {(row: GridRow, event: any): void}) {\n\t\tthis.nativeElement ? this.nativeElement.onRowMouseEnter = value : undefined;\n\t}\n\n\t/** @description undefined */\n\t@Input()\n\tget onRowMouseLeave(): {(row: GridRow, event: any): void} {\n\t\treturn this.nativeElement ? this.nativeElement.onRowMouseLeave : undefined;\n\t}\n\tset onRowMouseLeave(value: {(row: GridRow, event: any): void}) {\n\t\tthis.nativeElement ? this.nativeElement.onRowMouseLeave = value : undefined;\n\t}\n\n\t/** @description undefined */\n\t@Input()\n\tget onRowHistory(): {(index: number, row: GridRow, history: any[]): void} {\n\t\treturn this.nativeElement ? this.nativeElement.onRowHistory : undefined;\n\t}\n\tset onRowHistory(value: {(index: number, row: GridRow, history: any[]): void}) {\n\t\tthis.nativeElement ? this.nativeElement.onRowHistory = value : undefined;\n\t}\n\n\t/** @description undefined */\n\t@Input()\n\tget onRowStyle(): {(index: number, row: GridRow, history: any[]): void} {\n\t\treturn this.nativeElement ? this.nativeElement.onRowStyle : undefined;\n\t}\n\tset onRowStyle(value: {(index: number, row: GridRow, history: any[]): void}) {\n\t\tthis.nativeElement ? this.nativeElement.onRowStyle = value : undefined;\n\t}\n\n\t/** @description undefined */\n\t@Input()\n\tget onRowInserted(): {(index: number[], row: GridRow[]): void} {\n\t\treturn this.nativeElement ? this.nativeElement.onRowInserted : undefined;\n\t}\n\tset onRowInserted(value: {(index: number[], row: GridRow[]): void}) {\n\t\tthis.nativeElement ? this.nativeElement.onRowInserted = value : undefined;\n\t}\n\n\t/** @description undefined */\n\t@Input()\n\tget onRowRemoved(): {(indexes: number[], rows: GridRow[]): void} {\n\t\treturn this.nativeElement ? this.nativeElement.onRowRemoved : undefined;\n\t}\n\tset onRowRemoved(value: {(indexes: number[], rows: GridRow[]): void}) {\n\t\tthis.nativeElement ? this.nativeElement.onRowRemoved = value : undefined;\n\t}\n\n\t/** @description undefined */\n\t@Input()\n\tget onRowUpdate(): {(index: number[], row: GridRow[], oldValues: any[], values: any[], confirm: {(commit: boolean): void}): void} {\n\t\treturn this.nativeElement ? this.nativeElement.onRowUpdate : undefined;\n\t}\n\tset onRowUpdate(value: {(index: number[], row: GridRow[], oldValues: any[], values: any[], confirm: {(commit: boolean): void}): void}) {\n\t\tthis.nativeElement ? this.nativeElement.onRowUpdate = value : undefined;\n\t}\n\n\t/** @description undefined */\n\t@Input()\n\tget onRowUpdated(): {(index: number[], row: GridRow[]): void} {\n\t\treturn this.nativeElement ? this.nativeElement.onRowUpdated : undefined;\n\t}\n\tset onRowUpdated(value: {(index: number[], row: GridRow[]): void}) {\n\t\tthis.nativeElement ? this.nativeElement.onRowUpdated = value : undefined;\n\t}\n\n\t/** @description undefined */\n\t@Input()\n\tget onRowClass(): {(index: number, data: any, row: GridRow[]): void} {\n\t\treturn this.nativeElement ? this.nativeElement.onRowClass : undefined;\n\t}\n\tset onRowClass(value: {(index: number, data: any, row: GridRow[]): void}) {\n\t\tthis.nativeElement ? this.nativeElement.onRowClass = value : undefined;\n\t}\n\n\t/** @description undefined */\n\t@Input()\n\tget onCellClass(): {(index: number, dataField: string, cellValue: any, data: any, row: GridRow[]): void} {\n\t\treturn this.nativeElement ? this.nativeElement.onCellClass : undefined;\n\t}\n\tset onCellClass(value: {(index: number, dataField: string, cellValue: any, data: any, row: GridRow[]): void}) {\n\t\tthis.nativeElement ? this.nativeElement.onCellClass = value : undefined;\n\t}\n\n\t/** @description undefined */\n\t@Input()\n\tget onColumnInit(): {(index: number, column: GridColumn): void} {\n\t\treturn this.nativeElement ? this.nativeElement.onColumnInit : undefined;\n\t}\n\tset onColumnInit(value: {(index: number, column: GridColumn): void}) {\n\t\tthis.nativeElement ? this.nativeElement.onColumnInit = value : undefined;\n\t}\n\n\t/** @description undefined */\n\t@Input()\n\tget onColumnInserted(): {(index: number, column: GridColumn): void} {\n\t\treturn this.nativeElement ? this.nativeElement.onColumnInserted : undefined;\n\t}\n\tset onColumnInserted(value: {(index: number, column: GridColumn): void}) {\n\t\tthis.nativeElement ? this.nativeElement.onColumnInserted = value : undefined;\n\t}\n\n\t/** @description undefined */\n\t@Input()\n\tget onColumnRemoved(): {(index: number, column: GridColumn): void} {\n\t\treturn this.nativeElement ? this.nativeElement.onColumnRemoved : undefined;\n\t}\n\tset onColumnRemoved(value: {(index: number, column: GridColumn): void}) {\n\t\tthis.nativeElement ? this.nativeElement.onColumnRemoved = value : undefined;\n\t}\n\n\t/** @description undefined */\n\t@Input()\n\tget onColumnUpdated(): {(index: number, column: GridColumn): void} {\n\t\treturn this.nativeElement ? this.nativeElement.onColumnUpdated : undefined;\n\t}\n\tset onColumnUpdated(value: {(index: number, column: GridColumn): void}) {\n\t\tthis.nativeElement ? this.nativeElement.onColumnUpdated = value : undefined;\n\t}\n\n\t/** @description undefined */\n\t@Input()\n\tget onColumnClone(): {(dataField: string, cloneColumnDataField: string, index: number, duplicateCells: boolean): void} {\n\t\treturn this.nativeElement ? this.nativeElement.onColumnClone : undefined;\n\t}\n\tset onColumnClone(value: {(dataField: string, cloneColumnDataField: string, index: number, duplicateCells: boolean): void}) {\n\t\tthis.nativeElement ? this.nativeElement.onColumnClone = value : undefined;\n\t}\n\n\t/** @description undefined */\n\t@Input()\n\tget onCommand(): {(name: string, command: any, details: GridCell, event: Event | KeyboardEvent | PointerEvent, handled: boolean): void} {\n\t\treturn this.nativeElement ? this.nativeElement.onCommand : undefined;\n\t}\n\tset onCommand(value: {(name: string, command: any, details: GridCell, event: Event | KeyboardEvent | PointerEvent, handled: boolean): void}) {\n\t\tthis.nativeElement ? this.nativeElement.onCommand = value : undefined;\n\t}\n\n\t/** @description undefined */\n\t@Input()\n\tget paging(): GridPaging {\n\t\treturn this.nativeElement ? this.nativeElement.paging : undefined;\n\t}\n\tset paging(value: GridPaging) {\n\t\tthis.nativeElement ? this.nativeElement.paging = value : undefined;\n\t}\n\n\t/** @description undefined */\n\t@Input()\n\tget pager(): GridPager {\n\t\treturn this.nativeElement ? this.nativeElement.pager : undefined;\n\t}\n\tset pager(value: GridPager) {\n\t\tthis.nativeElement ? this.nativeElement.pager = value : undefined;\n\t}\n\n\t/** @description undefined */\n\t@Input()\n\tget rowDetail(): GridRowDetail {\n\t\treturn this.nativeElement ? this.nativeElement.rowDetail : undefined;\n\t}\n\tset rowDetail(value: GridRowDetail) {\n\t\tthis.nativeElement ? this.nativeElement.rowDetail = value : undefined;\n\t}\n\n\t/** @description undefined */\n\t@Input()\n\tget rowCSSRules(): any {\n\t\treturn this.nativeElement ? this.nativeElement.rowCSSRules : undefined;\n\t}\n\tset rowCSSRules(value: any) {\n\t\tthis.nativeElement ? this.nativeElement.rowCSSRules = value : undefined;\n\t}\n\n\t/** @description undefined */\n\t@Input()\n\tget rightToLeft(): boolean {\n\t\treturn this.nativeElement ? this.nativeElement.rightToLeft : undefined;\n\t}\n\tset rightToLeft(value: boolean) {\n\t\tthis.nativeElement ? this.nativeElement.rightToLeft = value : undefined;\n\t}\n\n\t/** @description undefined */\n\t@Input()\n\tget rows(): GridRow[] {\n\t\treturn this.nativeElement ? this.nativeElement.rows : undefined;\n\t}\n\tset rows(value: GridRow[]) {\n\t\tthis.nativeElement ? this.nativeElement.rows = value : undefined;\n\t}\n\n\t/** @description undefined */\n\t@Input()\n\tget scrolling(): Scrolling | string {\n\t\treturn this.nativeElement ? this.nativeElement.scrolling : undefined;\n\t}\n\tset scrolling(value: Scrolling | string) {\n\t\tthis.nativeElement ? this.nativeElement.scrolling = value : undefined;\n\t}\n\n\t/** @description undefined */\n\t@Input()\n\tget summaryRow(): GridSummaryRow {\n\t\treturn this.nativeElement ? this.nativeElement.summaryRow : undefined;\n\t}\n\tset summaryRow(value: GridSummaryRow) {\n\t\tthis.nativeElement ? this.nativeElement.summaryRow = value : undefined;\n\t}\n\n\t/** @description undefined */\n\t@Input()\n\tget stateSettings(): GridStateSettings {\n\t\treturn this.nativeElement ? this.nativeElement.stateSettings : undefined;\n\t}\n\tset stateSettings(value: GridStateSettings) {\n\t\tthis.nativeElement ? this.nativeElement.stateSettings = value : undefined;\n\t}\n\n\t/** @description undefined */\n\t@Input()\n\tget selection(): GridSelection {\n\t\treturn this.nativeElement ? this.nativeElement.selection : undefined;\n\t}\n\tset selection(value: GridSelection) {\n\t\tthis.nativeElement ? this.nativeElement.selection = value : undefined;\n\t}\n\n\t/** @description undefined */\n\t@Input()\n\tget sorting(): GridSorting {\n\t\treturn this.nativeElement ? this.nativeElement.sorting : undefined;\n\t}\n\tset sorting(value: GridSorting) {\n\t\tthis.nativeElement ? this.nativeElement.sorting = value : undefined;\n\t}\n\n\t/** @description undefined */\n\t@Input()\n\tget users(): any[] {\n\t\treturn this.nativeElement ? this.nativeElement.users : undefined;\n\t}\n\tset users(value: any[]) {\n\t\tthis.nativeElement ? this.nativeElement.users = value : undefined;\n\t}\n\n\t/** @description undefined */\n\t@Input()\n\tget uploadSettings(): GridUploadSettings {\n\t\treturn this.nativeElement ? this.nativeElement.uploadSettings : undefined;\n\t}\n\tset uploadSettings(value: GridUploadSettings) {\n\t\tthis.nativeElement ? this.nativeElement.uploadSettings = value : undefined;\n\t}\n\n\t/** @description undefined */\n\t@Input()\n\tget view(): string {\n\t\treturn this.nativeElement ? this.nativeElement.view : undefined;\n\t}\n\tset view(value: string) {\n\t\tthis.nativeElement ? this.nativeElement.view = value : undefined;\n\t}\n\n\t/** @description This event is fired when a cell transitions into edit mode. Within the event handler, you can prevent the editing action for specific cells, rows, or columns by invoking event.preventDefault(). This allows you to control which cells are editable based on custom logic or application requirements.\n\t*  @param event. The custom event. \tCustom event was created with: event.detail(\tid, \tdataField, \trow, \tcolumn, \tcell, \tdata, \tvalue)\n\t*   id - The unique identifier of the edited row.\n\t*   dataField - The data field (column) associated with the edited cell.\n\t*   row - The edited row's full configuration object.\n\t*   column - The column configuration of the edited cell.\n\t*   cell - The edited cell object.\n\t*   data - The complete data record of the edited row.\n\t*   value - The current value of the edited cell.\n\t*/\n\t@Output() onBeginEdit: EventEmitter<CustomEvent> = new EventEmitter();\n\n\t/** @description Triggered when a user confirms a batch action by clicking the 'OK' button in a Grid header dropdown. Typical actions include column customization, applying sorting, or setting filters. This event signifies that the changes selected in the dropdown have been finalized and applied to the Grid.\n\t*  @param event. The custom event. \tCustom event was created with: event.detail(\ttype)\n\t*   type - The type of dropdown where the batch change occurred. Possible values: 'filter', 'sort', 'search', 'group', 'format', 'customize'.\n\t*/\n\t@Output() onBatchChange: EventEmitter<CustomEvent> = new EventEmitter();\n\n\t/** @description Triggered when a user clicks the 'Cancel' button in the header dropdown of a Grid, thereby aborting an ongoing batch operation. This event allows you to handle cleanup or UI updates when a batch process is intentionally stopped before completion.\n\t*  @param event. The custom event. \tCustom event was created with: event.detail(\ttype)\n\t*   type - The type of dropdown where the cancellation occurred. Possible values: 'filter', 'sort', 'search', 'group', 'format', 'customize'.\n\t*/\n\t@Output() onBatchCancel: EventEmitter<CustomEvent> = new EventEmitter();\n\n\t/** @description Fires whenever the selection within the Grid changes. During drag selection, this event is emitted both at the beginning of the drag operation and again when the selection is completed, allowing you to respond to both initiation and completion of drag-based selection changes.\n\t*  @param event. The custom event. \tCustom event was created with: event.detail(\tstarted, \tfinished, \toriginalEvent)\n\t*   started - Set to <em>true</em> when selection begins; <em>false</em> otherwise.\n\t*   finished - Set to <em>true</em> when selection ends; <em>false</em> otherwise.\n\t*   originalEvent - The native DOM event (pointer, touch, or mouse) that triggered the selection change.\n\t*/\n\t@Output() onChange: EventEmitter<CustomEvent> = new EventEmitter();\n\n\t/** @description Triggered when the user clicks on a column header in a table or grid, typically to initiate actions such as sorting, filtering, or displaying additional options related to that column. This event provides context about which column was interacted with, allowing developers to implement responsive behaviors based on user actions.\n\t*  @param event. The custom event. \tCustom event was created with: event.detail(\tcolumn, \tdataField, \toriginalEvent)\n\t*   column - The column configuration object of the clicked header.\n\t*   dataField - The data field associated with the clicked column.\n\t*   originalEvent - The native DOM event (pointer, touch, or mouse) that triggered the click.\n\t*/\n\t@Output() onColumnClick: EventEmitter<CustomEvent> = new EventEmitter();\n\n\t/** @description Fires when a user double-clicks on a column header, typically to initiate actions such as resizing, sorting, or customizing the corresponding column. The event provides information about the specific column that was interacted with, allowing you to implement custom logic in response to the double-click.\n\t*  @param event. The custom event. \tCustom event was created with: event.detail(\tcolumn, \tdataField, \toriginalEvent)\n\t*   column - The column configuration object of the double-clicked header.\n\t*   dataField - The data field associated with the double-clicked column.\n\t*   originalEvent - The native DOM event (pointer, touch, or mouse) that triggered the double-click.\n\t*/\n\t@Output() onColumnDoubleClick: EventEmitter<CustomEvent> = new EventEmitter();\n\n\t/** @description Triggered when the user adjusts the width of a column by dragging the boundary line in the column header. This event fires continuously as the header boundary is moved, allowing real-time updates to the column size.\n\t*  @param event. The custom event. \tCustom event was created with: event.detail(\tcolumn, \tdataField, \toldWidth, \twidth)\n\t*   column - The resized column's configuration object.\n\t*   dataField - The data field associated with the resized column.\n\t*   oldWidth - The previous width of the column.\n\t*   width - The new width of the column after resizing.\n\t*/\n\t@Output() onColumnResize: EventEmitter<CustomEvent> = new EventEmitter();\n\n\t/** @description Fires when the user begins dragging a column to change its position within the column order. This event marks the start of a column reordering operation and can be used to implement visual feedback, custom logic, or to track changes in the column arrangement during a drag-and-drop interaction.\n\t*  @param event. The custom event. \tCustom event was created with: event.detail(\tcolumn, \tdataField, \tindex, \toriginalEvent)\n\t*   column - The configuration object of the column being dragged.\n\t*   dataField - The data field associated with the column being dragged.\n\t*   index - The index of the column within the grid.\n\t*   originalEvent - The native DOM event that initiated the column drag.\n\t*/\n\t@Output() onColumnDragStart: EventEmitter<CustomEvent> = new EventEmitter();\n\n\t/** @description Triggered whenever a property of a column is modified, either through user interaction (such as editing in the UI) or by programmatic changes made via code. This event allows you to respond to any updates in column properties, regardless of how the change was initiated.\n\t*  @param event. The custom event. \tCustom event was created with: event.detail(\tcolumn, \tpropertyName, \toldValue, \tvalue)\n\t*   column - The column whose property was changed.\n\t*   propertyName - The name of the property that was changed.\n\t*   oldValue - The previous value(s) of the changed property.\n\t*   value - The new value(s) of the changed property.\n\t*/\n\t@Output() onColumnChange: EventEmitter<CustomEvent> = new EventEmitter();\n\n\t/** @description This event is fired repeatedly for as long as the user is actively dragging a column. It provides real-time updates during the entire drag operation, allowing you to implement responsive behaviors or visual feedback as the column is being repositioned.\n\t*  @param event. The custom event. \tCustom event was created with: event.detail(\tcolumn, \tdataField, \tindex, \tdata, \toriginalEvent)\n\t*   column - The column being dragged.\n\t*   dataField - The data field of the dragged column.\n\t*   index - The current index of the dragged column.\n\t*   data - An object providing drag feedback. Contains HTML elements 'feedback' and 'feedbackLine' shown during dragging, and methods 'error()', 'success()', and 'data()' for managing feedback state.\n\t*   originalEvent - The original browser event that triggered the dragging.\n\t*/\n\t@Output() onColumnDragging: EventEmitter<CustomEvent> = new EventEmitter();\n\n\t/** @description Triggered when the user releases the mouse button to drop a column after dragging it, indicating the end of a column drag-and-drop operation. This event can be used to update the column order or perform actions based on the new column arrangement.\n\t*  @param event. The custom event. \tCustom event was created with: event.detail(\tcolumn, \tdataField, \tindex, \tnewIndex, \tdata, \toriginalEvent)\n\t*   column - The column that was dragged.\n\t*   dataField - The data field of the dragged column.\n\t*   index - The original index of the column before dragging.\n\t*   newIndex - The new index of the column after dragging.\n\t*   data - An object providing drag feedback. Contains HTML elements 'feedback' and 'feedbackLine' shown during dragging, and methods 'error()', 'success()', and 'data()' for managing feedback state.\n\t*   originalEvent - The original browser event that finalized the dragging.\n\t*/\n\t@Output() onColumnDragEnd: EventEmitter<CustomEvent> = new EventEmitter();\n\n\t/** @description Fires when the user changes the order of columns by dragging and repositioning a column within the interface. This event occurs after the column has been successfully moved to its new position.\n\t*  @param event. The custom event. \tCustom event was created with: event.detail(\tcolumn, \tdataField, \tindex, \tnewIndex, \tdata, \toriginalEvent)\n\t*   column - The reordered column.\n\t*   dataField - The data field of the reordered column.\n\t*   index - The column's previous index before reorder.\n\t*   newIndex - The column's new index after reorder.\n\t*   data - An object providing drag feedback. Contains HTML elements 'feedback' and 'feedbackLine' shown during dragging, and methods 'error()', 'success()', and 'data()' for managing feedback state.\n\t*   originalEvent - The original browser event associated with the reorder.\n\t*/\n\t@Output() onColumnReorder: EventEmitter<CustomEvent> = new EventEmitter();\n\n\t/** @description Triggered when a user submits a new comment within the row edit dialog, typically as part of editing or updating a row's information. This event provides the context of the edited row and the content of the newly added comment, allowing for real-time updates or further processing.\n\t*  @param event. The custom event. \tCustom event was created with: event.detail(\tid, \tcomment)\n\t*   id - The unique ID of the row where the comment was added.\n\t*   comment - The comment object containing: 'text' (string) - the comment text, 'id' (string) - unique comment ID, 'userId' (string | number) - ID of the user who added the comment, and 'time' (Date) - timestamp of the comment.\n\t*/\n\t@Output() onCommentAdd: EventEmitter<CustomEvent> = new EventEmitter();\n\n\t/** @description Triggered when a user deletes or removes a comment while editing a row using the row edit dialog. This event occurs after the comment has been removed from the input field within the dialog, allowing you to handle any additional logic, such as updating the UI, saving changes, or notifying other components.\n\t*  @param event. The custom event. \tCustom event was created with: event.detail(\tid, \tcomment)\n\t*   id - The unique ID of the row from which the comment was removed.\n\t*   comment - The comment object containing: 'text' (string) - the comment text, 'id' (string) - unique comment ID, 'userId' (string | number) - ID of the user who added the comment, and 'time' (Date) - timestamp of the comment.\n\t*/\n\t@Output() onCommentRemove: EventEmitter<CustomEvent> = new EventEmitter();\n\n\t/** @description Occurs when a user selects (clicks) an item from the context menu, typically accessed via right-click or long-press. This event enables developers to handle specific actions in response to the user's menu item selection.\n\t*  @param event. The custom event. \tCustom event was created with: event.detail(\tid, \tdataField, \tcommand)\n\t*   id - The unique ID of the row associated with the context menu item.\n\t*   dataField - The data field of the clicked context menu item.\n\t*   command - The command object representing the action associated with the clicked menu item.\n\t*/\n\t@Output() onContextMenuItemClick: EventEmitter<CustomEvent> = new EventEmitter();\n\n\t/** @description Triggered when the user begins dragging a table row, typically by clicking and holding on the row before moving it. This event signals the start of a drag-and-drop operation for reordering or repositioning rows within the table.\n\t*  @param event. The custom event. \tCustom event was created with: event.detail(\trow, \tid, \tindex, \toriginalEvent)\n\t*   row - The row being dragged.\n\t*   id - The unique ID of the row being dragged.\n\t*   index - The index of the row within the grid.\n\t*   originalEvent - The original browser event that initiated the row drag.\n\t*/\n\t@Output() onRowDragStart: EventEmitter<CustomEvent> = new EventEmitter();\n\n\t/** @description This event is triggered repeatedly in real-time as the user drags a row, firing continuously throughout the entire duration of the dragging action.\n\t*  @param event. The custom event. \tCustom event was created with: event.detail(\trow, \tid, \tindex, \tdata, \toriginalEvent)\n\t*   row - The row currently being dragged.\n\t*   id - The unique ID of the dragged row.\n\t*   index - The index of the row being dragged.\n\t*   data - An object providing drag feedback. Contains HTML elements 'feedback' and 'feedbackLine' shown during dragging, and methods 'error()', 'success()', and 'data()' for managing feedback state.\n\t*   originalEvent - The original browser event that triggered the dragging.\n\t*/\n\t@Output() onRowDragging: EventEmitter<CustomEvent> = new EventEmitter();\n\n\t/** @description This event is triggered upon completion of a row drag operation, regardless of whether the row’s position within the list was changed. It indicates the end of the drag interaction, and can be used to perform additional actions or cleanup tasks after users have finished dragging a row.\n\t*  @param event. The custom event. \tCustom event was created with: event.detail(\trow, \tid, \tindex, \tnewIndex, \tdata, \toriginalEvent)\n\t*   row - The dragged row object.\n\t*   id - The unique identifier of the dragged row.\n\t*   index - The original index of the row before dragging.\n\t*   newIndex - The new index of the row after dragging.\n\t*   data - The dragging feedback object containing HTML elements displayed during the drag operation. Includes `feedback` and `feedbackLine` elements, and methods `error()`, `success()`, and `data()` to set or retrieve the drag state and data.\n\t*   originalEvent - The original pointer, touch, or mouse event that triggered the drag.\n\t*/\n\t@Output() onRowDragEnd: EventEmitter<CustomEvent> = new EventEmitter();\n\n\t/** @description Triggered when a row has been successfully moved to a new position within the grid, indicating that the row reordering operation is complete and the grid's data order has been updated accordingly.\n\t*  @param event. The custom event. \tCustom event was created with: event.detail(\trow, \tid, \tindex, \tnewIndex, \tdata, \toriginalEvent)\n\t*   row - The reordered row object.\n\t*   id - The unique identifier of the reordered row.\n\t*   index - The original index of the row before reordering.\n\t*   newIndex - The new index of the row after reordering.\n\t*   data - The dragging feedback object containing HTML elements displayed during the reorder operation. Includes `feedback` and `feedbackLine` elements, and methods `error()`, `success()`, and `data()` to set or retrieve the drag state and data.\n\t*   originalEvent - The original pointer, touch, or mouse event that triggered the reorder.\n\t*/\n\t@Output() onRowReorder: EventEmitter<CustomEvent> = new EventEmitter();\n\n\t/** @description This event is triggered when a user expands a row in either TreeGrid or Grouping mode, causing the hidden child rows or grouped data associated with that row to be displayed. It allows you to respond when hierarchical data or grouped content is revealed within the grid.\n\t*  @param event. The custom event. \tCustom event was created with: event.detail(\trow, \tid, \toriginalEvent)\n\t*   row - The expanded row object.\n\t*   id - The unique identifier of the expanded row.\n\t*   originalEvent - The original pointer, touch, or mouse event that caused the expansion.\n\t*/\n\t@Output() onRowExpand: EventEmitter<CustomEvent> = new EventEmitter();\n\n\t/** @description Triggered when a row is collapsed in TreeGrid or Grouping mode, causing any nested child rows or grouped content under that row to be hidden from view. This event allows you to respond when users collapse a parent row, such as updating UI elements or loading data dynamically.\n\t*  @param event. The custom event. \tCustom event was created with: event.detail(\trow, \tid, \toriginalEvent)\n\t*   row - The collapsed row object.\n\t*   id - The unique identifier of the collapsed row.\n\t*   originalEvent - The original pointer, touch, or mouse event that caused the collapse.\n\t*/\n\t@Output() onRowCollapse: EventEmitter<CustomEvent> = new EventEmitter();\n\n\t/** @description Triggered when a user clicks anywhere within a table row, allowing you to respond to row selection events, such as highlighting the row, displaying detailed information, or performing related actions.\n\t*  @param event. The custom event. \tCustom event was created with: event.detail(\trow, \toriginalEvent, \tid, \tdata, \tisRightClick, \tpageX, \tpageY)\n\t*   row - The clicked row object.\n\t*   originalEvent - The original pointer, touch, or mouse event for the click.\n\t*   id - The unique identifier of the clicked row.\n\t*   data - The data object associated with the clicked row.\n\t*   isRightClick - Indicates whether the right mouse button was used for the click.\n\t*   pageX - The X-coordinate of the click relative to the page.\n\t*   pageY - The Y-coordinate of the click relative to the page.\n\t*/\n\t@Output() onRowClick: EventEmitter<CustomEvent> = new EventEmitter();\n\n\t/** @description This event is triggered when a user rapidly double-clicks on any row within the data grid or table. It can be used to initiate actions such as opening a detailed view, activating edit mode, or performing custom operations related to the selected row. The event handler receives contextual information about the clicked row, allowing for targeted interactions.\n\t*  @param event. The custom event. \tCustom event was created with: event.detail(\trow, \toriginalEvent, \tid, \tdata, \tisRightClick, \tpageX, \tpageY)\n\t*   row - The double-clicked row object.\n\t*   originalEvent - The original pointer, touch, or mouse event for the double-click.\n\t*   id - The unique identifier of the double-clicked row.\n\t*   data - The data object associated with the double-clicked row.\n\t*   isRightClick - Indicates whether the right mouse button was used for the double-click.\n\t*   pageX - The X-coordinate of the double-click relative to the page.\n\t*   pageY - The Y-coordinate of the double-click relative to the page.\n\t*/\n\t@Output() onRowDoubleClick: EventEmitter<CustomEvent> = new EventEmitter();\n\n\t/** @description Triggered when the user manually adjusts the height of a table row, such as by dragging the row's resize handle. This event allows you to respond to row height changes, for example, by updating layout or saving the new row height.\n\t*  @param event. The custom event. \tCustom event was created with: event.detail(\trow, \tid, \toldHeight, \theight)\n\t*   row - The resized row object.\n\t*   id - The unique identifier of the resized row.\n\t*   oldHeight - The height of the row before resizing.\n\t*   height - The new height of the row after resizing.\n\t*/\n\t@Output() onRowResize: EventEmitter<CustomEvent> = new EventEmitter();\n\n\t/** @description Triggered when the user clicks the star icon located in a row header, toggling the starred (favorite) status of the corresponding row. This event allows you to handle actions such as marking or unmarking the row as a favorite in response to user interaction.\n\t*  @param event. The custom event. \tCustom event was created with: event.detail(\trow, \toriginalEvent, \tid, \tvalue)\n\t*   row - The row associated with the star toggle.\n\t*   originalEvent - The original pointer, touch, or mouse event for the star click.\n\t*   id - The unique identifier of the starred row.\n\t*   value - Boolean indicating whether the row is now starred (`true`) or unstarred (`false`).\n\t*/\n\t@Output() onRowStarred: EventEmitter<CustomEvent> = new EventEmitter();\n\n\t/** @description Fires when a user clicks on any individual cell within the grid, providing information about the selected cell’s row, column, and associated data. This event enables you to implement custom actions in response to cell clicks, such as editing cell content, displaying detailed information, or triggering other interactive features.\n\t*  @param event. The custom event. \tCustom event was created with: event.detail(\tcell, \toriginalEvent, \tid, \tdataField, \tvalue, \tisRightClick, \tpageX, \tpageY)\n\t*   cell - The clicked cell object.\n\t*   originalEvent - The original pointer, touch, or mouse event for the click.\n\t*   id - The unique identifier of the row containing the clicked cell.\n\t*   dataField - The data field (column identifier) of the clicked cell.\n\t*   value - The value of the clicked cell.\n\t*   isRightClick - Indicates whether the right mouse button was used for the click.\n\t*   pageX - The X-coordinate of the click relative to the page.\n\t*   pageY - The Y-coordinate of the click relative to the page.\n\t*/\n\t@Output() onCellClick: EventEmitter<CustomEvent> = new EventEmitter();\n\n\t/** @description Fires when a user rapidly double-clicks on any cell within the grid, allowing you to handle actions such as entering edit mode, displaying detailed information, or executing custom logic specific to the selected cell.\n\t*  @param event. The custom event. \tCustom event was created with: event.detail(\tcell, \toriginalEvent, \tid, \tdataField, \tvalue, \tisRightClick, \tpageX, \tpageY)\n\t*   cell - The double-clicked cell object.\n\t*   originalEvent - The original pointer, touch, or mouse event for the double-click.\n\t*   id - The unique identifier of the row containing the double-clicked cell.\n\t*   dataField - The data field (column identifier) of the double-clicked cell.\n\t*   value - The value of the double-clicked cell.\n\t*   isRightClick - Indicates whether the right mouse button was used for the double-click.\n\t*   pageX - The X-coordinate of the double-click relative to the page.\n\t*   pageY - The Y-coordinate of the double-click relative to the page.\n\t*/\n\t@Output() onCellDoubleClick: EventEmitter<CustomEvent> = new EventEmitter();\n\n\t/** @description Triggered when a user completes editing a cell or an entire row. This event supplies comprehensive information about the edit operation, including the updated values, the specific cells or rows affected, and any changes made by the user. It enables developers to capture and respond to user edits with detailed context.\n\t*  @param event. The custom event. \tCustom event was created with: event.detail(\tid, \tdataField, \trow, \tcolumn, \tcell, \tdata, \tvalue)\n\t*   id - The unique identifier of the row that was edited. This helps to locate the specific row within the grid.\n\t*   dataField - The data field key (column identifier) of the cell that was edited.\n\t*   row - The full row object that contains the edited cell, representing the row's current state after editing.\n\t*   column - The column object corresponding to the edited cell, including its metadata and configuration.\n\t*   cell - The specific cell object that was edited, providing granular access to the edited cell's properties.\n\t*   data - An object representing the entire data record of the edited row, reflecting all current values post-edit.\n\t*   value - The new value entered by the user in the edited cell.\n\t*/\n\t@Output() onEndEdit: EventEmitter<CustomEvent> = new EventEmitter();\n\n\t/** @description This event is triggered whenever filters within the grid are added, updated, or removed. It allows developers to monitor and respond to any changes in the grid’s filtering criteria. By handling this event, you can implement custom logic—such as updating UI elements, fetching new data, or logging filter modifications—whenever the user changes how data is filtered in the grid.\n\t*  @param event. The custom event. \tCustom event was created with: event.detail(\tcolumns, \tdata, \texpressions)\n\t*   columns - An array of column objects currently involved in filtering, providing access to each filtered column’s properties.\n\t*   data - An array of objects each containing a column’s data field and its associated FilterGroup object. The FilterGroup describes the filter conditions applied to that column. Example: { dataField: string, filter: object }.\n\t*   expressions - An array of filter expression objects, each with a column’s data field and a human-readable filter expression string. These expressions define the applied filters, e.g., 'startsWith B' or complex logical expressions like 'contains Andrew or contains Nancy'. Supported operators include '=', 'EQUAL', '<>', 'NOT_EQUAL', '!=', '<', 'LESS_THAN', '>', 'GREATER_THAN', '<=', 'LESS_THAN_OR_EQUAL', '>=', 'GREATER_THAN_OR_EQUAL', 'starts with', 'STARTS_WITH', 'ends with', 'ENDS_WITH', 'EMPTY', 'CONTAINS', 'DOES_NOT_CONTAIN', 'NULL', and 'NOT_NULL'.\n\t*/\n\t@Output() onFilter: EventEmitter<CustomEvent> = new EventEmitter();\n\n\t/** @description Triggered whenever the grid's grouping configuration is modified—for example, when columns are added to or removed from the grouped columns. This event allows you to respond to user actions that change how data is grouped in the grid.\n\t*  @param event. The custom event. \tCustom event was created with: event.detail(\tgroups)\n\t*   groups - An array of data fields that represent the columns currently used for grouping the grid’s rows. The order of fields reflects the grouping hierarchy.\n\t*/\n\t@Output() onGroup: EventEmitter<CustomEvent> = new EventEmitter();\n\n\t/** @description Emitted whenever the dialog interface for adding a new column or editing an existing column is displayed to the user. This event is ideal for implementing custom logic, such as pre-filling form fields, dynamically modifying dialog content, or applying additional UI enhancements when the column dialog becomes visible.\n\t*  @param event. The custom event. \tCustom event was created with: event.detail(\tdataField)\n\t*   dataField - The data field of the column currently being added or edited via the dialog.\n\t*/\n\t@Output() onOpenColumnDialog: EventEmitter<CustomEvent> = new EventEmitter();\n\n\t/** @description Fires when the column addition or editing dialog is closed, regardless of whether the user saves their changes or cancels the operation. This event allows developers to perform actions after the dialog is dismissed, such as updating the UI or resetting form states.\n\t*  @param event. The custom event. \tCustom event was created with: event.detail(\tdataField)\n\t*   dataField - The data field of the column involved in the dialog that was just closed.\n\t*/\n\t@Output() onCloseColumnDialog: EventEmitter<CustomEvent> = new EventEmitter();\n\n\t/** @description Triggered whenever the grid’s dimensions are altered, either through user-initiated resizing or programmatic changes to the layout. This event enables developers to implement responsive UI updates, such as repositioning elements or recalculating layout parameters to ensure optimal display across different screen sizes and interactions.\n\t*  @param event. The custom event. \t*/\n\t@Output() onResize: EventEmitter<CustomEvent> = new EventEmitter();\n\n\t/** @description Triggered when a user performs a press-and-hold gesture on a grid row, maintaining contact for at least 300 milliseconds. This event is commonly used to open context menus or initiate specialized touch-based interactions, enhancing the user experience on touch-enabled devices.\n\t*  @param event. The custom event. \tCustom event was created with: event.detail(\trow, \toriginalEvent)\n\t*   row - The row object that was tapped and held.\n\t*   originalEvent - The original input event object ('pointer', 'touch', or 'mouse'), which provides device-specific details.\n\t*/\n\t@Output() onRowTap: EventEmitter<CustomEvent> = new EventEmitter();\n\n\t/** @description Triggered when a user performs a press-and-hold gesture—touching and continuously holding a specific cell in the grid for at least 300 milliseconds. This event enables advanced touch interactions, such as displaying context menus, initiating drag-and-drop, or activating additional cell options. It is designed to distinguish intentional long presses from casual taps, ensuring a responsive and intuitive touch interface.\n\t*  @param event. The custom event. \tCustom event was created with: event.detail(\tcell, \toriginalEvent)\n\t*   cell - The cell object that was tapped and held.\n\t*   originalEvent - The original input event object ('pointer', 'touch', or 'mouse') providing context about the interaction.\n\t*/\n\t@Output() onCellTap: EventEmitter<CustomEvent> = new EventEmitter();\n\n\t/** @description Triggered whenever the user switches pages using the grid’s pagination controls. This event allows you to detect and respond to page changes, such as updating data, fetching new records, or performing additional actions whenever a different page is selected.\n\t*  @param event. The custom event. \t*/\n\t@Output() onPage: EventEmitter<CustomEvent> = new EventEmitter();\n\n\t/** @description Triggered whenever columns are added to, removed from, or reordered within the grid’s sorting configuration. This event enables developers to monitor changes in the sorting criteria, update the sorting state, and track the current sort order and priority of columns in the grid.\n\t*  @param event. The custom event. \tCustom event was created with: event.detail(\tcolumns, \tdata, \tsortDataFields, \tsortDataTypes, \tsortOrders, \tsortIndexes)\n\t*   columns - An array of column objects currently sorted, including their configurations and properties.\n\t*   data - An array of objects describing each sorted column with its data field, sorting order ('asc' or 'desc'), and priority index indicating sorting precedence in multi-column sorts.\n\t*   sortDataFields - An array of the data fields of all currently sorted columns.\n\t*   sortDataTypes - An array of data types ('string', 'date', 'boolean', or 'number') corresponding to the sorted columns.\n\t*   sortOrders - An array of sorting directions ('asc' or 'desc') applied to the sorted columns.\n\t*   sortIndexes - An array of integers representing the sorting priority for each column in cases of multi-column sorting, where lower index means higher priority.\n\t*/\n\t@Output() onSort: EventEmitter<CustomEvent> = new EventEmitter();\n\n\t/** @description Triggered when the user scrolls to the absolute bottom of the grid component. This event is typically used to implement infinite scrolling or lazy loading by allowing you to detect when additional data needs to be loaded as the user reaches the end of the currently displayed content.\n\t*  @param event. The custom event. \t*/\n\t@Output() onScrollBottomReached: EventEmitter<CustomEvent> = new EventEmitter();\n\n\t/** @description Triggered when the user scrolls to the very top edge of the grid. This event allows you to perform actions such as refreshing the grid's contents, loading previous or additional data, or updating UI elements in response to the scroll position. Use this event to enhance data loading and user experience when users reach the beginning of the grid.\n\t*  @param event. The custom event. \t*/\n\t@Output() onScrollTopReached: EventEmitter<CustomEvent> = new EventEmitter();\n\n\t/** @description Inserts a new row into the grid interface. When batch editing mode is enabled, the new row exists only temporarily within the current batch session and will not be permanently stored until the user explicitly saves all changes made during the session. If the batch edit session is discarded, the newly added row will not be saved. \n\t* @param {any} data. An object representing the row data, matching the structure of the grid's data source.\n\t* @param {boolean} insertAtBottom?. Determines whether the new row is added at the bottom (true) or top (false) of the grid. Defaults to true.\n\t* @param {{(row: GridRow): void}} callback?. A callback function invoked after the row is successfully added. Receives the newly added row as an argument.\n\t* @returns {any}\n  */\n\tpublic async addRow(data, insertAtBottom?, callback?): Promise<any> {\n\t\tconst getResultOnRender = () => {\n            return new Promise(resolve => {\n                this.nativeElement.whenRendered(() => {\n                    const result = this.nativeElement.addRow(data, insertAtBottom, callback);\n                    resolve(result)\n                });\n            });\n        };\n        const result = await getResultOnRender();\n\n        return result;\n    }\n\n\tpublic addRowSync(data, insertAtBottom?, callback?): any {\n        if (this.nativeElement.isRendered) {\n \t       return this.nativeElement.addRow(data, insertAtBottom, callback);\n        }\n        return null;\n    }\n\n\t/** @description Inserts a new row into the grid and automatically activates edit mode for that row, allowing users to begin entering data right away. If batch editing is enabled, any changes made will be temporarily stored and will not be saved to the data source until the batch edit session is explicitly committed. This helps prevent partial or unsaved changes from being applied before the user finalizes all edits in the session. \n\t* @param {string} position?. Specifies the position where the new row will be added. Acceptable values are 'near' (top) or 'far' (bottom).\n\t* @returns {boolean}\n  */\n\tpublic async addNewRow(position?): Promise<any> {\n\t\tconst getResultOnRender = () => {\n            return new Promise(resolve => {\n                this.nativeElement.whenRendered(() => {\n                    const result = this.nativeElement.addNewRow(position);\n                    resolve(result)\n                });\n            });\n        };\n        const result = await getResultOnRender();\n\n        return result;\n    }\n\n\tpublic addNewRowSync(position?): boolean {\n        if (this.nativeElement.isRendered) {\n \t       return this.nativeElement.addNewRow(position);\n        }\n        return null;\n    }\n\n\t/** @description Dynamically adds a new column to the grid at runtime, allowing users to modify the grid’s structure without requiring a page reload. This enables real-time updates to the grid layout based on user actions or application logic. \n\t* @param {any} column. A column definition or array of columns to add. Refer to the grid's 'columns' property for the expected structure.\n\t* @returns {boolean}\n  */\n\tpublic async addNewColumn(column): Promise<any> {\n\t\tconst getResultOnRender = () => {\n            return new Promise(resolve => {\n                this.nativeElement.whenRendered(() => {\n                    const result = this.nativeElement.addNewColumn(column);\n                    resolve(result)\n                });\n            });\n        };\n        const result = await getResultOnRender();\n\n        return result;\n    }\n\n\tpublic addNewColumnSync(column): boolean {\n        if (this.nativeElement.isRendered) {\n \t       return this.nativeElement.addNewColumn(column);\n        }\n        return null;\n    }\n\n\t/** @description Adds one or more unbound rows to the grid, positioned at either the top or the bottom, as specified. Unbound rows are not initially included in the grid’s data source; instead, they serve as editable placeholders. Once a user enters or modifies data in these rows, the new values are incorporated into the grid’s data source, making the unbound rows part of the main dataset. This feature is useful for allowing users to quickly add new entries or perform custom calculations directly within the grid interface. \n\t* @param {number} count. The number of unbound rows to add.\n\t* @param {string} position?. The position to insert the unbound rows. Accepts 'near' for top or 'far' for bottom.\n\t* @returns {boolean}\n  */\n\tpublic async addUnboundRow(count, position?): Promise<any> {\n\t\tconst getResultOnRender = () => {\n            return new Promise(resolve => {\n                this.nativeElement.whenRendered(() => {\n                    const result = this.nativeElement.addUnboundRow(count, position);\n                    resolve(result)\n                });\n            });\n        };\n        const result = await getResultOnRender();\n\n        return result;\n    }\n\n\tpublic addUnboundRowSync(count, position?): boolean {\n        if (this.nativeElement.isRendered) {\n \t       return this.nativeElement.addUnboundRow(count, position);\n        }\n        return null;\n    }\n\n\t/** @description Enhances and applies custom filter criteria to a specific column within the data grid. Accepts both single and multiple filter expressions, allowing for complex filtering logic using logical operators such as \"and\" and \"or\". For example, to filter the \"lastName\" column for values that contain either \"burke\" or \"peterson\", use: `grid.addFilter('lastName', ['CONTAINS \"burke\"', 'or', 'CONTAINS \"peterson\"'])`. The method also supports numeric filters (e.g., `GREATER_THAN 100`), a variety of comparison operators (such as `EQUALS`, `LESS_THAN`, `STARTS_WITH`, etc.), and can be used to combine different conditions for precise data selection. \n\t* @param {string} dataField. The data field name of the column to filter, e.g., 'firstName'.\n\t* @param {string} filter. The filter expression(s) to apply. Examples include 'startsWith B', ['contains Andrew or contains Nancy'], or ['quantity', '<= 3 and >= 8']. Supported operators: '=', 'EQUAL', '<>', 'NOT_EQUAL', '!=', '<', 'LESS_THAN', '>', 'GREATER_THAN', '<=', 'LESS_THAN_OR_EQUAL', '>=', 'GREATER_THAN_OR_EQUAL', 'starts with', 'STARTS_WITH', 'ends with', 'ENDS_WITH', '', 'EMPTY', 'CONTAINS', 'DOES_NOT_CONTAIN', 'NULL', 'NOT_NULL'.\n\t* @param {boolean} refreshFilters?. If set to false, allows multiple filters to be added without triggering unnecessary renders. Useful when applying multiple filters sequentially.\n\t*/\n    public addFilter(dataField: string, filter: string, refreshFilters?: boolean): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.addFilter(dataField, filter, refreshFilters);\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.addFilter(dataField, filter, refreshFilters);\n            });\n        }\n    }\n\n\t/** @description Organizes the grid rows into groups based on the values in the specified column's data field. This functionality requires that grouping is enabled on the grid component. When activated, rows sharing the same value in the chosen column will be visually grouped together, allowing for easier data analysis and navigation. \n\t* @param {string} dataField. The data field of the column to group by, e.g., 'firstName'.\n\t*/\n    public addGroup(dataField: string): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.addGroup(dataField);\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.addGroup(dataField);\n            });\n        }\n    }\n\n\t/** @description Enhances the grid's data display by applying a sorting order based on the specified column's data field. This function requires sorting to be enabled on the grid and sorts the rows according to the selected column's values, either in ascending or descending order as specified. If sorting is not enabled, this operation will have no effect. \n\t* @param {string} dataField. The data field of the column to sort, e.g., 'firstName'.\n\t* @param {string} sortOrder. The sort direction to apply. Use 'asc' for ascending or 'desc' for descending.\n\t*/\n    public addSort(dataField: string, sortOrder: string): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.addSort(dataField, sortOrder);\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.addSort(dataField, sortOrder);\n            });\n        }\n    }\n\n\t/** @description Dynamically resizes each grid row to fit its content, ensuring that text and elements are fully visible without being cut off or overlapping. This enhances readability and provides a more user-friendly and visually consistent grid layout. \n\t*/\n    public autoSizeRows(): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.autoSizeRows();\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.autoSizeRows();\n            });\n        }\n    }\n\n\t/** @description Dynamically resizes the width of each grid column based on its content and header label, so that all cell values and headers are fully visible without clipping or excessive whitespace. This ensures an optimal and polished display by automatically fitting columns to their widest required size. \n\t*/\n    public autoSizeColumns(): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.autoSizeColumns();\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.autoSizeColumns();\n            });\n        }\n    }\n\n\t/** @description Automatically resizes an individual grid column to precisely fit its content by dynamically measuring the widest content among its cells and header label, and adjusting the column width accordingly for optimal display without unnecessary extra space or truncation. \n\t* @param {string} dataField?. The data field name of the column to auto-size, e.g., 'firstName'. Optional; if omitted, no action is taken.\n\t*/\n    public autoSizeColumn(dataField?: string): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.autoSizeColumn(dataField);\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.autoSizeColumn(dataField);\n            });\n        }\n    }\n\n\t/** @description Returns a boolean value that indicates whether every row in the grid is currently selected. This means the method will return true only if all rows within the grid have been selected; otherwise, it returns false. \n\t* @returns {boolean}\n  */\n\tpublic async areAllRowsSelected(): Promise<any> {\n\t\tconst getResultOnRender = () => {\n            return new Promise(resolve => {\n                this.nativeElement.whenRendered(() => {\n                    const result = this.nativeElement.areAllRowsSelected();\n                    resolve(result)\n                });\n            });\n        };\n        const result = await getResultOnRender();\n\n        return result;\n    }\n\n\tpublic areAllRowsSelectedSync(): boolean {\n        if (this.nativeElement.isRendered) {\n \t       return this.nativeElement.areAllRowsSelected();\n        }\n        return null;\n    }\n\n\t/** @description Pauses Grid rendering and UI refresh operations, allowing you to make multiple property changes or method calls without triggering repeated re-renders. This is particularly useful for optimizing performance during batch updates. After you finish making all necessary changes, call 'endUpdate()' to resume rendering and apply all updates to the UI. \n\t*/\n    public beginUpdate(): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.beginUpdate();\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.beginUpdate();\n            });\n        }\n    }\n\n\t/** @description Initiates edit mode on a specified row, cell, or column within the grid programmatically. Triggers the appropriate editor component to appear in the Grid UI, allowing users to modify the data directly within the selected grid area. \n\t* @param {string | number} rowId. The unique identifier of the row to edit.\n\t* @param {string} dataField?. The column's data field to edit. Optional for full row editing.\n\t*/\n    public beginEdit(rowId: string | number, dataField?: string): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.beginEdit(rowId, dataField);\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.beginEdit(rowId, dataField);\n            });\n        }\n    }\n\n\t/** @description Removes all active filters from the Grid, restoring the original unfiltered data view. After clearing the filters, the Grid data is automatically refreshed to display all records, and any filter input fields are reset to their default, empty state. \n\t*/\n    public clearFilter(): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.clearFilter();\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.clearFilter();\n            });\n        }\n    }\n\n\t/** @description Restores the grid to its original, ungrouped state by removing all active row groupings. All grouped rows are expanded and displayed as individual rows, and the Grid view automatically refreshes to reflect these changes. \n\t*/\n    public clearGroups(): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.clearGroups();\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.clearGroups();\n            });\n        }\n    }\n\n\t/** @description Removes all active sorting from the Grid columns, resetting them to their unsorted state and restoring the data to its original order as initially loaded or received. \n\t*/\n    public clearSort(): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.clearSort();\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.clearSort();\n            });\n        }\n    }\n\n\t/** @description Clears all current selections within the grid, including rows, cells, and columns. This action removes any visual highlights or selection indicators, ensuring that no items remain selected in the interface. \n\t*/\n    public clearSelection(): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.clearSelection();\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.clearSelection();\n            });\n        }\n    }\n\n\t/** @description Cancels the ongoing edit operation by closing any active editor interface and reverting all unsaved changes made during the current session. This action ensures that no modifications are saved and the data returns to its original state prior to editing. \n\t*/\n    public cancelEdit(): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.cancelEdit();\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.cancelEdit();\n            });\n        }\n    }\n\n\t/** @description Selects and checks the checkbox for a specified TreeGrid row, visually indicating that the row is active or selected. This action updates the row's state to reflect user selection and may trigger related event handlers or selection-dependent functionality within the TreeGrid. \n\t* @param {string | number} rowId. The unique identifier of the row to check.\n\t*/\n    public checkRow(rowId: string | number): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.checkRow(rowId);\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.checkRow(rowId);\n            });\n        }\n    }\n\n\t/** @description Selects and checks all checkboxes associated with rows in a TreeGrid or grouped data structure, ensuring that every row, including nested and grouped items, is marked as selected. This process guarantees comprehensive selection across all hierarchical levels and groupings within the dataset. \n\t*/\n    public checkAllRows(): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.checkAllRows();\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.checkAllRows();\n            });\n        }\n    }\n\n\t/** @description Removes all rows and associated data from the Grid, and clears any current user selections. After performing this action, the Grid will display a 'No Rows' message to indicate that it is empty. \n\t*/\n    public clearRows(): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.clearRows();\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.clearRows();\n            });\n        }\n    }\n\n\t/** @description Closes the currently open column menu in a data grid or table interface. This action is typically triggered by user interactions such as right-clicking on a column header or clicking a column menu button, allowing users to dismiss the column-specific options or actions menu. \n\t*/\n    public closeMenu(): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.closeMenu();\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.closeMenu();\n            });\n        }\n    }\n\n\t/** @description Collapses a designated TreeGrid or grouping row, effectively hiding all of its nested child rows from view. This action allows users to condense hierarchical data structures, making it easier to navigate and focus on higher-level information within the grid. \n\t* @param {string | number} rowId. The unique identifier of the row to collapse.\n\t*/\n    public collapseRow(rowId: string | number): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.collapseRow(rowId);\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.collapseRow(rowId);\n            });\n        }\n    }\n\n\t/** @description Collapses all currently expanded rows within the TreeGrid or Grouping components, reducing the dataset display to only show parent rows or top-level groups. This action hides all child rows and nested data, providing a simplified, minimized overview of the dataset structure. \n\t*/\n    public collapseAllRows(): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.collapseAllRows();\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.collapseAllRows();\n            });\n        }\n    }\n\n\t/** @description Generates a visual chart representation based on the current data within the Grid. Chart generation requires that the charting feature is enabled in the system configuration. This function allows users to visualize the Grid's dataset in supported chart formats. \n\t* @param {string} type. Type of chart to create (e.g., 'pie', 'bar', 'line').\n\t* @param {any} dataSource?. The data source for the chart. If omitted, the Grid's current dataset is used.\n\t*/\n    public createChart(type: string, dataSource?: any): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.createChart(type, dataSource);\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.createChart(type, dataSource);\n            });\n        }\n    }\n\n\t/** @description Removes a specific row from the Grid component. If batch editing is enabled, the row will be marked for deletion but the change will not be permanently applied until the batch is saved. This means the deletion is pending and can be reverted before saving. \n\t* @param {string | number} rowId. The unique identifier of the row to delete.\n\t* @param {{(row: GridRow): void}} callback?. Function executed after row deletion. Receives the deleted row as a parameter.\n\t*/\n    public deleteRow(rowId: string | number, callback?: {(row: GridRow): void}): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.deleteRow(rowId, callback);\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.deleteRow(rowId, callback);\n            });\n        }\n    }\n\n\t/** @description Scrolls the Grid to ensure that a specific row or cell is visible to the user. If the target row or cell is located on a different page, the Grid will automatically navigate to the appropriate page and then scroll to the desired position. This ensures that the requested row or cell is brought into view, regardless of its current visibility or page location. \n\t* @param {string | number} rowId. The unique identifier of the row.\n\t* @param {string} dataField?. The column's data field to focus on. If omitted, scrolls to the row only.\n\t* @returns {boolean}\n  */\n\tpublic async ensureVisible(rowId, dataField?): Promise<any> {\n\t\tconst getResultOnRender = () => {\n            return new Promise(resolve => {\n                this.nativeElement.whenRendered(() => {\n                    const result = this.nativeElement.ensureVisible(rowId, dataField);\n                    resolve(result)\n                });\n            });\n        };\n        const result = await getResultOnRender();\n\n        return result;\n    }\n\n\tpublic ensureVisibleSync(rowId, dataField?): boolean {\n        if (this.nativeElement.isRendered) {\n \t       return this.nativeElement.ensureVisible(rowId, dataField);\n        }\n        return null;\n    }\n\n\t/** @description Completes the editing process by applying all pending changes, saving the updated content, and closing any open editor instances. This action ensures that all modifications are confirmed and no unsaved edits remain. \n\t*/\n    public endEdit(): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.endEdit();\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.endEdit();\n            });\n        }\n    }\n\n\t/** @description Restores the Grid's normal rendering process and updates the user interface following a call to beginUpdate(). Use endUpdate() to apply any changes made during the update suspension and ensure the Grid displays the latest data and layout. \n\t* @param {boolean} refresh?. If true, forces a full Grid refresh after updates.\n\t*/\n    public endUpdate(refresh?: boolean): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.endUpdate(refresh);\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.endUpdate(refresh);\n            });\n        }\n    }\n\n\t/** @description Expands a specific row in a TreeGrid or grouped table to reveal its associated child rows. You can expand nested groups or hierarchical levels by specifying the row key using dot notation (e.g., \"0.2.1\" for the child of a nested group). This allows for precise targeting and interactive exploration of hierarchical data structures within the grid. \n\t* @param {string | number} rowId. The unique identifier of the row to expand.\n\t*/\n    public expandRow(rowId: string | number): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.expandRow(rowId);\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.expandRow(rowId);\n            });\n        }\n    }\n\n\t/** @description Expands all grouped rows in the grid up to the specified group level. For instance, executing `grid.expandRowsToGroupLevel(1);` will expand all groups at the root (level 1), making their immediate child rows visible. Groups nested within these child rows remain collapsed unless the group level parameter is increased. This function is useful for programmatically controlling the grid's row expansion state based on grouping hierarchy. \n\t* @param {number} level. The group level up to which the rows should be expanded. Level 0 is the root, level 1 is the first nested group, and so forth.\n\t*/\n    public expandRowsToGroupLevel(level: number): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.expandRowsToGroupLevel(level);\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.expandRowsToGroupLevel(level);\n            });\n        }\n    }\n\n\t/** @description Expands all rows within the grid that utilize TreeGrid or grouping functionality, automatically revealing every nested child row at all levels of hierarchy and making the complete data structure fully visible. This ensures that all parent and descendant rows are displayed, allowing users to view the entire nested dataset without manual expansion. \n\t*/\n    public expandAllRows(): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.expandAllRows();\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.expandAllRows();\n            });\n        }\n    }\n\n\t/** @description This function allows you to export the grid's data into various supported file formats, including .XLSX, .PDF, .JSON, .XML, .CSV, .TSV, .HTML, .JPEG, and .PNG. The way the data is exported—such as file formatting, included columns or rows, applied filters, and export settings—is determined by the options set in the grid’s dataExport property. This ensures that the exported file matches your specified requirements and preferences. \n\t* @param {string} Dataformat. Specifies the export format. Supported formats: 'xlsx', 'pdf', 'json', 'xml', 'csv', 'tsv', 'html', 'png', 'jpeg'.\n\t* @param {any} callback?. Optional. A function that formats the exported values conditionally. See Smart Export Documentation for details.\n\t* @param {any} dataCallback?. Optional. A function to modify the entire exported data object prior to export.\n\t*/\n    public exportData(Dataformat: string, callback?: any, dataCallback?: any): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.exportData(Dataformat, callback, dataCallback);\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.exportData(Dataformat, callback, dataCallback);\n            });\n        }\n    }\n\n\t/** @description Searches the grid for rows that match the specified query criteria and returns an array containing the IDs of all matching rows. Supports multiple search modes, including:- Searching for values in any column (global search)- Searching specific columns by name- Applying comparison operators (e.g., equals, contains, less than, greater than) for advanced filteringThis functionality allows for flexible and precise row selection based on user-defined search parameters. \n\t* @param {string} query. The search string or value to find within the grid rows.\n\t* @param {string} dataField?. Optional. Specifies the column data field to restrict the search to.\n\t* @param {string} condition?. Optional. Condition to apply for the search. Supported conditions: '=', 'EQUAL', '<>', 'NOT_EQUAL', '!=', '<', 'LESS_THAN', '>', 'GREATER_THAN', '<=', 'LESS_THAN_OR_EQUAL', '>=', 'GREATER_THAN_OR_EQUAL', 'starts with', 'STARTS_WITH', 'ends with', 'ENDS_WITH', '', 'EMPTY', 'CONTAINS', 'DOES_NOT_CONTAIN', 'NULL', 'NOT_NULL'.\n\t* @returns {any[]}\n  */\n\tpublic async find(query, dataField?, condition?): Promise<any> {\n\t\tconst getResultOnRender = () => {\n            return new Promise(resolve => {\n                this.nativeElement.whenRendered(() => {\n                    const result = this.nativeElement.find(query, dataField, condition);\n                    resolve(result)\n                });\n            });\n        };\n        const result = await getResultOnRender();\n\n        return result;\n    }\n\n\tpublic findSync(query, dataField?, condition?): any[] {\n        if (this.nativeElement.isRendered) {\n \t       return this.nativeElement.find(query, dataField, condition);\n        }\n        return null;\n    }\n\n\t/** @description Scans the grid to identify all cells that match the specified query. Returns an array of arrays, where each inner array represents a matching cell and contains the following information: the row ID, the data field (column name), and the cell's value. The query supports searching for multiple values by separating them with commas; each value will be matched independently against the cells. \n\t* @param {string} query. The search string or multiple comma-separated strings to find in grid cells.\n\t* @returns {any[]}\n  */\n\tpublic async findCells(query): Promise<any> {\n\t\tconst getResultOnRender = () => {\n            return new Promise(resolve => {\n                this.nativeElement.whenRendered(() => {\n                    const result = this.nativeElement.findCells(query);\n                    resolve(result)\n                });\n            });\n        };\n        const result = await getResultOnRender();\n\n        return result;\n    }\n\n\tpublic findCellsSync(query): any[] {\n        if (this.nativeElement.isRendered) {\n \t       return this.nativeElement.findCells(query);\n        }\n        return null;\n    }\n\n\t/** @description Applies a global filter that searches for the provided query across all columns in the grid, returning rows that contain a match in any column. Optionally, you can limit the filtering to specific data types—such as 'string', 'boolean', 'date', or 'number'—so that only columns of the selected type(s) are considered when matching the query. This allows for more precise and targeted filtering behavior. \n\t* @param {string} query. The filter expression to apply to all columns.\n\t* @param {string} dataType?. Optional. Filter rows only by columns matching this data type: 'string', 'boolean', 'date', 'number'.\n\t*/\n    public filterBy(query: string, dataType?: string): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.filterBy(query, dataType);\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.filterBy(query, dataType);\n            });\n        }\n    }\n\n\t/** @description Programmatically navigates the grid to a specified page index, provided that paging is enabled. Use this method to set the current page of the grid, allowing you to jump to a particular page in response to user actions or custom logic. The page index is zero-based, where 0 refers to the first page.\" \n\t* @param {number} index. The zero-based index of the page to navigate to.\n\t*/\n    public goToPage(index: number): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.goToPage(index);\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.goToPage(index);\n            });\n        }\n    }\n\n\t/** @description Advances to the next page of data in the grid when paging functionality is enabled. If the grid is currently displaying the last available page, this action will have no effect and the page will remain unchanged. \n\t*/\n    public nextPage(): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.nextPage();\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.nextPage();\n            });\n        }\n    }\n\n\t/** @description Triggers navigation to the previous page in the grid when paging functionality is enabled. If the grid is currently displaying the first page, the operation is ignored and the page remains unchanged. This ensures that navigation does not attempt to move before the first available page. \n\t*/\n    public prevPage(): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.prevPage();\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.prevPage();\n            });\n        }\n    }\n\n\t/** @description Navigates to the first page of the data grid when paging functionality is enabled. This action resets the current page index to the first page, displaying the initial set of records in the grid. \n\t*/\n    public firstPage(): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.firstPage();\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.firstPage();\n            });\n        }\n    }\n\n\t/** @description Navigates directly to the final page of the data grid when paging functionality is enabled, allowing users to quickly access the last set of records displayed in the grid. \n\t*/\n    public lastPage(): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.lastPage();\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.lastPage();\n            });\n        }\n    }\n\n\t/** @description Sets focus on and selects a specified cell or an entire row within the grid, clearing any previous selections. This action also updates the keyboard navigation's starting point to the newly focused cell or row, ensuring that subsequent navigation actions will originate from this location. \n\t* @param {string | number} rowId. The unique identifier of the row to focus and select.\n\t* @param {string} dataField?. Optional. The data field (column key) of the cell to focus within the specified row. If omitted, the entire row is selected.\n\t*/\n    public focusAndSelect(rowId: string | number, dataField?: string): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.focusAndSelect(rowId, dataField);\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.focusAndSelect(rowId, dataField);\n            });\n        }\n    }\n\n\t/** @description Executes a callback function for each individual row in the grid's underlying dataset, regardless of any grouping, filtering, or sorting currently applied to the grid view. This method iterates over all raw data rows, ensuring that the callback is called on every entry as it exists in the original data source, not just the rows that are visible or active in the grid's current state. \n\t* @param {any} rowCallback. A callback function that receives a row object as its parameter. Example: grid.forEachRow(row => console.log(row.id));\n\t*/\n    public forEachRow(rowCallback: any): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.forEachRow(rowCallback);\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.forEachRow(rowCallback);\n            });\n        }\n    }\n\n\t/** @description Executes a callback function for each row that is currently visible in the grid after all active filters and sorting have been applied. This method operates strictly on the rows as they appear in the current grid view, ensuring that hidden, filtered out, or unsorted rows are excluded. The iteration respects the latest grid state, guaranteeing that only rows displayed to the user are processed by the callback function. \n\t* @param {any} rowCallback. A callback function that receives a row object as its parameter. Example: grid.forEachRowAfterFilterAndSort(row => console.log(row.id));\n\t*/\n    public forEachRowAfterFilterAndSort(rowCallback: any): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.forEachRowAfterFilterAndSort(rowCallback);\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.forEachRowAfterFilterAndSort(rowCallback);\n            });\n        }\n    }\n\n\t/** @description Returns the maximum allowable scroll position for the grid's vertical scrollbar. This value represents the greatest vertical offset to which users can scroll within the grid's content area. It can be used to determine the scrollable range or to programmatically set the vertical scrollbar to its lowest (bottom-most) position. \n\t* @returns {number}\n  */\n\tpublic async getVerticalScrollMax(): Promise<any> {\n\t\tconst getResultOnRender = () => {\n            return new Promise(resolve => {\n                this.nativeElement.whenRendered(() => {\n                    const result = this.nativeElement.getVerticalScrollMax();\n                    resolve(result)\n                });\n            });\n        };\n        const result = await getResultOnRender();\n\n        return result;\n    }\n\n\tpublic getVerticalScrollMaxSync(): number {\n        if (this.nativeElement.isRendered) {\n \t       return this.nativeElement.getVerticalScrollMax();\n        }\n        return null;\n    }\n\n\t/** @description Returns the current vertical scroll position of the grid, representing the number of pixels the grid’s content has been scrolled vertically from the top. This value corresponds to the position of the grid's vertical scrollbar and can be used to determine how far users have scrolled down within the grid. \n\t* @returns {number}\n  */\n\tpublic async getVerticalScrollValue(): Promise<any> {\n\t\tconst getResultOnRender = () => {\n            return new Promise(resolve => {\n                this.nativeElement.whenRendered(() => {\n                    const result = this.nativeElement.getVerticalScrollValue();\n                    resolve(result)\n                });\n            });\n        };\n        const result = await getResultOnRender();\n\n        return result;\n    }\n\n\tpublic getVerticalScrollValueSync(): number {\n        if (this.nativeElement.isRendered) {\n \t       return this.nativeElement.getVerticalScrollValue();\n        }\n        return null;\n    }\n\n\t/** @description Returns the maximum horizontal scroll offset for the grid’s horizontal scrollbar. This value represents the furthest distance (in pixels) that the grid content can be scrolled horizontally. It is useful for programmatically setting, adjusting, or resetting the grid’s horizontal scroll position to ensure full content visibility or to align with specific scroll actions. \n\t* @returns {number}\n  */\n\tpublic async getHorizontalScrollMax(): Promise<any> {\n\t\tconst getResultOnRender = () => {\n            return new Promise(resolve => {\n                this.nativeElement.whenRendered(() => {\n                    const result = this.nativeElement.getHorizontalScrollMax();\n                    resolve(result)\n                });\n            });\n        };\n        const result = await getResultOnRender();\n\n        return result;\n    }\n\n\tpublic getHorizontalScrollMaxSync(): number {\n        if (this.nativeElement.isRendered) {\n \t       return this.nativeElement.getHorizontalScrollMax();\n        }\n        return null;\n    }\n\n\t/** @description Retrieves the current horizontal scroll offset of the grid's horizontal scrollbar, indicating how far the grid content has been scrolled from the left edge in pixels. This value can be used to determine the current scroll position or to programmatically control grid scrolling behavior. \n\t* @returns {number}\n  */\n\tpublic async getHorizontalScrollValue(): Promise<any> {\n\t\tconst getResultOnRender = () => {\n            return new Promise(resolve => {\n                this.nativeElement.whenRendered(() => {\n                    const result = this.nativeElement.getHorizontalScrollValue();\n                    resolve(result)\n                });\n            });\n        };\n        const result = await getResultOnRender();\n\n        return result;\n    }\n\n\tpublic getHorizontalScrollValueSync(): number {\n        if (this.nativeElement.isRendered) {\n \t       return this.nativeElement.getHorizontalScrollValue();\n        }\n        return null;\n    }\n\n\t/** @description Retrieves an array of column objects representing every column currently configured in the grid. Each column object contains key properties, including:- `label`: The display name of the column as shown in the grid header.- `dataField`: The underlying data field or key this column is bound to in the dataset.- `dataType`: The type of data displayed in the column (e.g., string, number, date).- `visible`: A boolean indicating whether the column is currently visible in the grid.- Additional dynamic state properties, such as the current sort order, filter status, or column width, reflecting any user customizations or interactions.This comprehensive array allows developers to access both the static configuration and real-time state of each column in the grid. \n\t* @returns {any}\n  */\n\tpublic async getColumns(): Promise<any> {\n\t\tconst getResultOnRender = () => {\n            return new Promise(resolve => {\n                this.nativeElement.whenRendered(() => {\n                    const result = this.nativeElement.getColumns();\n                    resolve(result)\n                });\n            });\n        };\n        const result = await getResultOnRender();\n\n        return result;\n    }\n\n\tpublic getColumnsSync(): any {\n        if (this.nativeElement.isRendered) {\n \t       return this.nativeElement.getColumns();\n        }\n        return null;\n    }\n\n\t/** @description Returns an array containing information about all cells that are currently in edit mode within the grid. Each entry in the array typically includes details such as the row and column identifiers for each editable cell, allowing developers to precisely identify and interact with cells that are being edited. \n\t* @returns {any[]}\n  */\n\tpublic async getEditCells(): Promise<any> {\n\t\tconst getResultOnRender = () => {\n            return new Promise(resolve => {\n                this.nativeElement.whenRendered(() => {\n                    const result = this.nativeElement.getEditCells();\n                    resolve(result)\n                });\n            });\n        };\n        const result = await getResultOnRender();\n\n        return result;\n    }\n\n\tpublic getEditCellsSync(): any[] {\n        if (this.nativeElement.isRendered) {\n \t       return this.nativeElement.getEditCells();\n        }\n        return null;\n    }\n\n\t/** @description Fetches an array of group objects that define the current grouping configuration of the grid. Each group object contains information about the field being grouped by, the group criteria, and any sub-grouping details, providing a comprehensive representation of how the grid's data is organized into groups. \n\t* @returns {any[]}\n  */\n\tpublic async getGroups(): Promise<any> {\n\t\tconst getResultOnRender = () => {\n            return new Promise(resolve => {\n                this.nativeElement.whenRendered(() => {\n                    const result = this.nativeElement.getGroups();\n                    resolve(result)\n                });\n            });\n        };\n        const result = await getResultOnRender();\n\n        return result;\n    }\n\n\tpublic getGroupsSync(): any[] {\n        if (this.nativeElement.isRendered) {\n \t       return this.nativeElement.getGroups();\n        }\n        return null;\n    }\n\n\t/** @description Returns an object that details the columns currently sorted within a data table. Each key in the object corresponds to a column’s data field name. The value for each key is an object containing:- `sortOrder`: Specifies the sorting direction for the column, either `'asc'` for ascending or `'desc'` for descending.- `sortIndex`: Indicates the column’s priority in multi-column sorting, with lower numbers representing higher priority.This structure allows you to easily determine which columns are sorted, their order of precedence, and the sorting direction applied to each. \n\t* @returns {{[dataField: string]: { sortOrder: string, sortIndex: number }}}\n  */\n\tpublic async getSortedColumns(): Promise<any> {\n\t\tconst getResultOnRender = () => {\n            return new Promise(resolve => {\n                this.nativeElement.whenRendered(() => {\n                    const result = this.nativeElement.getSortedColumns();\n                    resolve(result)\n                });\n            });\n        };\n        const result = await getResultOnRender();\n\n        return result;\n    }\n\n\tpublic getSortedColumnsSync(): {[dataField: string]: { sortOrder: string, sortIndex: number }} {\n        if (this.nativeElement.isRendered) {\n \t       return this.nativeElement.getSortedColumns();\n        }\n        return null;\n    }\n\n\t/** @description Returns an object representing the current selection state of the grid. This includes arrays listing the IDs of selected rows, the identifiers of selected columns, and the coordinates (row ID and data field) of selected cells. Additionally, it specifies the cell that is currently focused by providing its row ID and data field. \n\t* @returns {any}\n  */\n\tpublic async getSelection(): Promise<any> {\n\t\tconst getResultOnRender = () => {\n            return new Promise(resolve => {\n                this.nativeElement.whenRendered(() => {\n                    const result = this.nativeElement.getSelection();\n                    resolve(result)\n                });\n            });\n        };\n        const result = await getResultOnRender();\n\n        return result;\n    }\n\n\tpublic getSelectionSync(): any {\n        if (this.nativeElement.isRendered) {\n \t       return this.nativeElement.getSelection();\n        }\n        return null;\n    }\n\n\t/** @description Returns an array in which each element is a two-element array: the first element is the unique row ID, and the second element is the data object associated with that row. When operating in virtual mode, the data object may be empty if the row’s data has not yet been loaded, as data is retrieved on demand. \n\t* @returns {any[]}\n  */\n\tpublic async getSelectedRows(): Promise<any> {\n\t\tconst getResultOnRender = () => {\n            return new Promise(resolve => {\n                this.nativeElement.whenRendered(() => {\n                    const result = this.nativeElement.getSelectedRows();\n                    resolve(result)\n                });\n            });\n        };\n        const result = await getResultOnRender();\n\n        return result;\n    }\n\n\tpublic getSelectedRowsSync(): any[] {\n        if (this.nativeElement.isRendered) {\n \t       return this.nativeElement.getSelectedRows();\n        }\n        return null;\n    }\n\n\t/** @description Returns an array containing the data objects corresponding to each row currently selected in the grid. Each object in the array represents the underlying data for one selected row, allowing you to access and manipulate the specific records the user has chosen. \n\t* @returns {any[]}\n  */\n\tpublic async getSelectedRowsData(): Promise<any> {\n\t\tconst getResultOnRender = () => {\n            return new Promise(resolve => {\n                this.nativeElement.whenRendered(() => {\n                    const result = this.nativeElement.getSelectedRowsData();\n                    resolve(result)\n                });\n            });\n        };\n        const result = await getResultOnRender();\n\n        return result;\n    }\n\n\tpublic getSelectedRowsDataSync(): any[] {\n        if (this.nativeElement.isRendered) {\n \t       return this.nativeElement.getSelectedRowsData();\n        }\n        return null;\n    }\n\n\t/** @description Returns an array containing the unique identifiers (IDs) of all rows currently selected by the user within the grid component. Each element in the array corresponds to the ID of a selected row, allowing you to easily reference or manipulate the selected grid items programmatically. \n\t* @returns {any[]}\n  */\n\tpublic async getSelectedRowIds(): Promise<any> {\n\t\tconst getResultOnRender = () => {\n            return new Promise(resolve => {\n                this.nativeElement.whenRendered(() => {\n                    const result = this.nativeElement.getSelectedRowIds();\n                    resolve(result)\n                });\n            });\n        };\n        const result = await getResultOnRender();\n\n        return result;\n    }\n\n\tpublic getSelectedRowIdsSync(): any[] {\n        if (this.nativeElement.isRendered) {\n \t       return this.nativeElement.getSelectedRowIds();\n        }\n        return null;\n    }\n\n\t/** @description Returns an array containing the indices of the rows that are currently selected in the grid. Each element in the array represents the zero-based position of a selected row, allowing you to identify which rows the user has chosen. If no rows are selected, the array will be empty. \n\t* @returns {any[]}\n  */\n\tpublic async getSelectedRowIndexes(): Promise<any> {\n\t\tconst getResultOnRender = () => {\n            return new Promise(resolve => {\n                this.nativeElement.whenRendered(() => {\n                    const result = this.nativeElement.getSelectedRowIndexes();\n                    resolve(result)\n                });\n            });\n        };\n        const result = await getResultOnRender();\n\n        return result;\n    }\n\n\tpublic getSelectedRowIndexesSync(): any[] {\n        if (this.nativeElement.isRendered) {\n \t       return this.nativeElement.getSelectedRowIndexes();\n        }\n        return null;\n    }\n\n\t/** @description Returns an array of selected cells, where each cell is represented as an array structured as [row ID, column field, cell value].  - **Row ID**: The unique identifier for the row containing the cell.  - **Column field**: The data field name (or key) corresponding to the column of the cell.  - **Cell value**: The actual value contained within the cell.  This structure allows you to easily identify and access the position and value of each selected cell within the data set. \n\t* @returns {any[]}\n  */\n\tpublic async getSelectedCells(): Promise<any> {\n\t\tconst getResultOnRender = () => {\n            return new Promise(resolve => {\n                this.nativeElement.whenRendered(() => {\n                    const result = this.nativeElement.getSelectedCells();\n                    resolve(result)\n                });\n            });\n        };\n        const result = await getResultOnRender();\n\n        return result;\n    }\n\n\tpublic getSelectedCellsSync(): any[] {\n        if (this.nativeElement.isRendered) {\n \t       return this.nativeElement.getSelectedCells();\n        }\n        return null;\n    }\n\n\t/** @description Returns an array of objects representing the columns that currently have active filters applied. Each object contains details about the filter and is associated with its corresponding column by the column's data field as the key. This allows you to identify which columns are being filtered and access the filter configurations for each. \n\t* @returns {any}\n  */\n\tpublic async getFilteredColumns(): Promise<any> {\n\t\tconst getResultOnRender = () => {\n            return new Promise(resolve => {\n                this.nativeElement.whenRendered(() => {\n                    const result = this.nativeElement.getFilteredColumns();\n                    resolve(result)\n                });\n            });\n        };\n        const result = await getResultOnRender();\n\n        return result;\n    }\n\n\tpublic getFilteredColumnsSync(): any {\n        if (this.nativeElement.isRendered) {\n \t       return this.nativeElement.getFilteredColumns();\n        }\n        return null;\n    }\n\n\t/** @description Returns an array containing the data for all rows currently visible in the grid, after applying any active filters. Only rows that meet the filter criteria and are not hidden by filtering will be included in the array. This allows developers to access the up-to-date, filtered data as presented to the user in the grid interface. \n\t* @returns {any}\n  */\n\tpublic async getVisibleRows(): Promise<any> {\n\t\tconst getResultOnRender = () => {\n            return new Promise(resolve => {\n                this.nativeElement.whenRendered(() => {\n                    const result = this.nativeElement.getVisibleRows();\n                    resolve(result)\n                });\n            });\n        };\n        const result = await getResultOnRender();\n\n        return result;\n    }\n\n\tpublic getVisibleRowsSync(): any {\n        if (this.nativeElement.isRendered) {\n \t       return this.nativeElement.getVisibleRows();\n        }\n        return null;\n    }\n\n\t/** @description Returns an array of row objects. By default, this represents the currently visible rows after any filters have been applied. When used in TreeGrid or Grouping mode, the array instead reflects the hierarchical structure of rows, including parent-child relationships, according to the current expand/collapse state of groups or tree nodes. \n\t* @returns {any}\n  */\n\tpublic async getViewRows(): Promise<any> {\n\t\tconst getResultOnRender = () => {\n            return new Promise(resolve => {\n                this.nativeElement.whenRendered(() => {\n                    const result = this.nativeElement.getViewRows();\n                    resolve(result)\n                });\n            });\n        };\n        const result = await getResultOnRender();\n\n        return result;\n    }\n\n\tpublic getViewRowsSync(): any {\n        if (this.nativeElement.isRendered) {\n \t       return this.nativeElement.getViewRows();\n        }\n        return null;\n    }\n\n\t/** @description Retrieves a detailed JSON object that encapsulates the entire current state of the grid. This includes the active sorting and filtering criteria, column visibility and order, which rows are expanded, any grouping configurations, current pagination settings, and the selection state of rows or cells. The resulting state object is suitable for persisting the grid configuration (such as saving to local storage or a database) and can be used to completely restore the grid to the same state at a later time. \n\t* @returns {any}\n  */\n\tpublic async getState(): Promise<any> {\n\t\tconst getResultOnRender = () => {\n            return new Promise(resolve => {\n                this.nativeElement.whenRendered(() => {\n                    const result = this.nativeElement.getState();\n                    resolve(result)\n                });\n            });\n        };\n        const result = await getResultOnRender();\n\n        return result;\n    }\n\n\tpublic getStateSync(): any {\n        if (this.nativeElement.isRendered) {\n \t       return this.nativeElement.getState();\n        }\n        return null;\n    }\n\n\t/** @description Retrieves a comprehensive summary of all changes performed during a batch edit operation. Returns an object with separate arrays for added, updated, and deleted rows. Each array contains detailed objects that include the row ID and pertinent data fields, such as the previous and new values for updates, full data for additions, and identifying information for deletions. This structure allows you to easily track and process all modifications made in the batch. \n\t* @returns {{ upDated: [{ id: string, dataField: string, oldValue: Object, newValue: Object }], deleted: [{id: string, data: Object}], added: [{id: string, data: Object}] }}\n  */\n\tpublic async getBatchEditChanges(): Promise<any> {\n\t\tconst getResultOnRender = () => {\n            return new Promise(resolve => {\n                this.nativeElement.whenRendered(() => {\n                    const result = this.nativeElement.getBatchEditChanges();\n                    resolve(result)\n                });\n            });\n        };\n        const result = await getResultOnRender();\n\n        return result;\n    }\n\n\tpublic getBatchEditChangesSync(): { upDated: [{ id: string, dataField: string, oldValue: Object, newValue: Object }], deleted: [{id: string, data: Object}], added: [{id: string, data: Object}] } {\n        if (this.nativeElement.isRendered) {\n \t       return this.nativeElement.getBatchEditChanges();\n        }\n        return null;\n    }\n\n\t/** @description Retrieves the value stored in a specific cell of a data grid or table by specifying the unique row ID and the corresponding column data field. This function allows precise access to individual cell data, enabling targeted data retrieval based on both row and column identifiers. \n\t* @param {string | number} rowId. The unique identifier of the row containing the cell.\n\t* @param {string} dataField. The data field name of the column (e.g., 'firstName').\n\t* @returns {any}\n  */\n\tpublic async getCellValue(rowId, dataField): Promise<any> {\n\t\tconst getResultOnRender = () => {\n            return new Promise(resolve => {\n                this.nativeElement.whenRendered(() => {\n                    const result = this.nativeElement.getCellValue(rowId, dataField);\n                    resolve(result)\n                });\n            });\n        };\n        const result = await getResultOnRender();\n\n        return result;\n    }\n\n\tpublic getCellValueSync(rowId, dataField): any {\n        if (this.nativeElement.isRendered) {\n \t       return this.nativeElement.getCellValue(rowId, dataField);\n        }\n        return null;\n    }\n\n\t/** @description Retrieves the column object corresponding to the specified data field. This returned object includes all relevant properties and configuration settings for that column, such as its header label, data type, formatting options, sorting behavior, visibility, and any custom properties defined in the column schema. \n\t* @param {string} dataField. The data field name of the column to retrieve.\n\t* @returns {GridColumn}\n  */\n\tpublic async getColumn(dataField): Promise<any> {\n\t\tconst getResultOnRender = () => {\n            return new Promise(resolve => {\n                this.nativeElement.whenRendered(() => {\n                    const result = this.nativeElement.getColumn(dataField);\n                    resolve(result)\n                });\n            });\n        };\n        const result = await getResultOnRender();\n\n        return result;\n    }\n\n\tpublic getColumnSync(dataField): GridColumn {\n        if (this.nativeElement.isRendered) {\n \t       return this.nativeElement.getColumn(dataField);\n        }\n        return null;\n    }\n\n\t/** @description Fetches the value of a specified property from a particular column, where the column is identified by its data field name. This function allows you to access detailed configuration or metadata associated with a column in a data structure, such as a table or grid, by referencing the column’s data field. \n\t* @param {string} dataField. The data field name of the column.\n\t* @param {string} propertyName. The name of the column property to retrieve (e.g., 'freeze', 'visible', 'width').\n\t* @returns {any}\n  */\n\tpublic async getColumnProperty(dataField, propertyName): Promise<any> {\n\t\tconst getResultOnRender = () => {\n            return new Promise(resolve => {\n                this.nativeElement.whenRendered(() => {\n                    const result = this.nativeElement.getColumnProperty(dataField, propertyName);\n                    resolve(result)\n                });\n            });\n        };\n        const result = await getResultOnRender();\n\n        return result;\n    }\n\n\tpublic getColumnPropertySync(dataField, propertyName): any {\n        if (this.nativeElement.isRendered) {\n \t       return this.nativeElement.getColumnProperty(dataField, propertyName);\n        }\n        return null;\n    }\n\n\t/** @description Retrieves the value of a specified property from a database row identified by its unique row ID. This function locates the row using the provided row ID and returns the value associated with the given property key within that row. If the property does not exist, it returns null or an appropriate default value. \n\t* @param {string | number} rowId. The unique identifier of the row.\n\t* @param {string} propertyName. The name of the row property to retrieve.\n\t* @returns {any}\n  */\n\tpublic async getRowProperty(rowId, propertyName): Promise<any> {\n\t\tconst getResultOnRender = () => {\n            return new Promise(resolve => {\n                this.nativeElement.whenRendered(() => {\n                    const result = this.nativeElement.getRowProperty(rowId, propertyName);\n                    resolve(result)\n                });\n            });\n        };\n        const result = await getResultOnRender();\n\n        return result;\n    }\n\n\tpublic getRowPropertySync(rowId, propertyName): any {\n        if (this.nativeElement.isRendered) {\n \t       return this.nativeElement.getRowProperty(rowId, propertyName);\n        }\n        return null;\n    }\n\n\t/** @description Returns the complete row object from the Grid for the row corresponding to the given row ID, including all its associated data and properties. \n\t* @param {string | number} rowId. The unique identifier of the row.\n\t* @returns {GridRow}\n  */\n\tpublic async getRow(rowId): Promise<any> {\n\t\tconst getResultOnRender = () => {\n            return new Promise(resolve => {\n                this.nativeElement.whenRendered(() => {\n                    const result = this.nativeElement.getRow(rowId);\n                    resolve(result)\n                });\n            });\n        };\n        const result = await getResultOnRender();\n\n        return result;\n    }\n\n\tpublic getRowSync(rowId): GridRow {\n        if (this.nativeElement.isRendered) {\n \t       return this.nativeElement.getRow(rowId);\n        }\n        return null;\n    }\n\n\t/** @description Returns the Grid row object at the given zero-based row index, allowing access to all data and properties associated with that specific row. The index parameter should be an integer starting from 0, where 0 corresponds to the first row in the Grid. \n\t* @param {number} rowIndex. The zero-based index of the row in the grid.\n\t* @returns {GridRow}\n  */\n\tpublic async getRowByIndex(rowIndex): Promise<any> {\n\t\tconst getResultOnRender = () => {\n            return new Promise(resolve => {\n                this.nativeElement.whenRendered(() => {\n                    const result = this.nativeElement.getRowByIndex(rowIndex);\n                    resolve(result)\n                });\n            });\n        };\n        const result = await getResultOnRender();\n\n        return result;\n    }\n\n\tpublic getRowByIndexSync(rowIndex): GridRow {\n        if (this.nativeElement.isRendered) {\n \t       return this.nativeElement.getRowByIndex(rowIndex);\n        }\n        return null;\n    }\n\n\t/** @description Returns the Grid row object by its HTML Element, allowing access to all data and properties associated with that specific row.  \n\t* @param {any} rowElement. The row's element.\n\t* @returns {GridRow}\n  */\n\tpublic async getRowByElement(rowElement): Promise<any> {\n\t\tconst getResultOnRender = () => {\n            return new Promise(resolve => {\n                this.nativeElement.whenRendered(() => {\n                    const result = this.nativeElement.getRowByElement(rowElement);\n                    resolve(result)\n                });\n            });\n        };\n        const result = await getResultOnRender();\n\n        return result;\n    }\n\n\tpublic getRowByElementSync(rowElement): GridRow {\n        if (this.nativeElement.isRendered) {\n \t       return this.nativeElement.getRowByElement(rowElement);\n        }\n        return null;\n    }\n\n\t/** @description Fetches the original data source object directly linked to the given row ID, allowing access to all underlying data fields for that specific row as stored in the source dataset. \n\t* @param {string | number} rowId. The unique identifier of the row.\n\t* @returns {any}\n  */\n\tpublic async getRowData(rowId): Promise<any> {\n\t\tconst getResultOnRender = () => {\n            return new Promise(resolve => {\n                this.nativeElement.whenRendered(() => {\n                    const result = this.nativeElement.getRowData(rowId);\n                    resolve(result)\n                });\n            });\n        };\n        const result = await getResultOnRender();\n\n        return result;\n    }\n\n\tpublic getRowDataSync(rowId): any {\n        if (this.nativeElement.isRendered) {\n \t       return this.nativeElement.getRowData(rowId);\n        }\n        return null;\n    }\n\n\t/** @description Returns the unique identifier (row ID) associated with the row at the specified zero-based index. This allows you to access or reference a particular row in the data set by its position within the collection, where the first row has an index of 0. \n\t* @param {number} rowIndex. The zero-based index of the row.\n\t* @returns {string | number}\n  */\n\tpublic async getRowId(rowIndex): Promise<any> {\n\t\tconst getResultOnRender = () => {\n            return new Promise(resolve => {\n                this.nativeElement.whenRendered(() => {\n                    const result = this.nativeElement.getRowId(rowIndex);\n                    resolve(result)\n                });\n            });\n        };\n        const result = await getResultOnRender();\n\n        return result;\n    }\n\n\tpublic getRowIdSync(rowIndex): string | number {\n        if (this.nativeElement.isRendered) {\n \t       return this.nativeElement.getRowId(rowIndex);\n        }\n        return null;\n    }\n\n\t/** @description Determines whether any column’s drop-down menu is currently open and visible within the grid component. This can be used to control grid interactions or UI behaviors that depend on the state of column drop-down menus. \n\t* @returns {boolean}\n  */\n\tpublic async hasMenu(): Promise<any> {\n\t\tconst getResultOnRender = () => {\n            return new Promise(resolve => {\n                this.nativeElement.whenRendered(() => {\n                    const result = this.nativeElement.hasMenu();\n                    resolve(result)\n                });\n            });\n        };\n        const result = await getResultOnRender();\n\n        return result;\n    }\n\n\tpublic hasMenuSync(): boolean {\n        if (this.nativeElement.isRendered) {\n \t       return this.nativeElement.hasMenu();\n        }\n        return null;\n    }\n\n\t/** @description Checks whether any rows in the grid are currently selected by the user. This property or method returns a boolean value: `true` if at least one row is selected, and `false` if no rows are selected. It is typically used to enable or disable actions that depend on row selection, such as editing or deleting entries. \n\t* @returns {boolean}\n  */\n\tpublic async hasSelectedRows(): Promise<any> {\n\t\tconst getResultOnRender = () => {\n            return new Promise(resolve => {\n                this.nativeElement.whenRendered(() => {\n                    const result = this.nativeElement.hasSelectedRows();\n                    resolve(result)\n                });\n            });\n        };\n        const result = await getResultOnRender();\n\n        return result;\n    }\n\n\tpublic hasSelectedRowsSync(): boolean {\n        if (this.nativeElement.isRendered) {\n \t       return this.nativeElement.hasSelectedRows();\n        }\n        return null;\n    }\n\n\t/** @description Conceals the details section for the specified row in the grid when the row details feature is enabled, effectively collapsing or hiding any expanded information or custom content associated with that row. This function ensures that only the main data for the row is visible, while any additional details remain hidden until explicitly shown again. \n\t* @param {string | number} rowId. The unique identifier of the row whose details should be hidden.\n\t*/\n    public hideDetail(rowId: string | number): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.hideDetail(rowId);\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.hideDetail(rowId);\n            });\n        }\n    }\n\n\t/** @description Highlights all cells within the column corresponding to the specified data field. If this method is called again with the same data field, it toggles the highlight by removing it if already applied, or reapplying it if previously removed. \n\t* @param {string} dataField. The data field name of the column to highlight.\n\t*/\n    public highlightColumn(dataField: string): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.highlightColumn(dataField);\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.highlightColumn(dataField);\n            });\n        }\n    }\n\n\t/** @description Emphasizes a specific cell within the grid, identified by its row ID and column data field. Invoking this method again on the same cell will toggle the highlight on or off. You can optionally specify a CSS class to apply custom styling to the highlighted cell, allowing for personalized visual differentiation. \n\t* @param {string | number} rowId. The unique identifier of the row containing the cell.\n\t* @param {string} dataField. The data field name of the column.\n\t* @param {string} className?. Optional CSS class name for custom highlight styling.\n\t*/\n    public highlightCell(rowId: string | number, dataField: string, className?: string): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.highlightCell(rowId, dataField, className);\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.highlightCell(rowId, dataField, className);\n            });\n        }\n    }\n\n\t/** @description Enhances visibility of the table row corresponding to the provided row ID by applying a highlight effect. Invoking this method a second time on the same row will remove the highlight, effectively toggling its state. Optionally, you can supply a custom CSS class to override the default highlight styling for tailored appearance. \n\t* @param {string | number} rowId. The unique identifier of the row to highlight.\n\t* @param {string} className?. Optional CSS class name for custom highlight styling.\n\t*/\n    public highlightRow(rowId: string | number, className?: string): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.highlightRow(rowId, className);\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.highlightRow(rowId, className);\n            });\n        }\n    }\n\n\t/** @description Emphasizes a specific cell within the grid, identified by its row ID and column data field. \n\t* @param {string | number} rowId. The unique identifier of the row containing the cell.\n\t* @param {string} dataField. The data field name of the column.\n\t*/\n    public flashCell(rowId: string | number, dataField: string): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.flashCell(rowId, dataField);\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.flashCell(rowId, dataField);\n            });\n        }\n    }\n\n\t/** @description Enhances visibility of the table row corresponding to the provided row ID by applying a flash effect. \n\t* @param {string | number} rowId. The unique identifier of the row to highlight.\n\t*/\n    public flashRow(rowId: string | number): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.flashRow(rowId);\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.flashRow(rowId);\n            });\n        }\n    }\n\n\t/** @description Adds a new row to the grid using the provided data object. If batch editing mode is active, the row will be added only as a pending change and will not be permanently committed to the data source until the batch is saved. You may optionally specify the index at which the new row should be inserted; if omitted, the row will be added at the default position (usually at the end). Additionally, you can provide a callback function that will be executed after the row has been successfully added to the grid. \n\t* @param {any} data. The data object for the new row, matching the grid's data source schema.\n\t* @param {number} index?. The zero-based index at which to insert the new row. Defaults to the last position if omitted.\n\t* @param {{(row: GridRow): void}} callback?. Optional callback function executed after the row is inserted, receiving the newly added row object.\n\t* @returns {any}\n  */\n\tpublic async insertRow(data, index?, callback?): Promise<any> {\n\t\tconst getResultOnRender = () => {\n            return new Promise(resolve => {\n                this.nativeElement.whenRendered(() => {\n                    const result = this.nativeElement.insertRow(data, index, callback);\n                    resolve(result)\n                });\n            });\n        };\n        const result = await getResultOnRender();\n\n        return result;\n    }\n\n\tpublic insertRowSync(data, index?, callback?): any {\n        if (this.nativeElement.isRendered) {\n \t       return this.nativeElement.insertRow(data, index, callback);\n        }\n        return null;\n    }\n\n\t/** @description Adds a new row to the grid using the provided data object. If batch editing mode is active, the row will be added only as a pending change and will not be permanently committed to the data source until the batch is saved. You may optionally specify the index at which the new row should be inserted; if omitted, the row will be added at the default position (usually at the end). Additionally, you can provide a callback function that will be executed after the row has been successfully added to the grid. \n\t* @param {any} data. The data object for the new row, matching the grid's data source schema.\n\t* @param {any} row?. The Grid row after which the new row will be added.\n\t* @param {{(row: GridRow): void}} callback?. Optional callback function executed after the row is inserted, receiving the newly added row object.\n\t* @returns {any}\n  */\n\tpublic async insertRowAfter(data, row?, callback?): Promise<any> {\n\t\tconst getResultOnRender = () => {\n            return new Promise(resolve => {\n                this.nativeElement.whenRendered(() => {\n                    const result = this.nativeElement.insertRowAfter(data, row, callback);\n                    resolve(result)\n                });\n            });\n        };\n        const result = await getResultOnRender();\n\n        return result;\n    }\n\n\tpublic insertRowAfterSync(data, row?, callback?): any {\n        if (this.nativeElement.isRendered) {\n \t       return this.nativeElement.insertRowAfter(data, row, callback);\n        }\n        return null;\n    }\n\n\t/** @description Adds a new row to the grid using the provided data object. If batch editing mode is active, the row will be added only as a pending change and will not be permanently committed to the data source until the batch is saved. You may optionally specify the index at which the new row should be inserted; if omitted, the row will be added at the default position (usually at the end). Additionally, you can provide a callback function that will be executed after the row has been successfully added to the grid. \n\t* @param {any} data. The data object for the new row, matching the grid's data source schema.\n\t* @param {any} row?. The Grid row before which the new row will be added.\n\t* @param {{(row: GridRow): void}} callback?. Optional callback function executed after the row is inserted, receiving the newly added row object.\n\t* @returns {any}\n  */\n\tpublic async insertRowBefore(data, row?, callback?): Promise<any> {\n\t\tconst getResultOnRender = () => {\n            return new Promise(resolve => {\n                this.nativeElement.whenRendered(() => {\n                    const result = this.nativeElement.insertRowBefore(data, row, callback);\n                    resolve(result)\n                });\n            });\n        };\n        const result = await getResultOnRender();\n\n        return result;\n    }\n\n\tpublic insertRowBeforeSync(data, row?, callback?): any {\n        if (this.nativeElement.isRendered) {\n \t       return this.nativeElement.insertRowBefore(data, row, callback);\n        }\n        return null;\n    }\n\n\t/** @description Restored a previously saved grid state by accepting either the name of the saved state or a state object. The state object can include detailed settings such as current sorting and filtering criteria, column visibility and order, expanded or collapsed row status, grouping configurations, paging information (such as current page and page size), and selected rows. This allows the grid to be reconfigured exactly as it was when the state was saved, providing a consistent user experience across sessions. \n\t* @param {any} state. A state name (string) previously saved or a state object representing the grid configuration to load.\n\t* @returns {any}\n  */\n\tpublic async loadState(state): Promise<any> {\n\t\tconst getResultOnRender = () => {\n            return new Promise(resolve => {\n                this.nativeElement.whenRendered(() => {\n                    const result = this.nativeElement.loadState(state);\n                    resolve(result)\n                });\n            });\n        };\n        const result = await getResultOnRender();\n\n        return result;\n    }\n\n\tpublic loadStateSync(state): any {\n        if (this.nativeElement.isRendered) {\n \t       return this.nativeElement.loadState(state);\n        }\n        return null;\n    }\n\n\t/** @description Displays the drop-down menu associated with the column specified by the provided data field identifier, allowing users to access additional actions or settings related to that column. \n\t* @param {string} dataField. The data field name of the column whose menu to open.\n\t*/\n    public openMenu(dataField: string): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.openMenu(dataField);\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.openMenu(dataField);\n            });\n        }\n    }\n\n\t/** @description Displays the context menu at the given (left, top) screen coordinates. Ensure that context menu functionality is enabled in the grid settings for this method to work. \n\t* @param {number} left. The left position (in pixels) where the context menu should appear.\n\t* @param {number} top. The top position (in pixels) where the context menu should appear.\n\t*/\n    public openContextMenu(left: number, top: number): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.openContextMenu(left, top);\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.openContextMenu(left, top);\n            });\n        }\n    }\n\n\t/** @description Displays the grid’s drop-down user interface when the 'dropDownMode' property is set to true, allowing users to interact with additional grid options or filters presented within the drop-down. \n\t*/\n    public openDropDown(): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.openDropDown();\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.openDropDown();\n            });\n        }\n    }\n\n\t/** @description Closes the grid's drop-down user interface when the 'dropDownMode' property is set to true, ensuring that any open drop-down menus within the grid are dismissed automatically. This helps maintain a streamlined user experience by hiding drop-down elements when they are no longer needed or when specific actions are triggered. \n\t*/\n    public closeDropDown(): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.closeDropDown();\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.closeDropDown();\n            });\n        }\n    }\n\n\t/** @description Generates a printed version of the Grid’s data using the configuration specified in the dataExport property. During printing, the Grid automatically hides scrollbars and adjusts its width and height to ensure that all rows and columns are fully visible on the page, regardless of their original size. This ensures that the entire content of the Grid is included in the printout without any truncation or the need for scrolling. To customize aspects such as page layout, formatting, or which data is included in the print output, adjust the parameters within the dataExport property. \n\t*/\n    public print(): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.print();\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.print();\n            });\n        }\n    }\n\n\t/** @description Triggers a full re-render of the Grid, similar to when it is first initialized. This method reconstructs all underlying HTML elements for rows, columns, and cells from scratch, ensuring a fresh and accurate representation of the data. After rebuilding these elements, it also updates and refreshes the Grid layout to reflect any structural changes. This is useful when foundational data or configuration has changed and a partial update is not sufficient. \n\t*/\n    public refresh(): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.refresh();\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.refresh();\n            });\n        }\n    }\n\n\t/** @description Enhances the Grid display by refreshing its layout to reflect the latest property values, dynamically updating only the necessary elements. This approach optimizes performance by avoiding a complete teardown and reconstruction of all Grid elements, ensuring a smoother and more efficient user experience. \n\t*/\n    public refreshView(): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.refreshView();\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.refreshView();\n            });\n        }\n    }\n\n\t/** @description Refreshes only the cells that are currently visible within the Grid’s viewport, rather than updating the entire Grid. This is especially useful for implementing real-time updates or live data feeds, as it enables efficient, seamless rendering of new cell values without triggering a full Grid refresh or losing the user's scroll position. \n\t*/\n    public resetState(): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.resetState();\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.resetState();\n            });\n        }\n    }\n\n\t/** @description Restores the Grid to its original default configuration by removing all user-applied settings, including sorting, filtering, grouping, and selected rows or cells. This action clears any user interactions, ensuring the Grid displays data with no custom modifications. \n\t* @param {string} dataField. The data field of the column from which to remove the filter, e.g., 'firstName'.\n\t* @param {boolean} refreshFilters?. If set to false, delays the filter refresh to allow multiple filters to be removed before updating the Grid.\n\t*/\n    public removeFilter(dataField: string, refreshFilters?: boolean): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.removeFilter(dataField, refreshFilters);\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.removeFilter(dataField, refreshFilters);\n            });\n        }\n    }\n\n\t/** @description Removes the filter currently applied to the specified column. Optionally, you can delay the filter refresh process, allowing you to remove filters from multiple columns before triggering an update. This helps optimize performance when batch-processing multiple filter removals. \n\t* @param {string} dataField. The data field of the group to remove, e.g., 'firstName'.\n\t*/\n    public removeGroup(dataField: string): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.removeGroup(dataField);\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.removeGroup(dataField);\n            });\n        }\n    }\n\n\t/** @description Removes grouping from the Grid for the specified data field. This method is only applicable when grouping functionality is enabled in the Grid. When called, it will ungroup the records currently grouped by the given field, and the Grid will update to display the data without that grouping criterion. \n\t* @param {string} dataField. The data field of the column whose sorting you want to remove, e.g., 'firstName'.\n\t*/\n    public removeSort(dataField: string): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.removeSort(dataField);\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.removeSort(dataField);\n            });\n        }\n    }\n\n\t/** @description Removes any active sorting from the specified column. Use this method to clear the sort order applied to a particular data field, returning the column to its default, unsorted state. This is useful when you want to reset or update the sorting configuration for individual columns within a data table. \n\t*/\n    public refreshSort(): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.refreshSort();\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.refreshSort();\n            });\n        }\n    }\n\n\t/** @description Applies the current sorting settings again to the data and updates the Grid display to reflect any changes, ensuring the data is presented according to the latest sorting configuration. \n\t*/\n    public revertBatchEdit(): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.revertBatchEdit();\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.revertBatchEdit();\n            });\n        }\n    }\n\n\t/** @description Reverts the Grid to its previous state by discarding all unsaved batch editing changes made by the user. Any modifications entered during the current batch editing session will be canceled, restoring the Grid’s data to its last committed state. \n\t* @param {string | number} dataField. The data field or index of the column to move.\n\t* @param {string | number} referenceDataField. The data field or index of the target column used as reference for repositioning.\n\t* @param {boolean} insertAfter?. If true, inserts the first column after the reference column; otherwise, inserts it before.\n\t*/\n    public reorderColumns(dataField: string | number, referenceDataField: string | number, insertAfter?: boolean): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.reorderColumns(dataField, referenceDataField, insertAfter);\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.reorderColumns(dataField, referenceDataField, insertAfter);\n            });\n        }\n    }\n\n\t/** @description Reorders two columns in the Grid by moving the specified source column to a new position either before or after the target reference column. This allows for customizable column arrangements by programmatically shifting the position of columns within the Grid. \n\t* @param {string} name?. Optional name to associate with the saved state.\n\t* @returns {any}\n  */\n\tpublic async saveState(name?): Promise<any> {\n\t\tconst getResultOnRender = () => {\n            return new Promise(resolve => {\n                this.nativeElement.whenRendered(() => {\n                    const result = this.nativeElement.saveState(name);\n                    resolve(result)\n                });\n            });\n        };\n        const result = await getResultOnRender();\n\n        return result;\n    }\n\n\tpublic saveStateSync(name?): any {\n        if (this.nativeElement.isRendered) {\n \t       return this.nativeElement.saveState(name);\n        }\n        return null;\n    }\n\n\t/** @description Captures and returns the current state of the Grid as a comprehensive JSON object. The state includes details such as applied sorting and filtering criteria, columns configuration (order, visibility, and sizing), currently expanded rows, grouping settings, paging information (current page, page size), and user selections. Optionally, you can provide a name parameter to uniquely identify and reference the saved state for future retrieval or restoration. \n\t* @param {string} dataField. The data field of the column to sort, e.g., 'firstName'.\n\t* @param {string | null} sortOrder. Sort order to apply: 'asc' for ascending, 'desc' for descending, or null to remove sorting.\n\t*/\n    public sortBy(dataField: string, sortOrder: string | null): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.sortBy(dataField, sortOrder);\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.sortBy(dataField, sortOrder);\n            });\n        }\n    }\n\n\t/** @description Applies sorting to the Grid based on the specified data field. You can either add sorting by providing a valid sortOrder (such as 'asc' or 'desc'), or remove sorting from a column by setting the sortOrder parameter to null. This allows dynamic adjustment of Grid sorting criteria, enabling users to sort data as needed or clear sorting on individual columns. \n\t* @param {string | number} dataField. The data field or index of the first column.\n\t* @param {string | number} referenceDataField. The data field or index of the second column.\n\t*/\n    public swapColumns(dataField: string | number, referenceDataField: string | number): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.swapColumns(dataField, referenceDataField);\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.swapColumns(dataField, referenceDataField);\n            });\n        }\n    }\n\n\t/** @description Swaps the positions of two specified columns within the Grid layout, effectively changing their order of appearance. This operation updates the Grid so that the selected columns exchange places, while the data and structure of other columns remain unchanged. \n\t*/\n    public saveBatchEdit(): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.saveBatchEdit();\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.saveBatchEdit();\n            });\n        }\n    }\n\n\t/** @description Saves and applies all batch editing changes made by the end-user, persisting the updates permanently to the Grid's underlying data source. This operation commits all modifications (such as additions, deletions, and edits) performed during the batch editing session, ensuring that the Grid data source accurately reflects the latest user input. \n\t* @param {string | number} rowId. The identifier of the row to select.\n\t* @param {string} dataField?. Optional data field of the column to select a specific cell.\n\t*/\n    public select(rowId: string | number, dataField?: string): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.select(rowId, dataField);\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.select(rowId, dataField);\n            });\n        }\n    }\n\n\t/** @description Specifies the selection of a particular row, column, or cell within a data table. If a data field (representing a column) is provided along with a row identifier, the selection targets a specific cell at the intersection of the given row and column. If only a row identifier is supplied without a data field, the entire row is selected. Similarly, providing only a data field without a row identifier selects the entire column. \n\t* @param {string | number} rowId. The starting row ID of the selection range.\n\t* @param {string} dataField. The starting column data field of the selection range.\n\t* @param {string | number} endRowId. The ending row ID of the selection range.\n\t* @param {string} endDataField. The ending column data field of the selection range.\n\t*/\n    public selectRange(rowId: string | number, dataField: string, endRowId: string | number, endDataField: string): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.selectRange(rowId, dataField, endRowId, endDataField);\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.selectRange(rowId, dataField, endRowId, endDataField);\n            });\n        }\n    }\n\n\t/** @description Selects a rectangular range of cells within the grid, defined by specifying both the starting and ending row IDs as well as the data field keys (columns). The selection includes all cells that fall within the rectangle formed by these start and end points. The behavior and outcome of this selection may vary based on the current selection mode of the Grid component (for example, whether it supports cell, row, or column selection).\" \n\t* @param {string | number} rowId. The starting row ID of the selection range.\n\t* @param {string | number} endRowId. The ending row ID of the selection range.\n\t*/\n    public selectRowsRange(rowId: string | number, endRowId: string | number): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.selectRowsRange(rowId, endRowId);\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.selectRowsRange(rowId, endRowId);\n            });\n        }\n    }\n\n\t/** @description Selects all consecutive rows, inclusive, between the specified start and end row IDs. Both the start and end IDs are included in the selection, and only rows with IDs that fall within this continuous range will be selected. \n\t* @param {(string | number)[]} rowId. Array of row IDs to select.\n\t*/\n    public selectRows(rowId: (string | number)[]): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.selectRows(rowId);\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.selectRows(rowId);\n            });\n        }\n    }\n\n\t/** @description Selects multiple rows by accepting an array of row IDs, allowing you to specify and manipulate several rows simultaneously based on their unique identifiers. \n\t*/\n    public selectAllRows(): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.selectAllRows();\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.selectAllRows();\n            });\n        }\n    }\n\n\t/** @description Selects every row that is currently visible in the Grid, including only those rows that meet the active filters, sorting, and pagination settings. Hidden or filtered-out rows are not selected. \n\t* @param {number[]} rowIndex. An array of zero-based row indexes to select.\n\t*/\n    public selectRowsByIndex(rowIndex: number[]): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.selectRowsByIndex(rowIndex);\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.selectRowsByIndex(rowIndex);\n            });\n        }\n    }\n\n\t/** @description Enhances selection functionality by allowing users to select multiple rows within the Grid component, using their zero-based index positions. This means you can specify one or more row indices (starting from 0 for the first row) to programmatically select the corresponding rows in the Grid. \n\t* @param {string} query. The search query or value to filter by.\n\t* @param {string} dataField?. Optional column data field to apply the query against.\n\t* @param {string} condition?. Optional condition operator. Supported values include '=', 'EQUAL', '<>', 'NOT_EQUAL', '!=', '<', 'LESS_THAN', '>', 'GREATER_THAN', '<=', 'LESS_THAN_OR_EQUAL', '>=', 'GREATER_THAN_OR_EQUAL', 'starts with', 'STARTS_WITH', 'ends with', 'ENDS_WITH', '', 'EMPTY', 'CONTAINS', 'DOES_NOT_CONTAIN', 'NULL', 'NOT_NULL'.\n\t*/\n    public selectRowsByQuery(query: string, dataField?: string, condition?: string): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.selectRowsByQuery(query, dataField, condition);\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.selectRowsByQuery(query, dataField, condition);\n            });\n        }\n    }\n\n\t/** @description Selects rows from a dataset based on a specified query expression. This allows you to filter rows by applying conditions to the values in one or more columns. Supported conditions include equality (equals), partial matches (contains), comparison operators (greater than, less than), prefix matching (starts with), and more. The query expression enables flexible filtering, so only rows that meet the defined criteria are returned. \n\t* @param {(string | number)[]} rowIds. Array of row ids\n\t* @param {string[]} dataFields. Array of data fields.\n\t*/\n    public selectCells(rowIds: (string | number)[], dataFields: string[]): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.selectCells(rowIds, dataFields);\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.selectCells(rowIds, dataFields);\n            });\n        }\n    }\n\n\t/** @description Allows you to select multiple cells within a grid by specifying arrays of row indices (cell ids) and corresponding column data fields.  For example: `grid.selectCells([0, 1, 2], ['firstName', 'quantity', 'date']);`  This will select the cells located at the intersection of:- Row 0 and the 'firstName' column,- Row 1 and the 'quantity' column,- Row 2 and the 'date' column.Each element in the id array matches with the element in the dataFields array by position, ensuring precise cell selection across different rows and columns. This method is useful for batch selection or applying simultaneous actions to multiple, non-contiguous cells. \n\t* @param {string} query. Search query\n\t*/\n    public selectCellsByQuery(query: string): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.selectCellsByQuery(query);\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.selectCellsByQuery(query);\n            });\n        }\n    }\n\n\t/** @description Selects grid cells based on a query string.  - Example 1: `grid.selectCellsByQuery('nancy');` selects all cells in the grid whose value is exactly 'nancy'.- Example 2: `grid.selectCellsByQuery('nancy, davolio');` selects all cells within rows where both 'nancy' and 'davolio' values appear in any columns of the same row.The query can be a single value or a comma-separated list of values. When multiple values are specified, only rows containing all the specified values (regardless of column order) will have their cells selected. \n\t* @param {string | number} rowId. The unique identifier of the row containing the cell.\n\t* @param {string} dataField. The data field of the column where the cell is located (e.g., 'firstName').\n\t* @param {string | number | Date | boolean} value. The new value to assign to the cell.\n\t*/\n    public setCellValue(rowId: string | number, dataField: string, value: string | number | Date | boolean): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.setCellValue(rowId, dataField, value);\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.setCellValue(rowId, dataField, value);\n            });\n        }\n    }\n\n\t/** @description Assigns a new value to a specific cell within a data table, targeting the cell by its unique row ID and the corresponding column's data field name. This allows precise updating of individual cell contents based on row and column identifiers. \n\t* @param {GridColumn[]} columns. Columns array.\n\t*/\n    public setColumns(columns: GridColumn[]): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.setColumns(columns);\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.setColumns(columns);\n            });\n        }\n    }\n\n\t/** @description Sets the columns displayed in the Grid to a new set defined by the provided argument. When 'setColumns' is called, the Grid compares the new columns array with the currently displayed columns. It will add any new columns, retain existing columns that are still present, and remove columns that are not included in the new array. After updating the columns, the Grid automatically redraws all column headers and refreshes all rows to reflect the changes. Importantly, any state associated with existing columns—such as sort order, filters, column width, and other configurable options—will be preserved for columns that remain after the update. This ensures that users do not lose their settings when columns are changed dynamically. \n\t* @param {string} dataField. The dataField identifier of the column (e.g., 'firstName').\n\t* @param {string} propertyName. The name of the column property to set (e.g., 'freeze', 'visible', 'width').\n\t* @param {any} value. The new value to assign to the specified column property.\n\t*/\n    public setColumnProperty(dataField: string, propertyName: string, value: any): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.setColumnProperty(dataField, propertyName, value);\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.setColumnProperty(dataField, propertyName, value);\n            });\n        }\n    }\n\n\t/** @description Sets or updates a specific property of a column identified by its dataField. This function allows you to dynamically modify column settings, such as freezing the column, toggling its visibility, adjusting its width, and altering other configurable attributes at runtime. Use this method to programmatically change how individual columns are displayed or behave within your data grid or table component. \n\t* @param {string | number} rowId. The unique identifier of the row to modify.\n\t* @param {string} propertyName. The name of the row property to set (e.g., 'freeze', 'expanded', 'customProperty').\n\t* @param {any} value. The new value to assign to the specified row property.\n\t*/\n    public setRowProperty(rowId: string | number, propertyName: string, value: any): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.setRowProperty(rowId, propertyName, value);\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.setRowProperty(rowId, propertyName, value);\n            });\n        }\n    }\n\n\t/** @description Updates or sets a specific property of a table row identified by its unique rowId. This function allows you to dynamically modify row attributes—for example, toggling the frozen state, applying custom styling, or adding arbitrary metadata—enabling flexible and responsive UI changes at the row level. \n\t* @param {string | number} rowId. The unique identifier of the row to style.\n\t* @param {{background?: string, color?: string, fontSize?: string, fontFamily?: string, textDecoration?: string, fontStyle?: string, fontWeight?: string}} rowStyle. An object specifying CSS style properties and values to apply to the entire row.\n\t*/\n    public setRowStyle(rowId: string | number, rowStyle: {background?: string, color?: string, fontSize?: string, fontFamily?: string, textDecoration?: string, fontStyle?: string, fontWeight?: string}): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.setRowStyle(rowId, rowStyle);\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.setRowStyle(rowId, rowStyle);\n            });\n        }\n    }\n\n\t/** @description Allows you to apply custom CSS styles to a specific table row, identified by its unique rowId. Supported style properties include background color, text color, font size, font family, text decoration, font style, and font weight. This enables granular control over the appearance of individual rows in your table, ensuring consistency with your application's design requirements. \n\t* @param {string | number} rowId. The unique identifier of the row containing the cell.\n\t* @param {string} dataField. The dataField (column) name of the cell to style.\n\t* @param {{background?: string, color?: string, fontSize?: string, fontFamily?: string, textDecoration?: string, fontStyle?: string, fontWeight?: string}} rowStyle. An object specifying CSS style properties and values to apply to the specific cell.\n\t*/\n    public setCellStyle(rowId: string | number, dataField: string, rowStyle: {background?: string, color?: string, fontSize?: string, fontFamily?: string, textDecoration?: string, fontStyle?: string, fontWeight?: string}): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.setCellStyle(rowId, dataField, rowStyle);\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.setCellStyle(rowId, dataField, rowStyle);\n            });\n        }\n    }\n\n\t/** @description Enhances a specific table cell's appearance by applying custom CSS styles, targeting the cell using both its unique rowId and the dataField (column identifier). You can specify a range of style properties, including background color, text color, font size, font family, text decoration, font style, and font weight, allowing precise control over the cell’s visual presentation. \n\t* @param {string} label. The label to be displayed in the dropdown button.\n\t*/\n    public setDropDownLabel(label: string): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.setDropDownLabel(label);\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.setDropDownLabel(label);\n            });\n        }\n    }\n\n\t/** @description Specifies the label text displayed for the Grid component when the 'dropDownMode' property is enabled. This label helps users identify the purpose or content of the Grid when it appears in drop-down mode. \n\t* @param {number} value. The new scroll position\n\t*/\n    public setVerticalScrollValue(value: number): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.setVerticalScrollValue(value);\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.setVerticalScrollValue(value);\n            });\n        }\n    }\n\n\t/** @description Sets the current position of the vertical scrollbar within a scrollable container or component. This method allows you to programmatically control the vertical scroll offset, typically specified in pixels or logical units from the top of the content. It can be used in conjunction with the getVerticalScrollValue method to retrieve the current scroll position, and with getVerticalScrollMax to determine the maximum scrollable value. This is useful for synchronizing scrolling behavior, implementing custom scroll controls, or restoring a previous scroll position. \n\t* @param {number} value. The new scroll position\n\t*/\n    public setHorizontalScrollValue(value: number): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.setHorizontalScrollValue(value);\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.setHorizontalScrollValue(value);\n            });\n        }\n    }\n\n\t/** @description Sets the current position of the horizontal scrollbar within a scrollable container. This method allows you to programmatically adjust the horizontal scroll offset, enabling smooth navigation or custom scroll behavior. It can be used in combination with getHorizontalScrollValue to retrieve the current scroll position, and with getHorizontalScrollMax to determine the maximum scrollable distance. This is useful for implementing features such as custom scrolling controls, restoring previous scroll positions, or synchronizing scrolling across multiple elements. \n\t*/\n    public closeSidePanel(): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.closeSidePanel();\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.closeSidePanel();\n            });\n        }\n    }\n\n\t/** @description Closes the side panel component of the Grid interface, hiding any currently displayed content or options and returning the Grid to its default view. \n\t* @param {any} content. This is the content which will be displayed in the side panel. It can be String, HTML Element, HTML Template Element or Component\n\t* @param {number} width?. This is the width of the side panel\n\t* @param {any} callback?. Function called when the panel is opened. It can be used for dynamically showing content and initializing it.\n\t*/\n    public openSidePanel(content: any, width?: number, callback?: any): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.openSidePanel(content, width, callback);\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.openSidePanel(content, width, callback);\n            });\n        }\n    }\n\n\t/** @description Displays the Grid's side panel, and displays Element in it. This is useful if you have HTML Element on a page and want to move it and display it as a Side panel of the Grid. \n\t* @param {any} content. This is the content which will be displayed in the side panel. It can be String, HTML Element, HTML Template Element or Component\n\t* @param {number} width?. This is the width of the side panel\n\t* @param {any} callback?. Function called when the panel is opened. It can be used for dynamically showing content and initializing it.\n\t*/\n    public showSidePanel(content: any, width?: number, callback?: any): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.showSidePanel(content, width, callback);\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.showSidePanel(content, width, callback);\n            });\n        }\n    }\n\n\t/** @description Displays the Grid's side panel showing custom content in it. It creates a clone of the content and displays it. \n\t* @param {string | number} rowId. row bound id\n\t*/\n    public showDetail(rowId: string | number): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.showDetail(rowId);\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.showDetail(rowId);\n            });\n        }\n    }\n\n\t/** @description Renders an in-depth view of a selected row when the row details feature is activated in the grid configuration. This allows users to access and interact with additional information or actions related to the chosen row. \n\t* @param {string | number} rowId. row bound id\n\t* @param {string} dataField. column bound data field. For example, if you have a column with dataField: 'firstName', set 'firstName' here.\n\t* @param {string} value. The message to be shown below the cell\n\t*/\n    public showCellMessage(rowId: string | number, dataField: string, value: string): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.showCellMessage(rowId, dataField, value);\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.showCellMessage(rowId, dataField, value);\n            });\n        }\n    }\n\n\t/** @description Displays a visually distinct overlay message positioned directly beneath a specific cell. This method is ideal for providing contextual onboarding tips, user guidance, or delivering custom messages tailored to the user's current interaction. It enhances user experience by presenting timely and relevant information without interrupting workflow. \n\t* @param {string | number} rowId. row bound id\n\t* @param {any} data. row data matching the data source\n\t* @param {{(row: GridRow): void}} callback?. Sets a callback function, which is called after the row is updated. The callback's argument is the updated row.\n\t*/\n    public updateRow(rowId: string | number, data: any, callback?: {(row: GridRow): void}): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.updateRow(rowId, data, callback);\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.updateRow(rowId, data, callback);\n            });\n        }\n    }\n\n\t/** @description Updates the data of a specific row identified by its unique row ID. When batch editing mode is enabled, the changes to the row are temporarily staged and will not be permanently saved to the data source until the user explicitly commits or saves the batch of edits. This ensures that multiple changes can be reviewed and either all applied or discarded together, rather than being immediately written to the underlying data. \n\t* @param {string | number} rowId. row bound id\n\t* @param {string} dataField?. column bound data field. For example, if you have a column with dataField: 'firstName', set 'firstName' here.\n\t*/\n    public unselect(rowId: string | number, dataField?: string): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.unselect(rowId, dataField);\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.unselect(rowId, dataField);\n            });\n        }\n    }\n\n\t/** @description Deselects a previously selected row, cell, or column within the data grid, removing any associated highlight or selection state. \n\t* @param {string | number} rowId. row bound id\n\t*/\n    public uncheckRow(rowId: string | number): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.uncheckRow(rowId);\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.uncheckRow(rowId);\n            });\n        }\n    }\n\n\t/** @description Unchecks a specific row in the TreeGrid by setting its associated checkbox to an unchecked (false) state. This visually updates the checkbox in the UI and updates the row’s checked status in the underlying data model. \n\t*/\n    public uncheckAllRows(): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.uncheckAllRows();\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.uncheckAllRows();\n            });\n        }\n    }\n\n\t/** @description Resets the checked state of all rows in a TreeGrid or GroupingGrid by setting every checkbox to unchecked (`false`). This action ensures that no rows remain selected or checked, effectively deselecting all items in the grid. \n\t* @param {string | number} rowId. The ID of the row to toggle expand/collapse state.\n\t*/\n    public toggleRow(rowId: string | number): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.toggleRow(rowId);\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.toggleRow(rowId);\n            });\n        }\n    }\n\n\t/** @description Toggles the expanded or collapsed state of a TreeGrid row specified by the provided row ID. If the target row is currently collapsed, this action will expand it to reveal its child rows. Conversely, if the row is expanded, it will collapse and hide any child rows. Use this function to dynamically show or hide hierarchical data within the TreeGrid based on user interaction or programmatic control. \n\t* @param {string} dataField. The dataField of the Column.\n\t* @param {number} columnWidth?. The width of the Column.\n\t* @param {any} initColumn?. callback for set up of the column.\n\t*/\n    public transpose(dataField: string, columnWidth?: number, initColumn?: any): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.transpose(dataField, columnWidth, initColumn);\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.transpose(dataField, columnWidth, initColumn);\n            });\n        }\n    }\n\n\t/** @description Transposes the Grid. \n\t* @param {string} locale. The locale abbreviation. For example: 'de'.\n\t* @param {any} messages?. Object containing the locale messages.\n\t*/\n    public setLocale(locale: string, messages?: any): void {\n        if (this.nativeElement.isRendered) {\n            this.nativeElement.setLocale(locale, messages);\n        }\n        else\n        {\n            this.nativeElement.whenRendered(() => {\n                this.nativeElement.setLocale(locale, messages);\n            });\n        }\n    }\n\n\n\tget isRendered(): boolean {\n\t\treturn this.nativeElement ? this.nativeElement.isRendered : false;\n\t}\n\n\tngOnInit() {\n\t}\n\n    ngAfterViewInit() {\n      const that = this;\n\n      that.onCreate.emit(that.nativeElement);\n\n\t\tif (Smart) Smart.Render();\n\n\t\tthis.nativeElement.classList.add('smart-angular');\n\n\t\tif (this.nativeElement.whenRendered) this.nativeElement.whenRendered(() => { that.onReady.emit(that.nativeElement); });\n\t\tthis.listen();\n\t}\n\n\tngOnDestroy() {\n\t\tthis.unlisten();\n\t}\n\n\tngOnChanges(changes: SimpleChanges) {\n\t\tif (this.nativeElement && this.nativeElement.isRendered) {\n\t\t\tfor (const propName in changes) {\n\t\t\t\tif (changes.hasOwnProperty(propName)) {\n\t\t\t\t\tthis.nativeElement[propName] = changes[propName].currentValue;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/** @description Add event listeners. */\n\tprivate listen(): void {\n        const that = this;\n\t\tthat.eventHandlers['beginEditHandler'] = (event: CustomEvent) => { that.onBeginEdit.emit(event); }\n\t\tthat.nativeElement.addEventListener('beginEdit', that.eventHandlers['beginEditHandler']);\n\n\t\tthat.eventHandlers['batchChangeHandler'] = (event: CustomEvent) => { that.onBatchChange.emit(event); }\n\t\tthat.nativeElement.addEventListener('batchChange', that.eventHandlers['batchChangeHandler']);\n\n\t\tthat.eventHandlers['batchCancelHandler'] = (event: CustomEvent) => { that.onBatchCancel.emit(event); }\n\t\tthat.nativeElement.addEventListener('batchCancel', that.eventHandlers['batchCancelHandler']);\n\n\t\tthat.eventHandlers['changeHandler'] = (event: CustomEvent) => { that.onChange.emit(event); }\n\t\tthat.nativeElement.addEventListener('change', that.eventHandlers['changeHandler']);\n\n\t\tthat.eventHandlers['columnClickHandler'] = (event: CustomEvent) => { that.onColumnClick.emit(event); }\n\t\tthat.nativeElement.addEventListener('columnClick', that.eventHandlers['columnClickHandler']);\n\n\t\tthat.eventHandlers['columnDoubleClickHandler'] = (event: CustomEvent) => { that.onColumnDoubleClick.emit(event); }\n\t\tthat.nativeElement.addEventListener('columnDoubleClick', that.eventHandlers['columnDoubleClickHandler']);\n\n\t\tthat.eventHandlers['columnResizeHandler'] = (event: CustomEvent) => { that.onColumnResize.emit(event); }\n\t\tthat.nativeElement.addEventListener('columnResize', that.eventHandlers['columnResizeHandler']);\n\n\t\tthat.eventHandlers['columnDragStartHandler'] = (event: CustomEvent) => { that.onColumnDragStart.emit(event); }\n\t\tthat.nativeElement.addEventListener('columnDragStart', that.eventHandlers['columnDragStartHandler']);\n\n\t\tthat.eventHandlers['columnChangeHandler'] = (event: CustomEvent) => { that.onColumnChange.emit(event); }\n\t\tthat.nativeElement.addEventListener('columnChange', that.eventHandlers['columnChangeHandler']);\n\n\t\tthat.eventHandlers['columnDraggingHandler'] = (event: CustomEvent) => { that.onColumnDragging.emit(event); }\n\t\tthat.nativeElement.addEventListener('columnDragging', that.eventHandlers['columnDraggingHandler']);\n\n\t\tthat.eventHandlers['columnDragEndHandler'] = (event: CustomEvent) => { that.onColumnDragEnd.emit(event); }\n\t\tthat.nativeElement.addEventListener('columnDragEnd', that.eventHandlers['columnDragEndHandler']);\n\n\t\tthat.eventHandlers['columnReorderHandler'] = (event: CustomEvent) => { that.onColumnReorder.emit(event); }\n\t\tthat.nativeElement.addEventListener('columnReorder', that.eventHandlers['columnReorderHandler']);\n\n\t\tthat.eventHandlers['commentAddHandler'] = (event: CustomEvent) => { that.onCommentAdd.emit(event); }\n\t\tthat.nativeElement.addEventListener('commentAdd', that.eventHandlers['commentAddHandler']);\n\n\t\tthat.eventHandlers['commentRemoveHandler'] = (event: CustomEvent) => { that.onCommentRemove.emit(event); }\n\t\tthat.nativeElement.addEventListener('commentRemove', that.eventHandlers['commentRemoveHandler']);\n\n\t\tthat.eventHandlers['contextMenuItemClickHandler'] = (event: CustomEvent) => { that.onContextMenuItemClick.emit(event); }\n\t\tthat.nativeElement.addEventListener('contextMenuItemClick', that.eventHandlers['contextMenuItemClickHandler']);\n\n\t\tthat.eventHandlers['rowDragStartHandler'] = (event: CustomEvent) => { that.onRowDragStart.emit(event); }\n\t\tthat.nativeElement.addEventListener('rowDragStart', that.eventHandlers['rowDragStartHandler']);\n\n\t\tthat.eventHandlers['rowDraggingHandler'] = (event: CustomEvent) => { that.onRowDragging.emit(event); }\n\t\tthat.nativeElement.addEventListener('rowDragging', that.eventHandlers['rowDraggingHandler']);\n\n\t\tthat.eventHandlers['rowDragEndHandler'] = (event: CustomEvent) => { that.onRowDragEnd.emit(event); }\n\t\tthat.nativeElement.addEventListener('rowDragEnd', that.eventHandlers['rowDragEndHandler']);\n\n\t\tthat.eventHandlers['rowReorderHandler'] = (event: CustomEvent) => { that.onRowReorder.emit(event); }\n\t\tthat.nativeElement.addEventListener('rowReorder', that.eventHandlers['rowReorderHandler']);\n\n\t\tthat.eventHandlers['rowExpandHandler'] = (event: CustomEvent) => { that.onRowExpand.emit(event); }\n\t\tthat.nativeElement.addEventListener('rowExpand', that.eventHandlers['rowExpandHandler']);\n\n\t\tthat.eventHandlers['rowCollapseHandler'] = (event: CustomEvent) => { that.onRowCollapse.emit(event); }\n\t\tthat.nativeElement.addEventListener('rowCollapse', that.eventHandlers['rowCollapseHandler']);\n\n\t\tthat.eventHandlers['rowClickHandler'] = (event: CustomEvent) => { that.onRowClick.emit(event); }\n\t\tthat.nativeElement.addEventListener('rowClick', that.eventHandlers['rowClickHandler']);\n\n\t\tthat.eventHandlers['rowDoubleClickHandler'] = (event: CustomEvent) => { that.onRowDoubleClick.emit(event); }\n\t\tthat.nativeElement.addEventListener('rowDoubleClick', that.eventHandlers['rowDoubleClickHandler']);\n\n\t\tthat.eventHandlers['rowResizeHandler'] = (event: CustomEvent) => { that.onRowResize.emit(event); }\n\t\tthat.nativeElement.addEventListener('rowResize', that.eventHandlers['rowResizeHandler']);\n\n\t\tthat.eventHandlers['rowStarredHandler'] = (event: CustomEvent) => { that.onRowStarred.emit(event); }\n\t\tthat.nativeElement.addEventListener('rowStarred', that.eventHandlers['rowStarredHandler']);\n\n\t\tthat.eventHandlers['cellClickHandler'] = (event: CustomEvent) => { that.onCellClick.emit(event); }\n\t\tthat.nativeElement.addEventListener('cellClick', that.eventHandlers['cellClickHandler']);\n\n\t\tthat.eventHandlers['cellDoubleClickHandler'] = (event: CustomEvent) => { that.onCellDoubleClick.emit(event); }\n\t\tthat.nativeElement.addEventListener('cellDoubleClick', that.eventHandlers['cellDoubleClickHandler']);\n\n\t\tthat.eventHandlers['endEditHandler'] = (event: CustomEvent) => { that.onEndEdit.emit(event); }\n\t\tthat.nativeElement.addEventListener('endEdit', that.eventHandlers['endEditHandler']);\n\n\t\tthat.eventHandlers['filterHandler'] = (event: CustomEvent) => { that.onFilter.emit(event); }\n\t\tthat.nativeElement.addEventListener('filter', that.eventHandlers['filterHandler']);\n\n\t\tthat.eventHandlers['groupHandler'] = (event: CustomEvent) => { that.onGroup.emit(event); }\n\t\tthat.nativeElement.addEventListener('group', that.eventHandlers['groupHandler']);\n\n\t\tthat.eventHandlers['openColumnDialogHandler'] = (event: CustomEvent) => { that.onOpenColumnDialog.emit(event); }\n\t\tthat.nativeElement.addEventListener('openColumnDialog', that.eventHandlers['openColumnDialogHandler']);\n\n\t\tthat.eventHandlers['closeColumnDialogHandler'] = (event: CustomEvent) => { that.onCloseColumnDialog.emit(event); }\n\t\tthat.nativeElement.addEventListener('closeColumnDialog', that.eventHandlers['closeColumnDialogHandler']);\n\n\t\tthat.eventHandlers['resizeHandler'] = (event: CustomEvent) => { that.onResize.emit(event); }\n\t\tthat.nativeElement.addEventListener('resize', that.eventHandlers['resizeHandler']);\n\n\t\tthat.eventHandlers['rowTapHandler'] = (event: CustomEvent) => { that.onRowTap.emit(event); }\n\t\tthat.nativeElement.addEventListener('rowTap', that.eventHandlers['rowTapHandler']);\n\n\t\tthat.eventHandlers['cellTapHandler'] = (event: CustomEvent) => { that.onCellTap.emit(event); }\n\t\tthat.nativeElement.addEventListener('cellTap', that.eventHandlers['cellTapHandler']);\n\n\t\tthat.eventHandlers['pageHandler'] = (event: CustomEvent) => { that.onPage.emit(event); }\n\t\tthat.nativeElement.addEventListener('page', that.eventHandlers['pageHandler']);\n\n\t\tthat.eventHandlers['sortHandler'] = (event: CustomEvent) => { that.onSort.emit(event); }\n\t\tthat.nativeElement.addEventListener('sort', that.eventHandlers['sortHandler']);\n\n\t\tthat.eventHandlers['scrollBottomReachedHandler'] = (event: CustomEvent) => { that.onScrollBottomReached.emit(event); }\n\t\tthat.nativeElement.addEventListener('scrollBottomReached', that.eventHandlers['scrollBottomReachedHandler']);\n\n\t\tthat.eventHandlers['scrollTopReachedHandler'] = (event: CustomEvent) => { that.onScrollTopReached.emit(event); }\n\t\tthat.nativeElement.addEventListener('scrollTopReached', that.eventHandlers['scrollTopReachedHandler']);\n\n\t}\n\n\t/** @description Remove event listeners. */\n\tprivate unlisten(): void {\n        const that = this;\n\t\tif (that.eventHandlers['beginEditHandler']) {\n\t\t\tthat.nativeElement.removeEventListener('beginEdit', that.eventHandlers['beginEditHandler']);\n\t\t}\n\n\t\tif (that.eventHandlers['batchChangeHandler']) {\n\t\t\tthat.nativeElement.removeEventListener('batchChange', that.eventHandlers['batchChangeHandler']);\n\t\t}\n\n\t\tif (that.eventHandlers['batchCancelHandler']) {\n\t\t\tthat.nativeElement.removeEventListener('batchCancel', that.eventHandlers['batchCancelHandler']);\n\t\t}\n\n\t\tif (that.eventHandlers['changeHandler']) {\n\t\t\tthat.nativeElement.removeEventListener('change', that.eventHandlers['changeHandler']);\n\t\t}\n\n\t\tif (that.eventHandlers['columnClickHandler']) {\n\t\t\tthat.nativeElement.removeEventListener('columnClick', that.eventHandlers['columnClickHandler']);\n\t\t}\n\n\t\tif (that.eventHandlers['columnDoubleClickHandler']) {\n\t\t\tthat.nativeElement.removeEventListener('columnDoubleClick', that.eventHandlers['columnDoubleClickHandler']);\n\t\t}\n\n\t\tif (that.eventHandlers['columnResizeHandler']) {\n\t\t\tthat.nativeElement.removeEventListener('columnResize', that.eventHandlers['columnResizeHandler']);\n\t\t}\n\n\t\tif (that.eventHandlers['columnDragStartHandler']) {\n\t\t\tthat.nativeElement.removeEventListener('columnDragStart', that.eventHandlers['columnDragStartHandler']);\n\t\t}\n\n\t\tif (that.eventHandlers['columnChangeHandler']) {\n\t\t\tthat.nativeElement.removeEventListener('columnChange', that.eventHandlers['columnChangeHandler']);\n\t\t}\n\n\t\tif (that.eventHandlers['columnDraggingHandler']) {\n\t\t\tthat.nativeElement.removeEventListener('columnDragging', that.eventHandlers['columnDraggingHandler']);\n\t\t}\n\n\t\tif (that.eventHandlers['columnDragEndHandler']) {\n\t\t\tthat.nativeElement.removeEventListener('columnDragEnd', that.eventHandlers['columnDragEndHandler']);\n\t\t}\n\n\t\tif (that.eventHandlers['columnReorderHandler']) {\n\t\t\tthat.nativeElement.removeEventListener('columnReorder', that.eventHandlers['columnReorderHandler']);\n\t\t}\n\n\t\tif (that.eventHandlers['commentAddHandler']) {\n\t\t\tthat.nativeElement.removeEventListener('commentAdd', that.eventHandlers['commentAddHandler']);\n\t\t}\n\n\t\tif (that.eventHandlers['commentRemoveHandler']) {\n\t\t\tthat.nativeElement.removeEventListener('commentRemove', that.eventHandlers['commentRemoveHandler']);\n\t\t}\n\n\t\tif (that.eventHandlers['contextMenuItemClickHandler']) {\n\t\t\tthat.nativeElement.removeEventListener('contextMenuItemClick', that.eventHandlers['contextMenuItemClickHandler']);\n\t\t}\n\n\t\tif (that.eventHandlers['rowDragStartHandler']) {\n\t\t\tthat.nativeElement.removeEventListener('rowDragStart', that.eventHandlers['rowDragStartHandler']);\n\t\t}\n\n\t\tif (that.eventHandlers['rowDraggingHandler']) {\n\t\t\tthat.nativeElement.removeEventListener('rowDragging', that.eventHandlers['rowDraggingHandler']);\n\t\t}\n\n\t\tif (that.eventHandlers['rowDragEndHandler']) {\n\t\t\tthat.nativeElement.removeEventListener('rowDragEnd', that.eventHandlers['rowDragEndHandler']);\n\t\t}\n\n\t\tif (that.eventHandlers['rowReorderHandler']) {\n\t\t\tthat.nativeElement.removeEventListener('rowReorder', that.eventHandlers['rowReorderHandler']);\n\t\t}\n\n\t\tif (that.eventHandlers['rowExpandHandler']) {\n\t\t\tthat.nativeElement.removeEventListener('rowExpand', that.eventHandlers['rowExpandHandler']);\n\t\t}\n\n\t\tif (that.eventHandlers['rowCollapseHandler']) {\n\t\t\tthat.nativeElement.removeEventListener('rowCollapse', that.eventHandlers['rowCollapseHandler']);\n\t\t}\n\n\t\tif (that.eventHandlers['rowClickHandler']) {\n\t\t\tthat.nativeElement.removeEventListener('rowClick', that.eventHandlers['rowClickHandler']);\n\t\t}\n\n\t\tif (that.eventHandlers['rowDoubleClickHandler']) {\n\t\t\tthat.nativeElement.removeEventListener('rowDoubleClick', that.eventHandlers['rowDoubleClickHandler']);\n\t\t}\n\n\t\tif (that.eventHandlers['rowResizeHandler']) {\n\t\t\tthat.nativeElement.removeEventListener('rowResize', that.eventHandlers['rowResizeHandler']);\n\t\t}\n\n\t\tif (that.eventHandlers['rowStarredHandler']) {\n\t\t\tthat.nativeElement.removeEventListener('rowStarred', that.eventHandlers['rowStarredHandler']);\n\t\t}\n\n\t\tif (that.eventHandlers['cellClickHandler']) {\n\t\t\tthat.nativeElement.removeEventListener('cellClick', that.eventHandlers['cellClickHandler']);\n\t\t}\n\n\t\tif (that.eventHandlers['cellDoubleClickHandler']) {\n\t\t\tthat.nativeElement.removeEventListener('cellDoubleClick', that.eventHandlers['cellDoubleClickHandler']);\n\t\t}\n\n\t\tif (that.eventHandlers['endEditHandler']) {\n\t\t\tthat.nativeElement.removeEventListener('endEdit', that.eventHandlers['endEditHandler']);\n\t\t}\n\n\t\tif (that.eventHandlers['filterHandler']) {\n\t\t\tthat.nativeElement.onfilterHandler = null;\n\t\t}\n\n\t\tif (that.eventHandlers['groupHandler']) {\n\t\t\tthat.nativeElement.removeEventListener('group', that.eventHandlers['groupHandler']);\n\t\t}\n\n\t\tif (that.eventHandlers['openColumnDialogHandler']) {\n\t\t\tthat.nativeElement.removeEventListener('openColumnDialog', that.eventHandlers['openColumnDialogHandler']);\n\t\t}\n\n\t\tif (that.eventHandlers['closeColumnDialogHandler']) {\n\t\t\tthat.nativeElement.removeEventListener('closeColumnDialog', that.eventHandlers['closeColumnDialogHandler']);\n\t\t}\n\n\t\tif (that.eventHandlers['resizeHandler']) {\n\t\t\tthat.nativeElement.removeEventListener('resize', that.eventHandlers['resizeHandler']);\n\t\t}\n\n\t\tif (that.eventHandlers['rowTapHandler']) {\n\t\t\tthat.nativeElement.removeEventListener('rowTap', that.eventHandlers['rowTapHandler']);\n\t\t}\n\n\t\tif (that.eventHandlers['cellTapHandler']) {\n\t\t\tthat.nativeElement.removeEventListener('cellTap', that.eventHandlers['cellTapHandler']);\n\t\t}\n\n\t\tif (that.eventHandlers['pageHandler']) {\n\t\t\tthat.nativeElement.removeEventListener('page', that.eventHandlers['pageHandler']);\n\t\t}\n\n\t\tif (that.eventHandlers['sortHandler']) {\n\t\t\tthat.nativeElement.removeEventListener('sort', that.eventHandlers['sortHandler']);\n\t\t}\n\n\t\tif (that.eventHandlers['scrollBottomReachedHandler']) {\n\t\t\tthat.nativeElement.removeEventListener('scrollBottomReached', that.eventHandlers['scrollBottomReachedHandler']);\n\t\t}\n\n\t\tif (that.eventHandlers['scrollTopReachedHandler']) {\n\t\t\tthat.nativeElement.removeEventListener('scrollTopReached', that.eventHandlers['scrollTopReachedHandler']);\n\t\t}\n\n\t}\n}\n","import { NgModule } from '@angular/core';\n\nimport { GridComponent } from './smart.grid';\nimport { CUSTOM_ELEMENTS_SCHEMA  } from '@angular/core';\n\n@NgModule({\n    declarations: [GridComponent],\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\texports: [GridComponent]\n})\n\nexport class GridModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}