/// <reference types="@arcgis/core/interfaces.d.ts" />
/// <reference path="../../index.d.ts" />
import { Use } from '@arcgis/lumina/controllers';
import { PublicLitElement as LitElement, JsxNode, TargetedEvent } from '@arcgis/lumina';
import { ArcgisReferenceElement } from '../../utils/component-utils';
import { HeadingLevel } from '../../support/heading';
import { Season } from './daylight-utils';
import { useView } from '../../controllers/useView';
import { default as SceneView } from '@arcgis/core/views/SceneView';
import { PropertyValues } from 'lit';

/**
 * The Daylight component can be used to manipulate the lighting conditions of a
 * [Scene](https://developers.arcgis.com/javascript/latest/references/map-components/arcgis-scene/).
 * To achieve this, the component modifies the `lighting` property of the
 * [environment](https://developers.arcgis.com/javascript/latest/references/map-components/arcgis-scene/#environment) of the Scene component.
 *
 * To illuminate the scene, one can either use a configuration of date and time to position the
 * [sun](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-environment-SunLighting.html) or switch to the
 * [virtual](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-environment-VirtualLighting.html) mode,
 * where the light source is relative to the camera.
 *
 * When illuminating the scene with **[sunlight](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-environment-SunLighting.html)**
 * and adjusting the time and date, the positions of the sun and stars are updated accordingly. This also updates the
 * [date](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-environment-SunLighting.html#date) property of
 * [environment.lighting](https://developers.arcgis.com/javascript/latest/references/map-components/arcgis-scene/#environment).
 *
 * [![daylight-default](https://developers.arcgis.com/javascript/latest/assets/img/apiref/components/daylight/daylight-default.png)](https://developers.arcgis.com/javascript/latest/sample-code/daylight/)
 *
 * The component has an option to select the timezone. When the user makes any adjustments here, a new time
 * in the chosen timezone is calculated and displayed in the slider. The timezone selector can be disabled
 * by using the [hideTimezone](#hideTimezone) property.
 *
 * By default, a calendar is displayed to select the day, month, and year.
 * With the [dateOrSeason](#dateOrSeason) property, the calendar can be replaced with
 * a dropdown menu where a season can be selected instead:
 *
 * ![daylight-seasons](https://developers.arcgis.com/javascript/latest/assets/img/apiref/components/daylight/daylight-seasons.png)
 *
 * There are two play buttons: one corresponds to the time-of-day slider and animates the lighting
 * over the course of a day, while the other corresponds to the date picker
 * and animates the lighting over the course of a year (month by month). The speed of the time-of-day animation can
 * be set using the [playSpeedMultiplier](#playSpeedMultiplier) property.
 *
 * ![daylight-animation](https://developers.arcgis.com/javascript/latest/assets/img/apiref/components/daylight/daylight-animation.gif)
 *
 * Except for the daytime slider, all the elements in the Daylight component can be hidden:
 *
 * ![daylight-no-elements](https://developers.arcgis.com/javascript/latest/assets/img/apiref/components/daylight/daylight-no-elements.png)
 *
 * Whenever the sun position option is unchecked, the scene applies the
 * **[virtual light](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-environment-VirtualLighting.html)** source relative to the camera.
 * With this, the component's time slider, timezone, and date picker get automatically disabled:
 *
 * ![daylight-virtual](https://developers.arcgis.com/javascript/latest/assets/img/apiref/components/daylight/daylight-virtual.png)
 *
 * **Things to consider**
 *
 * * Daylight is only supported in a 3D [Scene](https://developers.arcgis.com/javascript/latest/references/map-components/arcgis-scene/) component.
 * * The Daylight component uses UTC time and does not account for the daylight savings times in different countries and regions of the world.
 * * When using the [virtual light](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-environment-VirtualLighting.html),
 * setting the time and date programmatically does not have an influence on the lighting conditions of the scene.
 * * When using the [sunlight](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-environment-SunLighting.html),
 * the time slider and time zone automatically react to the changes of the camera (e.g., position, rotation, pan, zoom) because the position of the simulated sun
 * is updated to maintain a consistent solar time of day based on the camera's current longitude. This can be adjusted using the
 * [cameraTrackingEnabled](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-environment-SunLighting.html#cameraTrackingEnabled)
 * property on [environment.lighting](https://developers.arcgis.com/javascript/latest/references/map-components/arcgis-scene/#environment).
 *
 * [Read more...](https://developers.arcgis.com/javascript/latest/references/map-components/arcgis-daylight/)
 *
 * @see [Environment](https://developers.arcgis.com/javascript/latest/references/map-components/arcgis-scene/#environment)
 * @see [SunLighting](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-environment-SunLighting.html)
 * @see [VirtualLighting](https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-environment-VirtualLighting.html)
 * @see [Sample - Daylight component](https://developers.arcgis.com/javascript/latest/sample-code/daylight/)
 * @since 4.28
 */
