/// <reference path="../../index.d.ts" />
import type FeatureTable from "@arcgis/core/widgets/FeatureTable.js";
import type RelationshipColumn from "@arcgis/core/widgets/FeatureTable/RelationshipColumn.js";
import type GroupColumn from "@arcgis/core/widgets/FeatureTable/Grid/GroupColumn.js";
import type Column from "@arcgis/core/widgets/FeatureTable/Grid/Column.js";
import type AttachmentsColumn from "@arcgis/core/widgets/FeatureTable/AttachmentsColumn.js";
import type ActionColumn from "@arcgis/core/widgets/FeatureTable/ActionColumn.js";
import type LinkChartView from "@arcgis/core/views/LinkChartView.js";
import type AttributeTableTemplate from "@arcgis/core/tables/AttributeTableTemplate.js";
import type Collection from "@arcgis/core/core/Collection.js";
import type AttachmentsViewOptions from "@arcgis/core/widgets/FeatureTable/support/AttachmentsViewOptions.js";
import type FieldColumn from "@arcgis/core/widgets/FeatureTable/FieldColumn.js";
import type LayerView from "@arcgis/core/views/layers/LayerView.js";
import type Relationship from "@arcgis/core/layers/support/Relationship.js";
import type SelectionManager from "@arcgis/core/views/SelectionManager.js";
import type TableTemplate from "@arcgis/core/widgets/FeatureTable/support/TableTemplate.js";
import type TimeExtent from "@arcgis/core/time/TimeExtent.js";
import type { PublicLitElement as LitElement } from "@arcgis/lumina";
import type { ArcgisReferenceElement, IconName } from "../types.js";
import type { FeatureStoreItem, ActionColumnConfig, FeatureTableSupportedFilters, ColumnSortOrder, FeatureTableSupportedLayer } from "@arcgis/core/widgets/FeatureTable/support/types.js";
import type { CollectionChangeEvent } from "@arcgis/core/core/Collection.js";
import type { DiscardPendingEditsParameters, FeatureStoreEdits, TableInteractionColumnReorderEvent, TableInteractionCellPointeroverEvent, TableInteractionCellPointeroutEvent, TableInteractionCellKeydownEvent, TableInteractionCellClickEvent, TableInteractionCellDblclickEvent, TableMenuConfig, GridMultiSortPriority, FeatureTableState } from "@arcgis/core/widgets/FeatureTable/Grid/types.js";
import type { MapViewOrSceneView } from "@arcgis/core/views/MapViewOrSceneView.js";
import type { FeatureTableDescriptionFunction, FeatureTableTitleFunction } from "@arcgis/core/widgets/FeatureTable.js";
import type { GeometryUnion } from "@arcgis/core/geometry/types.js";
import type { ObjectId } from "@arcgis/core/views/types.js";
import type { Icon } from "@esri/calcite-components/components/calcite-icon";

/**
 * The Feature Table component provides an interactive tabular view of each feature's attributes in a feature layer.
 *
 * @since 4.31
 */
