/// <reference path="../../index.d.ts" />
import type LinkChartView from "@arcgis/core/views/LinkChartView.js";
import type WebLinkChart from "@arcgis/core/WebLinkChart.js";
import type LayerView from "@arcgis/core/views/layers/LayerView.js";
import type Layer from "@arcgis/core/layers/Layer.js";
import type Analysis from "@arcgis/core/analysis/Analysis.js";
import type Point from "@arcgis/core/geometry/Point.js";
import type Viewpoint from "@arcgis/core/Viewpoint.js";
import type Basemap from "@arcgis/core/Basemap.js";
import type Graphic from "@arcgis/core/Graphic.js";
import type Collection from "@arcgis/core/core/Collection.js";
import type ColorBackground from "@arcgis/core/webmap/background/ColorBackground.js";
import type BasemapView from "@arcgis/core/views/BasemapView.js";
import type MapViewConstraints from "@arcgis/core/views/2d/MapViewConstraints.js";
import type Error from "@arcgis/core/core/Error.js";
import type HighlightOptions from "@arcgis/core/views/support/HighlightOptions.js";
import type Magnifier from "@arcgis/core/views/Magnifier.js";
import type Navigation from "@arcgis/core/views/navigation/Navigation.js";
import type Popup from "@arcgis/core/widgets/Popup.js";
import type SelectionManager from "@arcgis/core/views/SelectionManager.js";
import type SpatialReference from "@arcgis/core/geometry/SpatialReference.js";
import type Theme from "@arcgis/core/views/Theme.js";
import type TimeExtent from "@arcgis/core/time/TimeExtent.js";
import type { PublicLitElement as LitElement } from "@arcgis/lumina";
import type { LoadErrorSource } from "../types.js";
import type { ArcgisPopup } from "../arcgis-popup/customElement.js";
import type { DoubleTapDragEvent, VerticalTwoFingerDragEvent, PointerUpEvent, PointerMoveEvent, PointerLeaveEvent, PointerEnterEvent, PointerDownEvent, ViewMouseWheelEvent, LayerViewDestroyEvent, LayerViewCreateErrorEvent, LayerViewCreateEvent, KeyUpEvent, KeyDownEvent, ImmediateDoubleClickEvent, ImmediateClickEvent, HoldEvent, DragEvent, DoubleClickEvent, ClickEvent } from "@arcgis/core/views/input/types.js";
import type { AnalysisViewDestroyEvent, AnalysisViewCreateErrorEvent, AnalysisViewCreateEvent, ToScreenOptions2D, GoToOptions2D, GoToTarget2D } from "@arcgis/core/views/types.js";
import type { AnalysisView2DUnion } from "@arcgis/core/views/2d/analysis/types.js";
import type { ScreenPoint, ScreenRect } from "@arcgis/core/core/types.js";
import type { FetchPopupFeaturesOptions, ViewPopupOpenOptions } from "@arcgis/core/views/PopupView.js";
import type { ReadonlyCollection } from "@arcgis/core/core/Collection.js";
import type { ViewPadding } from "@arcgis/core/views/ui/types.js";
import type { ResizeAlign } from "@arcgis/core/views/2d/types.js";
import type { SlotGroupRefs } from "../../support/slots.js";

/**
 * Loads a [WebLinkChart](https://developers.arcgis.com/javascript/latest/references/core/WebLinkChart/) from an [ArcGIS Enterprise portal](https://doc.esri.com/en/arcgis-enterprise/latest/plan/what-is-portal-for-arcgis-.html) into a [LinkChartView](https://developers.arcgis.com/javascript/latest/references/core/views/LinkChartView/).
 *
 * Note: Sign in to access the data in this demo, U/P: `viewer01`/`I68VGU^nMurF`
 *
 * @cssproperty [--arcgis-layout-overlay-space-top] - _Since 4.34_ Specifies the top padding for the layout.
 * @cssproperty [--arcgis-layout-overlay-space-bottom] - _Since 4.34_ Specifies the bottom padding for the layout.
 * @cssproperty [--arcgis-layout-overlay-space-left] - _Since 4.34_ Specifies the left padding for the layout.
 * @cssproperty [--arcgis-layout-overlay-space-right] - _Since 4.34_ Specifies the right padding for the layout.
 * @cssproperty [--arcgis-view-color-focus] - _Since 5.0_ Specifies the focus outline color for the view.
 * @cssproperty [--arcgis-table-row-background-color] - _Since 5.1_ Specifies the background color for table rows.
 * @cssproperty [--arcgis-table-row-alt-background-color] - _Since 5.1_ Specifies the background color for alternate table rows.
 * @slot  - Default slot for adding components to the link chart. User is responsible for positioning the content via CSS.
 * @slot [top-left] - Slot for components positioned in the top-left corner.
 * @slot [top-right] - Slot for components positioned in the top-right corner.
 * @slot [bottom-left] - Slot for components positioned in the bottom-left corner.
 * @slot [bottom-right] - Slot for components positioned in the bottom-right corner.
 * @slot [top-start] - Slot for components positioned at the top-start (top-left in LTR, top-right in RTL).
 * @slot [top-end] - Slot for components positioned at the top-end (top-right in LTR, top-left in RTL).
 * @slot [bottom-start] - Slot for components positioned at the bottom-start (bottom-left in LTR, bottom-right in RTL).
 * @slot [bottom-end] - Slot for components positioned at the bottom-end (bottom-right in LTR, bottom-left in RTL).
 * @slot [popup] - Slot for the [arcgis-popup](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-popup/) component to open automatically on click. Only the Popup component can be placed in this slot.
 * @since 4.32
 */
