/// <reference path="../../index.d.ts" />
import type ListItem from "@arcgis/core/widgets/LayerList/ListItem.js";
import type Collection from "@arcgis/core/core/Collection.js";
import type TableListListItem from "@arcgis/core/widgets/TableList/ListItem.js";
import type { VisibilityAppearance } from "../../utils/action-utils.js";
import type { CanSortFunction, TableSupportedLayers } from "../../utils/layer-list-utils.js";
import type { LayerListViewModelEvents } from "@arcgis/core/widgets/LayerList/LayerListViewModel.js";
import type { PublicLitElement as LitElement } from "@arcgis/lumina";
import type { ArcgisCatalogLayerList } from "../arcgis-catalog-layer-list/customElement.js";
import type { ArcgisTableList } from "../arcgis-table-list/customElement.js";
import type { ArcgisReferenceElement, HeadingLevel, IconName } from "../types.js";
import type { CatalogLayerListParams, FlowLayer, TableListParams } from "./types.js";
import type { T9nMeta } from "@arcgis/lumina/controllers";
import type { MapViewOrSceneView } from "@arcgis/core/views/MapViewOrSceneView.js";
import type { ListItemModifier, State } from "@arcgis/core/widgets/LayerList/types.js";
import type { List as List } from "@esri/calcite-components/components/calcite-list";

/**
 * > [!WARNING]
 * > The Layer List (next) component is the successor to the Layer List component, provided to you early for testing and feedback. In version 6.0, the implementation of [arcgis-layer-list](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-layer-list/) will be updated under the hood to that of [arcgis-layer-list-next](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-layer-list-next/), and this component will be removed. There is a breaking change in how events for [catalogLayerList](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-layer-list-next/#catalogLayerList) and [tableList](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-layer-list-next/#tableList) are handled compared to Layer List. To update at version 6.0, simply remove `-next` from the component name.
 *
 * The Layer List (next) provides a way to display a list of layers and switch on/off their visibility.
 * The [listItemCreatedFunction](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-layer-list-next/#listItemCreatedFunction) and the [ListItem](https://developers.arcgis.com/javascript/latest/references/core/widgets/LayerList/ListItem/) API provides access to each layer's properties, allows
 * the developer to configure actions related to the layer, and allows the developer to add content to the item related to the layer.
 *
 * > **Notes**
 * >
 * > - The Layer List does not emit an event when the visibility of a layer changes. To respond to layer visibility changes, watch the [visible](https://developers.arcgis.com/javascript/latest/references/core/layers/Layer/#visible) property of layers in the [allLayers](https://developers.arcgis.com/javascript/latest/references/core/Map/#allLayers) property with [reactiveUtils](https://developers.arcgis.com/javascript/latest/references/core/core/reactiveUtils/).
 * > - To hide layers in the map from the Layer List, you must set the [listMode](https://developers.arcgis.com/javascript/latest/references/core/layers/Layer/#listMode) property on the desired layers to `hide`.
 * > - When a [KnowledgeGraphLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/KnowledgeGraphLayer/) is present in the map, the Layer List will display the [tables](https://developers.arcgis.com/javascript/latest/references/core/layers/KnowledgeGraphLayer/#tables) as a [tableList](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-layer-list-next/#tableList) ListItem.
 * > - When a [CatalogLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/CatalogLayer/) is present in the map, the Layer List will display the [dynamicGroupLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/CatalogLayer/#dynamicGroupLayer) in a [catalogLayerList](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-layer-list-next/#catalogLayerList) ListItem.
 *
 * > **Keyboard Navigation**
 * >
 * > - The Layer List supports keyboard navigation using the [Treegrid Pattern](https://www.w3.org/WAI/ARIA/apg/patterns/treegrid/) for improved accessibility. Refer to the Calcite List component documentation for detailed keyboard interaction guidelines: [Calcite List Keyboard Navigation](https://developers.arcgis.com/calcite-design-system/components/list/#keyboard-navigation).
 *
 * @since 5.1
 * @beta
 */