export abstract class ArcgisFeatureTable extends LitElement {
  /**
   * Reference to the current [action column](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/ActionColumn/). This column is only generated if a [configuration](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/#actionColumnConfig) has been provided.
   *
   * @since 4.33
   * @see [actionColumnConfig](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/#actionColumnConfig)
   */
  get actionColumn(): ActionColumn | null | undefined;
  /**
   * Configuration for the [ActionColumn](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/ActionColumn/).
   * This property allows for customizing the action column's appearance and behavior.
   * The action column is a column that contains interactive buttons for each row.
   * These buttons can be used to perform actions such as editing, deleting, or
   * viewing additional information about a feature. This column is displayed as the
   * last column in the table and is only displayed if this property is set.
   *
   * ![featuretable action column](https://developers.arcgis.com/javascript/latest/assets/references/core/widgets/featuretable/action-column.avif)
   *
   * @since 4.30
   * @see [actionColumn](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/#actionColumn)
   * @see [ActionColumn](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/ActionColumn/)
   * @see [Calcite Icon Search](https://developers.arcgis.com/calcite-design-system/icons/)
   * @see [Sample - FeatureTable with row highlighting](https://developers.arcgis.com/javascript/latest/sample-code/widgets-featuretable-row-highlights/)
   * @example
   * // The following snippet demonstrates how to configure an action column that adds a button
   * // to each row which allows an end-user to zoom to the associated row's feature within the view.
   * featureTable.actionColumnConfig = {
   *   label: "Go to feature",
   *    icon: "zoom-to-object",
   *    callback: (params) => {
   *     view.goTo(params.feature);
   *  }
   * }
   */
  accessor actionColumnConfig: ActionColumnConfig | null | undefined;
  /**
   * A read-only property indicating the type of filter used by the table.
   * It returns either filters by geometry or selections using a row's object ID.
   *
   * @see [Sample - FeatureTable using a map](https://developers.arcgis.com/javascript/latest/sample-code/widgets-featuretable-map/)
   */
  get activeFilters(): Collection<FeatureTableSupportedFilters>;
  /**
   * Use this read-only property if needing to query features while retaining
   * a column's sort order.
   *
   * @default []
   * @since 4.25
   */
  get activeSortOrders(): Array<ColumnSortOrder>;
  /**
   * A flattened array of all [columns](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/Grid/Column/) within the table, including nested columns. Take note that [group columns](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/Grid/GroupColumn/) are separate entries. This property is useful when applying
   * updates to all columns, including nested columns, as it provides ease of use when iterating through all columns in the table.
   *
   * @since 4.33
   */
  get allColumns(): Array<Column>;
  /**
   * Indicates the table is displaying all related tables in "show all" mode.
   *
   * @default false
   * @since 4.31
   */
  get allRelatedTablesVisible(): boolean;
  /**
   * A flattened array of all visible [columns](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/Grid/Column/) within the table, including nested columns. [Group columns](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/Grid/GroupColumn/) are separate entries.
   *
   * @since 4.33
   */
  get allVisibleColumns(): Array<Column>;
  /**
   * A flattened array of all [attachment columns](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/AttachmentsColumn/) within the table, including nested columns.
   *
   * @since 4.33
   */
  get attachmentsColumns(): Array<AttachmentsColumn>;
  /**
   * Indicates whether to display the `Attachments` field in the table. It displays the count of attachments per feature and is only applicable if the feature layer [supports attachments](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/#capabilities).
   *
   * ![featuretable attachmentsEnabled](https://developers.arcgis.com/javascript/latest/assets/references/core/widgets/featuretable/attachments-enabled.avif)
   *
   * @default false
   * @see [FeatureLayer.capabilities.data.supportsAttachment](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/#capabilities)
   */
  accessor attachmentsEnabled: boolean;
  /**
   * This read-only property provides the the configuration options for the attachments view.
   *
   * @since 4.33
   */
  accessor attachmentsViewOptions: AttachmentsViewOptions;
  /**
   * Use this property to configure how columns display within the table in regard to visibility, column order, and sorting.
   *
   * > [!WARNING]
   * >
   * > This property differs from the [tableTemplate](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/#tableTemplate) property. The `tableTemplate` property provides more fine-grained control over how the table is rendered within the application by offering more advanced configurations such as custom cell rendering, column formatting, and more. It is useful for application-level development that remains within an application. Use the [attributeTableTemplate](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/#attributeTableTemplate) property to access the table's settings across different applications. By using this property, the settings can be saved within a webmap or layer. Please refer to the [AttributeTableTemplate](https://developers.arcgis.com/javascript/latest/references/core/tables/AttributeTableTemplate/) and [TableTemplate](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/support/TableTemplate/) documentation for more information.
   *
   * @since 4.31
   * @see [Sample - FeatureTable Component](https://developers.arcgis.com/javascript/latest/sample-code/feature-table/)
   */
  accessor attributeTableTemplate: AttributeTableTemplate | null | undefined;
  /**
   * If true, the component will not be destroyed automatically when it is
   * disconnected from the document. This is useful when you want to move the
   * component to a different place on the page, or temporarily hide it. If this
   * is set, make sure to call the [destroy()](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-feature-table/#destroy) method when you are done to
   * prevent memory leaks.
   *
   * @default false
   */
  accessor autoDestroyDisabled: boolean;
  /**
   * Indicates whether the table should automatically refresh when the underlying data changes.
   *
   * @default false
   */
  accessor autoRefreshDisabled: boolean;
  /**
   * Indicates whether the table should automatically save when the underlying data changes.
   *
   * @default false
   * @since 5.0
   */
  accessor autoSaveDisabled: boolean;
  /**
   * Indicates whether the table supports adding a related record based on the current relationship
   * configuration. This accounts for whether table is currently configured to show related features.
   * If the table is not displaying related features, then the value of this property is always false.
   *
   * @default false
   * @since 5.0
   */
  get canAddRelatedFeature(): boolean;
  /**
   * Indicates whether the primary panel is closed. Once the panel is closed, the panel must be re-opened programmatically.
   *
   * @default false
   * @since 5.1
   */
  accessor closed: boolean;
  /**
   * Indicates whether the primary panel is collapsed. This only applies if the 'showCollapse' property has also been set to true.
   *
   * @default false
   * @since 5.1
   */
  accessor collapsed: boolean;
  /**
   * Indicates whether to enable the table's column performance mode.
   * This mode is designed to improve the performance of the table when working with a large number of columns.
   *
   * @default false
   */
  accessor columnPerformanceModeDisabled: boolean;
  /**
   * Indicates whether the table should allow reordering of columns.
   *
   * @default false
   */
  accessor columnReorderingDisabled: boolean;
  /**
   * A read-only collection of column, field, group, action, attachment,
   * and relationship columns that are displayed within the table.
   */
  get columns(): Collection<Column>;
  /**
   * The SQL where clause used to filter features visible in the table. Only the features that satisfy the definition
   * expression are displayed in the table. This value takes priority over any definition expression set on the
   * associated layer.
   *
   * @since 4.33
   */
  accessor definitionExpression: string | null | undefined;
  /**
   * Text displayed in the table header, under the title. This can be a basic string or custom function that returns a string. This is useful in situations where additional context is needed for the table.
   *
   * @since 4.30
   */
  accessor description: string | FeatureTableDescriptionFunction | null | undefined;
  /**
   * When true, the component is visually withdrawn and cannot receive user interaction.
   *
   * @default false
   * @since 5.0
   */
  accessor disabled: boolean;
  /**
   * Indicates whether [editing](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/#editing-in-featuretable) is enabled on the data within the feature table. Double-clicking in a cell will enable editing for that value. In order to edit a feature, the layer must be editable and the user must have the appropriate permissions. In addition, the layer must contain an object ID field.
   *
   * @default false
   * @since 4.16
   * @see [Editing within the FeatureTable](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/#editing-in-featuretable)
   * @see [Sample - FeatureTable with editing enabled](https://developers.arcgis.com/javascript/latest/sample-code/widgets-featuretable-editing/)
   * @see [Sample - FeatureTable with related data](https://developers.arcgis.com/javascript/latest/sample-code/widgets-featuretable-relates/)
   */
  accessor editingEnabled: boolean;
  /**
   * Total number of records displayed in the table's current view.
   *
   * @since 4.31
   */
  get effectiveSize(): number;
  /**
   * A flattened array of all [field columns](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/FieldColumn/) within the table, including nested columns.
   *
   * @since 4.33
   */
  get fieldColumns(): Array<FieldColumn>;
  /**
   * Indicates whether the table respects layer view scale visibility. If no view is provided, this property is ignored.
   * The table is empty when no layer view is available or when the layer view is not visible at the current scale.
   *
   * @default false
   * @since 5.1
   */
  accessor filterByLayerScaleRange: boolean;
  /**
   * Indicates whether the table only displays rows that are considered selected. Row selection can be modified by adding or removing associated object IDs from `highlightIds`. This will cause the store to fetch fresh features to ensure the expected sort order is honored.
   *
   * @default false
   * @since 4.30
   * @see [Sample - FeatureTable with related data](https://developers.arcgis.com/javascript/latest/sample-code/widgets-featuretable-relates/)
   */
  accessor filterBySelectionEnabled: boolean;
  /**
   * Indicates that the table should only display rows for features that are currently in the view's extent.
   * This property has no effect if the table has not been provided a view. If this property is true, the view's extent
   * will overwrite the current value of [filterGeometry](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-feature-table/#filterGeometry).
   *
   * @default false
   * @since 5.1
   */
  accessor filterByViewExtent: boolean;
  /**
   * Set this property to filter the features displayed in the table. It accepts a [Geometry](https://developers.arcgis.com/javascript/latest/references/core/geometry/Geometry/), e.g. [Extent](https://developers.arcgis.com/javascript/latest/references/core/geometry/Extent/), and uses it as a spatial filter. When modifying this property, the `FeatureTable` will completely refresh and re-query for all features.
   *
   * @since 4.19
   * @see [Sample - FeatureTable using a map](https://developers.arcgis.com/javascript/latest/sample-code/widgets-featuretable-map/)
   * @see [Sample - FeatureTable with related data](https://developers.arcgis.com/javascript/latest/sample-code/widgets-featuretable-relates/)
   * @example
   * // Listen for when the view is stationary.
   * // If true, check the view's extent and set
   * // the table to display only the attributes
   * // for the features falling within this extent.
   *
   * reactiveUtils.when( () => view.stationary === true,
   * () => {
   *   // Get the new extent of view/map whenever map is updated.
   *   if (view.extent) {
   *     // Filter out and show only the visible features in the feature table.
   *     featureTable.filterGeometry = view.extent;
   *   }
   * }, { initial: true });
   */
  accessor filterGeometry: GeometryUnion | null | undefined;
  /**
   * A flattened array of all [group columns](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/Grid/GroupColumn/) within the table.
   *
   * @since 4.33
   */
  get groupColumns(): Array<GroupColumn>;
  /**
   * Convenience property indicating the data set contains contingent values. This includes contingent values in a related table.
   *
   * @default false
   * @since 5.0
   */
  get hasContingentValues(): boolean;
  /**
   * Indicates there are unsaved edits and that they are invalid. This includes invalid pending edits in a related table.
   *
   * @default false
   * @since 5.0
   */
  get hasInvalidPendingEdits(): boolean;
  /**
   * Indicates there are unsaved edits. This includes edits in a related table.
   * This does not account for whether the edits are valid or not.
   *
   * @default false
   * @since 5.0
   */
  get hasPendingEdits(): boolean;
  /**
   * TODO
   *
   * @since 4.16
   * @see [TableTemplate](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/support/TableTemplate/)
   * @see [FieldColumnTemplate](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/support/FieldColumnTemplate/)
   * @example
   * const featureTable = new FeatureTable({
   *   layer: featureLayer,
   *   view: view,
   *   hiddenFields: ["Primary_Type", "incident_date"], // will not show these two fields within the table
   *   container: document.getElementById("tableDiv")
   * });
   * @example
   * // Set this syntax if needing to display a default hidden field, e.g. 'CreationDate`
   * const featureTable = new FeatureTable({
   *   layer: featureLayer,
   *   view: view,
   *   tableTemplate: { // autocastable to TableTemplate
   *     columnTemplates: [ // takes an array of FieldColumnTemplate and GroupColumnTemplate
   *     { //autocastable to FieldColumnTemplate
   *       type: "field",
   *       fieldName: "date_created",
   *       label: "Date created",
   *       visible: true
   *     }]
   *   }
   *   container: document.getElementById("tableDiv")
   * });
   */
  accessor hiddenFields: Collection<string>;
  /**
   * Indicates whether to display descriptions in the header cells of individual columns.
   *
   * @default false
   */
  accessor hideColumnDescriptions: boolean;
  /**
   * Indicates whether to display the 'Sort Ascending' menu item in column menus.
   *
   * @default false
   * @since 5.0
   */
  accessor hideColumnMenuItemsSortAscending: boolean;
  /**
   * Indicates whether to display the 'Sort Descending' menu item in column menus.
   *
   * @default false
   * @since 5.0
   */
  accessor hideColumnMenuItemsSortDescending: boolean;
  /**
   * Indicates whether to display the menu items within the individual columns.
   *
   * @default false
   */
  accessor hideColumnMenus: boolean;
  /**
   * Indicates whether to display the column visibility menu in the table header.
   *
   * @default false
   * @since 5.1
   */
  accessor hideColumnVisibilityMenu: boolean;
  /**
   * Indicates whether to display the filter in column visibility menu.
   *
   * @default false
   * @since 5.1
   */
  accessor hideColumnVisibilityMenuItemsFilter: boolean;
  /**
   * Indicates whether to display the header in column visibility menu.
   *
   * @default false
   * @since 5.1
   */
  accessor hideColumnVisibilityMenuItemsHeader: boolean;
  /**
   * Indicates whether to display the 'toggle all' button in column visibility menu.
   *
   * @default false
   * @since 5.1
   */
  accessor hideColumnVisibilityMenuItemsToggleAll: boolean;
  /**
   * Indicates whether to display the feature table's header.
   *
   * @default false
   * @since 5.0
   */
  accessor hideHeader: boolean;
  /**
   * Indicates whether to display layer-specific icons in the layer drop down menu.
   *
   * @default false
   */
  accessor hideLayerDropdownIcons: boolean;
  /**
   * Indicates whether to display the feature table's menu.
   *
   * @default false
   * @since 5.0
   */
  accessor hideMenu: boolean;
  /**
   * Indicates whether to display the 'Clear selection' menu item.
   *
   * @default false
   * @since 5.0
   */
  accessor hideMenuItemsClearSelection: boolean;
  /**
   * Indicates whether to display the' Delete Selection' menu item.
   *
   * @default false
   * @since 5.0
   */
  accessor hideMenuItemsDeleteSelection: boolean;
  /**
   * Indicates whether to display the 'Export selection to CSV' menu item.
   *
   * @default false
   * @since 5.0
   */
  accessor hideMenuItemsExportSelectionToCsv: boolean;
  /**
   * Indicates whether to display the 'Refresh data' menu item.
   *
   * @default false
   * @since 5.0
   */
  accessor hideMenuItemsRefreshData: boolean;
  /**
   * Indicates whether to toggle between showing only selected records in the table to showing all of the records.
   *
   * @default false
   * @since 5.0
   */
  accessor hideMenuItemsSelectedRecordsShowAllToggle: boolean;
  /**
   * Indicates whether to display the 'Show selected records' menu item.
   *
   * @default false
   * @since 5.0
   */
  accessor hideMenuItemsSelectedRecordsShowSelectedToggle: boolean;
  /**
   * Indicates whether to display the column visibility menu in the table header.
   *
   * @deprecated since 5.1. Use the 'hideColumnVisibilityMenu' property instead.
   * @default false
   * @since 5.0
   */
  accessor hideMenuItemsToggleColumns: boolean;
  /**
   * Indicates whether to display the 'Zoom to selection' menu item.
   *
   * @default false
   * @since 5.0
   */
  accessor hideMenuItemsZoomToSelection: boolean;
  /**
   * Indicates whether to display the progress indicator when the table is querying or syncing data.
   *
   * @default false
   */
  accessor hideProgress: boolean;
  /**
   * Indicates whether to display the selection column in the table.
   * Each row has a checkbox that selects its corresponding feature.
   *
   * @default false
   * @since 5.0
   */
  accessor hideSelectionColumn: boolean;
  /**
   * Indicates whether to display the tooltip for the Show/hide columns button.
   *
   * @default false
   */
  accessor hideTooltips: boolean;
  /**
   * Indicates whether to highlight the associated feature when a row is selected by checking the corresponding checkbox. This property is only applicable when working with a map and the [view](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/#view) property is set.
   *
   * @default false
   * @since 4.25
   * @see [Sample - FeatureTable with related data](https://developers.arcgis.com/javascript/latest/sample-code/widgets-featuretable-relates/)
   * @see [Sample - FeatureTable with popup interaction](https://developers.arcgis.com/javascript/latest/sample-code/widgets-featuretable-popup-interaction/)
   */
  accessor highlightDisabled: boolean;
  /**
   * This property accepts and returns a collection of feature object IDs. Use this to access and control which features are currently selected in the table and subsequently highlighted within the map. Once an application sets a collection of object IDs, the table will select the corresponding row and highlight its feature within the map.
   *
   * @since 4.25
   * @see [highlightEnabled](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/#highlightEnabled)
   * @see [Sample - FeatureTable using a map](https://developers.arcgis.com/javascript/latest/sample-code/widgets-featuretable-map/)
   * @see [Sample - FeatureTable with popup interaction](https://developers.arcgis.com/javascript/latest/sample-code/widgets-featuretable-popup-interaction/)
   * @see [Sample - FeatureTable with related data](https://developers.arcgis.com/javascript/latest/sample-code/widgets-featuretable-relates/)
   * @see [Sample - FeatureTable with row highlighting](https://developers.arcgis.com/javascript/latest/sample-code/widgets-featuretable-row-highlights/)
   * @example
   * // This example instantiates the table with highlighted features
   * const featureTable = new FeatureTable({
   *   view: view,
   *   layer: featureLayer,
   *   container: "tableDiv",
   *   highlightIds
   * });
   *
   * // Push the object IDs into a collection and select
   * featureTable.highlightIds.push(2, 3, 4);
   *
   * // Listen for changes in the collection of highlighted features
   * featureTable.highlightIds.on("change", (event) => {
   *   console.log("features selected", event.added);
   *   console.log("features deselected", event.removed);
   * });
   */
  accessor highlightIds: Collection<ObjectId>;
  /**
   * Icon which represents the component.
   * Typically used when the component is controlled by another component (e.g. by the Expand component).
   *
   * @default "table"
   * @since 4.27
   * @see [Sample - FeatureTable with related data](https://developers.arcgis.com/javascript/latest/sample-code/widgets-featuretable-relates/)
   * @see [Sample - FeatureTable with custom content](https://developers.arcgis.com/javascript/latest/sample-code/widgets-featuretable-custom-content/)
   * @see [Calcite Icons](https://developers.arcgis.com/calcite-design-system/icons/)
   */
  get icon(): Icon["icon"];
  set icon(value: IconName);
  /**
   * The user-provided number of total features accessed from the data source. This is used for initial load of the data store as opposed to querying a specified layer. Additionally, the table will query data counts to verify the data's integrity, or when requested via [refresh()](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/#refresh).
   *
   * @since 4.31
   */
  accessor initialSize: number | null | undefined;
  /**
   * A read-only property which indicates if the table is querying or syncing data.
   *
   * @default false
   * @since 4.31
   */
  get isQueryingOrSyncing(): boolean;
  /**
   * Indicates the table is syncing attachment edits.
   *
   * @default false
   * @since 5.0
   */
  get isSyncingAttachments(): boolean;
  /**
   * The components label.
   *
   * @since 4.11
   */
  accessor label: string;
  /**
   * The associated [CatalogFootprintLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/catalog/CatalogFootprintLayer/), [CSVLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/CSVLayer/), [FeatureLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/), [GeoJSONLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/GeoJSONLayer/), [ImageryLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/ImageryLayer/),
   * [KnowledgeGraphSublayer](https://developers.arcgis.com/javascript/latest/references/core/layers/knowledgeGraph/KnowledgeGraphSublayer/), [ParquetLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/ParquetLayer/) [SceneLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/SceneLayer/), [WFSLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/WFSLayer/), [OrientedImageryLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/OrientedImageryLayer/)
   * or [Sublayer](https://developers.arcgis.com/javascript/latest/references/core/layers/support/Sublayer/) containing the fields and attributes to display within the component.
   *
   * > [!WARNING]
   * >
   * > The table's pagination defaults to `50` records at a time. If the layer contains less than 50 records, it will use whatever count it has. Note that 0 records do not apply.
   * > Support for [CatalogFootprintLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/catalog/CatalogFootprintLayer/) was added at version 4.30.
   * > Support for [ParquetLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/ParquetLayer/) was added at version 4.34. Column sorting is not supported for ParquetLayer.
   * > Support for [GeoJSONLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/GeoJSONLayer/), [CSVLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/CSVLayer/), [ImageryLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/ImageryLayer/), and [WFSLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/WFSLayer/) was added at version 4.21.
   * > For an [ImageryLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/ImageryLayer/) to work with FeatureTable, it must have a mosaic dataset.
   *
   * > [!WARNING]
   * > Use `layer`, `layerUrl`, `mapLayerId`, and `layerItemId` independently; only one should be set at a time.
   *
   * @see [pageSize](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/#pageSize)
   */
  accessor layer: FeatureTableSupportedLayer | null | undefined;
  /**
   * The layer ID of a layer in the service.
   * Use with `layerUrl` when the service contains multiple layers and you want to specify which layer to use.
   *
   * @since 5.1
   * @internal
   */
  accessor layerId: number | undefined;
  /**
   * The portal item ID of a layer.
   *
   * > [!WARNING]
   * > Use `layer`, `layerUrl`, `mapLayerId`, and `layerItemId` independently; only one should be set at a time.
   */
  accessor layerItemId: string | undefined;
  /**
   * Group of layers displayed in the dropdown component in the table's header,
   * which allows changing what layer is currently displayed in the table.
   *
   * @since 4.30
   */
  accessor layers: Array<FeatureTableSupportedLayer> | null | undefined;
  /**
   * The URL to a layer's REST endpoint.
   *
   * > [!WARNING]
   * > Use `layer`, `layerUrl`, `mapLayerId`, and `layerItemId` independently; only one should be set at a time.
   */
  accessor layerUrl: string | undefined;
  /**
   * The layer view associated with the table's layer.
   *
   * @since 4.30
   * @see [Sample - FeatureTable with row highlighting](https://developers.arcgis.com/javascript/latest/sample-code/widgets-featuretable-row-highlights/)
   */
  get layerView(): LayerView | null | undefined;
  /**
   * The layer ID of a layer in the associated map.
   * When set, the component will attempt to find and use the layer with the provided ID from the map.
   *
   * > [!WARNING]
   * > Use `layer`, `layerUrl`, `mapLayerId`, and `layerItemId` independently; only one should be set at a time.
   *
   * @since 5.1
   * @example
   * ```html
   * <arcgis-map id="my-map" item-id="56cb159275394410a2a928be9c6f5c2a"></arcgis-map>
   * <!-- configure the feature table to use a layer from the map by setting the mapLayerId property -->
   * <arcgis-feature-table
   *   map-layer-id="1841c01f604-layer-5"
   *   reference-element="my-map"
   *   sync-view-selection
   *   filter-by-view-extent
   * ></arcgis-feature-table>
   * ```
   */
  accessor mapLayerId: string | undefined;
  /**
   * This property is applicable when working with layers that contain a large number of features, as it provides the ability to limit the displayed total feature count. If [paginationEnabled](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/#paginationEnabled) is `true`, and `maxSize` is greater than the current value of [pageSize](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/#pageSize), multiple pages usually display. If `maxSize` is less than [pageSize](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/#pageSize), a single page shows the total number of features limited to `maxSize`.
   *
   * @since 4.31
   */
  accessor maxSize: number | null | undefined;
  /**
   * Set this object to customize the feature table's menu content.
   *
   * @since 4.16
   */
  accessor menuConfig: TableMenuConfig | null | undefined;
  /**
   * Controls whether the table allows multiple selected rows.
   *
   * @default false
   * @since
   * 4.30
   *
   * > [!WARNING]
   * >
   * > This selection mode does not apply to the two default sort column menu items.
   */
  accessor multipleSelectionDisabled: boolean;
  /**
   * Indicates whether sorting multiple columns is supported within the table.
   *
   * @default false
   * @since 4.23
   * @see [FieldColumnTemplate#initialSortPriority](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/support/FieldColumnTemplate/#initialSortPriority)
   * @see [FieldColumnTemplate#direction](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/support/FieldColumnTemplate/#direction)
   * @see [sortColumn()](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/#sortColumn)
   * @see [Sample - FeatureTable with editing enabled](https://developers.arcgis.com/javascript/latest/sample-code/widgets-featuretable-editing/)
   * @see [Sample - FeatureTable](https://developers.arcgis.com/javascript/latest/sample-code/widgets-featuretable/)
   * @example
   * const featureTableVM = new FeatureTable({
   *   layer: featureLayer,
   *   multiSortEnabled: true,
   *   tableTemplate: { // autocastable to TableTemplate
   *     columnTemplates: [ // takes an array of FieldColumnTemplate and GroupColumnTemplate
   *     { // autocastable to FieldColumnTemplate
   *       type: "field",
   *       fieldName: "ObjectId",
   *       direction: "asc", // In order to use initialSortPriority, make sure direction is set
   *       initialSortPriority: 1, // This field's sort order takes second-highest priority.
   *     },
   *     {
   *       type: "field",
   *       fieldName: "Name",
   *       direction: "asc", // In order to use initialSortPriority, make sure direction is set
   *       initialSortPriority: 0, // This field's sort order takes the highest priority.
   *     },
   *     {
   *       type: "field",
   *       fieldName: "Status",
   *       direction: "asc", // In order to use initialSortPriority, make sure direction is set
   *       initialSortPriority: 2 // This field's sort order is prioritized after Name and ObjectId, respectively.
   *     }]
   *   },
   *   container: "tableDiv"
   * });
   */
  accessor multipleSortEnabled: boolean;
  /**
   * This property can be used to determine how newly sorted columns are prioritized. By default, newly sorted columns are
   * given the highest sort priority.
   *
   * @default "prepend"
   * @since 4.33
   */
  accessor multipleSortPriority: GridMultiSortPriority;
  /**
   * This property controls the scale of all components in the navigation bar displayed when
   * viewing attachments or related records.
   *
   * @default "m"
   * @since 4.33
   */
  accessor navigationScale: "s" | "m" | "l";
  /**
   * This property can be used to override the text displayed when the table is fully loaded but no rows are available.
   *
   * @since 4.33
   */
  accessor noDataMessage: string | null | undefined;
  /**
   * This property accepts and returns a collection of feature object IDs. Use this to access and control which features are currently visible in the table.
   * When the collection is empty, all potential rows are displayed. Modifying object IDs is not supported while [filterBySelectionEnabled](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/#filterBySelectionEnabled) is `true` as these properties are mutually exclusive.
   * This filter can also be combined with [filterGeometry](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/#filterGeometry) to display features that satisfy both conditions.
   *
   * @since 4.30
   */
  accessor objectIds: Collection<ObjectId>;
  /**
   * An array of field names from the table's data source to include when the table requests data. By default, all fields are requested. This property is useful when working with many fields and only a subset of them is needed for the table. Take note that doing so can improve the table's load time.
   *
   * @since 4.31
   */
  accessor outFields: Array<string> | null | undefined;
  /**
   * Number of pages of features to be displayed in the table, based on the total [number of features](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/#size) and configured [pageSize](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/#pageSize).
   *
   * @since 4.31
   */
  get pageCount(): number;
  /**
   * Represents the index of the page of the feature currently being displayed. The number of features per page can be adjusted by modifying the [pageSize](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/#pageSize). [Pagination](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/#paginationEnabled) must be enabled or the value of this property may not be not reliable due to virtualization of visible pages.
   *
   * @since 4.31
   */
  accessor pageIndex: number;
  /**
   * The default page size used when displaying features within the table. By default, the page loads the first 50 features returned by the service. It can be used with [paginationEnabled](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/#paginationEnabled) to display a subset of features.
   *
   * > [!WARNING]
   * >
   * > It is not possible to overwrite the maximum page size on the server, ie. `maxRecordCount`, as this property only applies to set values less than the maximum page size, i.e. `maxRecordCount`, set on the service.
   *
   * @default 50
   * @since 4.19
   * @see [ArcGIS REST API - FeatureLayer - maxRecordCount](https://developers.arcgis.com/rest/services-reference/feature-layer.htm)
   */
  accessor pageSize: number;
  /**
   * Controls whether the table should only display a single page of features at any time. Current page can be determined via the [pageIndex](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/#pageIndex) property. The current page can be modified by calling the [goToPage()](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/#goToPage) method and passing in the desired [page index](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/#pageIndex).
   *
   * @default false
   * @since 4.31
   */
  accessor paginationEnabled: boolean;
  /**
   * By assigning the `id` attribute of the Map or Scene component to this property, you can position a child component anywhere in the DOM while still maintaining a connection to the Map or Scene.
   *
   * @see [Associate components with a Map or Scene component](https://developers.arcgis.com/javascript/latest/programming-patterns/#associate-components-with-a-map-or-scene-component)
   */
  accessor referenceElement: ArcgisReferenceElement | string | undefined;
  /**
   * Indicates whether to display any related records associated with rows within the table. Take note that related layers must be provided via the [layers](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/#layers) property when there is no associated [view](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/#view).
   *
   * @default false
   * @since 4.30
   * @see [FeatureLayer.capabilities.data.supportsRelationships](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/#capabilities)
   * @see [FeatureLayer#relationships](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/#relationships)
   * @see [RelationshipColumn](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/RelationshipColumn/)
   */
  accessor relatedRecordsEnabled: boolean;
  /**
   * Reference to a nested table instance representing a relationship with another table.
   *
   * @since 4.31
   */
  get relatedTable(): FeatureTable | null | undefined;
  /**
   * A collection of nested table instances. This is typically used to represent relationships between each other.
   * These are configured and managed by a single table component instance. Only applies if this particular table instance is responsible for managing all nested tables.
   * Nested tables reference the main table controller via the [tableController](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/#tableController) property.
   *
   * @since 4.31
   */
  accessor relatedTables: Collection<FeatureTable>;
  /**
   * Reference to the relationship represented by the table.
   *
   * @since 5.0
   */
  get relationship(): Relationship | null | undefined;
  /**
   * A flattened array of all [relationship columns](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/RelationshipColumn/) within the table, including nested columns.
   *
   * @since 4.33
   */
  get relationshipColumns(): Array<RelationshipColumn>;
  /**
   * Indicates whether to fetch geometries for the corresponding features displayed in the table.
   *
   * > [!WARNING]
   * >
   * > Setting this to `true` can potentially impact the component's performance.
   *
   * @default false
   * @since 4.27
   */
  accessor returnGeometryEnabled: boolean;
  /**
   * Indicates whether geometries fetched for the corresponding features contain M values, if supported.
   * The [returnGeometryEnabled](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/#returnGeometryEnabled) property must also be true.
   *
   * > [!WARNING]
   * >
   * > Setting this to `true` can potentially impact the component's performance.
   *
   * @default false
   * @since 4.30
   */
  accessor returnMEnabled: boolean;
  /**
   * Indicates whether the fetched features' geometries contain Z values. This is only applicable if Z-values are supported.
   * The [returnGeometryEnabled](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/#returnGeometryEnabled) property must also be true.
   *
   * > [!WARNING]
   * >
   * > Setting this to `true` can potentially impact the component's performance.
   *
   * @default false
   * @since 4.30
   */
  accessor returnZEnabled: boolean;
  /**
   * This property accepts and returns a collection of feature object IDs. It is used to access and control which rows display a darker background, i.e., highlighted. Take note that highlighted rows are not considered selected as this property is independent of the table's selection state. Use the [highlightIds](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/#highlightIds) property to choose rows. Setting `rowHighlightIds` applies an alternative highlight style to an entire row or rows.
   *
   * >
   * > Use this property to highlight rows based on an event or action from another component (e.g. the view). For example, purposefully highlighting rows when hovering over a feature on the map or applying a "filter" via another component to call out specific rows in the table. Generally, this property is not modified based on table events but rather an event or action from a different component.
   *
   * @since 4.30
   * @example
   * // This snippet adds an event listener which highlights (not selects) a row in the table
   * // when a mouse pointer hovers over its corresponding row.
   * featureTable.on("cell-pointerover", (event) => {
   * // Add the event's feature to the rowHighlightIds collection if it's not already included
   *   if (!featureTable.rowHighlightIds.includes(event.objectId)) {
   *     featureTable.rowHighlightIds.push(event.objectId);
   *   }
   * });
   * // This snippet adds an event listener which removes the highlight from a row in the table
   * // when a mouse pointer moves out of its corresponding row.
   * featureTable.on("cell-pointerout", (event) => {
   *   // Remove the event's feature from the rowHighlightIds collection if it's included
   *   const index = featureTable.rowHighlightIds.indexOf(event.objectId);
   *   if (index > -1) {
   *     featureTable.rowHighlightIds.splice(index, 1);
   *   }
   * });
   */
  accessor rowHighlightIds: Collection<ObjectId>;
  /**
   * Use this property to supply a custom [SelectionManager](https://developers.arcgis.com/javascript/latest/references/core/views/SelectionManager/) that overrides the default selection manager.
   * This is useful when applications want to share selection sets between components, without relying on the view's selection manager. This property is ignored if [syncViewSelection](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-feature-table/#syncViewSelection) is `true`.
   *
   * @since 5.0
   * @beta
   */
  accessor selectionManager: SelectionManager | null | undefined;
  /**
   * Indicates whether to display a close button in the table panel header.
   *
   * @default false
   * @since 5.1
   */
  accessor showClose: boolean;
  /**
   * Indicates whether to display a collapse button in the table panel header.
   *
   * @default false
   * @since 5.1
   */
  accessor showCollapse: boolean;
  /**
   * Indicates whether to display the feature table's layer switch drop down menu.
   *
   * @default false
   */
  accessor showLayerDropdown: boolean;
  /**
   * Total number of records currently displayed in the table.
   *
   * @default 0
   * @since 4.30
   */
  get size(): number;
  /**
   * The current state of the component.
   *
   * @default "disabled"
   */
  get state(): FeatureTableState;
  /**
   * Indicates whether the table and associated layer support adding attachments with the current configuration.
   *
   * @default false
   * @since 4.33
   */
  get supportsAddAttachments(): boolean;
  /**
   * Indicates whether the table and associated layer support viewing attachments with the current configuration.
   *
   * @default false
   * @since 4.33
   */
  get supportsAttachments(): boolean;
  /**
   * Indicates whether the table and associated layer support deleting attachments with the current configuration.
   *
   * @default false
   * @since 4.33
   */
  get supportsDeleteAttachments(): boolean;
  /**
   * Defines whether or not the feature supports resizing
   * attachments. This depends on whether the
   * feature layer's [capabilities.attachment.supportsResize](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/#capabilities) is set to `true`.
   *
   * @default false
   * @since 4.33
   */
  get supportsResizeAttachments(): boolean;
  /**
   * Indicates whether the table and associated layer support updating attachments with the current configuration.
   *
   * @default false
   * @since 4.33
   */
  get supportsUpdateAttachments(): boolean;
  /**
   * Indicates whether the table should synchronize the current attributeTableTemplate
   * being used based on changes made to the table's UI.
   *
   * @default false
   */
  accessor syncTemplateOnChangesDisabled: boolean;
  /**
   * Controls whether the table should sync with the view's selection manager.
   * This does not include selection sources, which must be configured independently
   * on the view's selection manager.
   *
   * @default false
   * @since 5.0
   * @beta
   */
  accessor syncViewSelection: boolean;
  /**
   * Reference to top-level controller table, if this table is a related table, nested within and controlled by another table.
   *
   * @since 4.31
   */
  get tableController(): FeatureTable | null | undefined;
  /**
   * @deprecated since 5.0, use `element.disabled` instead.
   * @default false
   */
  accessor tableDisabled: boolean;
  /**
   * Reference to a table instance that this table is directly related to.
   *
   * @since 4.31
   */
  get tableParent(): FeatureTable | null | undefined;
  /**
   * The associated [template](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/support/TableTemplate/) used for the feature table.
   *
   * The [TableTemplate](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/support/TableTemplate/) is where you configure how the feature table should display and set any associated properties for the table and its columns.
   *
   * > [!WARNING]
   * >
   * > The `TableTemplate` provides more fine-grained control over how the table is rendered within the application by offering more advanced configurations such as custom cell rendering, column formatting, and more. `TableTemplate` is useful for application-level development that remains within an application. This property differs from the [attributeTableTemplate](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/#attributeTableTemplate) property as that property should be used to access the table's settings across different applications. By using [attributeTableTemplate](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/#attributeTableTemplate), the settings can be saved within a webmap or layer. Please refer to the [AttributeTableTemplate](https://developers.arcgis.com/javascript/latest/references/core/tables/AttributeTableTemplate/) and [TableTemplate](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/support/TableTemplate/) documentation for more information.
   *
   * > [!WARNING]
   * >
   * > Take note that it is required to set the `type` property when creating column templates.
   *
   * @since
   * 4.24
   *
   * > [!WARNING]
   * >
   * > Take note that it is required to set the `type` property when creating column templates.
   * @example
   * const tableTemplate = new TableTemplate({
   *   columnTemplates: [ // takes an array of FieldColumnTemplate and GroupColumnTemplate
   *   { // autocasts to FieldColumnTemplate
   *     type: "field", // This must be set when creating field column templates
   *     fieldName: "ObjectId",
   *     direction: "asc", // In order to use initialSortPriority, make sure direction is set
   *     initialSortPriority: 1 // This field's sort order takes the second-highest priority.
   *   },
   *   {
   *     type: "field",
   *     fieldName: "NAME",
   *     label: "Name",
   *     direction: "asc", // In order to use initialSortPriority, make sure direction is set
   *     initialSortPriority: 0 // This field's sort order takes the highest priority
   *    },
   *    {
   *      type: "field",
   *      fieldName: "STATUS",
   *      label: "Status",
   *      direction: "asc", // In order to use initialSortPriority, make sure direction is set
   *      initialSortPriority: 2 // This field's sort order is prioritized after Name and ObjectId, respectively.
   *    }]
   * });
   */
  accessor tableTemplate: TableTemplate | null | undefined;
  /**
   * Replacement title for the table. This can be a basic string or custom function that returns a string. This is useful in situations where it may be necessary to dynamically update titles based on the current state of the table.
   *
   * @since 5.0
   */
  accessor tableTitle: string | FeatureTableTitleFunction | null | undefined;
  /**
   * The [TimeExtent](https://developers.arcgis.com/javascript/latest/references/core/time/TimeExtent/) in which to filter and display data within the FeatureTable component. Setting this property directly on the component or its [viewModel](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/FeatureTableViewModel/#timeExtent) takes precedence over the layer's [FeatureLayer#timeExtent](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/#timeExtent). If this property is set directly on the component, the table will not refresh when the layer's [TimeExtent](https://developers.arcgis.com/javascript/latest/references/core/time/TimeExtent/) changes.
   *
   * @since 4.30
   * @see [FeatureLayer#timeExtent](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/#timeExtent)
   * @example
   * // Filters the table to display only features that fit within the time extent
   * reactiveUtils.watch(
   *   () => timeSlider.timeExtent,
   *   (extent) => {
   *     featureTable.timeExtent = extent;
   *   }
   * );
   */
  accessor timeExtent: TimeExtent | null | undefined;
  /**
   * Dates and times displayed in the component will be in terms of this time zone. If not supplied, the view's time zone is used (if available). Depending on the field type, individual columns may have their own unique time zone behavior when the time zone itself is `unknown`.
   *
   * > [!WARNING]
   * >
   * > The following considerations apply when working with date, time, and big integer field types:
   * >
   * > By default, the [FeatureTable](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/) displays timezones for `date` and `timestamp-offset` field [types](https://developers.arcgis.com/javascript/latest/references/core/layers/support/Field/#type) reflecting the MapView's timezone. This timezone can be overridden by setting the table's [timeZone](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/#timeZone) property.
   * > If the table's [view](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/#view) isn't set, and the table's [Feature#timeZone](https://developers.arcgis.com/javascript/latest/references/core/widgets/Feature/#timeZone) isn't set, the table defaults to `system` time. The only time that this is not the case is when there is a [FeatureLayer#preferredTimeZone](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/#preferredTimeZone) set on the table's layer. If the latter is true, the preferred time zone is used as opposed to `system`.
   *
   * @since 4.28
   */
  accessor timeZone: string | null | undefined;
  /**
   * The view associated with the component. 
   *   > **Note:** The recommended approach is to fully migrate applications to use map and scene components and avoid using MapView and SceneView directly. However, if you are migrating a large application from widgets to components, you might prefer a more gradual transition. To support this use case, the SDK includes this `view` property which connects a component to a MapView or SceneView. Ultimately, once migration is complete, the arcgis-feature-table component will be associated with a map or scene component rather than using the `view` property.
   */
  accessor view: LinkChartView | MapViewOrSceneView | null | undefined;
  /**
   * A flattened array of all top-level visible columns. Take note that this does not include nested columns.
   *
   * @since 4.33
   */
  get visibleColumns(): Array<Column>;
  /**
   * Creates a pending edit with the specified parameters.
   * A pending edit is not immediately saved to the layer.
   *
   * @param edits - Pending edits to be cached. Edits must include a valid objectId and field name.
   * @since 5.0
   * @example
   * // Add pending edits for two cells in a single row
   * table.addPendingEdits(
   *   [
   *     {
   *       objectId: 1,
   *       updates: [
   *         { fieldName: "Hotel_Name", value: "My Hotel" },
   *         { fieldName: "Address", value: "123 Hotel Street" },
   *       ]
   *     }
   *   ]
   * );
   */
  addPendingEdits(edits: FeatureStoreEdits[]): void;
  /** @param showWarningPrompt */
  deleteSelection(showWarningPrompt?: boolean): Promise<void>;
  /** Permanently destroy the component. */
  destroy(): Promise<void>;
  /**
   * Cancels any pending edits. This might be edits for a specific field or column, or
   * all pending edits for a specific feature. If no parameters are supplied, all pending edits
   * for all features are discarded. Additionally, if showWarningPrompt is 'true', the value returned
   * from this method will reflect whether or not the user chose to discard the pending edits.
   *
   * @param edits - Information about which pending edits should be canceled. If nothing is provided, all pending edits are discarded.
   * @param showWarningPrompt - Indicates the table should display a warning prompt, which allows users to confirm if pending edits should be discarded.
   * @since 5.0
   * @example
   * // Discard pending edits for single cell in a given row
   * table.discardPendingEdits([{ objectId: 1, fieldName: "Address" }]);
   *
   * // Discard pending edits for all cells in a given row
   * table.discardPendingEdits([{ objectId: 1 }]);
   *
   * // Discard all pending edits
   * table.discardPendingEdits();
   *
   * // Displays a confirmation prompt before discarding all pending edits
   * // Returns 'true' if edits were discarded
   * const editsWereDiscarded = await table.discardPendingEdits(undefined, true);
   */
  discardPendingEdits(edits?: DiscardPendingEditsParameters[] | null, showWarningPrompt?: boolean): Promise<boolean>;
  /** @param includeGeometry */
  exportSelectionToCSV(includeGeometry?: boolean): Promise<void>;
  /** @param fieldName */
  findColumn(fieldName: string): Promise<ActionColumn | AttachmentsColumn | Column | GroupColumn | RelationshipColumn | null | undefined>;
  /**
   * Returns information about the feature with the provided object ID from the internal store.
   *
   * @param objectId
   * @since 5.0
   */
  getFeatureStoreItemByObjectId(objectId: number | string): Promise<FeatureStoreItem | null | undefined>;
  /** @param index */
  goToPage(index: number): Promise<void>;
  /** @param fieldName */
  hideColumn(fieldName: string): Promise<void>;
  nextPage(): Promise<void>;
  previousPage(): Promise<void>;
  refresh(): Promise<void>;
  refreshCellContent(): Promise<void>;
  /**
   * Attempts to save any pending edits. If any edits are invalid, the save will be rejected until the edits are in a valid state.
   *
   * @returns Resolves when the edits are saved or rejected.
   * @since 5.0
   */
  savePendingEdits(): Promise<void>;
  scrollToBottom(): Promise<void>;
  /** @param index */
  scrollToIndex(index: number): Promise<void>;
  scrollToLeft(): Promise<void>;
  /** @param objectId */
  scrollToRow(objectId: number | string): Promise<void>;
  scrollToTop(): Promise<void>;
  showAllColumns(): Promise<void>;
  /** @param fieldName */
  showColumn(fieldName: string): Promise<void>;
  /**
   * @param path
   * @param direction
   */
  sortColumn(path: string, direction: "asc" | "desc"): Promise<void>;
  /** @param fieldName */
  toggleColumnVisibility(fieldName: string): Promise<void>;
  zoomToSelection(): Promise<void>;
  "@setterTypes": {
    icon?: IconName;
  };
  /** Fires when a cell within the table is clicked. */
  readonly arcgisCellClick: import("@arcgis/lumina").TargetedEvent<this, TableInteractionCellClickEvent>;
  /**
   * Fires when a cell within the table is double-clicked.
   *
   * @since 5.1
   */
  readonly arcgisCellDblClick: import("@arcgis/lumina").TargetedEvent<this, TableInteractionCellDblclickEvent>;
  /** Fires when a key is pressed down within a cell within the table. */
  readonly arcgisCellKeydown: import("@arcgis/lumina").TargetedEvent<this, TableInteractionCellKeydownEvent>;
  /** Fires when the mouse pointer is moved out of a cell within the table. This event is useful for scenarios highlighting for things like highlighting a feature in the view, while hovering, without requiring manual interaction to select a row. Another example: these events can also be used to show information about the cell in a tooltip attached to the mouse. */
  readonly arcgisCellPointerout: import("@arcgis/lumina").TargetedEvent<this, TableInteractionCellPointeroutEvent>;
  /** Fires when the mouse pointer is moved over a cell within the table. */
  readonly arcgisCellPointerover: import("@arcgis/lumina").TargetedEvent<this, TableInteractionCellPointeroverEvent>;
  /** Fires when a column is reordered via drag-and-drop. */
  readonly arcgisColumnReorder: import("@arcgis/lumina").TargetedEvent<this, TableInteractionColumnReorderEvent>;
  /** Emitted when the value of a property is changed. Use this to listen to changes to properties. */
  readonly arcgisPropertyChange: import("@arcgis/lumina").TargetedEvent<this, { name: "effectiveSize" | "isQueryingOrSyncing" | "layerView" | "size" | "state"; }>;
  /** Emitted when the component associated with a map or scene view is ready to be interacted with. */
  readonly arcgisReady: import("@arcgis/lumina").TargetedEvent<this, void>;
  /** Fires when a row selection is added or removed. */
  readonly arcgisSelectionChange: import("@arcgis/lumina").TargetedEvent<this, CollectionChangeEvent<number | string>>;
  readonly "@eventTypes": {
    arcgisCellClick: ArcgisFeatureTable["arcgisCellClick"]["detail"];
    arcgisCellDblClick: ArcgisFeatureTable["arcgisCellDblClick"]["detail"];
    arcgisCellKeydown: ArcgisFeatureTable["arcgisCellKeydown"]["detail"];
    arcgisCellPointerout: ArcgisFeatureTable["arcgisCellPointerout"]["detail"];
    arcgisCellPointerover: ArcgisFeatureTable["arcgisCellPointerover"]["detail"];
    arcgisColumnReorder: ArcgisFeatureTable["arcgisColumnReorder"]["detail"];
    arcgisPropertyChange: ArcgisFeatureTable["arcgisPropertyChange"]["detail"];
    arcgisReady: ArcgisFeatureTable["arcgisReady"]["detail"];
    arcgisSelectionChange: ArcgisFeatureTable["arcgisSelectionChange"]["detail"];
  };
}