export abstract class ArcgisLinkChart extends LitElement {
  /**
   * Collection containing a flat list of all the created LayerViews
   * related to the basemap, operational layers, and group layers in this view.
   *
   * @see [LayerView](https://developers.arcgis.com/javascript/latest/references/core/views/layers/LayerView/)
   */
  get allLayerViews(): ReadonlyCollection<LayerView>;
  /**
   * A collection of analyses associated with the view.
   *
   * @since 4.34
   * @example
   * // Adds an analysis to the View
   * view.analyses.add(elevationProfileAnalysis);
   * @example
   * // Removes an analysis from the View
   * view.analyses.remove(elevationProfileAnalysis);
   */
  accessor analyses: Collection<Analysis>;
  /**
   * Indicates whether animations are disabled in the view. This includes animated symbols (animated
   * [CIMSymbol](https://developers.arcgis.com/javascript/latest/references/core/symbols/CIMSymbol/),
   * [PictureMarkerSymbol](https://developers.arcgis.com/javascript/latest/references/core/symbols/PictureMarkerSymbol/)
   * from a GIF/animated PNG), animated renderers
   * ([FlowRenderer](https://developers.arcgis.com/javascript/latest/references/core/renderers/FlowRenderer/)),
   * animated layers ([MediaLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/MediaLayer/),
   * [VideoLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/VideoLayer/)), and
   * animations triggered by view navigation (for example,
   * [goTo()](https://developers.arcgis.com/javascript/latest/references/core/views/LinkChartView/#goTo)).
   * Setting this property to `true` disables all animations in the view.
   *
   * @default false
   * @since 4.34
   */
  accessor animationsDisabled: boolean;
  /**
   * The ARIA attributes for the view container. Provides accessibility information to assistive technologies such as screen readers. Supports the following properties: [`label`](https://developer.mozilla.org/docs/Web/Accessibility/ARIA/Reference/Attributes/aria-label), [`description`](https://developer.mozilla.org/docs/Web/Accessibility/ARIA/Reference/Attributes/aria-description), [`describedByElements`](https://developer.mozilla.org/docs/Web/API/Element/ariaDescribedByElements), and [`labelledByElements`](https://developer.mozilla.org/docs/Web/API/Element/ariaLabelledByElements).
   *
   * @since 4.34
   */
  accessor aria: LinkChartView["aria"];
  /**
   * The attribution items displayed in the view's attribution.
   *
   * @since 5.0
   */
  get attributionItems(): LinkChartView["attributionItems"];
  /**
   * The light or dark mode used to display the attribution.
   * By default, the mode is inherited from the [Calcite's mode](https://developers.arcgis.com/calcite-design-system/core-concepts/#modes).
   * You can override the value to style the attribution alongside the map or scene content.
   *
   * @since 5.0
   */
  accessor attributionMode: "dark" | "light" | 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-link-chart/#destroy) method when you are done to
   * prevent memory leaks.
   *
   * @default false
   */
  accessor autoDestroyDisabled: boolean;
  /**
   * The background color of the LinkChartView. If the view's link chart changes, the view's `background` is reset to the link chart's background,
   * even if the user set it previously.
   *
   * @default new ColorBackground({ color: [255, 255, 255, 1] })
   * @example
   * let view = new LinkChartView({
   *   container: "viewDiv",
   *   map: map,
   *   background: { // autocasts new ColorBackground()
   *     color: "magenta" // autocasts as new Color()
   *   }
   * });
   * @example
   * let view = new MapView({
   *   container: "viewDiv",
   *   map: map,
   *   background: { // autocasts new ColorBackground()
   *     color: "magenta" // autocasts as new Color()
   *   }
   * });
   */
  accessor background: ColorBackground | null | undefined;
  /**
   * A Knowledge Open Cypher Query that will be used to generate the link chart.  The serviceUrl property must also be set
   *
   * Please note that this query only runs once and is used to initialize the link chart.  Once link charts are generated, their membership is "locked" unless modified by the WebLinkChart API.  Refresh events on the link chart canvas do not re-run the query for new data
   */
  accessor baseCypherQuery: null | undefined | string;
  /**
   * Specifies a basemap for the link chart. The basemap is only visible when the link
   * chart is set to a geographic layout. See
   * [documentation on layouts](https://enterprise.arcgis.com/en/knowledge/latest/knowledge-studio/change-the-layout-applied-to-a-link-chart.htm)
   * for more detail. The basemap is a set of layers that give
   * geographic context to the LinkChartView and the other operational layers
   * in the link chart.
   */
  accessor basemap: Basemap | string | undefined;
  /** Represents the view for a single basemap after it has been added to the link chart. */
  accessor basemapView: BasemapView<LayerView>;
  /**
   * Indicates if the view component can zoom in.
   *
   * @default false
   * @since 5.0
   */
  get canZoomIn(): boolean;
  /**
   * Indicates if the view component can zoom out.
   *
   * @default false
   * @since 5.0
   */
  get canZoomOut(): boolean;
  /**
   * Represents the view's center point; when setting the center, you may pass a
   * esri/geometry/Point instance or a string representing
   * a longitude/latitude pair (`"-100.4593, 36.9014"`).
   * Setting the center immediately changes the current view.
   * For animating the view, see this component's goTo() method.
   */
  get center(): LinkChartView["center"];
  set center(value: LinkChartView["center"] | null | undefined | number[] | string);
  /**
   * Specifies constraints to scale, zoom, and rotation that may be applied to the Link Chart.
   *
   * @see [MapViewConstraints](https://developers.arcgis.com/javascript/latest/references/core/views/2d/MapViewConstraints/)
   * @see [TileInfo#create()](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TileInfo/#create)
   * @see [Zoom and LODs](https://developers.arcgis.com/javascript/latest/references/core/views/View2D/#mapview-lods)
   * @example
   * view.constraints = new MapViewConstraints({
   *   geometry: { // Constrain lateral movement to Lower Manhattan
   *     type: "extent",
   *     xmin: -74.020,
   *     ymin:  40.700,
   *     xmax: -73.971,
   *     ymax:  40.73
   *   },
   *   minScale: 500000, // User cannot zoom out beyond a scale of 1:500,000
   *   maxScale: 0, // User can overzoom tiles
   *   rotationEnabled: false // Disables map rotation
   * });
   * @example
   * // This snippet shows how to set the Link Chart scale 1:1 while generating additional LODs for the constraints.
   * const spatialReference = new SpatialReference({
   *   wkid: 2154
   * });
   * const center = new Point({
   *   x: 0,
   *   y: 0,
   *   spatialReference
   * });
   *
   * // Create LODs from level 0 to 31
   * const tileInfo = TileInfo.create({
   *   spatialReference,
   *   numLODs: 32
   * });
   * const lods = tileInfo.lods;
   *
   * const constraints = new MapViewConstraints({
   *   snapToZoom: false,
   *   lods
   * });
   *
   * const arcgisLinkChart = document.querySelector("arcgis-link-chart");
   * arcgisLinkChart.spatialReference = spatialReference;
   * arcgisLinkChart.center = center;
   * arcgisLinkChart.scale = 1;
   * arcgisLinkChart.constraints = constraints;
   */
  accessor constraints: MapViewConstraints;
  /**
   * Indicates whether layer's displayFilter are honored when rendering layers in the view.
   * If `false`, display filters are ignored and all features are rendered.
   *
   * @default false
   */
  accessor displayFilterDisabled: boolean;
  /**
   * The extent represents the visible portion of a link chart within the view as an instance of
   * [Extent](https://developers.arcgis.com/javascript/latest/references/core/geometry/Extent/).
   * Setting the extent immediately changes the view without animation. To animate
   * the view, see this component's goTo() method.
   * When the view is rotated, the extent does not update to include the newly visible portions of the link chart.
   */
  accessor extent: LinkChartView["extent"];
  /**
   * A rejected view indicates a fatal error making it unable to display.
   *
   * @since 4.12
   * @see [tryFatalErrorRecovery()](https://developers.arcgis.com/javascript/latest/references/core/views/View/#tryFatalErrorRecovery)
   * @example
   * reactiveUtils.when(
   *   () => view.fatalError,
   *   () => {
   *     console.error("Fatal Error! View has lost its WebGL context. Attempting to recover...");
   *     view.tryFatalErrorRecovery();
   *   }
   * );
   */
  accessor fatalError: Error<any> | null | undefined;
  /**
   * Allows for adding graphics directly to the default graphics in the View.
   *
   * @example
   * ```js
   * // Adds a graphic to the View
   * graphics.add(pointGraphic);
   * ```
   * @example
   * ```js
   * // Removes a graphic from the View
   * graphics.remove(pointGraphic);
   * ```
   * @see [Graphic](https://developers.arcgis.com/javascript/latest/references/core/Graphic/)
   * @see [GraphicsLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/GraphicsLayer/)
   * @see [Intro to graphics](https://developers.arcgis.com/javascript/latest/sample-code/intro-graphics/)
   */
  accessor graphics: Collection<Graphic>;
  /**
   * Indicates whether the attribution is hidden in the view.
   *
   * Esri requires that when you use an ArcGIS Online basemap in your app, the map must include Esri attribution and you must be licensed to use the content.
   * For detailed guidelines on working with attribution, please visit the official [attribution in your app](https://developers.arcgis.com/terms/attribution/) documentation.
   * For information on terms of use, see the [Terms of Use FAQ](https://developers.arcgis.com/terms/faq/).
   *
   * @default false
   * @since 5.0
   */
  accessor hideAttribution: boolean;
  /**
   * The highlights property is a collection of HighlightGroup objects that
   * allow you to visually emphasize specific features on the link chart.
   *
   * @since 4.32
   * @see [Sample: Highlight features by geometry](https://developers.arcgis.com/javascript/latest/sample-code/highlight-features-by-geometry/)
   * @see [Sample: Highlight SceneLayer](https://developers.arcgis.com/javascript/latest/sample-code/highlight-scenelayer/)
   * @example
   * // Use the default highlights collection to apply a highlight to features when you hover over them
   *
   * // A handler can be used to remove any previous highlight when applying a new one
   * let hoverHighlight;
   *
   * view.on("pointer-move", (event) => {
   *   // Search for the first feature in the featureLayer at the hovered location
   *   view.hitTest(event, { include: featureLayer }).then((response) => {
   *     if (response.results[0]) {
   *        const graphic = response.results[0].graphic;
   *        view.whenLayerView(graphic.layer).then((layerView) => {
   *          // Remove any previous highlight, if it exists
   *          hoverHighlight?.remove();
   *          // Highlight the hit features with the temporary highlight options, which are pre-configured for this use case
   *          hoverHighlight = layerView.highlight(graphic, { name: "temporary"});
   *        });
   *     }
   *   });
   * });
   * @example
   * // Override the default highlights collection
   *
   * const view = new MapView({
   *   map: map,
   *   container: "viewDiv",
   *
   *   // Set the highlight options to be used in the view
   *   highlights: [
   *     { name: "default", color: "orange" },
   *     { name: "temporary", color: "magenta" },
   *     { name: "table", color: "cyan", fillOpacity: 0.5, haloOpacity: 0}
   *   ]
   * });
   * @example
   * // Add highlight options to the collection after initialization
   *
   * const selectionHighlightOptions = {
   *   name: "selection",
   *   color: "#ff00ff", // bright fuchsia
   *   haloOpacity: 0.8,
   *   fillOpacity: 0.2
   * };
   *
   * // Add the options to the highlights collection at the first position
   * view.highlights.add(selectionGroup, 0);
   */
  accessor highlights: Collection<HighlightOptions>;
  /**
   * Indication whether the view is being interacted with (for example when panning or by an interactive tool).
   *
   * @default false
   */
  get interacting(): boolean;
  /**
   * The ID of a WebLinkChart from an ArcGIS Enterprise portal.
   *
   * To configure the portal url you must set the [`portalUrl` property on `config`](https://developers.arcgis.com/javascript/latest/references/core/config/#portalUrl) before the Link Chart component loads.
   */
  accessor itemId: null | undefined | string;
  /**
   * A collection containing a hierarchical list of all the created
   * [LayerViews](https://developers.arcgis.com/javascript/latest/references/core/views/layers/LayerView/) of the
   * [operational layers](https://developers.arcgis.com/javascript/latest/references/core/WebLinkChart/#layers) in the link chart.
   *
   * @see [LayerView](https://developers.arcgis.com/javascript/latest/references/core/views/layers/LayerView/)
   */
  get layerViews(): Collection<LayerView>;
  /**
   * An array of objects that encountered an error while loading the component or any of its dependencies (e.g., basemap, ground, layers, tables). You may inspect the errors by accessing each object's `loadError` property.
   *
   * @since 4.34
   */
  accessor loadErrorSources: LoadErrorSource[] | undefined;
  /**
   * The magnifier allows for showing a portion of the view as a magnifier image on top of the view.
   *
   * @since 4.19
   */
  get magnifier(): Magnifier;
  /**
   * An instance of a [WebLinkChart](https://developers.arcgis.com/javascript/latest/references/core/WebLinkChart/)
   *  object to display in the view.
   */
  accessor map: WebLinkChart;
  /**
   * Indication whether the view is being navigated (for example when panning).
   *
   * @default false
   */
  get navigating(): boolean;
  /**
   * Options to configure the navigation behavior of the View.
   *
   * @since 4.9
   * @example
   * // Disable the gamepad usage, single touch panning, panning momentum and mouse wheel zooming.
   * const view = new MapView({
   *   container: "viewDiv",
   *   map: new Map({
   *     basemap: "satellite"
   *   }),
   *   center: [176.185, -37.643],
   *   zoom: 13,
   *   navigation: {
   *     gamepad: {
   *       enabled: false
   *     },
   *     actionMap: {
   *       dragSecondary: "none", // Disable rotating the view with the right mouse button
   *       mouseWheel: "none" // Disable zooming with the mouse wheel
   *     },
   *     browserTouchPanEnabled: false,
   *     momentumEnabled: false,
   *   }
   * });
   */
  accessor navigation: Navigation;
  /**
   * Use the padding property to make the [center](https://developers.arcgis.com/javascript/latest/references/core/views/MapView/#center),
   * and [extent](https://developers.arcgis.com/javascript/latest/references/core/views/MapView/#extent), etc. work off a
   * subsection of the full view. This is particularly useful when layering UI
   * elements or semi-transparent content on top of portions of the view.
   *
   * @default {left: 0, top: 0, right: 0, bottom: 0}
   */
  accessor padding: ViewPadding;
  /**
   * A [Popup](https://developers.arcgis.com/javascript/latest/references/core/widgets/Popup/) widget object that displays general content or attributes from [layers](https://developers.arcgis.com/javascript/latest/references/core/Map/#layers) in the [map](https://developers.arcgis.com/javascript/latest/references/core/views/View/#map). Consider using the [popupElement](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-link-chart/#popupElement) (beta), which represents the Popup component, instead.
   *
   * By default, the `popup` property is an empty object that allows you to set the popup options. A [Popup](https://developers.arcgis.com/javascript/latest/references/core/widgets/Popup/) instance is automatically created and assigned to the view's [popup](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-link-chart/#popup) when the user clicks on the view and [popupEnabled](https://developers.arcgis.com/javascript/latest/references/core/views/PopupView/#popupEnabled) is `true`, when the [openPopup()](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-link-chart/#openPopup) method is called, or when some widgets need the popup, such as [Search](https://developers.arcgis.com/javascript/latest/references/core/widgets/Search/). If [popup](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-link-chart/#popup) is `null`, the popup instance will not be created.
   *
   * @see [popupElement](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-link-chart/#popupElement)
   * @see [popupDisabled](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-link-chart/#popupDisabled)
   * @see [openPopup()](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-link-chart/#openPopup)
   */
  accessor popup: Popup | null | undefined;
  /**
   * Indicates whether the [popup component](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-link-chart/#popupElement) (beta) is enabled  as the default popup. When set to `true`, the [popupElement](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-link-chart/#popupElement) property (representing the component) will be used for popups instead of the [popup](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-link-chart/#popup) property (representing the widget).
   *
   * **Note:** This is a beta feature and may change in future releases. At version 6.0, the Popup component will be used by default instead of the Popup widget and the `popup-component-enabled` attribute will no longer be necessary.
   *
   * @default false
   * @beta
   * @since 5.0
   * @see [popupElement](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-link-chart/#popupElement)
   * @example
   * ```html
   * <arcgis-map item-id="WEBMAP-ID" popup-component-enabled></arcgis-map>
   * ```
   */
  accessor popupComponentEnabled: boolean;
  /**
   * Controls whether the default popup opens automatically when users click on the view. This controls both the [popupElement](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-link-chart/#popupElement) and [popup](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-link-chart/#popup) properties. When set to `true`, the popup will not open on click or when triggered programmatically.
   *
   * @default false
   * @see [openPopup()](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-link-chart/#openPopup)
   */
  accessor popupDisabled: boolean;
  /**
   * A reference to the current [arcgis-popup](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-popup/) (beta). The [popupComponentEnabled](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-link-chart/#popupComponentEnabled) property must be set to `true` to use this property.
   *
   * **Note:** This is a beta feature and may change in future releases.
   *
   * @beta
   * @since 5.0
   * @see [popupComponentEnabled](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-link-chart/#popupComponentEnabled)
   * @example
   * ```html
   * <arcgis-map item-id="WEBMAP-ID" popup-component-enabled></arcgis-map>
   * <script type="module">
   * const viewElement = document.querySelector("arcgis-map");
   * await viewElement.viewOnReady();
   * viewElement.popupElement.dockEnabled = true;
   * viewElement.popupElement.dockOptions = {
   *     buttonEnabled: false,
   *     breakpoint: false,
   *     position: "top-right",
   * };
   * </script>
   * ```
   */
  get popupElement(): ArcgisPopup | null;
  /**
   * When `true`, this property indicates whether the view successfully satisfied all dependencies,
   * signaling that the following conditions are met.
   *
   * @default false
   * @see [when()](https://developers.arcgis.com/javascript/latest/references/core/views/View/#when)
   */
  get ready(): boolean;
  /**
   * Defines which anchor stays still while resizing the browser window. The default, `center`,
   * ensures the view's center point remains constantly visible as the window size changes. The other
   * options allow  the respective portion of the view to remain visible when the window's size is changed.
   *
   * @default "center"
   */
  accessor resizeAlign: ResizeAlign;
  /**
   * Represents the current value of one pixel in the unit of the view's spatialReference.
   * The value of resolution is calculated by dividing the view's extent width
   * by its width.
   *
   * @since 4.9
   */
  get resolution(): number;
  /**
   * The clockwise rotation of due north in relation to the top of the view in degrees.
   * The view may be rotated by directly setting
   * the rotation or by using the following mouse event: `Right-click + Drag`.
   * WebLinkChart rotation may be disabled by setting the `rotationEnabled` property
   * in [constraints](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-link-chart/#constraints) to `false`.
   *
   * @default 0
   * @example
   * // Due north is rotated 90 degrees, pointing to the right side of the view
   * view.rotation = 90;
   * @example
   * // Due north is rotated 180 degrees, pointing to the bottom of the view
   * view.rotation = 180;
   * @example
   * // Due north is rotated 270 degrees, pointing to the left side of the view
   * view.rotation = 270;
   * @example
   * // Due north is rotated 0 degrees, pointing to the top of the view (the default)
   * view.rotation = 0; // 360 or multiple of 360 (e.g. 720) works here as well.
   * @example
   * // Disables map rotation
   * view.constraints = {
   *   rotationEnabled: false
   * };
   */
  accessor rotation: number;
  /**
   * Represents the link chart scale at the center of the view. Setting the scale immediately changes the view. For animating
   * the view, see this component's goTo() method.
   */
  accessor scale: number;
  /**
   * The default [SelectionManager](https://developers.arcgis.com/javascript/latest/references/core/views/SelectionManager/) for this view. Used to manage selections of features across layers.
   *
   * @since 5.0
   * @beta
   */
  get selectionManager(): SelectionManager;
  /**
   * The URL of the Knowledge Graph Service to load the link chart from.
   *
   * If no Base Cypher Query is defined, then the entire dataset will be used to generate the link chart.
   */
  accessor serviceUrl: null | undefined | string;
  /** @internal */
  get slotGroupRefs(): SlotGroupRefs;
  /**
   * The spatial reference of the view.
   * This indicates the projected or geographic coordinate system used
   * to locate geographic features in the link chart.
   *
   * @see [spatialReferenceLocked](https://developers.arcgis.com/javascript/latest/references/core/views/View2D/#spatialReferenceLocked)
   * @example
   * // check if the projectOperator is loaded
   * if (!projectOperator.isLoaded()) {
   *   projectOperator.load().then(() => {
   *    // change the spatial reference of the view to equal earth projection
   *     view.spatialReference = new SpatialReference({
   *       wkid: 54035 //equal earth projection
   *     });
   *   });
   * } else {
   *   // the projectOperator is already loaded.
   *   // change the spatial reference of the view to equal earth projection
   *   view.spatialReference = new SpatialReference({
   *     wkid: 54035 //equal earth projection
   *   });
   * }
   * @example
   * const basemap = await changeBasemap();
   * const spatialReference = await findSpatialReference(basemap);
   *
   * // check if basemap has the same spatial reference as the view if they are not equal
   * // then check if the projectOperator is loaded, and load the projectOperator if it is not loaded.
   * // If loaded, then simply change view.spatialReference to match the basemap spatialReference
   * if (spatialReference && !view.spatialReference.equals(spatialReference)) {
   *   if (!projectOperator.isLoaded()) {
   *     await projectOperator.load();
   *   }
   *   view.spatialReference = spatialReference;
   * }
   *
   * // change the basemap
   * map.basemap = basemap;
   *
   * async function changeBasemap() {
   *   let basemap;
   *   if (map.basemap.title === "OpenStreetMap Vector Basemap (Blueprint - WGS84)"){
   *     basemap = new Basemap({
   *       portalItem: { // Spilhaus - one ocean basemap
   *         id: "5639ccf22d4c4830ab815c4f9c9319bb"
   *       }
   *     });
   *   } else {
   *     basemap = osm84;
   *   }
   *   return basemap;
   * }
   *
   * async function findSpatialReference(basemap) {
   *   await basemap.load();
   *
   *   if (basemap.spatialReference) {
   *     return basemap.spatialReference;
   *   }
   *
   *   const layer = basemap.baseLayers.at(0);
   *
   *   if (!layer) {
   *     return null;
   *   }
   *
   *   await layer.load();
   *
   *   return layer.spatialReference;
   * }
   */
  accessor spatialReference: SpatialReference;
  /**
   * Indication whether the view is animating, being navigated with or resizing.
   *
   * @default false
   */
  get stationary(): boolean;
  /**
   * Indicates if the view is visible on the page.
   *
   * @default false
   */
  get suspended(): boolean;
  /**
   * This property specifies the base colors used by some components
   * and components to render graphics and labels.
   *
   * @since 4.28
   * @see [Theme](https://developers.arcgis.com/javascript/latest/references/core/views/Theme/)
   * @see [Sample - Color theming for interactive tools](https://developers.arcgis.com/javascript/latest/sample-code/view-theme/)
   * @example
   * // Update the theme to use purple graphics
   * // and slightly transparent green text
   * view.theme = new Theme({
   *   accentColor: "purple",
   *   textColor: [125, 255, 13, 0.9]
   * });
   */
  accessor theme: Theme | null | undefined;
  /**
   * The view's time extent. Time-aware layers display their temporal data that falls within
   * the view's time extent. Setting the view's time extent is similar to setting the spatial
   * extent because once the time extent is set, the
   * view updates automatically to conform to the change.
   *
   * @since 4.12
   * @example
   * // Create a csv layer from an online spreadsheet.
   * let csvLayer = new CSVLayer({
   *   url: "http://test.com/daily-magazines-sold-in-new-york.csv",
   *   timeInfo: {
   *     startField: "SaleDate" // The csv field contains date information.
   *   }
   * });
   *
   * // Create a mapview showing sales for the last week of March 2019 only.
   * const view = new MapView({
   *   map: map,
   *   container: "viewDiv",
   *   timeExtent: {
   *     start: new Date("2019, 2, 24"),
   *     end:   new Date("2019, 2, 31")
   *   }
   * });
   */
  accessor timeExtent: TimeExtent | null | undefined;
  /**
   * Defines the time zone of the view.
   * The time zone property determines how dates and times are represented to the user,
   * but the underlying data is unchanged.
   *
   * @default "system"
   * @see [wikipedia - List of tz database time zones](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones)
   * @example
   * // Date and time will be displayed in Pacific/Auckland (NZ) time zone
   * const view = new MapView({
   *   map: map,
   *   container: "viewDiv",
   *   timeZone: "Pacific/Auckland"
   * });
   */
  accessor timeZone: string;
  /**
   * Indicates whether the view is being updated by additional data requests to the network,
   * or by processing received data.
   *
   * @default false
   */
  get updating(): boolean;
  /** Internal view of the component. */
  get view(): LinkChartView;
  /**
   * Represents the current view as a Viewpoint or point of observation on the view.
   * Setting the viewpoint immediately changes the current view. For animating
   * the view, see this component's goTo() method.
   */
  accessor viewpoint: Viewpoint;
  /**
   * Represents the level of detail (LOD) at the center of the view.
   * A zoom level (or scale) is a number that defines how large or small the contents of a link chart appear in a link chart view.
   * Zoom level is a number usually between 0 (global view) and 23 (very detailed view) and is used as a shorthand for predetermined scale values.
   * A value of -1 means the view has no LODs.
   * When setting the zoom value, the LinkChartView converts it to the corresponding scale, or interpolates it if the zoom is a fractional number.
   * LinkChartView can display link charts with different projections at a full range of scales, and so use the scale property on this component rather than zoom level.
   *
   * Setting the zoom immediately changes the current view. For animating the view, see this component's goTo() method.
   * Setting this property in conjunction with `center` is a convenient way to set the initial extent of the view.
   */
  accessor zoom: number;
  /** Closes the popup. */
  closePopup(): Promise<void>;
  /** Destroys the view, and any associated resources, including its map, popup, and UI elements. */
  destroy(): Promise<void>;
  /**
   * Use this method to query for features at a given screen location. These features come from origins (layers and sublayers) configured with a [PopupTemplate](https://developers.arcgis.com/javascript/latest/references/core/PopupTemplate/) and have its [FeatureLayer.popupEnabled](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/#popupEnabled) set. One example could be a custom side panel that displays feature-specific information based on an end user's click location. This method allows a developer to control how the input location is handled, and then subsequently, what to do with the results.
   *
   * @param hitTarget
   * @param options
   * @since 5.1
   * @example
   * ```js
   * const viewElement = document.querySelector("arcgis-map");
   * // Get viewElement's click event
   * viewElement.addEventListener("arcgisViewClick", async (event) => {
   *   const generator = await viewElement.fetchPopupFeatures(event.detail.screenPoint, {
   *     pointerType: event.detail.pointerType
   *   });
   *   // Access the features returned from the generator
   *   for await (const feature of generator) {
   *     console.log(feature);
   *   }
   * });
   * ```
   * @example
   * ```js
   * // Wait for all the features to be available
   * view.on("click", async (event) => {
   *   const generator = view.fetchPopupFeatures(event.screenPoint, {
   *     pointerType: event.pointerType
   *   });
   *
   *   const features = await Array.fromAsync(generator);
   * });
   */
  fetchPopupFeatures(hitTarget: ScreenPoint | ScreenRect, options?: FetchPopupFeaturesOptions): Promise<AsyncGenerator<Graphic>>;
  /**
   * Sets the view to a given target.
   *
   * @param target
   * @param options
   */
  goTo(target: GoToTarget2D, options?: GoToOptions2D): Promise<unknown>;
  /**
   * Opens the popup at the given location with content defined either explicitly with content or driven
   * from the PopupTemplate of input features.
   *
   * @param options
   */
  openPopup(options?: ViewPopupOpenOptions): Promise<void>;
  /** @param screenPoint */
  toMap(screenPoint: MouseEvent | ScreenPoint): Point;
  /**
   * @param point
   * @param options
   */
  toScreen(point: Point, options?: ToScreenOptions2D): ScreenPoint | null | undefined;
  /** Call this method to clear any fatal errors resulting from a lost WebGL context. */
  tryFatalErrorRecovery(): Promise<void>;
  /**
   * `viewOnReady()` may be leveraged once an instance of the component and its underlying [view](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-link-chart/#view) is created and ready.
   * This method takes two input parameters, a `callback` function and an `errback` function, and returns a promise. The `callback` executes when the promise resolves, and the `errback` executes if the promise is rejected.
   *
   * @param callback
   * @param errback
   * @since 4.33
   * @see [Watch for changes - waiting for components or views to be ready](https://developers.arcgis.com/javascript/latest/watch-for-changes/#waiting-for-components-or-views-to-be-ready)
   * @example
   * ```js
   * const viewElement = document.querySelector("arcgis-link-chart");
   * await viewElement.viewOnReady();
   * // The view is now ready to be used.
   * ```
   */
  viewOnReady(callback?: () => void, errback?: (error: Error) => void): Promise<void>;
  /**
   * Gets the analysis view created for the given analysis object.
   *
   * [Read more](https://developers.arcgis.com/javascript/latest/references/core/views/MapView/#whenAnalysisView)
   *
   * @param analysis
   * @since 4.34
   */
  whenAnalysisView(analysis: Analysis): Promise<AnalysisView2DUnion>;
  /**
   * Gets the LayerView created on the view for the given layer.
   *
   * @param layer
   */
  whenLayerView(layer: Layer): Promise<LayerView>;
  /**
   * Zooms in the view component by a factor of 2.
   *
   * @since 5.0
   */
  zoomIn(): Promise<void>;
  /**
   * Zooms out the view component by a factor of 2.
   *
   * @since 5.0
   */
  zoomOut(): Promise<void>;
  "@setterTypes": {
    center?: LinkChartView["center"] | null | undefined | number[] | string;
  };
  /**
   * Fires when an arcgis-link-chart fails to load or if one of its dependencies fails to load (e.g., basemap, ground, layers).
   *
   * @since 4.34
   * @see [loadErrorSources](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-link-chart/#loadErrorSources)
   * @example
   * ```js
   * viewElement.addEventListener("arcgisLoadError", () => {
   *   console.log(viewElement.loadErrorSources);
   * });
   * ```
   */
  readonly arcgisLoadError: import("@arcgis/lumina").TargetedEvent<this, void>;
  /**
   * Fires when the view for an analysis is created.
   *
   * [Read more](https://developers.arcgis.com/javascript/latest/references/core/views/MapView/#event-analysis-view-create)
   *
   * @since 4.34
   */
  readonly arcgisViewAnalysisViewCreate: import("@arcgis/lumina").TargetedEvent<this, AnalysisViewCreateEvent>;
  /**
   * Fires when an error occurs during the creation of an analysis view after an analysis is added to the view.
   *
   * [Read more](https://developers.arcgis.com/javascript/latest/references/core/views/MapView/#event-analysis-view-create-error)
   *
   * @since 4.34
   */
  readonly arcgisViewAnalysisViewCreateError: import("@arcgis/lumina").TargetedEvent<this, AnalysisViewCreateErrorEvent>;
  /**
   * Fires after an analysis view is destroyed.
   *
   * [Read more](https://developers.arcgis.com/javascript/latest/references/core/views/MapView/#event-analysis-view-destroy)
   *
   * @since 4.34
   */
  readonly arcgisViewAnalysisViewDestroy: import("@arcgis/lumina").TargetedEvent<this, AnalysisViewDestroyEvent>;
  /**
   * This event is for view related property changes: zoom, scale, center, rotation, extent, camera, viewpoint.
   * This event will also emit if stationary toggles from true to false.
   */
  readonly arcgisViewChange: import("@arcgis/lumina").TargetedEvent<this, void>;
  /** Fires after a user clicks on the view. */
  readonly arcgisViewClick: import("@arcgis/lumina").TargetedEvent<this, ClickEvent>;
  /** Fires after double-clicking on the view. */
  readonly arcgisViewDoubleClick: import("@arcgis/lumina").TargetedEvent<this, DoubleClickEvent>;
  /**
   * Fires while the pointer is dragged following a double-tap gesture on the view.
   *
   * @since 5.0
   */
  readonly arcgisViewDoubleTapDrag: import("@arcgis/lumina").TargetedEvent<this, DoubleTapDragEvent>;
  /** Fires during a pointer drag on the view. */
  readonly arcgisViewDrag: import("@arcgis/lumina").TargetedEvent<this, DragEvent>;
  /** Fires during a pointer drag on the view. */
  readonly arcgisViewHold: import("@arcgis/lumina").TargetedEvent<this, HoldEvent>;
  /** Fires right after a user clicks on the view. */
  readonly arcgisViewImmediateClick: import("@arcgis/lumina").TargetedEvent<this, ImmediateClickEvent>;
  /** Is emitted after two consecutive immediate-click events. */
  readonly arcgisViewImmediateDoubleClick: import("@arcgis/lumina").TargetedEvent<this, ImmediateDoubleClickEvent>;
  /** Fires after a keyboard key is pressed. */
  readonly arcgisViewKeyDown: import("@arcgis/lumina").TargetedEvent<this, KeyDownEvent>;
  /** Fires after a keyboard key is pressed. */
  readonly arcgisViewKeyUp: import("@arcgis/lumina").TargetedEvent<this, KeyUpEvent>;
  /** Fires after each layer in the link chart has a corresponding LayerView created and rendered in the view. */
  readonly arcgisViewLayerviewCreate: import("@arcgis/lumina").TargetedEvent<this, LayerViewCreateEvent>;
  /** Fires when an error emits during the creation of a LayerView after a layer has been added to the link chart. */
  readonly arcgisViewLayerviewCreateError: import("@arcgis/lumina").TargetedEvent<this, LayerViewCreateErrorEvent>;
  /** Fires after a LayerView is destroyed and is no longer rendered in the view. */
  readonly arcgisViewLayerviewDestroy: import("@arcgis/lumina").TargetedEvent<this, LayerViewDestroyEvent>;
  /** Fires when a wheel button of a pointing device (typically a mouse) is scrolled on the view. */
  readonly arcgisViewMouseWheel: import("@arcgis/lumina").TargetedEvent<this, ViewMouseWheelEvent>;
  /** Fires after a mouse button is pressed, or a finger touches the display. */
  readonly arcgisViewPointerDown: import("@arcgis/lumina").TargetedEvent<this, PointerDownEvent>;
  /** Fires after a mouse cursor enters the view, or a display touch begins. */
  readonly arcgisViewPointerEnter: import("@arcgis/lumina").TargetedEvent<this, PointerEnterEvent>;
  /** Fires after a mouse cursor leaves the view, or a display touch ends. */
  readonly arcgisViewPointerLeave: import("@arcgis/lumina").TargetedEvent<this, PointerLeaveEvent>;
  /** Fires after the mouse or a finger on the display moves. */
  readonly arcgisViewPointerMove: import("@arcgis/lumina").TargetedEvent<this, PointerMoveEvent>;
  /** Fires after a mouse button is released, or a display touch ends. */
  readonly arcgisViewPointerUp: import("@arcgis/lumina").TargetedEvent<this, PointerUpEvent>;
  /**
   * This event is for the `ready` property and will be emitted when the view is ready.
   * This event will also emit if the `map` property is changed.
   */
  readonly arcgisViewReadyChange: import("@arcgis/lumina").TargetedEvent<this, void>;
  /**
   * Fires if the view encounters a content or rendering error.
   *
   * @since 4.34
   * @example
   * ```js
   * viewElement.addEventListener("arcgisViewReadyError", () => {
   *   // handle error
   * });
   * ```
   */
  readonly arcgisViewReadyError: import("@arcgis/lumina").TargetedEvent<this, void>;
  /**
   * Fires while the two pointers are dragged vertically on the view.
   *
   * @since 5.0
   */
  readonly arcgisViewVerticalTwoFingerDrag: import("@arcgis/lumina").TargetedEvent<this, VerticalTwoFingerDragEvent>;
  readonly "@eventTypes": {
    arcgisLoadError: ArcgisLinkChart["arcgisLoadError"]["detail"];
    arcgisViewAnalysisViewCreate: ArcgisLinkChart["arcgisViewAnalysisViewCreate"]["detail"];
    arcgisViewAnalysisViewCreateError: ArcgisLinkChart["arcgisViewAnalysisViewCreateError"]["detail"];
    arcgisViewAnalysisViewDestroy: ArcgisLinkChart["arcgisViewAnalysisViewDestroy"]["detail"];
    arcgisViewChange: ArcgisLinkChart["arcgisViewChange"]["detail"];
    arcgisViewClick: ArcgisLinkChart["arcgisViewClick"]["detail"];
    arcgisViewDoubleClick: ArcgisLinkChart["arcgisViewDoubleClick"]["detail"];
    arcgisViewDoubleTapDrag: ArcgisLinkChart["arcgisViewDoubleTapDrag"]["detail"];
    arcgisViewDrag: ArcgisLinkChart["arcgisViewDrag"]["detail"];
    arcgisViewHold: ArcgisLinkChart["arcgisViewHold"]["detail"];
    arcgisViewImmediateClick: ArcgisLinkChart["arcgisViewImmediateClick"]["detail"];
    arcgisViewImmediateDoubleClick: ArcgisLinkChart["arcgisViewImmediateDoubleClick"]["detail"];
    arcgisViewKeyDown: ArcgisLinkChart["arcgisViewKeyDown"]["detail"];
    arcgisViewKeyUp: ArcgisLinkChart["arcgisViewKeyUp"]["detail"];
    arcgisViewLayerviewCreate: ArcgisLinkChart["arcgisViewLayerviewCreate"]["detail"];
    arcgisViewLayerviewCreateError: ArcgisLinkChart["arcgisViewLayerviewCreateError"]["detail"];
    arcgisViewLayerviewDestroy: ArcgisLinkChart["arcgisViewLayerviewDestroy"]["detail"];
    arcgisViewMouseWheel: ArcgisLinkChart["arcgisViewMouseWheel"]["detail"];
    arcgisViewPointerDown: ArcgisLinkChart["arcgisViewPointerDown"]["detail"];
    arcgisViewPointerEnter: ArcgisLinkChart["arcgisViewPointerEnter"]["detail"];
    arcgisViewPointerLeave: ArcgisLinkChart["arcgisViewPointerLeave"]["detail"];
    arcgisViewPointerMove: ArcgisLinkChart["arcgisViewPointerMove"]["detail"];
    arcgisViewPointerUp: ArcgisLinkChart["arcgisViewPointerUp"]["detail"];
    arcgisViewReadyChange: ArcgisLinkChart["arcgisViewReadyChange"]["detail"];
    arcgisViewReadyError: ArcgisLinkChart["arcgisViewReadyError"]["detail"];
    arcgisViewVerticalTwoFingerDrag: ArcgisLinkChart["arcgisViewVerticalTwoFingerDrag"]["detail"];
  };
}