export abstract class ArcgisLayerListNext extends LitElement {
  /**
   * 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-layer-list-next/#destroy) method when you are done to
   * prevent memory leaks.
   *
   * @default false
   */
  accessor autoDestroyDisabled: boolean;
  /**
   * The CatalogLayerList that displays a catalog layer's [dynamic group layer](https://developers.arcgis.com/javascript/latest/references/core/layers/CatalogLayer/#dynamicGroupLayer).
   * The catalog layer list will be displayed as an expandable ListItem in the root of the layer list when a CatalogLayer is present in the map.
   * This property is set when a catalog layer's dynamic group layer is expanded in the LayerList. Otherwise, it is `null`.
   * This property is useful for listening to the [arcgisTriggerAction](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-catalog-layer-list/#event-arcgisTriggerAction) event and managing selections in catalog layers.
   *
   * ![CatalogLayerList](https://developers.arcgis.com/javascript/latest/assets/references/core/widgets/catalog-layer-list.avif)
   *
   * @example
   * ```js
   * // Use reactiveUtils to respond to the layerListElement.catalogLayerList "arcgisTriggerAction" event
   * const catalogLayerListActionHandle = reactiveUtils.on(
   *   () => layerListElement.catalogLayerList,
   *   "arcgisTriggerAction",
   *   async (event) => {
   *     const { action, item } = event.detail;
   *     if (action.id === "add-layer") {
   *       try {
   *         const parentCatalogLayer = getCatalogLayerForLayer(item.layer);
   *         if (!parentCatalogLayer) {
   *           return;
   *         }
   *         await addLayerFromDynamicGroup(item.layer);
   *         alert(`Added ${item.layer.title} to the map`);
   *       } catch (error) {
   *         console.error("Failed to add layer from dynamic group", error);
   *         alert(`Unable to add ${item.layer.title} to the map`);
   *       }
   *       layerListElement?.openedLayers?.pop();
   *     }
   *   },
   * );
   * layerListHandles.push(catalogLayerListActionHandle);
   *
   * // Use reactiveUtils to watch for a selected item in the layerListElement.catalogLayerList
   * const catalogSelectionWatchHandle = reactiveUtils.watch(
   *   () =>
   *     layerListElement.catalogLayerList?.selectedItems?.at(0)?.layer as Layer,
   *   (layer) => {
   *     layer && handleLayerSelection(layer);
   *   },
   * );
   * layerListHandles.push(catalogSelectionWatchHandle);
   * ```
   */
  get catalogLayerList(): ArcgisCatalogLayerList | undefined;
  /**
   * [CatalogLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/CatalogLayer/) specific properties.
   * Catalog layers will display their [CatalogLayer#dynamicGroupLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/CatalogLayer/#dynamicGroupLayer) as an expandable [arcgis-catalog-layer-list](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-catalog-layer-list/) in the Layer List component.
   * This list item will only be displayed when catalog layers with dynamic group layers are loaded in the map.
   * These are the properties that are used to configure the [arcgis-catalog-layer-list](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-catalog-layer-list/).
   *
   * @see [arcgis-catalog-layer-list](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-catalog-layer-list/) for more details on the catalog layer list and its properties.
   * @example
   * ```js
   * layerListElement.catalogOptions = {
   *     listItemCreatedFunction: (event) => {
   *       const { item } = event;
   *       item.actionsSections = [
   *         [
   *           {
   *             title: "Add layer to map",
   *             icon: "add-layer",
   *             id: "add-layer"
   *           }
   *         ]
   *       ];
   *     },
   *     selectionMode: "single"
   *   };
   * ```
   */
  accessor catalogOptions: CatalogLayerListParams | undefined;
  /**
   * Indicates whether a component is closed. When `true`, the component will be hidden.
   *
   * @default false
   */
  accessor closed: boolean;
  /**
   * Indicates whether the component is collapsed.
   * When collapsed, only the collapse button and heading are displayed.
   *
   * @default false
   * @see [showCollapseButton](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-layer-list-next/#showCollapseButton)
   * @example
   * ```js
   * layerListElement.collapsed = true;
   * ```
   */
  accessor collapsed: boolean;
  /**
   * Indicates whether [list items](https://developers.arcgis.com/javascript/latest/references/core/widgets/LayerList/ListItem/) may be reordered within the list by dragging and dropping.
   * MapImageLayer [MapImageLayer#sublayers](https://developers.arcgis.com/javascript/latest/references/core/layers/MapImageLayer/#sublayers) can be reordered only within their parent MapImageLayer and can not be dragged out as a separate layer.
   * Drag won't be enabled until the number of list items is equal to or greater than than the value set set in [minDragEnabledItems](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-layer-list-next/#minDragEnabledItems).
   *
   * @default false
   * @see [minDragEnabledItems](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-layer-list-next/#minDragEnabledItems)
   * @example
   * ```js
   * layerListElement.dragEnabled = true;
   * ```
   */
  accessor dragEnabled: boolean;
  /**
   * Placeholder text used in the filter input if [showFilter](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-layer-list-next/#showFilter) is true.
   *
   * @default ""
   * @see [showFilter](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-layer-list-next/#showFilter)
   * @example
   * ```js
   * layerListElement.filterPlaceholder = "Filter layers";
   * ```
   */
  accessor filterPlaceholder: string;
  /**
   * Specifies a function to handle filtering [list items](https://developers.arcgis.com/javascript/latest/references/core/widgets/LayerList/ListItem/).
   *
   * @example
   * ```js
   * layerListElement.filterPredicate = (item) => item.title.toLowerCase().includes("streets");
   * ```
   */
  accessor filterPredicate: ((item: ListItem | TableListListItem) => boolean) | undefined;
  /**
   * The value of the filter input if [showFilter](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-layer-list-next/#showFilter) is true.
   *
   * @default ""
   * @see [showFilter](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-layer-list-next/#showFilter)
   * @example
   * ```js
   * reactiveUtils.watch(
   *   () => layerListElement.filterText,
   *   (filterText) => console.log(filterText)
   * );
   * ```
   */
  accessor filterText: string;
  /**
   * Indicates the heading level to use for the heading of the component.
   * By default, the heading is rendered as a level 2 heading (e.g., `<h2>Layer List</h2>`).
   * Depending on the component's placement in your app, you may need to adjust this heading for proper semantics.
   * This is important for meeting accessibility standards.
   *
   * @default 2
   * @see [showHeading](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-layer-list-next/#showHeading)
   * @example
   * ```js
   * layerListElement.headingLevel = 3;
   * ```
   */
  accessor headingLevel: HeadingLevel;
  /**
   * This property provides the ability to show or hide the catalog layer list.
   *
   * @default false
   */
  accessor hideCatalogLayerList: boolean;
  /**
   * This property provides the ability to show or hide status indicators.
   *
   * @default false
   */
  accessor hideStatusIndicators: boolean;
  /**
   * Icon which represents the component.
   * Typically used when the component is controlled by another component (e.g. by the Expand component).
   *
   * @default "layers"
   * @see [Calcite Icons](https://developers.arcgis.com/calcite-design-system/icons/)
   */
  accessor icon: IconName;
  /**
   * [KnowledgeGraphLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/KnowledgeGraphLayer/) specific properties.
   * [KnowledgeGraphLayer#tables](https://developers.arcgis.com/javascript/latest/references/core/layers/KnowledgeGraphLayer/#tables)
   * as an expandable [arcgis-table-list](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-table-list/) in the Layer List component and can be accessed with the [tableList](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-layer-list-next/#tableList) property.
   * This tables list item will only be displayed when knowledge graph layers with tables are loaded in the map.
   * These are the properties that are used to configure the [arcgis-table-list](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-table-list/).
   *
   * @see [arcgis-table-list](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-table-list/) for more details on the table list and its properties.
   * @example
   * ```js
   * layerListElement.knowledgeGraphOptions = {
   *   filterPlaceholder: "Filter tables",
   *   listItemCreatedFunction: (event) => {
   *     const { item } = event;
   *     item.actionsSections = [
   *       [
   *         {
   *           icon: "table",
   *           id: "open-table",
   *           title: "Show table"
   *         },
   *         {
   *           icon: "information",
   *           id: "information",
   *           title: "Show information"
   *         }
   *       ]
   *     ];
   *   },
   *   minFilterItems: 1
   * }
   * ```
   */
  accessor knowledgeGraphOptions: TableListParams | undefined;
  /** The component's default label. */
  accessor label: string | undefined;
  /** @internal */
  accessor layerTablesAvailable: Collection<TableSupportedLayers>;
  /** @internal */
  accessor listItemCanGiveFunction: CanSortFunction | undefined;
  /** @internal */
  accessor listItemCanReceiveFunction: CanSortFunction | undefined;
  /**
   * A function that executes each time a [ListItem](https://developers.arcgis.com/javascript/latest/references/core/widgets/LayerList/ListItem/) is created.
   * Use this function to add actions and panels to list items, and to override
   * the default settings of a list item. Actions can be added to list items
   * using the [ListItem#actionsSections](https://developers.arcgis.com/javascript/latest/references/core/widgets/LayerList/ListItem/#actionsSections)
   * property.
   *
   * @see [Sample - LayerList component with actions](https://developers.arcgis.com/javascript/latest/sample-code/layer-list-actions/)
   * @example
   * ```js
   * layerListElement.listItemCreatedFunction = async function (event) {
   *   // The event object contains an item property.
   *   // It is a ListItem referencing the associated layer
   *   // and other properties. You can control the visibility of the
   *   // item, its title, and actions using this object.
   *   const item = event.item;
   *
   *   await item.layer.when();
   *
   *   if (item.title === "US Demographics") {
   *     // An array of objects defining actions to place in the LayerList.
   *     // By making this array two-dimensional, you can separate similar
   *     // actions into separate groups with a breaking line.
   *     item.actionsSections = [
   *       [
   *         {
   *           title: "Go to full extent",
   *           icon: "zoom-out-fixed",
   *           id: "full-extent",
   *         },
   *         {
   *           title: "Layer information",
   *           icon: "information",
   *           id: "information",
   *         },
   *       ],
   *       [
   *         {
   *           title: "Increase opacity",
   *           icon: "chevron-up",
   *           id: "increase-opacity",
   *         },
   *         {
   *           title: "Decrease opacity",
   *           icon: "chevron-down",
   *           id: "decrease-opacity",
   *         },
   *       ],
   *     ];
   *   }
   * }
   * ```
   */
  accessor listItemCreatedFunction: ListItemModifier | null | undefined;
  /**
   * Overwrite localized strings for this component
   *
   * @internal
   */
  accessor messageOverrides: {
      componentLabel?: string | undefined;
      back?: string | undefined;
      noItemsToDisplay?: string | undefined;
      layerInvisibleAtScale?: string | undefined;
      layerInvisibleAtTime?: string | undefined;
      layerError?: string | undefined;
      untitledLayer?: string | undefined;
      untitledTable?: string | undefined;
      layerVisibility?: string | undefined;
      menu?: string | undefined;
      options?: string | undefined;
      showLayer?: string | undefined;
      hideLayer?: string | undefined;
      layerIncompatible?: string | undefined;
      layerIncompatibleTooltip?: string | undefined;
      tableError?: string | undefined;
      temporary?: string | undefined;
      tables?: string | undefined;
      catalogLayers?: string | undefined;
      connectionStatus?: string | undefined;
      updating?: string | undefined;
      publishing?: string | undefined;
      connected?: string | undefined;
      disconnected?: string | undefined;
      paused?: string | undefined;
  };
  /** @internal */
  protected messages: Partial<{
      componentLabel: string;
      back: string;
      noItemsToDisplay: string;
      layerInvisibleAtScale: string;
      layerInvisibleAtTime: string;
      layerError: string;
      untitledLayer: string;
      untitledTable: string;
      layerVisibility: string;
      menu: string;
      options: string;
      showLayer: string;
      hideLayer: string;
      layerIncompatible: string;
      layerIncompatibleTooltip: string;
      tableError: string;
      temporary: string;
      tables: string;
      catalogLayers: string;
      connectionStatus: string;
      updating: string;
      publishing: string;
      connected: string;
      disconnected: string;
      paused: string;
  }> & T9nMeta<{
      componentLabel: string;
      back: string;
      noItemsToDisplay: string;
      layerInvisibleAtScale: string;
      layerInvisibleAtTime: string;
      layerError: string;
      untitledLayer: string;
      untitledTable: string;
      layerVisibility: string;
      menu: string;
      options: string;
      showLayer: string;
      hideLayer: string;
      layerIncompatible: string;
      layerIncompatibleTooltip: string;
      tableError: string;
      temporary: string;
      tables: string;
      catalogLayers: string;
      connectionStatus: string;
      updating: string;
      publishing: string;
      connected: string;
      disconnected: string;
      paused: string;
  }>;
  /**
   * The minimum number of list items required to enable drag and drop reordering with [dragEnabled](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-layer-list-next/#dragEnabled).
   *
   * @default 2
   * @see [dragEnabled](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-layer-list-next/#dragEnabled)
   * @example
   * ```js
   * layerListElement.dragEnabled = true;
   * layerListElement.minDragEnabledItems = 5;
   * ```
   */
  accessor minDragEnabledItems: number;
  /**
   * The minimum number of list items required to display the [showFilter](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-layer-list-next/#showFilter) input box.
   *
   * @default 10
   * @see [showFilter](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-layer-list-next/#showFilter)
   * @example
   * ```js
   * layerListElement.showFilter = true;
   * layerListElement.minFilterItems = 5;
   * ```
   */
  accessor minFilterItems: number;
  /**
   * A collection of [Layer](https://developers.arcgis.com/javascript/latest/references/core/layers/Layer/)s that are opened
   * in a [catalogLayerList](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-layer-list-next/#catalogLayerList) or [tableList](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-layer-list-next/#tableList) flow item.
   * This property is useful for backing out of the catalog layer list or table list
   * programmatically to the parent layer list.
   *
   * @default []
   * @see [catalogLayerList](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-layer-list-next/#catalogLayerList)
   * @see [tableList](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-layer-list-next/#tableList)
   * @example
   * ```js
   * // back out of the catalog layer list to the main layer list
   * layerListElement.openedLayers.pop();
   * ```
   */
  get openedLayers(): Collection<FlowLayer>;
  /** A collection of [ListItem](https://developers.arcgis.com/javascript/latest/references/core/widgets/LayerList/ListItem/)s representing the operational layers in the layer list. */
  get operationalItems(): Collection<ListItem>;
  /**
   * 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;
  /**
   * A collection of selected [ListItem](https://developers.arcgis.com/javascript/latest/references/core/widgets/LayerList/ListItem/)s representing operational layers
   * selected by the user in the layer list.
   *
   * @see [selectionMode](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-layer-list-next/#selectionMode)
   */
  accessor selectedItems: Collection<ListItem>;
  /**
   * Specifies the selection mode.
   * Selected items are available in the [selectedItems](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-layer-list-next/#selectedItems) property.
   *
   * | Value | Description |
   * | ----- | ----------- |
   * | multiple | Allows any number of items to be selected at once. This is useful when you want to apply an operation to multiple items at the same time. |
   * | none | Disables selection. Use this when you want to prevent selecting items. |
   * | single | Allows only one item to be selected at a time. If another item is selected, the previous selection is cleared. This is useful when you want to ensure that a maximum of one item is selected at a time. |
   * | single-persist | Allows only one item to be selected at a time and prevents de-selection. Once an item is selected, it remains selected until another item is selected. This is useful when you want to ensure that there is always exactly one selected item. |
   *
   * @default "none"
   * @see [selectedItems](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-layer-list-next/#selectedItems)
   * @example
   * ```js
   * layerListElement.selectionMode = "multiple";
   * ```
   */
  accessor selectionMode: List["selectionMode"];
  /**
   * This property provides the ability to show or hide the close button.
   *
   * @default false
   */
  accessor showCloseButton: boolean;
  /**
   * This property provides the ability to show or hide the collapse button.
   *
   * @default false
   */
  accessor showCollapseButton: boolean;
  /**
   * This property provides the ability to show or hide error indicators.
   *
   * @default false
   */
  accessor showErrors: boolean;
  /**
   * This property provides the ability to show or hide the filter input.
   *
   * @default false
   */
  accessor showFilter: boolean;
  /**
   * This property provides the ability to show or hide the heading.
   *
   * @default false
   */
  accessor showHeading: boolean;
  /**
   * This property provides the ability to show or hide temporary layer indicators.
   *
   * @default false
   */
  accessor showTemporaryLayerIndicators: boolean;
  /**
   * The current state of the component.
   *
   * @default "disabled"
   */
  get state(): State;
  /**
   * The [arcgis-table-list](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-table-list/) component instance that displays the tables associated with a [KnowledgeGraphLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/KnowledgeGraphLayer/).
   * The table list will be displayed as an expandable list item.
   * This property is set when a knowledge graph layer's tables list item is expanded in the LayerList.
   * Otherwise, it is `null`.
   * This list item will only be displayed when knowledge graph layers with tables are loaded in the map and will be displayed as a child of the knowledge graph layer.
   * This property is useful for listening to the [arcgisTriggerAction](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-table-list/#event-arcgisTriggerAction) event and managing selections in knowledge graph tables.
   *
   * ![tableList](https://developers.arcgis.com/javascript/latest/assets/references/core/widgets/layer-list-tableList.avif)
   *
   * @see [knowledgeGraphOptions](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-layer-list-next/#knowledgeGraphOptions) for configuring the table list and its items.
   * @example
   * // Use reactiveUtils to respond to the layerListElement.tableList "arcgisTriggerAction" event
   * const tableListActionHandle = reactiveUtils.on(
   *   () => layerListElement.tableList,
   *   "arcgisTriggerAction",
   *   (event: any) => {
   *     const { action, item } = event.detail;
   *     if (action.id === "information") {
   *       alert(`${item.layer?.title}`);
   *     }
   *   },
   * );
   * layerListHandles.push(tableListActionHandle);
   *
   * // Use reactiveUtils to watch for a selected item in the layerListElement.tableList
   * const tableSelectionWatchHandle = reactiveUtils.watch(
   *   () => layerListElement.tableList?.selectedItems?.at(0)?.layer,
   *   (layer) => {
   *     layer && handleLayerSelection(layer);
   *   },
   * );
   * layerListHandles.push(tableSelectionWatchHandle);
   */
  get tableList(): ArcgisTableList | 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-layer-list-next component will be associated with a map or scene component rather than using the `view` property.
   */
  accessor view: MapViewOrSceneView | null | undefined;
  /**
   * Determines the icons used to indicate visibility.
   *
   * | Value | Description | Example |
   * | ----- | ----------- | ------- |
   * | default | Displays view icons on the far side. Icons are hidden except on hover or if they have keyboard focus. See [view-visible](https://developers.arcgis.com/calcite-design-system/icons/?icon=view-visible&library=Calcite%20UI&query=view) and [view-hide](https://developers.arcgis.com/calcite-design-system/icons/?icon=view-hide&library=Calcite%20UI&query=view) calcite icons. | ![visibilityAppearance-default](https://developers.arcgis.com/javascript/latest/assets/references/core/widgets/layer-list/visibilityAppearance-default.avif) |
   * | checkbox | Displays checkbox icons on the near side. See [check-square-f](https://developers.arcgis.com/calcite-design-system/icons/?icon=check-square-f&library=Calcite%20UI&query=check) and [square](https://developers.arcgis.com/calcite-design-system/icons/?icon=square&library=Calcite%20UI&query=square) calcite icons. | ![visibilityAppearance-checkbox](https://developers.arcgis.com/javascript/latest/assets/references/core/widgets/layer-list/visibilityAppearance-checkbox.avif) |
   *
   * @default "default"
   * @example
   * ```js
   * layerListElement.visibilityAppearance = "checkbox";
   * ```
   */
  accessor visibilityAppearance: VisibilityAppearance;
  /** Permanently destroy the component. */
  destroy(): Promise<void>;
  /** Emitted when the component's close button is clicked. */
  readonly arcgisClose: import("@arcgis/lumina").TargetedEvent<this, void>;
  /** 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: "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>;
  /** Emitted when an action is triggered on the component. */
  readonly arcgisTriggerAction: import("@arcgis/lumina").TargetedEvent<this, LayerListViewModelEvents["trigger-action"]>;
  readonly "@eventTypes": {
    arcgisClose: ArcgisLayerListNext["arcgisClose"]["detail"];
    arcgisPropertyChange: ArcgisLayerListNext["arcgisPropertyChange"]["detail"];
    arcgisReady: ArcgisLayerListNext["arcgisReady"]["detail"];
    arcgisTriggerAction: ArcgisLayerListNext["arcgisTriggerAction"]["detail"];
  };
}