export declare class ArcgisDaylight extends LitElement {
    /**
     * 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 Daylight component will be associated with a map or scene component rather than using the `view` property.
     */
    view?: SceneView;
    /**
     * 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/arcgis-daylight/#destroy) method when you are done to
     * prevent memory leaks.
     *
     * @default false
     */
    autoDestroyDisabled: boolean;
    /**
     * Sets the season that is used when the component displays the season picker.
     * Each season uses a fixed date corresponding to the seasonal equinoxes and solstices.
     *
     * @see [dateOrSeason](#dateOrSeason)
     */
    get currentSeason(): Season;
    set currentSeason(season: Season);
    /**
     * Controls whether the component displays a date or a season picker. When the date picker is set, the user selects the date from a calendar. The season picker allows the user to choose a season from a drop-down list. Each season uses a fixed date corresponding to the equinoxes and solstices of 2014.
     *
     * @default "date"
     */
    dateOrSeason: "date" | "season";
    /**
     * Starts or pauses the daytime animation cycling through the minutes of the day.
     * Set the property to `true` to start the animation and to `false` to pause it.
     *
     * @default false
     */
    get dayPlaying(): boolean;
    set dayPlaying(playing: boolean);
    /**
     * Indicates the heading level to use for the component title.
     *
     * @default 2
     */
    headingLevel: HeadingLevel;
    /** @default false */
    hideDatePicker: boolean;
    /** @default false */
    hideHeader: boolean;
    /** @default false */
    hidePlayButtons: boolean;
    /** @default false */
    hideShadowsToggle: boolean;
    /** @default false */
    hideSunLightingToggle: boolean;
    /** @default false */
    hideTimezone: boolean;
    /**
     * Icon which represents the component. Typically used when the component is controlled by another component (e.g. by the Expand component).
     *
     * @see [Calcite Icons](https://developers.arcgis.com/calcite-design-system/icons/)
     * @default "brightness"
     */
    icon?: HTMLCalciteIconElement["icon"];
    /** The component's default label. */
    label?: string;
    /**
     * Controls the daytime animation speed.
     *
     * @example
     * ```js
     * // Plays the daylight animation at half of the default speed
     * daylight.playSpeedMultiplier = 0.5;
     * ```
     * @default 1.0
     */
    playSpeedMultiplier: number;
    /** @deprecated since 4.34, use [`slot`](https://developers.arcgis.com/javascript/latest/building-your-ui/#slots) instead. */
    position?: __esri.UIPosition;
    /**
     * 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)
     */
    referenceElement?: ArcgisReferenceElement | string;
    /**
     * Sets the interval, in minutes, with which the time slider increments or decrements as it is dragged or changed via the keyboard.
     *
     * @example
     * ```js
     * // Set steps at an interval of 60. Then, the slider thumb snaps at each hour of the day.
     * daylight.timeSliderSteps = 60;
     * ```
     * @default 5
     */
    timeSliderSteps: number[] | number;
    /**
     * The difference in hours between UTC time and the time displayed in the component.
     *
     * @example
     * ```js
     * daylight.utcOffset = -8;
     * ```
     * @example
     * ```js
     * // Alternatively, the UTC offset can be set by configuring the `displayUTCOffset` property of `SunLighting`.
     * viewElement.environment.lighting = new SunLighting({
     *   displayUTCOffset: -8
     * });
     * ```
     * @since 4.34
     */
    get utcOffset(): nullish | number;
    set utcOffset(value: nullish | number);
    /**
     * Slider position for the time of day in the timezone
     * given by [utcOffset](#utcOffset). The position represents the time
     * of the day in minutes. Possible values range between 0 and 1440.
     *
     * @example
     * ```js
     * // Set the time to 4:00 PM (16:00) in the given timezone.
     * daylight.timeSliderPosition = 16 * 60;
     * ```
     * @example
     * ```js
     * // Alternatively, the time can be set by configuring the `date` property of `SunLighting`.
     * // Then, the time slider gets updated automatically.
     * viewElement.environment.lighting = new SunLighting({
     *   date: new Date("2005-08-25T16:00:00")
     * });
     * ```
     * @since 4.34
     */
    get timeSliderPosition(): nullish | number;
    set timeSliderPosition(value: nullish | number);
    /**
     * The calendar date in the timezone given by [utcOffset](#utcOffset).
     *
     * @example
     * ```js
     * daylight.localDate = new Date("2005-08-25");
     * ```
     * @example
     * ```js
     * // Alternatively, the date can be set by configuring the `date` property of `SunLighting`.
     * viewElement.environment.lighting = new SunLighting({
     *   date: new Date("2005-08-25T16:00:00")
     * });
     * ```
     * @since 4.34
     */
    get localDate(): Date;
    set localDate(value: Date | number | string);
    /**
     * Starts or pauses the date animation cycling through the months of the year.
     * Set the property to `true` to start the animation and to `false` to pause it.
     *
     * @default false
     */
    get yearPlaying(): boolean;
    set yearPlaying(playing: boolean);
    /** Permanently destroy the component. */
    destroy(): Promise<void>;
    /** Emitted when the component associated with a map or scene view is ready to be interacted with. */
    readonly arcgisReady: TargetedEvent<this, void>;
    /**
     * Fires when the user changes the date or time in the component by interacting with the slider, the date picker, the
     * season selector or the play buttons.
     *
     * @since 4.33
     */
    readonly arcgisUserDateTimeChange: TargetedEvent<this, void>;
    readonly _setterTypes: {
        localDate?: Date | number | string;
    };
}
export interface LocaleParts {
    language: string;
    extlang?: string;
    region?: string;
}
