UNPKG

@feltmaps/js-sdk

Version:

An SDK for Felt maps

14,702 lines 515 kB
import { ZodRawShape, objectOutputType, ZodTypeAny, z } from 'zod';

/**
 * A selection of generic utility types
 */

type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never;
type PromiseOrNot<T> = T | Promise<T>;
/**
 * A better type inference for zod schemas that retains the TSDoc comments
 * from the members in the compiled output.
 */
type zInfer<T extends {
    shape: ZodRawShape;
}> = objectOutputType<T["shape"], ZodTypeAny, "strip">;
type UnwrapPromise<T> = T extends Promise<infer U> ? U : T;

declare const BaseBasemapSchema: z.ZodObject<{
    /**
     * A unique identifier for the basemap.
     *
     * @remarks Do not rely on the stability of this ID for Felt basemaps, as they are
     * subject to change.
     */
    id: z.ZodString;
    /**
     * The name of the basemap.
     */
    name: z.ZodString;
    /**
     * The color scheme of the UI that goes with the basemap. It is best to set this to
     * "light" if your basemap is broadly light, and "dark" if your basemap is broadly dark.
     */
    uiColorScheme: z.ZodEnum<["light", "dark"]>;
    /**
     * The attribution of the basemap, which is shown in the map's UI.
     */
    attribution: z.ZodOptional<z.ZodString>;
}, "strip", z.ZodTypeAny, {
    id: string;
    name: string;
    uiColorScheme: "light" | "dark";
    attribution?: string | undefined;
}, {
    id: string;
    name: string;
    uiColorScheme: "light" | "dark";
    attribution?: string | undefined;
}>;
interface BaseBasemap extends zInfer<typeof BaseBasemapSchema> {
}
interface FeltBasemap extends BaseBasemap {
    type: "felt";
    theme: "color_light" | "monochrome_dark" | "monochrome_light" | "satellite";
}
declare const ColorBaseBasemapSchema: z.ZodObject<z.objectUtil.extendShape<{
    /**
     * A unique identifier for the basemap.
     *
     * @remarks Do not rely on the stability of this ID for Felt basemaps, as they are
     * subject to change.
     */
    id: z.ZodString;
    /**
     * The name of the basemap.
     */
    name: z.ZodString;
    /**
     * The color scheme of the UI that goes with the basemap. It is best to set this to
     * "light" if your basemap is broadly light, and "dark" if your basemap is broadly dark.
     */
    uiColorScheme: z.ZodEnum<["light", "dark"]>;
    /**
     * The attribution of the basemap, which is shown in the map's UI.
     */
    attribution: z.ZodOptional<z.ZodString>;
}, {
    type: z.ZodLiteral<"color">;
    color: z.ZodString;
}>, "strip", z.ZodTypeAny, {
    type: "color";
    id: string;
    color: string;
    name: string;
    uiColorScheme: "light" | "dark";
    attribution?: string | undefined;
}, {
    type: "color";
    id: string;
    color: string;
    name: string;
    uiColorScheme: "light" | "dark";
    attribution?: string | undefined;
}>;
interface ColorBasemap extends zInfer<typeof ColorBaseBasemapSchema> {
}
declare const CustomTileBasemapSchema: z.ZodObject<z.objectUtil.extendShape<{
    /**
     * A unique identifier for the basemap.
     *
     * @remarks Do not rely on the stability of this ID for Felt basemaps, as they are
     * subject to change.
     */
    id: z.ZodString;
    /**
     * The name of the basemap.
     */
    name: z.ZodString;
    /**
     * The color scheme of the UI that goes with the basemap. It is best to set this to
     * "light" if your basemap is broadly light, and "dark" if your basemap is broadly dark.
     */
    uiColorScheme: z.ZodEnum<["light", "dark"]>;
    /**
     * The attribution of the basemap, which is shown in the map's UI.
     */
    attribution: z.ZodOptional<z.ZodString>;
}, {
    type: z.ZodLiteral<"xyz_tile">;
    tileUrl: z.ZodString;
}>, "strip", z.ZodTypeAny, {
    type: "xyz_tile";
    id: string;
    name: string;
    uiColorScheme: "light" | "dark";
    tileUrl: string;
    attribution?: string | undefined;
}, {
    type: "xyz_tile";
    id: string;
    name: string;
    uiColorScheme: "light" | "dark";
    tileUrl: string;
    attribution?: string | undefined;
}>;
interface CustomTileBasemap extends zInfer<typeof CustomTileBasemapSchema> {
}
type ColorBasemapInput = Omit<ColorBasemap, "id">;
type CustomTileBasemapInput = Omit<CustomTileBasemap, "id">;
type Basemap = FeltBasemap | ColorBasemap | CustomTileBasemap;

/**
 * The basemaps controller allows you to manage the map's basemap layer.
 *
 * You can get the current basemap, list available basemaps, change the basemap,
 * and be notified when the basemap changes.
 *
 * @group Controller
 * @public
 */
interface BasemapsController {
    /**
     * Gets the currently active basemap.
     *
     * Use this method to retrieve information about the current basemap, including
     * its type (Felt, color, or custom tile), name, color scheme, and attribution.
     *
     * @returns A promise that resolves to the current basemap configuration.
     *
     * @example
     * ```typescript
     * // Get current basemap
     * const basemap = await felt.getCurrentBasemap();
     * console.log({
     *   name: basemap.name,
     *   type: basemap.type,
     *   uiColorScheme: basemap.uiColorScheme,
     * });
     * ```
     */
    getCurrentBasemap(): Promise<Basemap>;
    /**
     * Gets all basemaps available on the map.
     *
     * Use this method to retrieve a list of all available basemaps that can be
     * applied to the map.
     *
     * @returns A promise that resolves to all basemaps available on the map.
     *
     * @example
     * ```typescript
     * // Get all available basemaps
     * const basemaps = await felt.getBasemaps();
     * const lightBasemaps = basemaps.filter(b => b.uiColorScheme === "light");
     * ```
     */
    getBasemaps(): Promise<Basemap[]>;
    /**
     * Chooses the basemap to use for the map.
     *
     * Use this method to change the current basemap. The basemap ID can be obtained
     * from getBasemaps().
     *
     * @returns A promise that resolves when the basemap has been set.
     *
     * @example
     * ```typescript
     * // Switch to a specific basemap
     * const basemaps = await felt.getBasemaps();
     * const darkBasemap = basemaps.find(b => b.uiColorScheme === "dark");
     * if (darkBasemap) {
     *   await felt.chooseBasemap(darkBasemap.id);
     * }
     * ```
     */
    chooseBasemap(id: string): void;
    /**
     * Adds a custom basemap to the map. This can be either a solid color or a basemap
     * from a custom tile URL.
     *
     * @returns A promise for the added basemap.
     *
     * @example
     * ```typescript
     * // Add a custom basemap and select it
     * await felt.addCustomBasemap({
     *   basemap: {
     *     type: "xyz_tile",
     *     tileUrl: "https://example.com/tile.png"
     *   },
     *   select: true,
     * });
     * ```
     */
    addCustomBasemap(args: {
        /**
         * The basemap to add.
         */
        basemap: ColorBasemapInput | CustomTileBasemapInput;
        /**
         * Whether to select the basemap after adding it.
         */
        select?: boolean;
    }): Promise<Basemap>;
    /**
     * Removes a basemap from the list of available basemaps.
     *
     * @returns A promise that resolves when the basemap has been removed.
     */
    removeBasemap(id: string): Promise<void>;
    /**
     * Adds a listener for when the basemap changes.
     *
     * Use this to react to basemap changes, such as updating your UI or
     * adjusting other map elements to match the new basemap's color scheme.
     *
     * @returns A function to unsubscribe from the listener.
     *
     * @event
     * @example
     * ```typescript
     * // Listen for basemap changes
     * const unsubscribe = felt.onBasemapChange({
     *   handler: basemap => {
     *     console.log(`Switched to ${basemap.name}`);
     *     updateUIColors(basemap.uiColorScheme);
     *   },
     * });
     *
     * // later on...
     * unsubscribe();
     * ```
     */
    onBasemapChange(args: {
        handler: (basemap: Basemap) => void;
    }): VoidFunction;
}

/**
 * Represents a point in world coordinates.
 */
interface LatLng {
    latitude: number;
    longitude: number;
}
/**
 * A tuple representing a longitude and latitude coordinate.
 *
 * This is used hen serializing geometry because that's the standard used in
 * GeoJSON.
 */
type LngLatTuple = [longitude: number, latitude: number];
/**
 * A GeoJSON properties object.
 */
type GeoJsonProperties = Record<string, unknown>;
/**
 * A GeoJSON feature object, compliant with:
 * https://datatracker.ietf.org/doc/html/rfc7946#section-3.2
 *
 * @interface
 */
type GeoJsonFeature = {
    type: "Feature";
    /**
     * The bounding box of the feature in [west, south, east, north] order.
     */
    bbox?: FeltBoundary;
    /**
     * The feature's geometry
     */
    geometry: GeoJsonGeometry;
    /**
     * A value that uniquely identifies this feature in a
     * https://tools.ietf.org/html/rfc7946#section-3.2.
     */
    id?: string | number | undefined;
    /**
     * Properties associated with this feature.
     */
    properties: GeoJsonProperties;
};
interface PointGeometry {
    type: "Point";
    coordinates: LngLatTuple;
}
/**
 * A GeoJSON multi-point geometry.
 *
 * @remarks
 * You shouldn't expect this to come from Felt - it is here for completeness
 * of the GeoJSON spec.
 */
interface MultiPointGeometry {
    type: "MultiPoint";
    coordinates: PointGeometry["coordinates"][];
}
interface PolygonGeometry extends zInfer<typeof PolygonGeometrySchema> {
}
/**
 * A GeoJSON polygon geometry.
 */
declare const PolygonGeometrySchema: z.ZodObject<{
    type: z.ZodLiteral<"Polygon">;
    /**
     * The coordinates of a polygon. The first array is the exterior ring, and
     * any subsequent arrays are the interior rings.
     *
     * Each ring must have at least 4 points: 3 to make a valid triangle and the
     * last to close the path, which must be identical to the first.
     */
    coordinates: z.ZodArray<z.ZodEffects<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, "many">, [number, number][], [number, number][]>, "many">;
}, "strip", z.ZodTypeAny, {
    type: "Polygon";
    coordinates: [number, number][][];
}, {
    type: "Polygon";
    coordinates: [number, number][][];
}>;
/**
 * A GeoJSON multi-polygon geometry.
 *
 * @interface
 */
type MultiPolygonGeometry = {
    type: "MultiPolygon";
    coordinates: PolygonGeometry["coordinates"][];
};
/**
 * A GeoJSON line string geometry.
 *
 * @interface
 */
type LineStringGeometry = {
    type: "LineString";
    coordinates: LngLatTuple[];
};
/**
 * A GeoJSON multi-line string geometry.
 *
 * @interface
 */
type MultiLineStringGeometry = {
    type: "MultiLineString";
    coordinates: LineStringGeometry["coordinates"][];
};
/**
 * A GeoJSON geometry of any type
 */
type GeoJsonGeometry = PointGeometry | PolygonGeometry | LineStringGeometry | MultiLineStringGeometry | MultiPolygonGeometry | MultiPointGeometry;
/**
 * @ignore
 * @internal
 */
declare const FeltZoomSchema: z.ZodNumber;
/**
 * The zoom level of the map.
 *
 * It is a floating-point number between 1 and 23, where 1 is the most
 * zoomed out and 23 is the most zoomed in.
 *
 * @group Types
 * @public
 */
type FeltZoom = z.infer<typeof FeltZoomSchema>;
/**
 * @ignore
 * @internal
 */
declare const FeltBoundarySchema: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
/**
 * The edges of the map in the form of a bounding box.
 *
 * The boundary is a tuple of the form `[west, south, east, north]`.
 *
 * @group Types
 * @public
 */
type FeltBoundary = z.infer<typeof FeltBoundarySchema>;
/**
 * The parameters for the methods that change the visibility of entities.
 *
 * @public
 * @category Visibility
 */
interface SetVisibilityRequest extends zInfer<typeof SetVisibilityRequestSchema> {
}
/**
 * @internal
 */
declare const SetVisibilityRequestSchema: z.ZodObject<{
    /**
     * The ids of the entities you want to change the visibility of.
     */
    show: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
    hide: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
}, "strip", z.ZodTypeAny, {
    show?: string[] | undefined;
    hide?: string[] | undefined;
}, {
    show?: string[] | undefined;
    hide?: string[] | undefined;
}>;
/**
 * Specifies the direction to sort data in
 *
 * @group Types
 */
type SortDirection = z.infer<typeof SortDirectionSchema>;
/** @ignore */
declare const SortDirectionSchema: z.ZodEnum<["asc", "desc"]>;
/**
 * Configuration for sorting data by a specific attribute
 *
 * @group Types
 */
interface SortConfig extends zInfer<typeof SortConfigSchema> {
    direction: SortDirection;
}
/** @ignore */
declare const SortConfigSchema: z.ZodObject<{
    /**
     * The attribute to sort by. What this represents depends on the context.
     * For instance, when sorting features in a data table, the attribute is
     * the column to sort by.
     */
    attribute: z.ZodString;
    /**
     * The direction to sort in
     */
    direction: z.ZodEnum<["asc", "desc"]>;
}, "strip", z.ZodTypeAny, {
    attribute: string;
    direction: "asc" | "desc";
}, {
    attribute: string;
    direction: "asc" | "desc";
}>;

declare const PlaceCreateSchema: z.ZodObject<Omit<z.objectUtil.extendShape<{
    id: z.ZodOptional<z.ZodString>;
    groupId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    color: z.ZodOptional<z.ZodString>;
    name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    attributes: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
    interaction: z.ZodOptional<z.ZodOptional<z.ZodEnum<["default", "locked"]>>>;
    imageUrl: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    type: z.ZodOptional<z.ZodLiteral<"Place">>;
    coordinates: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
    symbol: z.ZodOptional<z.ZodString>;
    frame: z.ZodOptional<z.ZodNullable<z.ZodEnum<["frame-circle", "frame-square"]>>>;
    hideLabel: z.ZodOptional<z.ZodBoolean>;
}, Pick<z.objectUtil.extendShape<z.objectUtil.extendShape<{
    /**
     * The unique identifier for the element.
     */
    id: z.ZodString;
    /**
     * The ID of the element group that the element belongs to.
     * For elements that are not part of a group, this will be null.
     */
    groupId: z.ZodNullable<z.ZodString>;
    /**
     * The color of the element in some CSS-like format.
     *
     * @example
     * ```typescript
     * "#ABC123";
     * "rgb(255, 0, 0)";
     * "hsl(200, 100%, 50%)";
     * ```
     *
     * @default "#C93535"
     */
    color: z.ZodString;
    /**
     * The element's name. For elements that can show a label or text on
     * the map (e.g. a Place or Text element) this is the text that will be shown.
     *
     * For elements such as Polygons or Paths, the name is what is shown when
     * the element is selected by clicking on it.
     */
    name: z.ZodNullable<z.ZodString>;
    /**
     * Text describing the element, which is shown in an element's popup when it
     * is selected.
     *
     * Note that some elements are not selectable on the map, such as Notes, Text
     * and Markers, so their description will not be shown.
     */
    description: z.ZodNullable<z.ZodString>;
    /**
     * A set of key-value pairs that can be used to store arbitrary data about the element.
     *
     * This is most useful for associating additional data with an element that is not
     * part of the element's core data, such as a Place's address or some other
     * data.
     */
    attributes: z.ZodRecord<z.ZodString, z.ZodUnknown>;
    /**
     * Whether the element is interactive.
     *
     * The `default` interaction mode means that the element can be selected and edited by
     * the user, if it was created by the SDK or by the user using a tool.
     *
     * If the interaction mode is `locked`, the element will not be editable by the user,
     * which is often used for elements that you don't want the user to edit or move by
     * accident.
     *
     * Elements that were created by the map author (i.e. not during an SDK "session") are
     * not editable and have special behaviour depending on their name, description and
     * attributes.
     *
     * @default "default"
     */
    interaction: z.ZodOptional<z.ZodEnum<["default", "locked"]>>;
}, {
    /**
     * The URL of an image that has been added to the element.
     */
    imageUrl: z.ZodNullable<z.ZodString>;
}>, {
    type: z.ZodLiteral<"Place">;
    coordinates: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
    /**
     * The symbol that is rendered for the Place.
     *
     * This can be an emoji by using colon-enclosed characters (e.g. `":smiley:"`)
     * or one of the symbols available in Felt's symbol library.
     *
     * You can see the available symbols in the Felt UI when editing a Place
     * by hovering a symbol and converting the tooltip to kebab-case. For example,
     * the "Oil barrel" symbol is `oil-barrel`.
     */
    symbol: z.ZodString;
    /**
     * The frame that is rendered around the Place's symbol. This is
     * only available for non-emoji symbols.
     */
    frame: z.ZodNullable<z.ZodEnum<["frame-circle", "frame-square"]>>;
    /**
     * Whether the element's label is hidden on the map. This allows you
     * to add a name to the element and can show in popups, but not have
     * it visible on the map.
     *
     * This will also hide the faint placeholder label that is shown when
     * an editable Place is selected.
     *
     * @default false
     */
    hideLabel: z.ZodBoolean;
}>, "type" | "coordinates">>, "id">, "strip", z.ZodTypeAny, {
    type: "Place";
    coordinates: [number, number];
    symbol?: string | undefined;
    groupId?: string | null | undefined;
    color?: string | undefined;
    name?: string | null | undefined;
    description?: string | null | undefined;
    attributes?: Record<string, unknown> | undefined;
    interaction?: "default" | "locked" | undefined;
    imageUrl?: string | null | undefined;
    frame?: "frame-circle" | "frame-square" | null | undefined;
    hideLabel?: boolean | undefined;
}, {
    type: "Place";
    coordinates: [number, number];
    symbol?: string | undefined;
    groupId?: string | null | undefined;
    color?: string | undefined;
    name?: string | null | undefined;
    description?: string | null | undefined;
    attributes?: Record<string, unknown> | undefined;
    interaction?: "default" | "locked" | undefined;
    imageUrl?: string | null | undefined;
    frame?: "frame-circle" | "frame-square" | null | undefined;
    hideLabel?: boolean | undefined;
}>;
declare const PathCreateSchema: z.ZodObject<Omit<z.objectUtil.extendShape<{
    id: z.ZodOptional<z.ZodString>;
    groupId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    color: z.ZodOptional<z.ZodString>;
    name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    attributes: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
    interaction: z.ZodOptional<z.ZodOptional<z.ZodEnum<["default", "locked"]>>>;
    imageUrl: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    strokeOpacity: z.ZodOptional<z.ZodNumber>;
    strokeWidth: z.ZodOptional<z.ZodNumber>;
    strokeStyle: z.ZodOptional<z.ZodEnum<["solid", "dashed", "dotted"]>>;
    type: z.ZodOptional<z.ZodLiteral<"Path">>;
    coordinates: z.ZodOptional<z.ZodArray<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, "many">, "many">>;
    distanceMarker: z.ZodOptional<z.ZodBoolean>;
    routingMode: z.ZodOptional<z.ZodNullable<z.ZodEnum<["driving", "cycling", "walking", "flying"]>>>;
    endCaps: z.ZodOptional<z.ZodBoolean>;
}, Pick<z.objectUtil.extendShape<z.objectUtil.extendShape<z.objectUtil.extendShape<{
    /**
     * The unique identifier for the element.
     */
    id: z.ZodString;
    /**
     * The ID of the element group that the element belongs to.
     * For elements that are not part of a group, this will be null.
     */
    groupId: z.ZodNullable<z.ZodString>;
    /**
     * The color of the element in some CSS-like format.
     *
     * @example
     * ```typescript
     * "#ABC123";
     * "rgb(255, 0, 0)";
     * "hsl(200, 100%, 50%)";
     * ```
     *
     * @default "#C93535"
     */
    color: z.ZodString;
    /**
     * The element's name. For elements that can show a label or text on
     * the map (e.g. a Place or Text element) this is the text that will be shown.
     *
     * For elements such as Polygons or Paths, the name is what is shown when
     * the element is selected by clicking on it.
     */
    name: z.ZodNullable<z.ZodString>;
    /**
     * Text describing the element, which is shown in an element's popup when it
     * is selected.
     *
     * Note that some elements are not selectable on the map, such as Notes, Text
     * and Markers, so their description will not be shown.
     */
    description: z.ZodNullable<z.ZodString>;
    /**
     * A set of key-value pairs that can be used to store arbitrary data about the element.
     *
     * This is most useful for associating additional data with an element that is not
     * part of the element's core data, such as a Place's address or some other
     * data.
     */
    attributes: z.ZodRecord<z.ZodString, z.ZodUnknown>;
    /**
     * Whether the element is interactive.
     *
     * The `default` interaction mode means that the element can be selected and edited by
     * the user, if it was created by the SDK or by the user using a tool.
     *
     * If the interaction mode is `locked`, the element will not be editable by the user,
     * which is often used for elements that you don't want the user to edit or move by
     * accident.
     *
     * Elements that were created by the map author (i.e. not during an SDK "session") are
     * not editable and have special behaviour depending on their name, description and
     * attributes.
     *
     * @default "default"
     */
    interaction: z.ZodOptional<z.ZodEnum<["default", "locked"]>>;
}, {
    /**
     * The URL of an image that has been added to the element.
     */
    imageUrl: z.ZodNullable<z.ZodString>;
}>, {
    /**
     * A value between 0 and 1 that describes the opacity of the element's stroke.
     *
     * @default 1
     */
    strokeOpacity: z.ZodNumber;
    /**
     * The width of the element's stroke in pixels.
     *
     * @default 2
     */
    strokeWidth: z.ZodNumber;
    /**
     * The style of the element's stroke.
     *
     * @default "solid"
     */
    strokeStyle: z.ZodEnum<["solid", "dashed", "dotted"]>;
}>, {
    type: z.ZodLiteral<"Path">;
    coordinates: z.ZodArray<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, "many">, "many">;
    /**
     * Whether a distance marker is shown at the midpoint of the path.
     *
     * @default false
     */
    distanceMarker: z.ZodBoolean;
    /**
     * Whether this represents a route, and if so, what mode of transport
     * is used.
     *
     * If this is `null`, the path is not considered to be a route, so while it
     * can have a `distanceMarker`, it will does not have a start or end cap.
     *
     * @default null
     */
    routingMode: z.ZodNullable<z.ZodEnum<["driving", "cycling", "walking", "flying"]>>;
    /**
     * Whether or not to show Start and End caps on the path. This is
     * only available if the `routingMode` is set.
     *
     * @default false
     */
    endCaps: z.ZodBoolean;
}>, "type" | "coordinates">>, "id">, "strip", z.ZodTypeAny, {
    type: "Path";
    coordinates: [number, number][][];
    groupId?: string | null | undefined;
    color?: string | undefined;
    name?: string | null | undefined;
    description?: string | null | undefined;
    attributes?: Record<string, unknown> | undefined;
    interaction?: "default" | "locked" | undefined;
    imageUrl?: string | null | undefined;
    strokeOpacity?: number | undefined;
    strokeWidth?: number | undefined;
    strokeStyle?: "solid" | "dashed" | "dotted" | undefined;
    distanceMarker?: boolean | undefined;
    routingMode?: "driving" | "cycling" | "walking" | "flying" | null | undefined;
    endCaps?: boolean | undefined;
}, {
    type: "Path";
    coordinates: [number, number][][];
    groupId?: string | null | undefined;
    color?: string | undefined;
    name?: string | null | undefined;
    description?: string | null | undefined;
    attributes?: Record<string, unknown> | undefined;
    interaction?: "default" | "locked" | undefined;
    imageUrl?: string | null | undefined;
    strokeOpacity?: number | undefined;
    strokeWidth?: number | undefined;
    strokeStyle?: "solid" | "dashed" | "dotted" | undefined;
    distanceMarker?: boolean | undefined;
    routingMode?: "driving" | "cycling" | "walking" | "flying" | null | undefined;
    endCaps?: boolean | undefined;
}>;
declare const PolygonCreateSchema: z.ZodObject<Omit<z.objectUtil.extendShape<{
    id: z.ZodOptional<z.ZodString>;
    groupId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    color: z.ZodOptional<z.ZodString>;
    name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    attributes: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
    interaction: z.ZodOptional<z.ZodOptional<z.ZodEnum<["default", "locked"]>>>;
    imageUrl: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    strokeOpacity: z.ZodOptional<z.ZodNumber>;
    strokeWidth: z.ZodOptional<z.ZodNumber>;
    strokeStyle: z.ZodOptional<z.ZodEnum<["solid", "dashed", "dotted"]>>;
    type: z.ZodOptional<z.ZodLiteral<"Polygon">>;
    coordinates: z.ZodOptional<z.ZodArray<z.ZodEffects<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, "many">, [number, number][], [number, number][]>, "many">>;
    fillOpacity: z.ZodOptional<z.ZodNumber>;
    areaMarker: z.ZodOptional<z.ZodBoolean>;
}, Pick<z.objectUtil.extendShape<z.objectUtil.extendShape<z.objectUtil.extendShape<{
    /**
     * The unique identifier for the element.
     */
    id: z.ZodString;
    /**
     * The ID of the element group that the element belongs to.
     * For elements that are not part of a group, this will be null.
     */
    groupId: z.ZodNullable<z.ZodString>;
    /**
     * The color of the element in some CSS-like format.
     *
     * @example
     * ```typescript
     * "#ABC123";
     * "rgb(255, 0, 0)";
     * "hsl(200, 100%, 50%)";
     * ```
     *
     * @default "#C93535"
     */
    color: z.ZodString;
    /**
     * The element's name. For elements that can show a label or text on
     * the map (e.g. a Place or Text element) this is the text that will be shown.
     *
     * For elements such as Polygons or Paths, the name is what is shown when
     * the element is selected by clicking on it.
     */
    name: z.ZodNullable<z.ZodString>;
    /**
     * Text describing the element, which is shown in an element's popup when it
     * is selected.
     *
     * Note that some elements are not selectable on the map, such as Notes, Text
     * and Markers, so their description will not be shown.
     */
    description: z.ZodNullable<z.ZodString>;
    /**
     * A set of key-value pairs that can be used to store arbitrary data about the element.
     *
     * This is most useful for associating additional data with an element that is not
     * part of the element's core data, such as a Place's address or some other
     * data.
     */
    attributes: z.ZodRecord<z.ZodString, z.ZodUnknown>;
    /**
     * Whether the element is interactive.
     *
     * The `default` interaction mode means that the element can be selected and edited by
     * the user, if it was created by the SDK or by the user using a tool.
     *
     * If the interaction mode is `locked`, the element will not be editable by the user,
     * which is often used for elements that you don't want the user to edit or move by
     * accident.
     *
     * Elements that were created by the map author (i.e. not during an SDK "session") are
     * not editable and have special behaviour depending on their name, description and
     * attributes.
     *
     * @default "default"
     */
    interaction: z.ZodOptional<z.ZodEnum<["default", "locked"]>>;
}, {
    /**
     * The URL of an image that has been added to the element.
     */
    imageUrl: z.ZodNullable<z.ZodString>;
}>, {
    /**
     * A value between 0 and 1 that describes the opacity of the element's stroke.
     *
     * @default 1
     */
    strokeOpacity: z.ZodNumber;
    /**
     * The width of the element's stroke in pixels.
     *
     * @default 2
     */
    strokeWidth: z.ZodNumber;
    /**
     * The style of the element's stroke.
     *
     * @default "solid"
     */
    strokeStyle: z.ZodEnum<["solid", "dashed", "dotted"]>;
}>, {
    type: z.ZodLiteral<"Polygon">;
    coordinates: z.ZodArray<z.ZodEffects<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, "many">, [number, number][], [number, number][]>, "many">;
    /**
     * The opacity of the polygon's fill, between 0 and 1.
     *
     * @default 0.25
     */
    fillOpacity: z.ZodNumber;
    /**
     * Whether to show an area marker on the polygon.
     *
     * @default false
     */
    areaMarker: z.ZodBoolean;
}>, "type" | "coordinates">>, "id">, "strip", z.ZodTypeAny, {
    type: "Polygon";
    coordinates: [number, number][][];
    groupId?: string | null | undefined;
    color?: string | undefined;
    name?: string | null | undefined;
    description?: string | null | undefined;
    attributes?: Record<string, unknown> | undefined;
    interaction?: "default" | "locked" | undefined;
    imageUrl?: string | null | undefined;
    strokeOpacity?: number | undefined;
    strokeWidth?: number | undefined;
    strokeStyle?: "solid" | "dashed" | "dotted" | undefined;
    fillOpacity?: number | undefined;
    areaMarker?: boolean | undefined;
}, {
    type: "Polygon";
    coordinates: [number, number][][];
    groupId?: string | null | undefined;
    color?: string | undefined;
    name?: string | null | undefined;
    description?: string | null | undefined;
    attributes?: Record<string, unknown> | undefined;
    interaction?: "default" | "locked" | undefined;
    imageUrl?: string | null | undefined;
    strokeOpacity?: number | undefined;
    strokeWidth?: number | undefined;
    strokeStyle?: "solid" | "dashed" | "dotted" | undefined;
    fillOpacity?: number | undefined;
    areaMarker?: boolean | undefined;
}>;
declare const CircleCreateSchema: z.ZodObject<Omit<z.objectUtil.extendShape<{
    id: z.ZodOptional<z.ZodString>;
    groupId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    color: z.ZodOptional<z.ZodString>;
    name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    attributes: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
    interaction: z.ZodOptional<z.ZodOptional<z.ZodEnum<["default", "locked"]>>>;
    imageUrl: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    strokeOpacity: z.ZodOptional<z.ZodNumber>;
    strokeWidth: z.ZodOptional<z.ZodNumber>;
    strokeStyle: z.ZodOptional<z.ZodEnum<["solid", "dashed", "dotted"]>>;
    type: z.ZodOptional<z.ZodLiteral<"Circle">>;
    center: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
    radius: z.ZodOptional<z.ZodNumber>;
    radiusMarker: z.ZodOptional<z.ZodBoolean>;
    radiusDisplayAngle: z.ZodOptional<z.ZodNumber>;
    radiusDisplayUnit: z.ZodOptional<z.ZodNullable<z.ZodEnum<["meter", "kilometer", "foot", "mile"]>>>;
    fillOpacity: z.ZodOptional<z.ZodNumber>;
}, Pick<z.objectUtil.extendShape<z.objectUtil.extendShape<z.objectUtil.extendShape<{
    /**
     * The unique identifier for the element.
     */
    id: z.ZodString;
    /**
     * The ID of the element group that the element belongs to.
     * For elements that are not part of a group, this will be null.
     */
    groupId: z.ZodNullable<z.ZodString>;
    /**
     * The color of the element in some CSS-like format.
     *
     * @example
     * ```typescript
     * "#ABC123";
     * "rgb(255, 0, 0)";
     * "hsl(200, 100%, 50%)";
     * ```
     *
     * @default "#C93535"
     */
    color: z.ZodString;
    /**
     * The element's name. For elements that can show a label or text on
     * the map (e.g. a Place or Text element) this is the text that will be shown.
     *
     * For elements such as Polygons or Paths, the name is what is shown when
     * the element is selected by clicking on it.
     */
    name: z.ZodNullable<z.ZodString>;
    /**
     * Text describing the element, which is shown in an element's popup when it
     * is selected.
     *
     * Note that some elements are not selectable on the map, such as Notes, Text
     * and Markers, so their description will not be shown.
     */
    description: z.ZodNullable<z.ZodString>;
    /**
     * A set of key-value pairs that can be used to store arbitrary data about the element.
     *
     * This is most useful for associating additional data with an element that is not
     * part of the element's core data, such as a Place's address or some other
     * data.
     */
    attributes: z.ZodRecord<z.ZodString, z.ZodUnknown>;
    /**
     * Whether the element is interactive.
     *
     * The `default` interaction mode means that the element can be selected and edited by
     * the user, if it was created by the SDK or by the user using a tool.
     *
     * If the interaction mode is `locked`, the element will not be editable by the user,
     * which is often used for elements that you don't want the user to edit or move by
     * accident.
     *
     * Elements that were created by the map author (i.e. not during an SDK "session") are
     * not editable and have special behaviour depending on their name, description and
     * attributes.
     *
     * @default "default"
     */
    interaction: z.ZodOptional<z.ZodEnum<["default", "locked"]>>;
}, {
    /**
     * The URL of an image that has been added to the element.
     */
    imageUrl: z.ZodNullable<z.ZodString>;
}>, {
    /**
     * A value between 0 and 1 that describes the opacity of the element's stroke.
     *
     * @default 1
     */
    strokeOpacity: z.ZodNumber;
    /**
     * The width of the element's stroke in pixels.
     *
     * @default 2
     */
    strokeWidth: z.ZodNumber;
    /**
     * The style of the element's stroke.
     *
     * @default "solid"
     */
    strokeStyle: z.ZodEnum<["solid", "dashed", "dotted"]>;
}>, {
    type: z.ZodLiteral<"Circle">;
    /**
     * The center of the circle.
     */
    center: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
    /**
     * The radius of the circle in meters.
     */
    radius: z.ZodNumber;
    /**
     * Whether to show a marker on the circle that indicates the radius
     *
     * @default false
     */
    radiusMarker: z.ZodBoolean;
    /**
     * The angle at which the control point for setting the radius is displayed,
     * in degrees. When the `radiusMarker` is `true`, there is a dotted line rendered
     * from the center of the circle to the control point, and the marker is shown
     * at the midpoint of this line.
     *
     * @default 90
     */
    radiusDisplayAngle: z.ZodNumber;
    /**
     * The unit of the radius used when the `radiusMarker` is `true`.
     *
     * A value of `null` means that the unit matches the user's locale.
     *
     * @default null
     */
    radiusDisplayUnit: z.ZodNullable<z.ZodEnum<["meter", "kilometer", "foot", "mile"]>>;
    /**
     * The opacity of the circle's fill.
     *
     * @default 0.25
     */
    fillOpacity: z.ZodNumber;
}>, "type" | "center" | "radius">>, "id">, "strip", z.ZodTypeAny, {
    type: "Circle";
    center: [number, number];
    radius: number;
    groupId?: string | null | undefined;
    color?: string | undefined;
    name?: string | null | undefined;
    description?: string | null | undefined;
    attributes?: Record<string, unknown> | undefined;
    interaction?: "default" | "locked" | undefined;
    imageUrl?: string | null | undefined;
    strokeOpacity?: number | undefined;
    strokeWidth?: number | undefined;
    strokeStyle?: "solid" | "dashed" | "dotted" | undefined;
    fillOpacity?: number | undefined;
    radiusMarker?: boolean | undefined;
    radiusDisplayAngle?: number | undefined;
    radiusDisplayUnit?: "meter" | "kilometer" | "foot" | "mile" | null | undefined;
}, {
    type: "Circle";
    center: [number, number];
    radius: number;
    groupId?: string | null | undefined;
    color?: string | undefined;
    name?: string | null | undefined;
    description?: string | null | undefined;
    attributes?: Record<string, unknown> | undefined;
    interaction?: "default" | "locked" | undefined;
    imageUrl?: string | null | undefined;
    strokeOpacity?: number | undefined;
    strokeWidth?: number | undefined;
    strokeStyle?: "solid" | "dashed" | "dotted" | undefined;
    fillOpacity?: number | undefined;
    radiusMarker?: boolean | undefined;
    radiusDisplayAngle?: number | undefined;
    radiusDisplayUnit?: "meter" | "kilometer" | "foot" | "mile" | null | undefined;
}>;
declare const MarkerCreateSchema: z.ZodObject<Omit<z.objectUtil.extendShape<{
    id: z.ZodOptional<z.ZodString>;
    groupId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    color: z.ZodOptional<z.ZodString>;
    name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    attributes: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
    interaction: z.ZodOptional<z.ZodOptional<z.ZodEnum<["default", "locked"]>>>;
    type: z.ZodOptional<z.ZodLiteral<"Marker">>;
    coordinates: z.ZodOptional<z.ZodArray<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, "many">, "many">>;
    opacity: z.ZodOptional<z.ZodNumber>;
    size: z.ZodOptional<z.ZodNumber>;
    zoom: z.ZodOptional<z.ZodNumber>;
}, Pick<z.objectUtil.extendShape<{
    /**
     * The unique identifier for the element.
     */
    id: z.ZodString;
    /**
     * The ID of the element group that the element belongs to.
     * For elements that are not part of a group, this will be null.
     */
    groupId: z.ZodNullable<z.ZodString>;
    /**
     * The color of the element in some CSS-like format.
     *
     * @example
     * ```typescript
     * "#ABC123";
     * "rgb(255, 0, 0)";
     * "hsl(200, 100%, 50%)";
     * ```
     *
     * @default "#C93535"
     */
    color: z.ZodString;
    /**
     * The element's name. For elements that can show a label or text on
     * the map (e.g. a Place or Text element) this is the text that will be shown.
     *
     * For elements such as Polygons or Paths, the name is what is shown when
     * the element is selected by clicking on it.
     */
    name: z.ZodNullable<z.ZodString>;
    /**
     * Text describing the element, which is shown in an element's popup when it
     * is selected.
     *
     * Note that some elements are not selectable on the map, such as Notes, Text
     * and Markers, so their description will not be shown.
     */
    description: z.ZodNullable<z.ZodString>;
    /**
     * A set of key-value pairs that can be used to store arbitrary data about the element.
     *
     * This is most useful for associating additional data with an element that is not
     * part of the element's core data, such as a Place's address or some other
     * data.
     */
    attributes: z.ZodRecord<z.ZodString, z.ZodUnknown>;
    /**
     * Whether the element is interactive.
     *
     * The `default` interaction mode means that the element can be selected and edited by
     * the user, if it was created by the SDK or by the user using a tool.
     *
     * If the interaction mode is `locked`, the element will not be editable by the user,
     * which is often used for elements that you don't want the user to edit or move by
     * accident.
     *
     * Elements that were created by the map author (i.e. not during an SDK "session") are
     * not editable and have special behaviour depending on their name, description and
     * attributes.
     *
     * @default "default"
     */
    interaction: z.ZodOptional<z.ZodEnum<["default", "locked"]>>;
}, {
    type: z.ZodLiteral<"Marker">;
    coordinates: z.ZodArray<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, "many">, "many">;
    /**
     * The opacity of the marker, between 0 and 1.
     *
     * @default 1
     */
    opacity: z.ZodNumber;
    /**
     * The size of the marker, used in conjunction with the `zoom` to determine
     * the actual size of the marker.
     *
     * @default 10
     */
    size: z.ZodNumber;
    /**
     * The zoom level at which the marker was created. This is combined with
     * the `size` to determine the actual size of the marker.
     *
     * When creating a marker, if you don't supply this value it defaults to
     * the current zoom of the map when you call `createElement`.
     */
    zoom: z.ZodNumber;
}>, "type" | "coordinates">>, "id">, "strip", z.ZodTypeAny, {
    type: "Marker";
    coordinates: [number, number][][];
    groupId?: string | null | undefined;
    color?: string | undefined;
    name?: string | null | undefined;
    description?: string | null | undefined;
    attributes?: Record<string, unknown> | undefined;
    interaction?: "default" | "locked" | undefined;
    opacity?: number | undefined;
    size?: number | undefined;
    zoom?: number | undefined;
}, {
    type: "Marker";
    coordinates: [number, number][][];
    groupId?: string | null | undefined;
    color?: string | undefined;
    name?: string | null | undefined;
    description?: string | null | undefined;
    attributes?: Record<string, unknown> | undefined;
    interaction?: "default" | "locked" | undefined;
    opacity?: number | undefined;
    size?: number | undefined;
    zoom?: number | undefined;
}>;
declare const HighlighterCreateSchema: z.ZodObject<Omit<z.objectUtil.extendShape<{
    id: z.ZodOptional<z.ZodString>;
    groupId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    color: z.ZodOptional<z.ZodString>;
    name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    attributes: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
    interaction: z.ZodOptional<z.ZodOptional<z.ZodEnum<["default", "locked"]>>>;
    type: z.ZodOptional<z.ZodLiteral<"Highlighter">>;
    coordinates: z.ZodOptional<z.ZodArray<z.ZodArray<z.ZodEffects<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, "many">, [number, number][], [number, number][]>, "many">, "many">>;
    renderHoles: z.ZodOptional<z.ZodBoolean>;
    opacity: z.ZodOptional<z.ZodNumber>;
}, Pick<z.objectUtil.extendShape<{
    /**
     * The unique identifier for the element.
     */
    id: z.ZodString;
    /**
     * The ID of the element group that the element belongs to.
     * For elements that are not part of a group, this will be null.
     */
    groupId: z.ZodNullable<z.ZodString>;
    /**
     * The color of the element in some CSS-like format.
     *
     * @example
     * ```typescript
     * "#ABC123";
     * "rgb(255, 0, 0)";
     * "hsl(200, 100%, 50%)";
     * ```
     *
     * @default "#C93535"
     */
    color: z.ZodString;
    /**
     * The element's name. For elements that can show a label or text on
     * the map (e.g. a Place or Text element) this is the text that will be shown.
     *
     * For elements such as Polygons or Paths, the name is what is shown when
     * the element is selected by clicking on it.
     */
    name: z.ZodNullable<z.ZodString>;
    /**
     * Text describing the element, which is shown in an element's popup when it
     * is selected.
     *
     * Note that some elements are not selectable on the map, such as Notes, Text
     * and Markers, so their description will not be shown.
     */
    description: z.ZodNullable<z.ZodString>;
    /**
     * A set of key-value pairs that can be used to store arbitrary data about the element.
     *
     * This is most useful for associating additional data with an element that is not
     * part of the element's core data, such as a Place's address or some other
     * data.
     */
    attributes: z.ZodRecord<z.ZodString, z.ZodUnknown>;
    /**
     * Whether the element is interactive.
     *
     * The `default` interaction mode means that the element can be selected and edited by
     * the user, if it was created by the SDK or by the user using a tool.
     *
     * If the interaction mode is `locked`, the element will not be editable by the user,
     * which is often used for elements that you don't want the user to edit or move by
     * accident.
     *
     * Elements that were created by the map author (i.e. not during an SDK "session") are
     * not editable and have special behaviour depending on their name, description and
     * attributes.
     *
     * @default "default"
     */
    interaction: z.ZodOptional<z.ZodEnum<["default", "locked"]>>;
}, {
    type: z.ZodLiteral<"Highlighter">;
    /**
     * A multipolygon describing the area that is highlighted.
     *
     * If `renderHoles` is set to false, only the outer ring of each polygon
     * will be rendered, filling in the area inside the highlighted region.
     */
    coordinates: z.ZodArray<z.ZodArray<z.ZodEffects<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, "many">, [number, number][], [number, number][]>, "many">, "many">;
    /**
     * Whether to render the holes of the highlighted area.
     *
     * @default false
     */
    renderHoles: z.ZodBoolean;
    /**
     * The opacity of the highlighter, between 0 and 1.
     *
     * @default 0.5
     */
    opacity: z.ZodNumber;
}>, "type" | "coordinates">>, "id">, "strip", z.ZodTypeAny, {
    type: "Highlighter";
    coordinates: [number, number][][][];
    groupId?: string | null | undefined;
    color?: string | undefined;
    name?: string | null | undefined;
    description?: string | null | undefined;
    attributes?: Record<string, unknown> | undefined;
    interaction?: "default" | "locked" | undefined;
    opacity?: number | undefined;
    renderHoles?: boolean | undefined;
}, {
    type: "Highlighter";
    coordinates: [number, number][][][];
    groupId?: string | null | undefined;
    color?: string | undefined;
    name?: string | null | undefined;
    description?: string | null | undefined;
    attributes?: Record<string, unknown> | undefined;
    interaction?: "default" | "locked" | undefined;
    opacity?: number | undefined;
    renderHoles?: boolean | undefined;
}>;
declare const TextCreateSchema: z.ZodObject<z.objectUtil.extendShape<Omit<{
    id: z.ZodOptional<z.ZodString>;
    groupId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    color: z.ZodOptional<z.ZodString>;
    description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    attributes: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
    interaction: z.ZodOptional<z.ZodOptional<z.ZodEnum<["default", "locked"]>>>;
    position: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
    rotation: z.ZodOptional<z.ZodNumber>;
    scale: z.ZodOptional<z.ZodNumber>;
    zoom: z.ZodOptional<z.ZodNumber>;
    text: z.ZodOptional<z.ZodString>;
    align: z.ZodOptional<z.ZodEnum<["left", "center", "right"]>>;
    style: z.ZodOptional<z.ZodEnum<["italic", "light", "regular", "caps"]>>;
    name: z.ZodOptional<z.ZodString>;
    type: z.ZodOptional<z.ZodLiteral<"Text">>;
}, "type" | "id" | "name">, {
    type: z.ZodLiteral<"Text">;
    text: z.ZodString;
}>, "strip", z.ZodTypeAny, {
    type: "Text";
    text: string;
    groupId?: string | null | undefined;
    color?: string | undefined;
    description?: string | null | undefined;
    attributes?: Record<string, unknown> | undefined;
    interaction?: "default" | "locked" | undefined;
    zoom?: number | undefined;
    position?: [number, number] | undefined;
    rotation?: number | undefined;
    scale?: number | undefined;
    align?: "center" | "left" | "right" | undefined;
    style?: "italic" | "light" | "regular" | "caps" | undefined;
}, {
    type: "Text";
    text: string;
    groupId?: string | null | undefined;
    color?: string | undefined;
    description?: string | null | undefined;
    attributes?: Record<string, unknown> | undefined;
    interaction?: "default" | "locked" | undefined;
    zoom?: number | undefined;
    position?: [number, number] | undefined;
    rotation?: number | undefined;
    scale?: number | undefined;
    align?: "center" | "left" | "right" | undefined;
    style?: "italic" | "light" | "regular" | "caps" | undefined;
}>;
declare const NoteCreateSchema: z.ZodObject<z.objectUtil.extendShape<Omit<{
    id: z.ZodOptional<z.ZodString>;
    groupId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    color: z.ZodOptional<z.ZodString>;
    description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    attributes: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
    interaction: z.ZodOptional<z.ZodOptional<z.ZodEnum<["default", "locked"]>>>;
    position: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
    rotation: z.ZodOptional<z.ZodNumber>;
    scale: z.ZodOptional<z.ZodNumber>;
    zoom: z.ZodOptional<z.ZodNumber>;
    text: z.ZodOptional<z.ZodString>;
    align: z.ZodOptional<z.ZodEnum<["left", "center", "right"]>>;
    style: z.ZodOptional<z.ZodEnum<["italic", "light", "regular", "caps"]>>;
    name: z.ZodOptional<z.ZodString>;
    type: z.ZodOptional<z.ZodLiteral<"Note">>;
    widthScale: z.ZodOptional<z.ZodNumber>;
}, "type" | "id" | "name">, {
    type: z.ZodLiteral<"Note">;
    text: z.ZodString;
}>, "strip", z.ZodTypeAny, {
    type: "Note";
    text: string;
    groupId?: string | null | undefined;
    color?: string | undefined;
    description?: string | null | undefined;
    attributes?: Record<string, unknown> | undefined;
    interaction?: "default" | "locked" | undefined;
    zoom?: number | undefined;
    position?: [number, number] | undefined;
    rotation?: number | undefined;
    scale?: number | undefined;
    align?: "center" | "left" | "right" | undefined;
    style?: "italic" | "light" | "regular" | "caps" | undefined;
    widthScale?: number | undefined;
}, {
    type: "Note";
    text: string;
    groupId?: string | null | undefined;
    color?: string | undefined;
    description?: string | null | undefined;
    attributes?: Record<string, unknown> | undefined;
    interaction?: "default" | "locked" | undefined;
    zoom?: number | undefined;
    position?: [number, number] | undefined;
    rotation?: number | undefined;
    scale?: number | undefined;
    align?: "center" | "left" | "right" | undefined;
    style?: "italic" | "light" | "regular" | "caps" | undefined;
    widthScale?: number | undefined;
}>;
declare const ImageCreateSchema: z.ZodObject<Omit<z.objectUtil.extendShape<{
    type: z.ZodOptional<z.ZodLiteral<"Image">>;
    coordinates: z.ZodOptional<z.ZodArray<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, "many">, "many">>;
    id: z.ZodOptional<z.ZodString>;
    groupId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    attributes: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
    interaction: z.ZodOptional<z.ZodOptional<z.ZodEnum<["default", "locked"]>>>;
    imageUrl: z.ZodOptional<z.ZodString>;
    opacity: z.ZodOptional<z.ZodNumber>;
}, Pick<Omit<z.objectUtil.extendShape<{
    /**
     * The unique identifier for the element.
     */
    id: z.ZodString;
    /**
     * The ID of the element group that the element belongs to.
     * For elements that are not part of a group, this will be null.
     */
    groupId: z.ZodNullable<z.ZodString>;
    /**
     * The color of the element in some CSS-like format.
     *
     * @example
     * ```typescript
     * "#ABC123";
     * "rgb(255, 0, 0)";
     * "hsl(200, 100%, 50%)";
     * ```
     *
     * @default "#C93535"
     */
    color: z.ZodString;
    /**
     * The element's name. For elements that can show a label or text on
     * the map (e.g. a Place or Text element) this is the text that will be shown.
     *
     * For elements such as Polygons or Paths, the name is what is shown when
     * the element is selected by clicking on it.
     */
    name: z.ZodNullable<z.ZodString>;
    /**
     * Text describing the element, which is shown in an element's popup when it
     * is selected.
     *
     * Note that some elements are not selectable on the map, such as Notes, Text
     * and Markers, so their description will not be shown.
     */
    description: z.ZodNullable<z.ZodString>;
    /**
     * A set of key-value pairs that can be used to store arbitrary data about the element.
     *
     * This is most useful for associating additional data with an element that is not
     * part of the element's core data, such as a Place's address or some other
     * data.
     */
    attributes: z.ZodRecord<z.ZodString, z.ZodUnknown>;
    /**
     * Whether the element is interactive.
     *
     * The `default` interaction mode means that the element can be selected and edited by
     * the user, if it was created by the SDK or by the user using a tool.
     *
     * If the interaction mode is `locked`, the element will not be editable by the user,
     * which is often used for elements that you don't want the user to edit or move by
     * accident.
     *
     * Elements that were created by the map author (i.e. not during an SDK "session") are
     * not editable and have special behaviour depending on their name, description and
     * attributes.
     *
     * @default "default"
     */
    interaction: z.ZodOptional<z.ZodEnum<["default", "locked"]>>;
}, {
    type: z.ZodLiteral<"Image">;
    coordinates: z.ZodArray<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, "many">, "many">;
    /**
     * The URL of the image that is rendered in this element
     */
    imageUrl: z.ZodString;
    /**
     * The opacity of the image, between 0 and 1.
     *
     * @default 1
     */
    opacity: z.ZodNumber;
}>, "color">, "type" | "coordinates" | "imageUrl">>, "id">, "strip", z.ZodTypeAny, {
    type: "Image";
    coordinates: [number, number][][];
    imageUrl: string;
    groupId?: string | null | undefined;
    name?: string | null | undefined;
    description?: string | null | undefined;
    attributes?: Record<string, unknown> | undefined;
    interaction?: "default" | "locked" | undefined;
    opacity?: number | undefined;
}, {
    type: "Image";
    coordinates: [number, number][][];
    imageUrl: string;
    groupId?: string | null | undefined;
    name?: string | null | undefined;
    description?: string | null | undefined;
    attributes?: Record<string, unknown> | undefined;
    interaction?: "default" | "locked" | undefined;
    opacity?: number | undefined;
}>;
declare const PlaceReadSchema: z.ZodObject<z.objectUtil.extendShape<z.objectUtil.extendShape<{
    /**
     * The unique identifier for the element.
     */
    id: z.ZodString;
    /**
     * The ID of the element group that the element belongs to.
     * For elements that are not part of a group, this will be null.
     */
    groupId: z.ZodNullable<z.ZodString>;
    /**
     * The color of the element in some CSS-like format.
     *
     * @example
     * ```typescript
     * "#ABC123";
     * "rgb(255, 0, 0)";
     * "hsl(200, 100%, 50%)";
     * ```
     *
     * @default "#C93535"
     */
    color: z.ZodString;
    /**
     * The element's name. For elements that can show a label or text on
     * the map (e.g. a Place or Text element) this is the text that will be shown.
     *
     * For elements such as Polygons or Paths, the name is what is shown when
     * the element is selected by clicking on it.
     */
    name: z.ZodNullable<z.ZodString>;
    /**
     * Text describing the element, which is shown in an element's popup when it
     * is selected.
     *
     * Note that some elements are not selectable on the map, such as Notes, Text
     * and Markers, so their description will not be shown.
     */
    description: z.ZodNullable<z.ZodString>;
    /**
     * A set of key-value pairs that can be used to store arbitrary data about the element.
     *
     * This is most useful for associating additional data with an element that is not
     * part of the element's core data, such as a Place's address or some other
     * data.
     */
    attributes: z.ZodRecord<z.ZodString, z.ZodUnknown>;
    /**
     * Whether the element is interactive.
     *
     * The `default` interaction mode means that the element can be selected and edited by
     * the user, if it was created by the SDK or by the user using a tool.
     *
     * If the interaction mode is `locked`, the element will not be editable by the user,
     * which is often used for elements that you don't want the user to edit or move by
     * accident.
     *
     * Elements that were created by the map author (i.e. not during an SDK "session") are
     * not editable and have special behaviour depending on their name, description and
     * attributes.
     *
     * @default "default"
     */
    interaction: z.ZodOptional<z.ZodEnum<["default", "locked"]>>;
}, {
    /**
     * The URL of an image that has been added to the element.
     */
    imageUrl: z.ZodNullable<z.ZodString>;
}>, {
    type: z.ZodLiteral<"Place">;
    coordinates: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
    /**
     * The symbol that is rendered for the Place.
     *
     * This can be an emoji by using colon-enclosed characters (e.g. `":smiley:"`)
     * or one of the symbols available in Felt's symbol library.
     *
     * You can see the available symbols in the Felt UI when editing a Place
     * by hovering a symbol and converting the tooltip to kebab-case. For example,
     * the "Oil barrel" symbol is `oil-barrel`.
     */
    symbol: z.ZodString;
    /**
     * The frame that is rendered around the Place's symbol. This is
     * only available for non-emoji symbols.
     */
    frame: z.ZodNullable<z.ZodEnum<["frame-circle", "frame-square"]>>;
    /**
     * Whether the element's label is hidden on the map. This allows you
     * to add a name to the element and can show in popups, but not have
     * it visible on the map.
     *
     * This will also hide the faint placeholder label that is shown when
     * an editable Place is selected.
     *
     * @default false
     */
    hideLabel: z.ZodBoolean;
}>, "strip", z.ZodTypeAny, {
    symbol: string;
    type: "Place";
    coordinates: [number, number];
    id: string;
    groupId: string | null;
    color: string;
    name: string | null;
    description: string | null;
    attributes: Record<string, unknown>;
    imageUrl: string | null;
    frame: "frame-circle" | "frame-square" | null;
    hideLabel: boolean;
    interaction?: "default" | "locked" | undefined;
}, {
    symbol: string;
    type: "Place";
    coordinates: [number, number];
    id: string;
    groupId: string | null;
    color: string;
    name: string | null;
    description: string | null;
    attributes: Record<string, unknown>;
    imageUrl: string | null;
    frame: "frame-circle" | "frame-square" | null;
    hideLabel: boolean;
    interaction?: "default" | "locked" | undefined;
}>;
declare const PathReadSchema: z.ZodObject<Omit<z.objectUtil.extendShape<z.objectUtil.extendShape<z.objectUtil.extendShape<{
    /**
     * The unique identifier for the element.
     */
    id: z.ZodString;
    /**
     * The ID of the element group that the element belongs to.
     * For elements that are not part of a group, this will be null.
     */
    groupId: z.ZodNullable<z.ZodString>;
    /**
     * The color of the element in some CSS-like format.
     *
     * @example
     * ```typescript
     * "#ABC123";
     * "rgb(255, 0, 0)";
     * "hsl(200, 100%, 50%)";
     * ```
     *
     * @default "#C93535"
     */
    color: z.ZodString;
    /**
     * The element's name. For elements that can show a label or text on
     * the map (e.g. a Place or Text element) this is the text that will be shown.
     *
     * For elements such as Polygons or Paths, the name is what is shown when
     * the element is selected by clicking on it.
     */
    name: z.ZodNullable<z.ZodString>;
    /**
     * Text describing the element, which is shown in an element's popup when it
     * is selected.
     *
     * Note that some elements are not selectable on the map, such as Notes, Text
     * and Markers, so their description will not be shown.
     */
    description: z.ZodNullable<z.ZodString>;
    /**
     * A set of key-value pairs that can be used to store arbitrary data about the element.
     *
     * This is most useful for associating additional data with an element that is not
     * part of the element's core data, such as a Place's address or some other
     * data.
     */
    attributes: z.ZodRecord<z.ZodString, z.ZodUnknown>;
    /**
     * Whether the element is interactive.
     *
     * The `default` interaction mode means that the element can be selected and edited by
     * the user, if it was created by the SDK or by the user using a tool.
     *
     * If the interaction mode is `locked`, the element will not be editable by the user,
     * which is often used for elements that you don't want the user to edit or move by
     * accident.
     *
     * Elements that were created by the map author (i.e. not during an SDK "session") are
     * not editable and have special behaviour depending on their name, description and
     * attributes.
     *
     * @default "default"
     */
    interaction: z.ZodOptional<z.ZodEnum<["default", "locked"]>>;
}, {
    /**
     * The URL of an image that has been added to the element.
     */
    imageUrl: z.ZodNullable<z.ZodString>;
}>, {
    /**
     * A value between 0 and 1 that describes the opacity of the element's stroke.
     *
     * @default 1
     */
    strokeOpacity: z.ZodNumber;
    /**
     * The width of the element's stroke in pixels.
     *
     * @default 2
     */
    strokeWidth: z.ZodNumber;
    /**
     * The style of the element's stroke.
     *
     * @default "solid"
     */
    strokeStyle: z.ZodEnum<["solid", "dashed", "dotted"]>;
}>, {
    type: z.ZodLiteral<"Path">;
    coordinates: z.ZodArray<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, "many">, "many">;
    /**
     * Whether a distance marker is shown at the midpoint of the path.
     *
     * @default false
     */
    distanceMarker: z.ZodBoolean;
    /**
     * Whether this represents a route, and if so, what mode of transport
     * is used.
     *
     * If this is `null`, the path is not considered to be a route, so while it
     * can have a `distanceMarker`, it will does not have a start or end cap.
     *
     * @default null
     */
    routingMode: z.ZodNullable<z.ZodEnum<["driving", "cycling", "walking", "flying"]>>;
    /**
     * Whether or not to show Start and End caps on the path. This is
     * only available if the `routingMode` is set.
     *
     * @default false
     */
    endCaps: z.ZodBoolean;
}>, "coordinates">, "strip", z.ZodTypeAny, {
    type: "Path";
    id: string;
    groupId: string | null;
    color: string;
    name: string | null;
    description: string | null;
    attributes: Record<string, unknown>;
    imageUrl: string | null;
    strokeOpacity: number;
    strokeWidth: number;
    strokeStyle: "solid" | "dashed" | "dotted";
    distanceMarker: boolean;
    routingMode: "driving" | "cycling" | "walking" | "flying" | null;
    endCaps: boolean;
    interaction?: "default" | "locked" | undefined;
}, {
    type: "Path";
    id: string;
    groupId: string | null;
    color: string;
    name: string | null;
    description: string | null;
    attributes: Record<string, unknown>;
    imageUrl: string | null;
    strokeOpacity: number;
    strokeWidth: number;
    strokeStyle: "solid" | "dashed" | "dotted";
    distanceMarker: boolean;
    routingMode: "driving" | "cycling" | "walking" | "flying" | null;
    endCaps: boolean;
    interaction?: "default" | "locked" | undefined;
}>;
declare const PolygonReadSchema: z.ZodObject<Omit<z.objectUtil.extendShape<z.objectUtil.extendShape<z.objectUtil.extendShape<{
    /**
     * The unique identifier for the element.
     */
    id: z.ZodString;
    /**
     * The ID of the element group that the element belongs to.
     * For elements that are not part of a group, this will be null.
     */
    groupId: z.ZodNullable<z.ZodString>;
    /**
     * The color of the element in some CSS-like format.
     *
     * @example
     * ```typescript
     * "#ABC123";
     * "rgb(255, 0, 0)";
     * "hsl(200, 100%, 50%)";
     * ```
     *
     * @default "#C93535"
     */
    color: z.ZodString;
    /**
     * The element's name. For elements that can show a label or text on
     * the map (e.g. a Place or Text element) this is the text that will be shown.
     *
     * For elements such as Polygons or Paths, the name is what is shown when
     * the element is selected by clicking on it.
     */
    name: z.ZodNullable<z.ZodString>;
    /**
     * Text describing the element, which is shown in an element's popup when it
     * is selected.
     *
     * Note that some elements are not selectable on the map, such as Notes, Text
     * and Markers, so their description will not be shown.
     */
    description: z.ZodNullable<z.ZodString>;
    /**
     * A set of key-value pairs that can be used to store arbitrary data about the element.
     *
     * This is most useful for associating additional data with an element that is not
     * part of the element's core data, such as a Place's address or some other
     * data.
     */
    attributes: z.ZodRecord<z.ZodString, z.ZodUnknown>;
    /**
     * Whether the element is interactive.
     *
     * The `default` interaction mode means that the element can be selected and edited by
     * the user, if it was created by the SDK or by the user using a tool.
     *
     * If the interaction mode is `locked`, the element will not be editable by the user,
     * which is often used for elements that you don't want the user to edit or move by
     * accident.
     *
     * Elements that were created by the map author (i.e. not during an SDK "session") are
     * not editable and have special behaviour depending on their name, description and
     * attributes.
     *
     * @default "default"
     */
    interaction: z.ZodOptional<z.ZodEnum<["default", "locked"]>>;
}, {
    /**
     * The URL of an image that has been added to the element.
     */
    imageUrl: z.ZodNullable<z.ZodString>;
}>, {
    /**
     * A value between 0 and 1 that describes the opacity of the element's stroke.
     *
     * @default 1
     */
    strokeOpacity: z.ZodNumber;
    /**
     * The width of the element's stroke in pixels.
     *
     * @default 2
     */
    strokeWidth: z.ZodNumber;
    /**
     * The style of the element's stroke.
     *
     * @default "solid"
     */
    strokeStyle: z.ZodEnum<["solid", "dashed", "dotted"]>;
}>, {
    type: z.ZodLiteral<"Polygon">;
    coordinates: z.ZodArray<z.ZodEffects<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, "many">, [number, number][], [number, number][]>, "many">;
    /**
     * The opacity of the polygon's fill, between 0 and 1.
     *
     * @default 0.25
     */
    fillOpacity: z.ZodNumber;
    /**
     * Whether to show an area marker on the polygon.
     *
     * @default false
     */
    areaMarker: z.ZodBoolean;
}>, "coordinates">, "strip", z.ZodTypeAny, {
    type: "Polygon";
    id: string;
    groupId: string | null;
    color: string;
    name: string | null;
    description: string | null;
    attributes: Record<string, unknown>;
    imageUrl: string | null;
    strokeOpacity: number;
    strokeWidth: number;
    strokeStyle: "solid" | "dashed" | "dotted";
    fillOpacity: number;
    areaMarker: boolean;
    interaction?: "default" | "locked" | undefined;
}, {
    type: "Polygon";
    id: string;
    groupId: string | null;
    color: string;
    name: string | null;
    description: string | null;
    attributes: Record<string, unknown>;
    imageUrl: string | null;
    strokeOpacity: number;
    strokeWidth: number;
    strokeStyle: "solid" | "dashed" | "dotted";
    fillOpacity: number;
    areaMarker: boolean;
    interaction?: "default" | "locked" | undefined;
}>;
declare const CircleReadSchema: z.ZodObject<z.objectUtil.extendShape<z.objectUtil.extendShape<z.objectUtil.extendShape<{
    /**
     * The unique identifier for the element.
     */
    id: z.ZodString;
    /**
     * The ID of the element group that the element belongs to.
     * For elements that are not part of a group, this will be null.
     */
    groupId: z.ZodNullable<z.ZodString>;
    /**
     * The color of the element in some CSS-like format.
     *
     * @example
     * ```typescript
     * "#ABC123";
     * "rgb(255, 0, 0)";
     * "hsl(200, 100%, 50%)";
     * ```
     *
     * @default "#C93535"
     */
    color: z.ZodString;
    /**
     * The element's name. For elements that can show a label or text on
     * the map (e.g. a Place or Text element) this is the text that will be shown.
     *
     * For elements such as Polygons or Paths, the name is what is shown when
     * the element is selected by clicking on it.
     */
    name: z.ZodNullable<z.ZodString>;
    /**
     * Text describing the element, which is shown in an element's popup when it
     * is selected.
     *
     * Note that some elements are not selectable on the map, such as Notes, Text
     * and Markers, so their description will not be shown.
     */
    description: z.ZodNullable<z.ZodString>;
    /**
     * A set of key-value pairs that can be used to store arbitrary data about the element.
     *
     * This is most useful for associating additional data with an element that is not
     * part of the element's core data, such as a Place's address or some other
     * data.
     */
    attributes: z.ZodRecord<z.ZodString, z.ZodUnknown>;
    /**
     * Whether the element is interactive.
     *
     * The `default` interaction mode means that the element can be selected and edited by
     * the user, if it was created by the SDK or by the user using a tool.
     *
     * If the interaction mode is `locked`, the element will not be editable by the user,
     * which is often used for elements that you don't want the user to edit or move by
     * accident.
     *
     * Elements that were created by the map author (i.e. not during an SDK "session") are
     * not editable and have special behaviour depending on their name, description and
     * attributes.
     *
     * @default "default"
     */
    interaction: z.ZodOptional<z.ZodEnum<["default", "locked"]>>;
}, {
    /**
     * The URL of an image that has been added to the element.
     */
    imageUrl: z.ZodNullable<z.ZodString>;
}>, {
    /**
     * A value between 0 and 1 that describes the opacity of the element's stroke.
     *
     * @default 1
     */
    strokeOpacity: z.ZodNumber;
    /**
     * The width of the element's stroke in pixels.
     *
     * @default 2
     */
    strokeWidth: z.ZodNumber;
    /**
     * The style of the element's stroke.
     *
     * @default "solid"
     */
    strokeStyle: z.ZodEnum<["solid", "dashed", "dotted"]>;
}>, {
    type: z.ZodLiteral<"Circle">;
    /**
     * The center of the circle.
     */
    center: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
    /**
     * The radius of the circle in meters.
     */
    radius: z.ZodNumber;
    /**
     * Whether to show a marker on the circle that indicates the radius
     *
     * @default false
     */
    radiusMarker: z.ZodBoolean;
    /**
     * The angle at which the control point for setting the radius is displayed,
     * in degrees. When the `radiusMarker` is `true`, there is a dotted line rendered
     * from the center of the circle to the control point, and the marker is shown
     * at the midpoint of this line.
     *
     * @default 90
     */
    radiusDisplayAngle: z.ZodNumber;
    /**
     * The unit of the radius used when the `radiusMarker` is `true`.
     *
     * A value of `null` means that the unit matches the user's locale.
     *
     * @default null
     */
    radiusDisplayUnit: z.ZodNullable<z.ZodEnum<["meter", "kilometer", "foot", "mile"]>>;
    /**
     * The opacity of the circle's fill.
     *
     * @default 0.25
     */
    fillOpacity: z.ZodNumber;
}>, "strip", z.ZodTypeAny, {
    type: "Circle";
    id: string;
    groupId: string | null;
    color: string;
    name: string | null;
    description: string | null;
    attributes: Record<string, unknown>;
    imageUrl: string | null;
    strokeOpacity: number;
    strokeWidth: number;
    strokeStyle: "solid" | "dashed" | "dotted";
    fillOpacity: number;
    center: [number, number];
    radius: number;
    radiusMarker: boolean;
    radiusDisplayAngle: number;
    radiusDisplayUnit: "meter" | "kilometer" | "foot" | "mile" | null;
    interaction?: "default" | "locked" | undefined;
}, {
    type: "Circle";
    id: string;
    groupId: string | null;
    color: string;
    name: string | null;
    description: string | null;
    attributes: Record<string, unknown>;
    imageUrl: string | null;
    strokeOpacity: number;
    strokeWidth: number;
    strokeStyle: "solid" | "dashed" | "dotted";
    fillOpacity: number;
    center: [number, number];
    radius: number;
    radiusMarker: boolean;
    radiusDisplayAngle: number;
    radiusDisplayUnit: "meter" | "kilometer" | "foot" | "mile" | null;
    interaction?: "default" | "locked" | undefined;
}>;
declare const MarkerReadSchema: z.ZodObject<Omit<z.objectUtil.extendShape<{
    /**
     * The unique identifier for the element.
     */
    id: z.ZodString;
    /**
     * The ID of the element group that the element belongs to.
     * For elements that are not part of a group, this will be null.
     */
    groupId: z.ZodNullable<z.ZodString>;
    /**
     * The color of the element in some CSS-like format.
     *
     * @example
     * ```typescript
     * "#ABC123";
     * "rgb(255, 0, 0)";
     * "hsl(200, 100%, 50%)";
     * ```
     *
     * @default "#C93535"
     */
    color: z.ZodString;
    /**
     * The element's name. For elements that can show a label or text on
     * the map (e.g. a Place or Text element) this is the text that will be shown.
     *
     * For elements such as Polygons or Paths, the name is what is shown when
     * the element is selected by clicking on it.
     */
    name: z.ZodNullable<z.ZodString>;
    /**
     * Text describing the element, which is shown in an element's popup when it
     * is selected.
     *
     * Note that some elements are not selectable on the map, such as Notes, Text
     * and Markers, so their description will not be shown.
     */
    description: z.ZodNullable<z.ZodString>;
    /**
     * A set of key-value pairs that can be used to store arbitrary data about the element.
     *
     * This is most useful for associating additional data with an element that is not
     * part of the element's core data, such as a Place's address or some other
     * data.
     */
    attributes: z.ZodRecord<z.ZodString, z.ZodUnknown>;
    /**
     * Whether the element is interactive.
     *
     * The `default` interaction mode means that the element can be selected and edited by
     * the user, if it was created by the SDK or by the user using a tool.
     *
     * If the interaction mode is `locked`, the element will not be editable by the user,
     * which is often used for elements that you don't want the user to edit or move by
     * accident.
     *
     * Elements that were created by the map author (i.e. not during an SDK "session") are
     * not editable and have special behaviour depending on their name, description and
     * attributes.
     *
     * @default "default"
     */
    interaction: z.ZodOptional<z.ZodEnum<["default", "locked"]>>;
}, {
    type: z.ZodLiteral<"Marker">;
    coordinates: z.ZodArray<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, "many">, "many">;
    /**
     * The opacity of the marker, between 0 and 1.
     *
     * @default 1
     */
    opacity: z.ZodNumber;
    /**
     * The size of the marker, used in conjunction with the `zoom` to determine
     * the actual size of the marker.
     *
     * @default 10
     */
    size: z.ZodNumber;
    /**
     * The zoom level at which the marker was created. This is combined with
     * the `size` to determine the actual size of the marker.
     *
     * When creating a marker, if you don't supply this value it defaults to
     * the current zoom of the map when you call `createElement`.
     */
    zoom: z.ZodNumber;
}>, "coordinates">, "strip", z.ZodTypeAny, {
    type: "Marker";
    id: string;
    groupId: string | null;
    color: string;
    name: string | null;
    description: string | null;
    attributes: Record<string, unknown>;
    opacity: number;
    size: number;
    zoom: number;
    interaction?: "default" | "locked" | undefined;
}, {
    type: "Marker";
    id: string;
    groupId: string | null;
    color: string;
    name: string | null;
    description: string | null;
    attributes: Record<string, unknown>;
    opacity: number;
    size: number;
    zoom: number;
    interaction?: "default" | "locked" | undefined;
}>;
declare const HighlighterReadSchema: z.ZodObject<Omit<z.objectUtil.extendShape<{
    /**
     * The unique identifier for the element.
     */
    id: z.ZodString;
    /**
     * The ID of the element group that the element belongs to.
     * For elements that are not part of a group, this will be null.
     */
    groupId: z.ZodNullable<z.ZodString>;
    /**
     * The color of the element in some CSS-like format.
     *
     * @example
     * ```typescript
     * "#ABC123";
     * "rgb(255, 0, 0)";
     * "hsl(200, 100%, 50%)";
     * ```
     *
     * @default "#C93535"
     */
    color: z.ZodString;
    /**
     * The element's name. For elements that can show a label or text on
     * the map (e.g. a Place or Text element) this is the text that will be shown.
     *
     * For elements such as Polygons or Paths, the name is what is shown when
     * the element is selected by clicking on it.
     */
    name: z.ZodNullable<z.ZodString>;
    /**
     * Text describing the element, which is shown in an element's popup when it
     * is selected.
     *
     * Note that some elements are not selectable on the map, such as Notes, Text
     * and Markers, so their description will not be shown.
     */
    description: z.ZodNullable<z.ZodString>;
    /**
     * A set of key-value pairs that can be used to store arbitrary data about the element.
     *
     * This is most useful for associating additional data with an element that is not
     * part of the element's core data, such as a Place's address or some other
     * data.
     */
    attributes: z.ZodRecord<z.ZodString, z.ZodUnknown>;
    /**
     * Whether the element is interactive.
     *
     * The `default` interaction mode means that the element can be selected and edited by
     * the user, if it was created by the SDK or by the user using a tool.
     *
     * If the interaction mode is `locked`, the element will not be editable by the user,
     * which is often used for elements that you don't want the user to edit or move by
     * accident.
     *
     * Elements that were created by the map author (i.e. not during an SDK "session") are
     * not editable and have special behaviour depending on their name, description and
     * attributes.
     *
     * @default "default"
     */
    interaction: z.ZodOptional<z.ZodEnum<["default", "locked"]>>;
}, {
    type: z.ZodLiteral<"Highlighter">;
    /**
     * A multipolygon describing the area that is highlighted.
     *
     * If `renderHoles` is set to false, only the outer ring of each polygon
     * will be rendered, filling in the area inside the highlighted region.
     */
    coordinates: z.ZodArray<z.ZodArray<z.ZodEffects<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, "many">, [number, number][], [number, number][]>, "many">, "many">;
    /**
     * Whether to render the holes of the highlighted area.
     *
     * @default false
     */
    renderHoles: z.ZodBoolean;
    /**
     * The opacity of the highlighter, between 0 and 1.
     *
     * @default 0.5
     */
    opacity: z.ZodNumber;
}>, "coordinates">, "strip", z.ZodTypeAny, {
    type: "Highlighter";
    id: string;
    groupId: string | null;
    color: string;
    name: string | null;
    description: string | null;
    attributes: Record<string, unknown>;
    opacity: number;
    renderHoles: boolean;
    interaction?: "default" | "locked" | undefined;
}, {
    type: "Highlighter";
    id: string;
    groupId: string | null;
    color: string;
    name: string | null;
    description: string | null;
    attributes: Record<string, unknown>;
    opacity: number;
    renderHoles: boolean;
    interaction?: "default" | "locked" | undefined;
}>;
declare const TextReadSchema: z.ZodObject<z.objectUtil.extendShape<z.objectUtil.extendShape<{
    /**
     * The unique identifier for the element.
     */
    id: z.ZodString;
    /**
     * The ID of the element group that the element belongs to.
     * For elements that are not part of a group, this will be null.
     */
    groupId: z.ZodNullable<z.ZodString>;
    /**
     * The color of the element in some CSS-like format.
     *
     * @example
     * ```typescript
     * "#ABC123";
     * "rgb(255, 0, 0)";
     * "hsl(200, 100%, 50%)";
     * ```
     *
     * @default "#C93535"
     */
    color: z.ZodString;
    /**
     * The element's name. For elements that can show a label or text on
     * the map (e.g. a Place or Text element) this is the text that will be shown.
     *
     * For elements such as Polygons or Paths, the name is what is shown when
     * the element is selected by clicking on it.
     */
    name: z.ZodNullable<z.ZodString>;
    /**
     * Text describing the element, which is shown in an element's popup when it
     * is selected.
     *
     * Note that some elements are not selectable on the map, such as Notes, Text
     * and Markers, so their description will not be shown.
     */
    description: z.ZodNullable<z.ZodString>;
    /**
     * A set of key-value pairs that can be used to store arbitrary data about the element.
     *
     * This is most useful for associating additional data with an element that is not
     * part of the element's core data, such as a Place's address or some other
     * data.
     */
    attributes: z.ZodRecord<z.ZodString, z.ZodUnknown>;
    /**
     * Whether the element is interactive.
     *
     * The `default` interaction mode means that the element can be selected and edited by
     * the user, if it was created by the SDK or by the user using a tool.
     *
     * If the interaction mode is `locked`, the element will not be editable by the user,
     * which is often used for elements that you don't want the user to edit or move by
     * accident.
     *
     * Elements that were created by the map author (i.e. not during an SDK "session") are
     * not editable and have special behaviour depending on their name, description and
     * attributes.
     *
     * @default "default"
     */
    interaction: z.ZodOptional<z.ZodEnum<["default", "locked"]>>;
}, {
    /**
     * The geographical position of the center of the element.
     */
    position: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
    /**
     * The rotation of the element in degrees.
     *
     * @default 0
     */
    rotation: z.ZodNumber;
    /**
     * The relative scale of the element from the default size. This is combined
     * with the `zoom` to determine the actual size of the element.
     *
     * @default 1
     */
    scale: z.ZodNumber;
    /**
     * The zoom level at which the element was created. This is combined with
     * the `scale` to determine the actual size of the element.
     *
     * When creating an element, if you don't supply this value it defaults to
     * the current zoom of the map when you call `createElement`.
     */
    zoom: z.ZodNumber;
    /**
     * The text in the element.
     */
    text: z.ZodString;
    /**
     * The alignment of the text, either `left`, `center` or `right`.
     *
     * @default "center"
     */
    align: z.ZodEnum<["left", "center", "right"]>;
    /**
     * The style of the text, either `italic`, `light`, `regular` or `caps`.
     *
     * @default "regular"
     */
    style: z.ZodEnum<["italic", "light", "regular", "caps"]>;
    /**
     * The text shown in the element, which is identical to the `text` property.
     *
     * @remarks This is added for consistency with other elements that have a `name`
     * property.
     */
    name: z.ZodString;
}>, {
    type: z.ZodLiteral<"Text">;
}>, "strip", z.ZodTypeAny, {
    type: "Text";
    id: string;
    groupId: string | null;
    color: string;
    name: string;
    description: string | null;
    attributes: Record<string, unknown>;
    zoom: number;
    position: [number, number];
    rotation: number;
    scale: number;
    text: string;
    align: "center" | "left" | "right";
    style: "italic" | "light" | "regular" | "caps";
    interaction?: "default" | "locked" | undefined;
}, {
    type: "Text";
    id: string;
    groupId: string | null;
    color: string;
    name: string;
    description: string | null;
    attributes: Record<string, unknown>;
    zoom: number;
    position: [number, number];
    rotation: number;
    scale: number;
    text: string;
    align: "center" | "left" | "right";
    style: "italic" | "light" | "regular" | "caps";
    interaction?: "default" | "locked" | undefined;
}>;
declare const NoteReadSchema: z.ZodObject<z.objectUtil.extendShape<z.objectUtil.extendShape<{
    /**
     * The unique identifier for the element.
     */
    id: z.ZodString;
    /**
     * The ID of the element group that the element belongs to.
     * For elements that are not part of a group, this will be null.
     */
    groupId: z.ZodNullable<z.ZodString>;
    /**
     * The color of the element in some CSS-like format.
     *
     * @example
     * ```typescript
     * "#ABC123";
     * "rgb(255, 0, 0)";
     * "hsl(200, 100%, 50%)";
     * ```
     *
     * @default "#C93535"
     */
    color: z.ZodString;
    /**
     * The element's name. For elements that can show a label or text on
     * the map (e.g. a Place or Text element) this is the text that will be shown.
     *
     * For elements such as Polygons or Paths, the name is what is shown when
     * the element is selected by clicking on it.
     */
    name: z.ZodNullable<z.ZodString>;
    /**
     * Text describing the element, which is shown in an element's popup when it
     * is selected.
     *
     * Note that some elements are not selectable on the map, such as Notes, Text
     * and Markers, so their description will not be shown.
     */
    description: z.ZodNullable<z.ZodString>;
    /**
     * A set of key-value pairs that can be used to store arbitrary data about the element.
     *
     * This is most useful for associating additional data with an element that is not
     * part of the element's core data, such as a Place's address or some other
     * data.
     */
    attributes: z.ZodRecord<z.ZodString, z.ZodUnknown>;
    /**
     * Whether the element is interactive.
     *
     * The `default` interaction mode means that the element can be selected and edited by
     * the user, if it was created by the SDK or by the user using a tool.
     *
     * If the interaction mode is `locked`, the element will not be editable by the user,
     * which is often used for elements that you don't want the user to edit or move by
     * accident.
     *
     * Elements that were created by the map author (i.e. not during an SDK "session") are
     * not editable and have special behaviour depending on their name, description and
     * attributes.
     *
     * @default "default"
     */
    interaction: z.ZodOptional<z.ZodEnum<["default", "locked"]>>;
}, {
    /**
     * The geographical position of the center of the element.
     */
    position: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
    /**
     * The rotation of the element in degrees.
     *
     * @default 0
     */
    rotation: z.ZodNumber;
    /**
     * The relative scale of the element from the default size. This is combined
     * with the `zoom` to determine the actual size of the element.
     *
     * @default 1
     */
    scale: z.ZodNumber;
    /**
     * The zoom level at which the element was created. This is combined with
     * the `scale` to determine the actual size of the element.
     *
     * When creating an element, if you don't supply this value it defaults to
     * the current zoom of the map when you call `createElement`.
     */
    zoom: z.ZodNumber;
    /**
     * The text in the element.
     */
    text: z.ZodString;
    /**
     * The alignment of the text, either `left`, `center` or `right`.
     *
     * @default "center"
     */
    align: z.ZodEnum<["left", "center", "right"]>;
    /**
     * The style of the text, either `italic`, `light`, `regular` or `caps`.
     *
     * @default "regular"
     */
    style: z.ZodEnum<["italic", "light", "regular", "caps"]>;
    /**
     * The text shown in the element, which is identical to the `text` property.
     *
     * @remarks This is added for consistency with other elements that have a `name`
     * property.
     */
    name: z.ZodString;
}>, {
    type: z.ZodLiteral<"Note">;
    widthScale: z.ZodNumber;
}>, "strip", z.ZodTypeAny, {
    type: "Note";
    id: string;
    groupId: string | null;
    color: string;
    name: string;
    description: string | null;
    attributes: Record<string, unknown>;
    zoom: number;
    position: [number, number];
    rotation: number;
    scale: number;
    text: string;
    align: "center" | "left" | "right";
    style: "italic" | "light" | "regular" | "caps";
    widthScale: number;
    interaction?: "default" | "locked" | undefined;
}, {
    type: "Note";
    id: string;
    groupId: string | null;
    color: string;
    name: string;
    description: string | null;
    attributes: Record<string, unknown>;
    zoom: number;
    position: [number, number];
    rotation: number;
    scale: number;
    text: string;
    align: "center" | "left" | "right";
    style: "italic" | "light" | "regular" | "caps";
    widthScale: number;
    interaction?: "default" | "locked" | undefined;
}>;
declare const ImageReadSchema: z.ZodObject<Omit<Omit<z.objectUtil.extendShape<{
    /**
     * The unique identifier for the element.
     */
    id: z.ZodString;
    /**
     * The ID of the element group that the element belongs to.
     * For elements that are not part of a group, this will be null.
     */
    groupId: z.ZodNullable<z.ZodString>;
    /**
     * The color of the element in some CSS-like format.
     *
     * @example
     * ```typescript
     * "#ABC123";
     * "rgb(255, 0, 0)";
     * "hsl(200, 100%, 50%)";
     * ```
     *
     * @default "#C93535"
     */
    color: z.ZodString;
    /**
     * The element's name. For elements that can show a label or text on
     * the map (e.g. a Place or Text element) this is the text that will be shown.
     *
     * For elements such as Polygons or Paths, the name is what is shown when
     * the element is selected by clicking on it.
     */
    name: z.ZodNullable<z.ZodString>;
    /**
     * Text describing the element, which is shown in an element's popup when it
     * is selected.
     *
     * Note that some elements are not selectable on the map, such as Notes, Text
     * and Markers, so their description will not be shown.
     */
    description: z.ZodNullable<z.ZodString>;
    /**
     * A set of key-value pairs that can be used to store arbitrary data about the element.
     *
     * This is most useful for associating additional data with an element that is not
     * part of the element's core data, such as a Place's address or some other
     * data.
     */
    attributes: z.ZodRecord<z.ZodString, z.ZodUnknown>;
    /**
     * Whether the element is interactive.
     *
     * The `default` interaction mode means that the element can be selected and edited by
     * the user, if it was created by the SDK or by the user using a tool.
     *
     * If the interaction mode is `locked`, the element will not be editable by the user,
     * which is often used for elements that you don't want the user to edit or move by
     * accident.
     *
     * Elements that were created by the map author (i.e. not during an SDK "session") are
     * not editable and have special behaviour depending on their name, description and
     * attributes.
     *
     * @default "default"
     */
    interaction: z.ZodOptional<z.ZodEnum<["default", "locked"]>>;
}, {
    type: z.ZodLiteral<"Image">;
    coordinates: z.ZodArray<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, "many">, "many">;
    /**
     * The URL of the image that is rendered in this element
     */
    imageUrl: z.ZodString;
    /**
     * The opacity of the image, between 0 and 1.
     *
     * @default 1
     */
    opacity: z.ZodNumber;
}>, "color">, "coordinates">, "strip", z.ZodTypeAny, {
    type: "Image";
    id: string;
    groupId: string | null;
    name: string | null;
    description: string | null;
    attributes: Record<string, unknown>;
    imageUrl: string;
    opacity: number;
    interaction?: "default" | "locked" | undefined;
}, {
    type: "Image";
    id: string;
    groupId: string | null;
    name: string | null;
    description: string | null;
    attributes: Record<string, unknown>;
    imageUrl: string;
    opacity: number;
    interaction?: "default" | "locked" | undefined;
}>;
declare const LinkReadSchema: z.ZodObject<Omit<z.objectUtil.extendShape<{
    /**
     * The unique identifier for the element.
     */
    id: z.ZodString;
    /**
     * The ID of the element group that the element belongs to.
     * For elements that are not part of a group, this will be null.
     */
    groupId: z.ZodNullable<z.ZodString>;
    /**
     * The color of the element in some CSS-like format.
     *
     * @example
     * ```typescript
     * "#ABC123";
     * "rgb(255, 0, 0)";
     * "hsl(200, 100%, 50%)";
     * ```
     *
     * @default "#C93535"
     */
    color: z.ZodString;
    /**
     * The element's name. For elements that can show a label or text on
     * the map (e.g. a Place or Text element) this is the text that will be shown.
     *
     * For elements such as Polygons or Paths, the name is what is shown when
     * the element is selected by clicking on it.
     */
    name: z.ZodNullable<z.ZodString>;
    /**
     * Text describing the element, which is shown in an element's popup when it
     * is selected.
     *
     * Note that some elements are not selectable on the map, such as Notes, Text
     * and Markers, so their description will not be shown.
     */
    description: z.ZodNullable<z.ZodString>;
    /**
     * A set of key-value pairs that can be used to store arbitrary data about the element.
     *
     * This is most useful for associating additional data with an element that is not
     * part of the element's core data, such as a Place's address or some other
     * data.
     */
    attributes: z.ZodRecord<z.ZodString, z.ZodUnknown>;
    /**
     * Whether the element is interactive.
     *
     * The `default` interaction mode means that the element can be selected and edited by
     * the user, if it was created by the SDK or by the user using a tool.
     *
     * If the interaction mode is `locked`, the element will not be editable by the user,
     * which is often used for elements that you don't want the user to edit or move by
     * accident.
     *
     * Elements that were created by the map author (i.e. not during an SDK "session") are
     * not editable and have special behaviour depending on their name, description and
     * attributes.
     *
     * @default "default"
     */
    interaction: z.ZodOptional<z.ZodEnum<["default", "locked"]>>;
}, {
    type: z.ZodLiteral<"Link">;
    coordinates: z.ZodArray<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, "many">, "many">;
    /**
     * The URL of the link that is rendered in this element.
     */
    url: z.ZodString;
}>, "coordinates">, "strip", z.ZodTypeAny, {
    type: "Link";
    id: string;
    groupId: string | null;
    color: string;
    name: string | null;
    description: string | null;
    attributes: Record<string, unknown>;
    url: string;
    interaction?: "default" | "locked" | undefined;
}, {
    type: "Link";
    id: string;
    groupId: string | null;
    color: string;
    name: string | null;
    description: string | null;
    attributes: Record<string, unknown>;
    url: string;
    interaction?: "default" | "locked" | undefined;
}>;
declare const PlaceUpdateSchema: z.ZodObject<z.objectUtil.extendShape<{
    id: z.ZodOptional<z.ZodString>;
    groupId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    color: z.ZodOptional<z.ZodString>;
    name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    attributes: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
    interaction: z.ZodOptional<z.ZodOptional<z.ZodEnum<["default", "locked"]>>>;
    imageUrl: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    type: z.ZodOptional<z.ZodLiteral<"Place">>;
    coordinates: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
    symbol: z.ZodOptional<z.ZodString>;
    frame: z.ZodOptional<z.ZodNullable<z.ZodEnum<["frame-circle", "frame-square"]>>>;
    hideLabel: z.ZodOptional<z.ZodBoolean>;
}, Pick<z.objectUtil.extendShape<z.objectUtil.extendShape<{
    /**
     * The unique identifier for the element.
     */
    id: z.ZodString;
    /**
     * The ID of the element group that the element belongs to.
     * For elements that are not part of a group, this will be null.
     */
    groupId: z.ZodNullable<z.ZodString>;
    /**
     * The color of the element in some CSS-like format.
     *
     * @example
     * ```typescript
     * "#ABC123";
     * "rgb(255, 0, 0)";
     * "hsl(200, 100%, 50%)";
     * ```
     *
     * @default "#C93535"
     */
    color: z.ZodString;
    /**
     * The element's name. For elements that can show a label or text on
     * the map (e.g. a Place or Text element) this is the text that will be shown.
     *
     * For elements such as Polygons or Paths, the name is what is shown when
     * the element is selected by clicking on it.
     */
    name: z.ZodNullable<z.ZodString>;
    /**
     * Text describing the element, which is shown in an element's popup when it
     * is selected.
     *
     * Note that some elements are not selectable on the map, such as Notes, Text
     * and Markers, so their description will not be shown.
     */
    description: z.ZodNullable<z.ZodString>;
    /**
     * A set of key-value pairs that can be used to store arbitrary data about the element.
     *
     * This is most useful for associating additional data with an element that is not
     * part of the element's core data, such as a Place's address or some other
     * data.
     */
    attributes: z.ZodRecord<z.ZodString, z.ZodUnknown>;
    /**
     * Whether the element is interactive.
     *
     * The `default` interaction mode means that the element can be selected and edited by
     * the user, if it was created by the SDK or by the user using a tool.
     *
     * If the interaction mode is `locked`, the element will not be editable by the user,
     * which is often used for elements that you don't want the user to edit or move by
     * accident.
     *
     * Elements that were created by the map author (i.e. not during an SDK "session") are
     * not editable and have special behaviour depending on their name, description and
     * attributes.
     *
     * @default "default"
     */
    interaction: z.ZodOptional<z.ZodEnum<["default", "locked"]>>;
}, {
    /**
     * The URL of an image that has been added to the element.
     */
    imageUrl: z.ZodNullable<z.ZodString>;
}>, {
    type: z.ZodLiteral<"Place">;
    coordinates: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
    /**
     * The symbol that is rendered for the Place.
     *
     * This can be an emoji by using colon-enclosed characters (e.g. `":smiley:"`)
     * or one of the symbols available in Felt's symbol library.
     *
     * You can see the available symbols in the Felt UI when editing a Place
     * by hovering a symbol and converting the tooltip to kebab-case. For example,
     * the "Oil barrel" symbol is `oil-barrel`.
     */
    symbol: z.ZodString;
    /**
     * The frame that is rendered around the Place's symbol. This is
     * only available for non-emoji symbols.
     */
    frame: z.ZodNullable<z.ZodEnum<["frame-circle", "frame-square"]>>;
    /**
     * Whether the element's label is hidden on the map. This allows you
     * to add a name to the element and can show in popups, but not have
     * it visible on the map.
     *
     * This will also hide the faint placeholder label that is shown when
     * an editable Place is selected.
     *
     * @default false
     */
    hideLabel: z.ZodBoolean;
}>, "type" | "id">>, "strip", z.ZodTypeAny, {
    type: "Place";
    id: string;
    symbol?: string | undefined;
    coordinates?: [number, number] | undefined;
    groupId?: string | null | undefined;
    color?: string | undefined;
    name?: string | null | undefined;
    description?: string | null | undefined;
    attributes?: Record<string, unknown> | undefined;
    interaction?: "default" | "locked" | undefined;
    imageUrl?: string | null | undefined;
    frame?: "frame-circle" | "frame-square" | null | undefined;
    hideLabel?: boolean | undefined;
}, {
    type: "Place";
    id: string;
    symbol?: string | undefined;
    coordinates?: [number, number] | undefined;
    groupId?: string | null | undefined;
    color?: string | undefined;
    name?: string | null | undefined;
    description?: string | null | undefined;
    attributes?: Record<string, unknown> | undefined;
    interaction?: "default" | "locked" | undefined;
    imageUrl?: string | null | undefined;
    frame?: "frame-circle" | "frame-square" | null | undefined;
    hideLabel?: boolean | undefined;
}>;
declare const PathUpdateSchema: z.ZodObject<z.objectUtil.extendShape<{
    id: z.ZodOptional<z.ZodString>;
    groupId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    color: z.ZodOptional<z.ZodString>;
    name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    attributes: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
    interaction: z.ZodOptional<z.ZodOptional<z.ZodEnum<["default", "locked"]>>>;
    imageUrl: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    strokeOpacity: z.ZodOptional<z.ZodNumber>;
    strokeWidth: z.ZodOptional<z.ZodNumber>;
    strokeStyle: z.ZodOptional<z.ZodEnum<["solid", "dashed", "dotted"]>>;
    type: z.ZodOptional<z.ZodLiteral<"Path">>;
    coordinates: z.ZodOptional<z.ZodArray<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, "many">, "many">>;
    distanceMarker: z.ZodOptional<z.ZodBoolean>;
    routingMode: z.ZodOptional<z.ZodNullable<z.ZodEnum<["driving", "cycling", "walking", "flying"]>>>;
    endCaps: z.ZodOptional<z.ZodBoolean>;
}, Pick<z.objectUtil.extendShape<z.objectUtil.extendShape<z.objectUtil.extendShape<{
    /**
     * The unique identifier for the element.
     */
    id: z.ZodString;
    /**
     * The ID of the element group that the element belongs to.
     * For elements that are not part of a group, this will be null.
     */
    groupId: z.ZodNullable<z.ZodString>;
    /**
     * The color of the element in some CSS-like format.
     *
     * @example
     * ```typescript
     * "#ABC123";
     * "rgb(255, 0, 0)";
     * "hsl(200, 100%, 50%)";
     * ```
     *
     * @default "#C93535"
     */
    color: z.ZodString;
    /**
     * The element's name. For elements that can show a label or text on
     * the map (e.g. a Place or Text element) this is the text that will be shown.
     *
     * For elements such as Polygons or Paths, the name is what is shown when
     * the element is selected by clicking on it.
     */
    name: z.ZodNullable<z.ZodString>;
    /**
     * Text describing the element, which is shown in an element's popup when it
     * is selected.
     *
     * Note that some elements are not selectable on the map, such as Notes, Text
     * and Markers, so their description will not be shown.
     */
    description: z.ZodNullable<z.ZodString>;
    /**
     * A set of key-value pairs that can be used to store arbitrary data about the element.
     *
     * This is most useful for associating additional data with an element that is not
     * part of the element's core data, such as a Place's address or some other
     * data.
     */
    attributes: z.ZodRecord<z.ZodString, z.ZodUnknown>;
    /**
     * Whether the element is interactive.
     *
     * The `default` interaction mode means that the element can be selected and edited by
     * the user, if it was created by the SDK or by the user using a tool.
     *
     * If the interaction mode is `locked`, the element will not be editable by the user,
     * which is often used for elements that you don't want the user to edit or move by
     * accident.
     *
     * Elements that were created by the map author (i.e. not during an SDK "session") are
     * not editable and have special behaviour depending on their name, description and
     * attributes.
     *
     * @default "default"
     */
    interaction: z.ZodOptional<z.ZodEnum<["default", "locked"]>>;
}, {
    /**
     * The URL of an image that has been added to the element.
     */
    imageUrl: z.ZodNullable<z.ZodString>;
}>, {
    /**
     * A value between 0 and 1 that describes the opacity of the element's stroke.
     *
     * @default 1
     */
    strokeOpacity: z.ZodNumber;
    /**
     * The width of the element's stroke in pixels.
     *
     * @default 2
     */
    strokeWidth: z.ZodNumber;
    /**
     * The style of the element's stroke.
     *
     * @default "solid"
     */
    strokeStyle: z.ZodEnum<["solid", "dashed", "dotted"]>;
}>, {
    type: z.ZodLiteral<"Path">;
    coordinates: z.ZodArray<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, "many">, "many">;
    /**
     * Whether a distance marker is shown at the midpoint of the path.
     *
     * @default false
     */
    distanceMarker: z.ZodBoolean;
    /**
     * Whether this represents a route, and if so, what mode of transport
     * is used.
     *
     * If this is `null`, the path is not considered to be a route, so while it
     * can have a `distanceMarker`, it will does not have a start or end cap.
     *
     * @default null
     */
    routingMode: z.ZodNullable<z.ZodEnum<["driving", "cycling", "walking", "flying"]>>;
    /**
     * Whether or not to show Start and End caps on the path. This is
     * only available if the `routingMode` is set.
     *
     * @default false
     */
    endCaps: z.ZodBoolean;
}>, "type" | "id">>, "strip", z.ZodTypeAny, {
    type: "Path";
    id: string;
    coordinates?: [number, number][][] | undefined;
    groupId?: string | null | undefined;
    color?: string | undefined;
    name?: string | null | undefined;
    description?: string | null | undefined;
    attributes?: Record<string, unknown> | undefined;
    interaction?: "default" | "locked" | undefined;
    imageUrl?: string | null | undefined;
    strokeOpacity?: number | undefined;
    strokeWidth?: number | undefined;
    strokeStyle?: "solid" | "dashed" | "dotted" | undefined;
    distanceMarker?: boolean | undefined;
    routingMode?: "driving" | "cycling" | "walking" | "flying" | null | undefined;
    endCaps?: boolean | undefined;
}, {
    type: "Path";
    id: string;
    coordinates?: [number, number][][] | undefined;
    groupId?: string | null | undefined;
    color?: string | undefined;
    name?: string | null | undefined;
    description?: string | null | undefined;
    attributes?: Record<string, unknown> | undefined;
    interaction?: "default" | "locked" | undefined;
    imageUrl?: string | null | undefined;
    strokeOpacity?: number | undefined;
    strokeWidth?: number | undefined;
    strokeStyle?: "solid" | "dashed" | "dotted" | undefined;
    distanceMarker?: boolean | undefined;
    routingMode?: "driving" | "cycling" | "walking" | "flying" | null | undefined;
    endCaps?: boolean | undefined;
}>;
declare const PolygonUpdateSchema: z.ZodObject<z.objectUtil.extendShape<{
    id: z.ZodOptional<z.ZodString>;
    groupId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    color: z.ZodOptional<z.ZodString>;
    name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    attributes: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
    interaction: z.ZodOptional<z.ZodOptional<z.ZodEnum<["default", "locked"]>>>;
    imageUrl: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    strokeOpacity: z.ZodOptional<z.ZodNumber>;
    strokeWidth: z.ZodOptional<z.ZodNumber>;
    strokeStyle: z.ZodOptional<z.ZodEnum<["solid", "dashed", "dotted"]>>;
    type: z.ZodOptional<z.ZodLiteral<"Polygon">>;
    coordinates: z.ZodOptional<z.ZodArray<z.ZodEffects<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, "many">, [number, number][], [number, number][]>, "many">>;
    fillOpacity: z.ZodOptional<z.ZodNumber>;
    areaMarker: z.ZodOptional<z.ZodBoolean>;
}, Pick<z.objectUtil.extendShape<z.objectUtil.extendShape<z.objectUtil.extendShape<{
    /**
     * The unique identifier for the element.
     */
    id: z.ZodString;
    /**
     * The ID of the element group that the element belongs to.
     * For elements that are not part of a group, this will be null.
     */
    groupId: z.ZodNullable<z.ZodString>;
    /**
     * The color of the element in some CSS-like format.
     *
     * @example
     * ```typescript
     * "#ABC123";
     * "rgb(255, 0, 0)";
     * "hsl(200, 100%, 50%)";
     * ```
     *
     * @default "#C93535"
     */
    color: z.ZodString;
    /**
     * The element's name. For elements that can show a label or text on
     * the map (e.g. a Place or Text element) this is the text that will be shown.
     *
     * For elements such as Polygons or Paths, the name is what is shown when
     * the element is selected by clicking on it.
     */
    name: z.ZodNullable<z.ZodString>;
    /**
     * Text describing the element, which is shown in an element's popup when it
     * is selected.
     *
     * Note that some elements are not selectable on the map, such as Notes, Text
     * and Markers, so their description will not be shown.
     */
    description: z.ZodNullable<z.ZodString>;
    /**
     * A set of key-value pairs that can be used to store arbitrary data about the element.
     *
     * This is most useful for associating additional data with an element that is not
     * part of the element's core data, such as a Place's address or some other
     * data.
     */
    attributes: z.ZodRecord<z.ZodString, z.ZodUnknown>;
    /**
     * Whether the element is interactive.
     *
     * The `default` interaction mode means that the element can be selected and edited by
     * the user, if it was created by the SDK or by the user using a tool.
     *
     * If the interaction mode is `locked`, the element will not be editable by the user,
     * which is often used for elements that you don't want the user to edit or move by
     * accident.
     *
     * Elements that were created by the map author (i.e. not during an SDK "session") are
     * not editable and have special behaviour depending on their name, description and
     * attributes.
     *
     * @default "default"
     */
    interaction: z.ZodOptional<z.ZodEnum<["default", "locked"]>>;
}, {
    /**
     * The URL of an image that has been added to the element.
     */
    imageUrl: z.ZodNullable<z.ZodString>;
}>, {
    /**
     * A value between 0 and 1 that describes the opacity of the element's stroke.
     *
     * @default 1
     */
    strokeOpacity: z.ZodNumber;
    /**
     * The width of the element's stroke in pixels.
     *
     * @default 2
     */
    strokeWidth: z.ZodNumber;
    /**
     * The style of the element's stroke.
     *
     * @default "solid"
     */
    strokeStyle: z.ZodEnum<["solid", "dashed", "dotted"]>;
}>, {
    type: z.ZodLiteral<"Polygon">;
    coordinates: z.ZodArray<z.ZodEffects<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, "many">, [number, number][], [number, number][]>, "many">;
    /**
     * The opacity of the polygon's fill, between 0 and 1.
     *
     * @default 0.25
     */
    fillOpacity: z.ZodNumber;
    /**
     * Whether to show an area marker on the polygon.
     *
     * @default false
     */
    areaMarker: z.ZodBoolean;
}>, "type" | "id">>, "strip", z.ZodTypeAny, {
    type: "Polygon";
    id: string;
    coordinates?: [number, number][][] | undefined;
    groupId?: string | null | undefined;
    color?: string | undefined;
    name?: string | null | undefined;
    description?: string | null | undefined;
    attributes?: Record<string, unknown> | undefined;
    interaction?: "default" | "locked" | undefined;
    imageUrl?: string | null | undefined;
    strokeOpacity?: number | undefined;
    strokeWidth?: number | undefined;
    strokeStyle?: "solid" | "dashed" | "dotted" | undefined;
    fillOpacity?: number | undefined;
    areaMarker?: boolean | undefined;
}, {
    type: "Polygon";
    id: string;
    coordinates?: [number, number][][] | undefined;
    groupId?: string | null | undefined;
    color?: string | undefined;
    name?: string | null | undefined;
    description?: string | null | undefined;
    attributes?: Record<string, unknown> | undefined;
    interaction?: "default" | "locked" | undefined;
    imageUrl?: string | null | undefined;
    strokeOpacity?: number | undefined;
    strokeWidth?: number | undefined;
    strokeStyle?: "solid" | "dashed" | "dotted" | undefined;
    fillOpacity?: number | undefined;
    areaMarker?: boolean | undefined;
}>;
declare const CircleUpdateSchema: z.ZodObject<z.objectUtil.extendShape<{
    id: z.ZodOptional<z.ZodString>;
    groupId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    color: z.ZodOptional<z.ZodString>;
    name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    attributes: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
    interaction: z.ZodOptional<z.ZodOptional<z.ZodEnum<["default", "locked"]>>>;
    imageUrl: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    strokeOpacity: z.ZodOptional<z.ZodNumber>;
    strokeWidth: z.ZodOptional<z.ZodNumber>;
    strokeStyle: z.ZodOptional<z.ZodEnum<["solid", "dashed", "dotted"]>>;
    type: z.ZodOptional<z.ZodLiteral<"Circle">>;
    center: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
    radius: z.ZodOptional<z.ZodNumber>;
    radiusMarker: z.ZodOptional<z.ZodBoolean>;
    radiusDisplayAngle: z.ZodOptional<z.ZodNumber>;
    radiusDisplayUnit: z.ZodOptional<z.ZodNullable<z.ZodEnum<["meter", "kilometer", "foot", "mile"]>>>;
    fillOpacity: z.ZodOptional<z.ZodNumber>;
}, Pick<z.objectUtil.extendShape<z.objectUtil.extendShape<z.objectUtil.extendShape<{
    /**
     * The unique identifier for the element.
     */
    id: z.ZodString;
    /**
     * The ID of the element group that the element belongs to.
     * For elements that are not part of a group, this will be null.
     */
    groupId: z.ZodNullable<z.ZodString>;
    /**
     * The color of the element in some CSS-like format.
     *
     * @example
     * ```typescript
     * "#ABC123";
     * "rgb(255, 0, 0)";
     * "hsl(200, 100%, 50%)";
     * ```
     *
     * @default "#C93535"
     */
    color: z.ZodString;
    /**
     * The element's name. For elements that can show a label or text on
     * the map (e.g. a Place or Text element) this is the text that will be shown.
     *
     * For elements such as Polygons or Paths, the name is what is shown when
     * the element is selected by clicking on it.
     */
    name: z.ZodNullable<z.ZodString>;
    /**
     * Text describing the element, which is shown in an element's popup when it
     * is selected.
     *
     * Note that some elements are not selectable on the map, such as Notes, Text
     * and Markers, so their description will not be shown.
     */
    description: z.ZodNullable<z.ZodString>;
    /**
     * A set of key-value pairs that can be used to store arbitrary data about the element.
     *
     * This is most useful for associating additional data with an element that is not
     * part of the element's core data, such as a Place's address or some other
     * data.
     */
    attributes: z.ZodRecord<z.ZodString, z.ZodUnknown>;
    /**
     * Whether the element is interactive.
     *
     * The `default` interaction mode means that the element can be selected and edited by
     * the user, if it was created by the SDK or by the user using a tool.
     *
     * If the interaction mode is `locked`, the element will not be editable by the user,
     * which is often used for elements that you don't want the user to edit or move by
     * accident.
     *
     * Elements that were created by the map author (i.e. not during an SDK "session") are
     * not editable and have special behaviour depending on their name, description and
     * attributes.
     *
     * @default "default"
     */
    interaction: z.ZodOptional<z.ZodEnum<["default", "locked"]>>;
}, {
    /**
     * The URL of an image that has been added to the element.
     */
    imageUrl: z.ZodNullable<z.ZodString>;
}>, {
    /**
     * A value between 0 and 1 that describes the opacity of the element's stroke.
     *
     * @default 1
     */
    strokeOpacity: z.ZodNumber;
    /**
     * The width of the element's stroke in pixels.
     *
     * @default 2
     */
    strokeWidth: z.ZodNumber;
    /**
     * The style of the element's stroke.
     *
     * @default "solid"
     */
    strokeStyle: z.ZodEnum<["solid", "dashed", "dotted"]>;
}>, {
    type: z.ZodLiteral<"Circle">;
    /**
     * The center of the circle.
     */
    center: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
    /**
     * The radius of the circle in meters.
     */
    radius: z.ZodNumber;
    /**
     * Whether to show a marker on the circle that indicates the radius
     *
     * @default false
     */
    radiusMarker: z.ZodBoolean;
    /**
     * The angle at which the control point for setting the radius is displayed,
     * in degrees. When the `radiusMarker` is `true`, there is a dotted line rendered
     * from the center of the circle to the control point, and the marker is shown
     * at the midpoint of this line.
     *
     * @default 90
     */
    radiusDisplayAngle: z.ZodNumber;
    /**
     * The unit of the radius used when the `radiusMarker` is `true`.
     *
     * A value of `null` means that the unit matches the user's locale.
     *
     * @default null
     */
    radiusDisplayUnit: z.ZodNullable<z.ZodEnum<["meter", "kilometer", "foot", "mile"]>>;
    /**
     * The opacity of the circle's fill.
     *
     * @default 0.25
     */
    fillOpacity: z.ZodNumber;
}>, "type" | "id">>, "strip", z.ZodTypeAny, {
    type: "Circle";
    id: string;
    groupId?: string | null | undefined;
    color?: string | undefined;
    name?: string | null | undefined;
    description?: string | null | undefined;
    attributes?: Record<string, unknown> | undefined;
    interaction?: "default" | "locked" | undefined;
    imageUrl?: string | null | undefined;
    strokeOpacity?: number | undefined;
    strokeWidth?: number | undefined;
    strokeStyle?: "solid" | "dashed" | "dotted" | undefined;
    fillOpacity?: number | undefined;
    center?: [number, number] | undefined;
    radius?: number | undefined;
    radiusMarker?: boolean | undefined;
    radiusDisplayAngle?: number | undefined;
    radiusDisplayUnit?: "meter" | "kilometer" | "foot" | "mile" | null | undefined;
}, {
    type: "Circle";
    id: string;
    groupId?: string | null | undefined;
    color?: string | undefined;
    name?: string | null | undefined;
    description?: string | null | undefined;
    attributes?: Record<string, unknown> | undefined;
    interaction?: "default" | "locked" | undefined;
    imageUrl?: string | null | undefined;
    strokeOpacity?: number | undefined;
    strokeWidth?: number | undefined;
    strokeStyle?: "solid" | "dashed" | "dotted" | undefined;
    fillOpacity?: number | undefined;
    center?: [number, number] | undefined;
    radius?: number | undefined;
    radiusMarker?: boolean | undefined;
    radiusDisplayAngle?: number | undefined;
    radiusDisplayUnit?: "meter" | "kilometer" | "foot" | "mile" | null | undefined;
}>;
declare const MarkerUpdateSchema: z.ZodObject<z.objectUtil.extendShape<{
    id: z.ZodOptional<z.ZodString>;
    groupId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    color: z.ZodOptional<z.ZodString>;
    name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    attributes: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
    interaction: z.ZodOptional<z.ZodOptional<z.ZodEnum<["default", "locked"]>>>;
    type: z.ZodOptional<z.ZodLiteral<"Marker">>;
    coordinates: z.ZodOptional<z.ZodArray<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, "many">, "many">>;
    opacity: z.ZodOptional<z.ZodNumber>;
    size: z.ZodOptional<z.ZodNumber>;
    zoom: z.ZodOptional<z.ZodNumber>;
}, Pick<z.objectUtil.extendShape<{
    /**
     * The unique identifier for the element.
     */
    id: z.ZodString;
    /**
     * The ID of the element group that the element belongs to.
     * For elements that are not part of a group, this will be null.
     */
    groupId: z.ZodNullable<z.ZodString>;
    /**
     * The color of the element in some CSS-like format.
     *
     * @example
     * ```typescript
     * "#ABC123";
     * "rgb(255, 0, 0)";
     * "hsl(200, 100%, 50%)";
     * ```
     *
     * @default "#C93535"
     */
    color: z.ZodString;
    /**
     * The element's name. For elements that can show a label or text on
     * the map (e.g. a Place or Text element) this is the text that will be shown.
     *
     * For elements such as Polygons or Paths, the name is what is shown when
     * the element is selected by clicking on it.
     */
    name: z.ZodNullable<z.ZodString>;
    /**
     * Text describing the element, which is shown in an element's popup when it
     * is selected.
     *
     * Note that some elements are not selectable on the map, such as Notes, Text
     * and Markers, so their description will not be shown.
     */
    description: z.ZodNullable<z.ZodString>;
    /**
     * A set of key-value pairs that can be used to store arbitrary data about the element.
     *
     * This is most useful for associating additional data with an element that is not
     * part of the element's core data, such as a Place's address or some other
     * data.
     */
    attributes: z.ZodRecord<z.ZodString, z.ZodUnknown>;
    /**
     * Whether the element is interactive.
     *
     * The `default` interaction mode means that the element can be selected and edited by
     * the user, if it was created by the SDK or by the user using a tool.
     *
     * If the interaction mode is `locked`, the element will not be editable by the user,
     * which is often used for elements that you don't want the user to edit or move by
     * accident.
     *
     * Elements that were created by the map author (i.e. not during an SDK "session") are
     * not editable and have special behaviour depending on their name, description and
     * attributes.
     *
     * @default "default"
     */
    interaction: z.ZodOptional<z.ZodEnum<["default", "locked"]>>;
}, {
    type: z.ZodLiteral<"Marker">;
    coordinates: z.ZodArray<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, "many">, "many">;
    /**
     * The opacity of the marker, between 0 and 1.
     *
     * @default 1
     */
    opacity: z.ZodNumber;
    /**
     * The size of the marker, used in conjunction with the `zoom` to determine
     * the actual size of the marker.
     *
     * @default 10
     */
    size: z.ZodNumber;
    /**
     * The zoom level at which the marker was created. This is combined with
     * the `size` to determine the actual size of the marker.
     *
     * When creating a marker, if you don't supply this value it defaults to
     * the current zoom of the map when you call `createElement`.
     */
    zoom: z.ZodNumber;
}>, "type" | "id">>, "strip", z.ZodTypeAny, {
    type: "Marker";
    id: string;
    coordinates?: [number, number][][] | undefined;
    groupId?: string | null | undefined;
    color?: string | undefined;
    name?: string | null | undefined;
    description?: string | null | undefined;
    attributes?: Record<string, unknown> | undefined;
    interaction?: "default" | "locked" | undefined;
    opacity?: number | undefined;
    size?: number | undefined;
    zoom?: number | undefined;
}, {
    type: "Marker";
    id: string;
    coordinates?: [number, number][][] | undefined;
    groupId?: string | null | undefined;
    color?: string | undefined;
    name?: string | null | undefined;
    description?: string | null | undefined;
    attributes?: Record<string, unknown> | undefined;
    interaction?: "default" | "locked" | undefined;
    opacity?: number | undefined;
    size?: number | undefined;
    zoom?: number | undefined;
}>;
declare const HighlighterUpdateSchema: z.ZodObject<z.objectUtil.extendShape<{
    id: z.ZodOptional<z.ZodString>;
    groupId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    color: z.ZodOptional<z.ZodString>;
    name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    attributes: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
    interaction: z.ZodOptional<z.ZodOptional<z.ZodEnum<["default", "locked"]>>>;
    type: z.ZodOptional<z.ZodLiteral<"Highlighter">>;
    coordinates: z.ZodOptional<z.ZodArray<z.ZodArray<z.ZodEffects<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, "many">, [number, number][], [number, number][]>, "many">, "many">>;
    renderHoles: z.ZodOptional<z.ZodBoolean>;
    opacity: z.ZodOptional<z.ZodNumber>;
}, Pick<z.objectUtil.extendShape<{
    /**
     * The unique identifier for the element.
     */
    id: z.ZodString;
    /**
     * The ID of the element group that the element belongs to.
     * For elements that are not part of a group, this will be null.
     */
    groupId: z.ZodNullable<z.ZodString>;
    /**
     * The color of the element in some CSS-like format.
     *
     * @example
     * ```typescript
     * "#ABC123";
     * "rgb(255, 0, 0)";
     * "hsl(200, 100%, 50%)";
     * ```
     *
     * @default "#C93535"
     */
    color: z.ZodString;
    /**
     * The element's name. For elements that can show a label or text on
     * the map (e.g. a Place or Text element) this is the text that will be shown.
     *
     * For elements such as Polygons or Paths, the name is what is shown when
     * the element is selected by clicking on it.
     */
    name: z.ZodNullable<z.ZodString>;
    /**
     * Text describing the element, which is shown in an element's popup when it
     * is selected.
     *
     * Note that some elements are not selectable on the map, such as Notes, Text
     * and Markers, so their description will not be shown.
     */
    description: z.ZodNullable<z.ZodString>;
    /**
     * A set of key-value pairs that can be used to store arbitrary data about the element.
     *
     * This is most useful for associating additional data with an element that is not
     * part of the element's core data, such as a Place's address or some other
     * data.
     */
    attributes: z.ZodRecord<z.ZodString, z.ZodUnknown>;
    /**
     * Whether the element is interactive.
     *
     * The `default` interaction mode means that the element can be selected and edited by
     * the user, if it was created by the SDK or by the user using a tool.
     *
     * If the interaction mode is `locked`, the element will not be editable by the user,
     * which is often used for elements that you don't want the user to edit or move by
     * accident.
     *
     * Elements that were created by the map author (i.e. not during an SDK "session") are
     * not editable and have special behaviour depending on their name, description and
     * attributes.
     *
     * @default "default"
     */
    interaction: z.ZodOptional<z.ZodEnum<["default", "locked"]>>;
}, {
    type: z.ZodLiteral<"Highlighter">;
    /**
     * A multipolygon describing the area that is highlighted.
     *
     * If `renderHoles` is set to false, only the outer ring of each polygon
     * will be rendered, filling in the area inside the highlighted region.
     */
    coordinates: z.ZodArray<z.ZodArray<z.ZodEffects<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, "many">, [number, number][], [number, number][]>, "many">, "many">;
    /**
     * Whether to render the holes of the highlighted area.
     *
     * @default false
     */
    renderHoles: z.ZodBoolean;
    /**
     * The opacity of the highlighter, between 0 and 1.
     *
     * @default 0.5
     */
    opacity: z.ZodNumber;
}>, "type" | "id">>, "strip", z.ZodTypeAny, {
    type: "Highlighter";
    id: string;
    coordinates?: [number, number][][][] | undefined;
    groupId?: string | null | undefined;
    color?: string | undefined;
    name?: string | null | undefined;
    description?: string | null | undefined;
    attributes?: Record<string, unknown> | undefined;
    interaction?: "default" | "locked" | undefined;
    opacity?: number | undefined;
    renderHoles?: boolean | undefined;
}, {
    type: "Highlighter";
    id: string;
    coordinates?: [number, number][][][] | undefined;
    groupId?: string | null | undefined;
    color?: string | undefined;
    name?: string | null | undefined;
    description?: string | null | undefined;
    attributes?: Record<string, unknown> | undefined;
    interaction?: "default" | "locked" | undefined;
    opacity?: number | undefined;
    renderHoles?: boolean | undefined;
}>;
declare const TextUpdateSchema: z.ZodObject<Omit<z.objectUtil.extendShape<{
    id: z.ZodOptional<z.ZodString>;
    groupId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    color: z.ZodOptional<z.ZodString>;
    description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    attributes: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
    interaction: z.ZodOptional<z.ZodOptional<z.ZodEnum<["default", "locked"]>>>;
    position: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
    rotation: z.ZodOptional<z.ZodNumber>;
    scale: z.ZodOptional<z.ZodNumber>;
    zoom: z.ZodOptional<z.ZodNumber>;
    text: z.ZodOptional<z.ZodString>;
    align: z.ZodOptional<z.ZodEnum<["left", "center", "right"]>>;
    style: z.ZodOptional<z.ZodEnum<["italic", "light", "regular", "caps"]>>;
    name: z.ZodOptional<z.ZodString>;
    type: z.ZodOptional<z.ZodLiteral<"Text">>;
}, Pick<z.objectUtil.extendShape<z.objectUtil.extendShape<{
    /**
     * The unique identifier for the element.
     */
    id: z.ZodString;
    /**
     * The ID of the element group that the element belongs to.
     * For elements that are not part of a group, this will be null.
     */
    groupId: z.ZodNullable<z.ZodString>;
    /**
     * The color of the element in some CSS-like format.
     *
     * @example
     * ```typescript
     * "#ABC123";
     * "rgb(255, 0, 0)";
     * "hsl(200, 100%, 50%)";
     * ```
     *
     * @default "#C93535"
     */
    color: z.ZodString;
    /**
     * The element's name. For elements that can show a label or text on
     * the map (e.g. a Place or Text element) this is the text that will be shown.
     *
     * For elements such as Polygons or Paths, the name is what is shown when
     * the element is selected by clicking on it.
     */
    name: z.ZodNullable<z.ZodString>;
    /**
     * Text describing the element, which is shown in an element's popup when it
     * is selected.
     *
     * Note that some elements are not selectable on the map, such as Notes, Text
     * and Markers, so their description will not be shown.
     */
    description: z.ZodNullable<z.ZodString>;
    /**
     * A set of key-value pairs that can be used to store arbitrary data about the element.
     *
     * This is most useful for associating additional data with an element that is not
     * part of the element's core data, such as a Place's address or some other
     * data.
     */
    attributes: z.ZodRecord<z.ZodString, z.ZodUnknown>;
    /**
     * Whether the element is interactive.
     *
     * The `default` interaction mode means that the element can be selected and edited by
     * the user, if it was created by the SDK or by the user using a tool.
     *
     * If the interaction mode is `locked`, the element will not be editable by the user,
     * which is often used for elements that you don't want the user to edit or move by
     * accident.
     *
     * Elements that were created by the map author (i.e. not during an SDK "session") are
     * not editable and have special behaviour depending on their name, description and
     * attributes.
     *
     * @default "default"
     */
    interaction: z.ZodOptional<z.ZodEnum<["default", "locked"]>>;
}, {
    /**
     * The geographical position of the center of the element.
     */
    position: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
    /**
     * The rotation of the element in degrees.
     *
     * @default 0
     */
    rotation: z.ZodNumber;
    /**
     * The relative scale of the element from the default size. This is combined
     * with the `zoom` to determine the actual size of the element.
     *
     * @default 1
     */
    scale: z.ZodNumber;
    /**
     * The zoom level at which the element was created. This is combined with
     * the `scale` to determine the actual size of the element.
     *
     * When creating an element, if you don't supply this value it defaults to
     * the current zoom of the map when you call `createElement`.
     */
    zoom: z.ZodNumber;
    /**
     * The text in the element.
     */
    text: z.ZodString;
    /**
     * The alignment of the text, either `left`, `center` or `right`.
     *
     * @default "center"
     */
    align: z.ZodEnum<["left", "center", "right"]>;
    /**
     * The style of the text, either `italic`, `light`, `regular` or `caps`.
     *
     * @default "regular"
     */
    style: z.ZodEnum<["italic", "light", "regular", "caps"]>;
    /**
     * The text shown in the element, which is identical to the `text` property.
     *
     * @remarks This is added for consistency with other elements that have a `name`
     * property.
     */
    name: z.ZodString;
}>, {
    type: z.ZodLiteral<"Text">;
}>, "type" | "id">>, "name">, "strip", z.ZodTypeAny, {
    type: "Text";
    id: string;
    groupId?: string | null | undefined;
    color?: string | undefined;
    description?: string | null | undefined;
    attributes?: Record<string, unknown> | undefined;
    interaction?: "default" | "locked" | undefined;
    zoom?: number | undefined;
    position?: [number, number] | undefined;
    rotation?: number | undefined;
    scale?: number | undefined;
    text?: string | undefined;
    align?: "center" | "left" | "right" | undefined;
    style?: "italic" | "light" | "regular" | "caps" | undefined;
}, {
    type: "Text";
    id: string;
    groupId?: string | null | undefined;
    color?: string | undefined;
    description?: string | null | undefined;
    attributes?: Record<string, unknown> | undefined;
    interaction?: "default" | "locked" | undefined;
    zoom?: number | undefined;
    position?: [number, number] | undefined;
    rotation?: number | undefined;
    scale?: number | undefined;
    text?: string | undefined;
    align?: "center" | "left" | "right" | undefined;
    style?: "italic" | "light" | "regular" | "caps" | undefined;
}>;
declare const NoteUpdateSchema: z.ZodObject<Omit<z.objectUtil.extendShape<{
    id: z.ZodOptional<z.ZodString>;
    groupId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    color: z.ZodOptional<z.ZodString>;
    description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    attributes: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
    interaction: z.ZodOptional<z.ZodOptional<z.ZodEnum<["default", "locked"]>>>;
    position: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
    rotation: z.ZodOptional<z.ZodNumber>;
    scale: z.ZodOptional<z.ZodNumber>;
    zoom: z.ZodOptional<z.ZodNumber>;
    text: z.ZodOptional<z.ZodString>;
    align: z.ZodOptional<z.ZodEnum<["left", "center", "right"]>>;
    style: z.ZodOptional<z.ZodEnum<["italic", "light", "regular", "caps"]>>;
    name: z.ZodOptional<z.ZodString>;
    type: z.ZodOptional<z.ZodLiteral<"Note">>;
    widthScale: z.ZodOptional<z.ZodNumber>;
}, Pick<z.objectUtil.extendShape<z.objectUtil.extendShape<{
    /**
     * The unique identifier for the element.
     */
    id: z.ZodString;
    /**
     * The ID of the element group that the element belongs to.
     * For elements that are not part of a group, this will be null.
     */
    groupId: z.ZodNullable<z.ZodString>;
    /**
     * The color of the element in some CSS-like format.
     *
     * @example
     * ```typescript
     * "#ABC123";
     * "rgb(255, 0, 0)";
     * "hsl(200, 100%, 50%)";
     * ```
     *
     * @default "#C93535"
     */
    color: z.ZodString;
    /**
     * The element's name. For elements that can show a label or text on
     * the map (e.g. a Place or Text element) this is the text that will be shown.
     *
     * For elements such as Polygons or Paths, the name is what is shown when
     * the element is selected by clicking on it.
     */
    name: z.ZodNullable<z.ZodString>;
    /**
     * Text describing the element, which is shown in an element's popup when it
     * is selected.
     *
     * Note that some elements are not selectable on the map, such as Notes, Text
     * and Markers, so their description will not be shown.
     */
    description: z.ZodNullable<z.ZodString>;
    /**
     * A set of key-value pairs that can be used to store arbitrary data about the element.
     *
     * This is most useful for associating additional data with an element that is not
     * part of the element's core data, such as a Place's address or some other
     * data.
     */
    attributes: z.ZodRecord<z.ZodString, z.ZodUnknown>;
    /**
     * Whether the element is interactive.
     *
     * The `default` interaction mode means that the element can be selected and edited by
     * the user, if it was created by the SDK or by the user using a tool.
     *
     * If the interaction mode is `locked`, the element will not be editable by the user,
     * which is often used for elements that you don't want the user to edit or move by
     * accident.
     *
     * Elements that were created by the map author (i.e. not during an SDK "session") are
     * not editable and have special behaviour depending on their name, description and
     * attributes.
     *
     * @default "default"
     */
    interaction: z.ZodOptional<z.ZodEnum<["default", "locked"]>>;
}, {
    /**
     * The geographical position of the center of the element.
     */
    position: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
    /**
     * The rotation of the element in degrees.
     *
     * @default 0
     */
    rotation: z.ZodNumber;
    /**
     * The relative scale of the element from the default size. This is combined
     * with the `zoom` to determine the actual size of the element.
     *
     * @default 1
     */
    scale: z.ZodNumber;
    /**
     * The zoom level at which the element was created. This is combined with
     * the `scale` to determine the actual size of the element.
     *
     * When creating an element, if you don't supply this value it defaults to
     * the current zoom of the map when you call `createElement`.
     */
    zoom: z.ZodNumber;
    /**
     * The text in the element.
     */
    text: z.ZodString;
    /**
     * The alignment of the text, either `left`, `center` or `right`.
     *
     * @default "center"
     */
    align: z.ZodEnum<["left", "center", "right"]>;
    /**
     * The style of the text, either `italic`, `light`, `regular` or `caps`.
     *
     * @default "regular"
     */
    style: z.ZodEnum<["italic", "light", "regular", "caps"]>;
    /**
     * The text shown in the element, which is identical to the `text` property.
     *
     * @remarks This is added for consistency with other elements that have a `name`
     * property.
     */
    name: z.ZodString;
}>, {
    type: z.ZodLiteral<"Note">;
    widthScale: z.ZodNumber;
}>, "type" | "id">>, "name">, "strip", z.ZodTypeAny, {
    type: "Note";
    id: string;
    groupId?: string | null | undefined;
    color?: string | undefined;
    description?: string | null | undefined;
    attributes?: Record<string, unknown> | undefined;
    interaction?: "default" | "locked" | undefined;
    zoom?: number | undefined;
    position?: [number, number] | undefined;
    rotation?: number | undefined;
    scale?: number | undefined;
    text?: string | undefined;
    align?: "center" | "left" | "right" | undefined;
    style?: "italic" | "light" | "regular" | "caps" | undefined;
    widthScale?: number | undefined;
}, {
    type: "Note";
    id: string;
    groupId?: string | null | undefined;
    color?: string | undefined;
    description?: string | null | undefined;
    attributes?: Record<string, unknown> | undefined;
    interaction?: "default" | "locked" | undefined;
    zoom?: number | undefined;
    position?: [number, number] | undefined;
    rotation?: number | undefined;
    scale?: number | undefined;
    text?: string | undefined;
    align?: "center" | "left" | "right" | undefined;
    style?: "italic" | "light" | "regular" | "caps" | undefined;
    widthScale?: number | undefined;
}>;
declare const ImageUpdateSchema: z.ZodObject<z.objectUtil.extendShape<{
    type: z.ZodOptional<z.ZodLiteral<"Image">>;
    coordinates: z.ZodOptional<z.ZodArray<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, "many">, "many">>;
    id: z.ZodOptional<z.ZodString>;
    groupId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    attributes: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
    interaction: z.ZodOptional<z.ZodOptional<z.ZodEnum<["default", "locked"]>>>;
    imageUrl: z.ZodOptional<z.ZodString>;
    opacity: z.ZodOptional<z.ZodNumber>;
}, Pick<Omit<z.objectUtil.extendShape<{
    /**
     * The unique identifier for the element.
     */
    id: z.ZodString;
    /**
     * The ID of the element group that the element belongs to.
     * For elements that are not part of a group, this will be null.
     */
    groupId: z.ZodNullable<z.ZodString>;
    /**
     * The color of the element in some CSS-like format.
     *
     * @example
     * ```typescript
     * "#ABC123";
     * "rgb(255, 0, 0)";
     * "hsl(200, 100%, 50%)";
     * ```
     *
     * @default "#C93535"
     */
    color: z.ZodString;
    /**
     * The element's name. For elements that can show a label or text on
     * the map (e.g. a Place or Text element) this is the text that will be shown.
     *
     * For elements such as Polygons or Paths, the name is what is shown when
     * the element is selected by clicking on it.
     */
    name: z.ZodNullable<z.ZodString>;
    /**
     * Text describing the element, which is shown in an element's popup when it
     * is selected.
     *
     * Note that some elements are not selectable on the map, such as Notes, Text
     * and Markers, so their description will not be shown.
     */
    description: z.ZodNullable<z.ZodString>;
    /**
     * A set of key-value pairs that can be used to store arbitrary data about the element.
     *
     * This is most useful for associating additional data with an element that is not
     * part of the element's core data, such as a Place's address or some other
     * data.
     */
    attributes: z.ZodRecord<z.ZodString, z.ZodUnknown>;
    /**
     * Whether the element is interactive.
     *
     * The `default` interaction mode means that the element can be selected and edited by
     * the user, if it was created by the SDK or by the user using a tool.
     *
     * If the interaction mode is `locked`, the element will not be editable by the user,
     * which is often used for elements that you don't want the user to edit or move by
     * accident.
     *
     * Elements that were created by the map author (i.e. not during an SDK "session") are
     * not editable and have special behaviour depending on their name, description and
     * attributes.
     *
     * @default "default"
     */
    interaction: z.ZodOptional<z.ZodEnum<["default", "locked"]>>;
}, {
    type: z.ZodLiteral<"Image">;
    coordinates: z.ZodArray<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, "many">, "many">;
    /**
     * The URL of the image that is rendered in this element
     */
    imageUrl: z.ZodString;
    /**
     * The opacity of the image, between 0 and 1.
     *
     * @default 1
     */
    opacity: z.ZodNumber;
}>, "color">, "type" | "id">>, "strip", z.ZodTypeAny, {
    type: "Image";
    id: string;
    coordinates?: [number, number][][] | undefined;
    groupId?: string | null | undefined;
    name?: string | null | undefined;
    description?: string | null | undefined;
    attributes?: Record<string, unknown> | undefined;
    interaction?: "default" | "locked" | undefined;
    imageUrl?: string | undefined;
    opacity?: number | undefined;
}, {
    type: "Image";
    id: string;
    coordinates?: [number, number][][] | undefined;
    groupId?: string | null | undefined;
    name?: string | null | undefined;
    description?: string | null | undefined;
    attributes?: Record<string, unknown> | undefined;
    interaction?: "default" | "locked" | undefined;
    imageUrl?: string | undefined;
    opacity?: number | undefined;
}>;
interface PlaceElementCreate extends zInfer<typeof PlaceCreateSchema> {
    coordinates: LngLatTuple;
}
interface PathElementCreate extends zInfer<typeof PathCreateSchema> {
    coordinates: LngLatTuple[][];
}
interface PolygonElementCreate extends zInfer<typeof PolygonCreateSchema> {
    coordinates: LngLatTuple[][];
}
interface CircleElementCreate extends zInfer<typeof CircleCreateSchema> {
    center: LngLatTuple;
}
interface MarkerElementCreate extends zInfer<typeof MarkerCreateSchema> {
    coordinates: LngLatTuple[][];
}
interface HighlighterElementCreate extends zInfer<typeof HighlighterCreateSchema> {
    coordinates: LngLatTuple[][][];
}
interface TextElementCreate extends zInfer<typeof TextCreateSchema> {
    /**
     * The geographical position of the center of the text element.
     *
     * If this is omitted, the text will be placed at the center of the current
     * viewport.
     */
    position?: LngLatTuple;
}
interface NoteElementCreate extends zInfer<typeof NoteCreateSchema> {
    /**
     * The geographical position of the center of the note element.
     *
     * If this is omitted, the note will be placed at the center of the current
     * viewport.
     */
    position?: LngLatTuple;
}
interface ImageElementCreate extends zInfer<typeof ImageCreateSchema> {
}
interface PlaceElementRead extends zInfer<typeof PlaceReadSchema> {
    coordinates: LngLatTuple;
}
interface PathElementRead extends zInfer<typeof PathReadSchema> {
}
interface PolygonElementRead extends zInfer<typeof PolygonReadSchema> {
}
interface CircleElementRead extends zInfer<typeof CircleReadSchema> {
    center: LngLatTuple;
}
interface MarkerElementRead extends zInfer<typeof MarkerReadSchema> {
}
interface HighlighterElementRead extends zInfer<typeof HighlighterReadSchema> {
}
interface TextElementRead extends zInfer<typeof TextReadSchema> {
    /**
     * The geographical position of the center of the text element.
     */
    position: LngLatTuple;
}
interface NoteElementRead extends zInfer<typeof NoteReadSchema> {
    /**
     * The geographical position of the center of the note element.
     */
    position: LngLatTuple;
}
interface ImageElementRead extends zInfer<typeof ImageReadSchema> {
}
interface LinkElementRead extends zInfer<typeof LinkReadSchema> {
}
interface PlaceElementUpdate extends zInfer<typeof PlaceUpdateSchema> {
    coordinates?: LngLatTuple;
}
interface PathElementUpdate extends zInfer<typeof PathUpdateSchema> {
    coordinates?: LngLatTuple[][];
}
interface PolygonElementUpdate extends zInfer<typeof PolygonUpdateSchema> {
    coordinates?: LngLatTuple[][];
}
interface CircleElementUpdate extends zInfer<typeof CircleUpdateSchema> {
    center?: LngLatTuple;
}
interface MarkerElementUpdate extends zInfer<typeof MarkerUpdateSchema> {
    coordinates?: LngLatTuple[][];
}
interface HighlighterElementUpdate extends zInfer<typeof HighlighterUpdateSchema> {
    coordinates?: LngLatTuple[][][];
}
interface TextElementUpdate extends zInfer<typeof TextUpdateSchema> {
    /**
     * The geographical position of the center of the text element.
     */
    position?: LngLatTuple;
}
interface NoteElementUpdate extends zInfer<typeof NoteUpdateSchema> {
    /**
     * The geographical position of the center of the note element.
     */
    position?: LngLatTuple;
}
interface ImageElementUpdate extends zInfer<typeof ImageUpdateSchema> {
}
type ElementCreate = PlaceElementCreate | PathElementCreate | PolygonElementCreate | CircleElementCreate | MarkerElementCreate | HighlighterElementCreate | ImageElementCreate | TextElementCreate | NoteElementCreate;
type ElementUpdate = PlaceElementUpdate | PathElementUpdate | PolygonElementUpdate | CircleElementUpdate | MarkerElementUpdate | HighlighterElementUpdate | TextElementUpdate | NoteElementUpdate | ImageElementUpdate;
/**
 * @group Elements
 */
type Element = PlaceElementRead | PathElementRead | PolygonElementRead | CircleElementRead | MarkerElementRead | HighlighterElementRead | TextElementRead | NoteElementRead | ImageElementRead | LinkElementRead;
/**
 * @group Element Groups
 */
interface ElementGroup {
    /**
     * A string identifying the element group.
     */
    id: string;
    /**
     * The name of the element group. This is shown in the legend.
     */
    name: string;
    /**
     * The caption of the element group. This is shown in the legend.
     */
    caption: string | null;
    /**
     * The ids of the elements in the element group.
     *
     * @remarks
     * You can use these ids to get the full element objects via the {@link ElementsController.getElements | `getElements`} method.
     */
    elementIds: Array<string>;
    /**
     * Whether the element group is visible or not.
     */
    visible: boolean;
    /**
     * Whether the element group is shown in the legend or not.
     */
    shownInLegend: boolean;
}
/**
 * The constraints to apply when getting elements.
 *
 * @group Elements
 */
interface GetElementsConstraint extends zInfer<typeof GetElementsConstraintSchema> {
}
declare const GetElementsConstraintSchema: z.ZodObject<{
    /**
     * The ids of the elements to get.
     */
    ids: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
}, "strip", z.ZodTypeAny, {
    ids?: string[] | undefined;
}, {
    ids?: string[] | undefined;
}>;
/**
 * The constraints to apply when getting element groups.
 *
 * @group Element Groups
 */
interface GetElementGroupsConstraint extends zInfer<typeof GetElementGroupsConstraintSchema> {
}
/**
 * @ignore
 */
declare const GetElementGroupsConstraintSchema: z.ZodObject<{
    /**
     * The ids of the element groups to get.
     */
    ids: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
}, "strip", z.ZodTypeAny, {
    ids?: string[] | undefined;
}, {
    ids?: string[] | undefined;
}>;
/**
 * The parameters for the {@link ElementsController.onElementChange | `onElementChange`} and the {@link ElementsController.onElementCreate | `onElementCreate`} listeners.
 *
 * @group Elements
 */
interface ElementChangeCallbackParams {
    /**
     * The new data for the element or null if the element was removed.
     */
    element: Element | null;
    /**
     * Whether or not this element is still being created by a drawing tool.
     *
     * For example, if the user begins drawing a polygon, they need to place
     * multiple points until they've ultimately completed the polygon. All
     * the time they are still placing points, this will be true.
     *
     * For elements that require text entry (such as Places, Text and Notes)
     * this will be true all the time the user is typing text until the point
     * at which the user finishes, by pressing Escape for example.
     *
     * If the user is editing an existing element, this will be false.
     *
     * For elements that are created programmatically, this will be false.
     */
    isBeingCreated: boolean;
}
/**
 * The parameters for the {@link ElementsController.onElementGroupChange | `onElementGroupChange`} listener.
 *
 * @group Element Groups
 */
interface ElementGroupChangeCallbackParams {
    elementGroup: ElementGroup | null;
}

/**
 * The Elements controller allows you to get information about the elements on the
 * map, and make changes to their visibility.
 *
 * @group Controller
 * @public
 */
interface ElementsController {
    /**
     * Get a single element from the map by its id.
     *
     * Use this method when you know the specific ID of an element and want to retrieve
     * its current state. This is more efficient than getting all elements and filtering.
     *
     * @param id - The id of the element you want to get.
     * @returns A promise that resolves to the requested element, or `null` if not found.
     *
     * @example
     * ```typescript
     * const element = await felt.getElement("element-1");
     * ```
     */
    getElement(
    /**
     * The id of the element you want to get.
     */
    id: string): Promise<Element | null>;
    /**
     * Get the geometry of an element in GeoJSON geometry format.
     *
     * For most element types, the geometry returned is based on the `coordinates`
     * property of the element, with some differences:
     *
     * - For Circle elements, the geometry is a Polygon drawn from the `center` and
     * `radius` properties.
     *
     * - Path elements become MultiLineString geometries.
     *
     * - Marker elements return a MultiLineString of the path traced by the user
     * as they drew the marker. Note that this is not the polygon formed by filled-in
     * "pen" stroke, which doesn't exactly follow the path traced by the user as it
     * is smoothed and interpolated to create a continuous line.
     *
     * - Text, Note and Image elements do not return geometry, so will return `null`.
     *
     * Use this method when you need the geometric representation of an element for
     * spatial analysis or visualization purposes.
     *
     * @param id - The id of the element you want to get the geometry of.
     * @returns A promise that resolves to the element's geometry in GeoJSON format, or `null` if the element has no geometry.
     *
     * @example
     * ```typescript
     * const geometry = await felt.getElementGeometry("element-1");
     * console.log(geometry?.type, geometry?.coordinates);
     * ```
     */
    getElementGeometry(
    /**
     * The id of the element you want to get the geometry of.
     */
    id: string): Promise<GeoJsonGeometry | null>;
    /**
     * Gets elements from the map, according to the constraints supplied. If no
     * constraints are supplied, all elements will be returned.
     *
     * Use this method to retrieve multiple elements, optionally filtered by constraints.
     * This is useful for bulk operations or when you need to analyze all elements on the map.
     *
     * @param constraint - Optional constraints to apply to the elements returned from the map.
     * @returns A promise that resolves to an array of elements, ordered by the order specified in Felt.
     *
     * @remarks The elements in the map, ordered by the order specified in Felt. This is not
     * necessarily the order that they are drawn in, as Felt draws points above
     * lines and lines above polygons, for instance.
     *
     * @example
     * ```typescript
     * const elements = await felt.getElements();
     * ```
     */
    getElements(
    /**
     * The constraints to apply to the elements returned from the map.
     */
    constraint?: GetElementsConstraint): Promise<Array<Element | null>>;
    /**
     * Get an element group from the map by its id.
     *
     * Element groups allow you to organize related elements together and control
     * their visibility as a unit.
     *
     * @param id - The id of the element group you want to get.
     * @returns A promise that resolves to the requested element group, or `null` if not found.
     *
     * @example
     * ```typescript
     * const elementGroup = await felt.getElementGroup("element-group-1");
     * ```
     */
    getElementGroup(id: string): Promise<ElementGroup | null>;
    /**
     * Gets element groups from the map, according to the filters supplied. If no
     * constraints are supplied, all element groups will be returned in rendering order.
     *
     * Use this method to retrieve multiple element groups, optionally filtered by constraints.
     * This is useful for bulk operations on element groups.
     *
     * @param constraint - Optional constraints to apply to the element groups returned from the map.
     * @returns A promise that resolves to an array of element groups in rendering order.
     *
     * @example
     * ```typescript
     * const elementGroups = await felt.getElementGroups({ ids: ["element-group-1", "element-group-2"] });
     * ```
     */
    getElementGroups(
    /**
     * The constraints to apply to the element groups returned from the map.
     */
    constraint?: GetElementGroupsConstraint): Promise<Array<ElementGroup | null>>;
    /**
     * Hide or show element groups with the given ids.
     *
     * Use this method to control the visibility of multiple element groups at once.
     * This is more efficient than hiding/showing individual elements.
     *
     * @param visibility - The visibility configuration for element groups.
     * @returns A promise that resolves when the visibility changes are applied.
     *
     * @example
     * ```typescript
     * felt.setElementGroupVisibility({ show: ["element-group-1", "element-group-2"], hide: ["element-group-3"] });
     * ```
     */
    setElementGroupVisibility(visibility: SetVisibilityRequest): Promise<void>;
    /**
     * Adds a listener for when an element is created.
     *
     * This will fire when elements are created programmatically, or when the
     * user starts creating an element with a drawing tool.
     *
     * When the user creates an element with a drawing tool, it can begin in
     * an invalid state, such as if you've just placed a single point in a polygon.
     *
     * You can use the `isBeingCreated` property to determine if the element is
     * still being created by a drawing tool.
     *
     * If you want to know when the element is finished being created, you can
     * use the {@link ElementsController.onElementCreateEnd | `onElementCreateEnd`} listener.
     *
     * @returns A function to unsubscribe from the listener.
     *
     * @event
     * @example
     * ```typescript
     * const unsubscribe = felt.onElementCreate({
     *   handler: ({isBeingCreated, element}) => console.log(element.id),
     * });
     *
     * // later on...
     * unsubscribe();
     * ```
     */
    onElementCreate(args: {
        /**
         * The handler that is called when an element is created.
         *
         * This will fire when elements are created programmatically, or when the
         * user starts creating an element with a drawing tool.
         *
         * When the user creates an element with a drawing tool, it can begin in
         * an invalid state, such as if you've just placed a single point in a polygon.
         *
         * You can use the `isBeingCreated` property to determine if the element is
         * still being created by a drawing tool.
         *
         * If you want to know when the element is finished being created, you can
         * use the {@link ElementsController.onElementCreateEnd | `onElementCreateEnd`} listener.
         *
         * @param change - An object describing the change that occurred.
         */
        handler: (change: ElementChangeCallbackParams) => void;
    }): VoidFunction;
    /**
     * Listens for when a new element is finished being created by a drawing tool.
     *
     * This differs from the {@link ElementsController.onElementCreate | `onElementCreate`} listener, which fires whenever an
     * element is first created. This fires when the user finishes creating an element
     * which could be after a series of interactions.
     *
     * For example, when creating a polygon, the user places a series of points then
     * finishes by pressing Enter or Escape. Or when creating a Place element, they
     * add the marker, type a label, then finally deselect the element.
     *
     * @returns A function to unsubscribe from the listener.
     *
     * @event
     * @example
     * ```typescript
     * const unsubscribe = felt.onElementCreateEnd({
     *   handler: (params) => console.log(params),
     * });
     *
     * // later on...
     * unsubscribe();
     * ```
     */
    onElementCreateEnd(args: {
        /**
         * The handler to call whenever this event fires.
         *
         * @param params - An object containing the element that was created.
         */
        handler: (params: {
            element: Element;
        }) => void;
    }): VoidFunction;
    /**
     * Adds a listener for when an element changes.
     *
     * This will fire when an element is being edited, either on the map by the user
     * or programmatically.
     *
     * Like the {@link ElementsController.onElementCreate | `onElementCreate`} listener, this will fire when an element is
     * still being created by a drawing tool.
     *
     * You can check the {@link ElementChangeCallbackParams.isBeingCreated | `isBeingCreated`} property to determine if the element is
     * still being created by a drawing tool.
     *
     * @returns A function to unsubscribe from the listener.
     *
     * @event
     * @example
     * ```typescript
     * const unsubscribe = felt.onElementChange({
     *   options: { id: "element-1" },
     *   handler: ({element}) => console.log(element.id),
     * });
     *
     * // later on...
     * unsubscribe();
     * ```
     */
    onElementChange(args: {
        options: {
            /**
             * The id of the element to listen for changes to.
             */
            id: string;
        };
        /**
         * The handler that is called when the element changes.
         */
        handler: (
        /**
         * An object describing the change that occurred.
         */
        change: ElementChangeCallbackParams) => void;
    }): VoidFunction;
    /**
     * Adds a listener for when an element is deleted.
     *
     * Use this to react to element deletions, such as cleaning up related data
     * or updating your application state.
     *
     * @returns A function to unsubscribe from the listener.
     *
     * @event
     * @example
     * ```typescript
     * const unsubscribe = felt.onElementDelete({
     *   options: { id: "element-1" },
     *   handler: () => console.log("element-1 deleted"),
     * });
     *
     * // later on...
     * unsubscribe();
     * ```
     */
    onElementDelete(args: {
        options: {
            /**
             * The id of the element to listen for deletions of.
             */
            id: string;
        };
        /**
         * The handler that is called when the element is deleted.
         */
        handler: () => void;
    }): VoidFunction;
    /**
     * Adds a listener for when an element group changes.
     *
     * Use this to react to changes in element groups, such as when elements are
     * added to or removed from groups.
     *
     * @returns A function to unsubscribe from the listener.
     *
     * @event
     * @example
     * ```typescript
     * const unsubscribe = felt.onElementGroupChange({
     *   options: { id: "element-group-1" },
     *   handler: elementGroup => console.log(elementGroup.id),
     * });
     *
     * // later on...
     * unsubscribe();
     * ```
     */
    onElementGroupChange(args: {
        options: {
            id: string;
        };
        handler: (change: ElementGroupChangeCallbackParams) => void;
    }): VoidFunction;
    /**
     * Create a new element on the map.
     *
     * Use this method to programmatically create elements on the map. Elements created
     * via the SDK are only available to the current session and are not persisted.
     *
     * @param element - The element configuration to create.
     * @returns A promise that resolves to the created element.
     *
     * @example
     * ```typescript
     * const element = await felt.createElement({ type: "Place", coordinates: [10, 10] });
     * ```
     */
    createElement(element: ElementCreate): Promise<Element>;
    /**
     * Update an element on the map. The element type must be specified.
     *
     * Use this method to modify existing elements. You can update properties like
     * coordinates, styling, and metadata.
     *
     * @param element - The element update configuration.
     * @returns A promise that resolves to the updated element.
     *
     * @example
     * ```typescript
     * // Update a place element's coordinates
     * await felt.updateElement({
     *   id: "element-1",
     *   type: "Place",
     *   coordinates: [10, 20]
     * });
     *
     * // Update a polygon's style
     * await felt.updateElement({
     *   id: "element-2",
     *   type: "Polygon",
     *   color: "#ABC123",
     *   fillOpacity: 0.5
     * });
     * ```
     */
    updateElement(element: ElementUpdate): Promise<Element>;
    /**
     * Delete an element from the map.
     *
     * Use this method to remove elements from the map. This operation cannot be undone.
     *
     * @param id - The id of the element to delete.
     * @returns A promise that resolves when the element is deleted.
     *
     * @example
     * ```typescript
     * await felt.deleteElement("element-1");
     * ```
     */
    deleteElement(id: string): Promise<void>;
}

/**
 * A LayerFeature is a single geographical item in a layer.
 *
 * It is intended to be a lightweight object that contains the properties of a
 * feature, but not the geometry. It is returned by methods like
 * {@link FeltController.getRenderedFeatures} and {@link FeltController.getFeature},
 * and as part of the methods in the {@link SelectionController}
 *
 * The geometry can be obtained via the {@link FeltController.getGeoJsonFeature}
 * method, which returns a {@link GeoJsonFeature} object.
 *
 * @group Features
 */
interface LayerFeature {
    /**
     * The identifier of the feature, unique within the layer.
     */
    id: string | number;
    /**
     * Whether the id is deterministic.
     *
     * @remarks If the id is deterministic, it means that the id can be used to reference the feature
     * in the layer and therefore in all the SDK feature-related methods.
     *
     * When the id is not deterministic, the feature cannot be referenced on SDK methods like {@link FeltController.getFeature}
     * or {@link SelectionController.selectFeature}.
     *
     * For layers created and processed on Felt servers, the feature IDs are deterministic because Felt ensures every feature is correctly identified in vector tiles.
     * This cannot be guaranteed for layers created using a GeoJSON source on the SDK (see {@link LayersController.createLayersFromGeoJson})
     * where the ID will only be deterministic if GeoJSON features have an `id` property.
     */
    isDeterministicId: boolean;
    /**
     * The identifier of the layer that the feature belongs to.
     */
    layerId: string;
    /**
     * The type of geometry of the feature.
     *
     * @remarks Because LayerFeatures can be read from tiled features, it's
     * possible that this `geometryType` won't match the `geometry.type` of the
     * {@link GeoJsonFeature} returned by {@link FeltController.getGeoJsonFeature}.
     *
     * For example, this may return `LineString` but the full feature is a `MultiLineString`,
     * or, similarly `Polygon` here may be a `MultiPolygon` in the full feature.
     *
     * As a result, you should treat this property as being indicative only.
     */
    geometryType: GeoJsonGeometry["type"] | (string & {});
    /**
     * The bounding box of the feature.
     *
     * @remarks Because LayerFeatures can be read from tiled features and considering
     * that feature geometry can go through multiple tiles, it's possible that this
     * is not the complete bounding box of the feature.
     */
    bbox: FeltBoundary | undefined;
    /**
     * The properties of the feature, as a bag of attributes.
     */
    properties: GeoJsonProperties;
}
/**
 * A raster pixel value for a specific layer.
 *
 * @group Features
 */
interface RasterValue {
    /**
     * The value of the pixel.
     */
    value: number;
    /**
     * The ID of the layer that the pixel belongs to.
     */
    layerId: string;
    /**
     * The name of the category that the pixel belongs to.
     */
    categoryName: null | string;
    /**
     * The color of the pixel. Each value is between 0 and 255.
     */
    color: null | {
        r: number;
        g: number;
        b: number;
        a: number;
    };
}

/**
 * This describes the processing status of a layer.
 *
 * The various values are:
 * - `processing`: The layer has been uploaded or updated and is still processing.
 * - `completed`: The layer has been processed and can be viewed on the map.
 * - `failed`: The layer failed to process and cannot be viewed on the map.
 * - `incomplete`: The layer has not been processed.
 *
 * @group Layers
 */
type LayerProcessingStatus = z.infer<typeof LayerProcessingStatusSchema>;
declare const LayerProcessingStatusSchema: z.ZodEnum<["processing", "completed", "failed", "incomplete"]>;
/**
 * The common properties for all layers.
 *
 * @group Layers
 */
interface LayerCommon {
    /**
     * A string identifying the layer
     */
    id: string;
    /**
     * The ID of the layer group that the layer belongs to.
     *
     * Layers that appear at the root level in Felt will not have a group ID.
     */
    groupId: string | null;
    /**
     * The name of the layer can be displayed in the Legend, depending
     * on how the layer's legend is configured in its style.
     */
    name: string;
    /**
     * The layer's caption is shown in the legend.
     */
    caption: string | null;
    /**
     * The layer description forms part of the layer's metadata. This is visible
     * to users via the layer info button in the legend.
     */
    description: string | null;
    /**
     * Whether the layer is visible or not.
     *
     * If a layer belongs to a layer group the group's visibility takes precedence.
     */
    visible: boolean;
    /**
     * Whether the layer is shown in the legend or not.
     */
    shownInLegend: boolean;
    /**
     * The display mode for the layer's legend.
     *
     * See {@link LegendDisplay} for more details.
     */
    legendDisplay: LegendDisplay;
    /**
     * The FSL style for the layer.
     *
     * See the [FSL documentation](https://developers.felt.com/felt-style-language) for details
     * on how to read and write styles.
     *
     * As the types of the styles are very complex, we return `object` here and advise that you
     * program defensively while reading the styles.
     */
    style: object;
    /**
     * The current processing status of the layer.
     */
    status: LayerProcessingStatus;
    /**
     * The bounding box of the layer in [west, south, east, north] order
     *
     * There are cases where the bounds are not available, such as for layers added to the map
     * from URL sources, as these are not (depending on their type) processed and analyzed by
     * Felt.
     *
     * {@link FeltBoundary}
     */
    bounds: FeltBoundary | null;
}
/**
 * @group Layers
 */
type Layer = RasterLayer | VectorLayer | DataOnlyLayer;
/**
 * A raster layer is a layer that contains raster data that can be rendered on the map
 *
 * @group Layers
 */
interface RasterLayer extends LayerCommon {
    /**
     * Identifies the type of geometry in the layer.
     */
    geometryType: "Raster";
    /**
     * The source of the raster layer's data.
     */
    source: RasterLayerSource;
}
/**
 * The source of a raster layer's data.
 *
 * @group Layer sources
 */
interface RasterLayerSource {
    /**
     * A URL template for fetching image tiles for the raster.
     */
    imageTileTemplateUrl: string;
    /**
     * A URL template for fetching encoded tiles for the raster, or `null` for
     * TileService layers (WMS, WMTS, ArcGIS) that serve pre-rendered image tiles
     * without per-pixel encoding.
     *
     * The encoded raster value can be calculated from the red, green, and blue values of the pixel
     * using the following formula:
     *
     * ```
     * base + ((RED << 16) + (GREEN <<8) + BLUE) * interval
     * ```
     * or
     * ```
     * base + (RED * 256 * 256 + GREEN * 256 + BLUE) * interval
     * ```
     */
    encodedTileTemplateUrl: string | null;
    /**
     * List of encoded raster bands
     */
    bands: Array<RasterBand>;
}
/**
 * The RasterBand interface describes the metadata for a raster band, necessary for
 * calculating the encoded raster value from the red, green, and blue values of the pixel.
 *
 * @group Layer sources
 */
interface RasterBand {
    /**
     * Encoding base value as a floating point number
     */
    base: number;
    /**
     * Encoding interval as a floating point number
     */
    interval: number;
    /**
     * 1-based index of the band in the raster
     */
    bandIndex: number;
}
/**
 * A vector layer is a layer that contains vector data that can be rendered on the map
 *
 * @group Layers
 */
interface VectorLayer extends LayerCommon {
    /**
     * Identifies the type of geometry in the layer.
     */
    geometryType: "Point" | "Line" | "Polygon";
    /**
     * The source of the vector layer's data.
     */
    source: FeltTiledVectorSource | GeoJsonUrlVectorSource | Omit<GeoJsonDataVectorSource, "data">;
}
/**
 * A tiled vector source is a layer that is populated from data the has been uploaded
 * to Felt, and processed into vector tiles.
 *
 * @group Layer sources
 */
type FeltTiledVectorSource = {
    /**
     * Identifies this as a tiled vector source. Typically, these tiles will have been
     * uploaded to and processed by Felt.
     */
    type: "felt";
    /**
     * The template URL used for fetching tiles.
     */
    tileTemplateUrl: string;
};
declare const GeoJsonUrlVectorSourceSchema: z.ZodObject<{
    /**
     * Identifies this as a GeoJSON URL source.
     */
    type: z.ZodLiteral<"geoJsonUrl">;
    /**
     * The remote URL of the GeoJSON file used to populate the layer.
     */
    url: z.ZodString;
    /**
     * The interval in milliseconds between automatic refreshes of the GeoJSON.
     *
     * The value must be in the range of 250ms - 5 minutes (300,000ms).
     *
     * If the value is `null`, the GeoJSON will not be refreshed automatically.
     */
    refreshInterval: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
}, "strip", z.ZodTypeAny, {
    type: "geoJsonUrl";
    url: string;
    refreshInterval?: number | null | undefined;
}, {
    type: "geoJsonUrl";
    url: string;
    refreshInterval?: number | null | undefined;
}>;
/**
 * A GeoJSON URL source is a layer that is populated from a GeoJSON file at a remote URL.
 *
 * These sources are ones that have not been uploaded to and processed by Felt, and as such
 * their capabilities are limited.
 *
 * For instance, they cannot be filtered, nor can statistics be fetched for them.
 *
 * @group Layer sources
 */
interface GeoJsonUrlVectorSource extends zInfer<typeof GeoJsonUrlVectorSourceSchema> {
}
/**
 * A GeoJSON data source is a layer that is populated from GeoJSON data, such as
 * from a local file, or programmatically-created data.
 *
 * @group Layer sources
 */
interface GeoJsonDataVectorSource {
    /**
     * Identifies this as a GeoJSON data source.
     */
    type: "geoJsonData";
    /**
     * The GeoJSON data for the layer.
     *
     * This must be a GeoJSON FeatureCollection.
     */
    data: object;
}
declare const GeoJsonFileVectorSourceSchema: z.ZodObject<{
    /**
     * Identifies this as a GeoJSON file source.
     */
    type: z.ZodLiteral<"geoJsonFile">;
    /**
     * The GeoJSON file for the layer.
     */
    file: z.ZodType<File, z.ZodTypeDef, File>;
}, "strip", z.ZodTypeAny, {
    type: "geoJsonFile";
    file: File;
}, {
    type: "geoJsonFile";
    file: File;
}>;
/**
 * A GeoJSON file source is a layer that is populated from a GeoJSON file
 * on your local machine.
 *
 * This is an input-only type. It is converted to a {@link GeoJsonDataVectorSource}
 * when passed to {@link LayersController.createLayersFromGeoJson}.
 *
 * @group Layer sources
 */
interface GeoJsonFileVectorSource extends zInfer<typeof GeoJsonFileVectorSourceSchema> {
}
declare const LegendDisplaySchema: z.ZodEnum<["default", "nameOnly"]>;
/**
 * Describes how the layer is displayed in the legend.
 *
 * There are two display modes:
 *
 * 1. Default:
 *    - Shows layer name and caption
 *    - Shows representation of the layer's viz (e.g. color swatches, proportional symbols)
 *
 * <figure>
 * <img src="./img/legend-default.png" alt="Default layer legend" />
 * <figcaption>Default layer legend</figcaption>
 * </figure>
 *
 * 2. Name-only (compact display):
 *    - Shows only layer name and caption
 *    - Hides representation of the layer's viz
 *
 * <figure>
 * <img src="./img/legend-name-only.png" alt="Name-only layer legend" />
 * <figcaption>Name-only layer legend</figcaption>
 * </figure>
 *
 * @group Legend Items
 */
type LegendDisplay = z.infer<typeof LegendDisplaySchema>;
/**
 * The parameters for the {@link LayersController.updateLayer} method.
 */
declare const UpdateLayerSchema: z.ZodObject<{
    /**
     * The id of the layer to update.
     */
    id: z.ZodString;
    style: z.ZodOptional<z.ZodObject<{}, "passthrough", z.ZodTypeAny, z.objectOutputType<{}, z.ZodTypeAny, "passthrough">, z.objectInputType<{}, z.ZodTypeAny, "passthrough">>>;
    /**
     * Changes whether the layer is shown in the legend.
     */
    shownInLegend: z.ZodOptional<z.ZodBoolean>;
    /**
     * Changes the layer's legend display mode.
     *
     * See {@link LegendDisplay} for more details.
     */
    legendDisplay: z.ZodOptional<z.ZodEnum<["default", "nameOnly"]>>;
    /**
     * Changes the name of the layer.
     */
    name: z.ZodOptional<z.ZodString>;
    /**
     * Changes the caption of the layer.
     */
    caption: z.ZodOptional<z.ZodString>;
    /**
     * Changes the description of the layer.
     */
    description: z.ZodOptional<z.ZodString>;
    /**
     * Changes the bounds of the layer.
     */
    bounds: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
    source: z.ZodOptional<z.ZodUnion<[z.ZodObject<{
        /**
         * Identifies this as a GeoJSON URL source.
         */
        type: z.ZodLiteral<"geoJsonUrl">;
        /**
         * The remote URL of the GeoJSON file used to populate the layer.
         */
        url: z.ZodString;
        /**
         * The interval in milliseconds between automatic refreshes of the GeoJSON.
         *
         * The value must be in the range of 250ms - 5 minutes (300,000ms).
         *
         * If the value is `null`, the GeoJSON will not be refreshed automatically.
         */
        refreshInterval: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
    }, "strip", z.ZodTypeAny, {
        type: "geoJsonUrl";
        url: string;
        refreshInterval?: number | null | undefined;
    }, {
        type: "geoJsonUrl";
        url: string;
        refreshInterval?: number | null | undefined;
    }>, z.ZodObject<{
        type: z.ZodLiteral<"geoJsonData">;
        data: z.ZodUnion<[z.ZodObject<{}, "passthrough", z.ZodTypeAny, z.objectOutputType<{}, z.ZodTypeAny, "passthrough">, z.objectInputType<{}, z.ZodTypeAny, "passthrough">>, z.ZodType<ArrayBuffer, z.ZodTypeDef, ArrayBuffer>]>;
    }, "strip", z.ZodTypeAny, {
        type: "geoJsonData";
        data: z.objectOutputType<{}, z.ZodTypeAny, "passthrough"> | ArrayBuffer;
    }, {
        type: "geoJsonData";
        data: z.objectInputType<{}, z.ZodTypeAny, "passthrough"> | ArrayBuffer;
    }>, z.ZodObject<{
        /**
         * Identifies this as a GeoJSON file source.
         */
        type: z.ZodLiteral<"geoJsonFile">;
        /**
         * The GeoJSON file for the layer.
         */
        file: z.ZodType<File, z.ZodTypeDef, File>;
    }, "strip", z.ZodTypeAny, {
        type: "geoJsonFile";
        file: File;
    }, {
        type: "geoJsonFile";
        file: File;
    }>]>>;
}, "strip", z.ZodTypeAny, {
    id: string;
    name?: string | undefined;
    description?: string | undefined;
    style?: z.objectOutputType<{}, z.ZodTypeAny, "passthrough"> | undefined;
    bounds?: [number, number, number, number] | undefined;
    source?: {
        type: "geoJsonUrl";
        url: string;
        refreshInterval?: number | null | undefined;
    } | {
        type: "geoJsonData";
        data: z.objectOutputType<{}, z.ZodTypeAny, "passthrough"> | ArrayBuffer;
    } | {
        type: "geoJsonFile";
        file: File;
    } | undefined;
    caption?: string | undefined;
    shownInLegend?: boolean | undefined;
    legendDisplay?: "default" | "nameOnly" | undefined;
}, {
    id: string;
    name?: string | undefined;
    description?: string | undefined;
    style?: z.objectInputType<{}, z.ZodTypeAny, "passthrough"> | undefined;
    bounds?: [number, number, number, number] | undefined;
    source?: {
        type: "geoJsonUrl";
        url: string;
        refreshInterval?: number | null | undefined;
    } | {
        type: "geoJsonData";
        data: z.objectInputType<{}, z.ZodTypeAny, "passthrough"> | ArrayBuffer;
    } | {
        type: "geoJsonFile";
        file: File;
    } | undefined;
    caption?: string | undefined;
    shownInLegend?: boolean | undefined;
    legendDisplay?: "default" | "nameOnly" | undefined;
}>;
/**
 * The value you need to pass to {@link LayersController.updateLayer}
 *
 * @group Layers
 */
interface UpdateLayerParams extends Omit<zInfer<typeof UpdateLayerSchema>, "style" | "source"> {
    /**
     * The style of the layer.
     */
    style?: object;
    /**
     * Updates the source of the layer.
     *
     * Only layers that have a GeoJSON source can have their source udpated.
     *
     * For URL sources, if you pass the same URL again it will cause the data to be
     * refreshed.
     */
    source?: GeoJsonUrlVectorSource | GeoJsonDataVectorSource | GeoJsonFileVectorSource;
}
/**
 * A data-only layer doesn't have any geometry, but can be used to join with other layers
 *
 * @group Layers
 */
interface DataOnlyLayer extends LayerCommon {
    /**
     * Indicates that this layer has no geometry.
     */
    geometryType: null;
    /**
     * This is always null for data-only layers.
     */
    bounds: null;
}
/**
 * @group Layer Groups
 */
interface LayerGroup {
    /**
     * A string identifying the layer group.
     */
    id: string;
    /**
     * The name of the layer group. This is shown in the legend.
     */
    name: string;
    /**
     * The caption of the layer group. This is shown in the legend.
     */
    caption: string | null;
    /**
     * The ids of the layers in the layer group.
     *
     * @remarks
     * You can use these ids to get the full layer objects via the {@link LayersController.getLayers | `getLayers`} method.
     */
    layerIds: Array<string>;
    /**
     * Whether the layer group is visible or not.
     */
    visible: boolean;
    /**
     * Whether the layer group is shown in the legend or not.
     */
    shownInLegend: boolean;
    /**
     * The bounding box of the layer group in [west, south, east, north] order.
     *
     * {@link FeltBoundary}
     */
    bounds: FeltBoundary | null;
}
/**
 * The constraints to apply when getting layers.
 *
 * @group Layers
 */
interface GetLayersConstraint extends zInfer<typeof GetLayersConstraintSchema> {
}
/**
 * @ignore
 */
declare const GetLayersConstraintSchema: z.ZodObject<{
    /**
     * The ids of the layers to get.
     */
    ids: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
}, "strip", z.ZodTypeAny, {
    ids?: string[] | undefined;
}, {
    ids?: string[] | undefined;
}>;
/**
 * The constraints to apply when getting layer groups.
 *
 * @group Layer Groups
 */
interface GetLayerGroupsConstraint extends zInfer<typeof GetLayerGroupsFilterSchema> {
}
/**
 * @ignore
 */
declare const GetLayerGroupsFilterSchema: z.ZodObject<{
    /**
     * The ids of the layer groups to get.
     */
    ids: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
}, "strip", z.ZodTypeAny, {
    ids?: string[] | undefined;
}, {
    ids?: string[] | undefined;
}>;
/**
 * The parameters for the {@link LayersController.onLayerChange | `onLayerChange`} listener.
 *
 * @group Layers
 */
interface LayerChangeCallbackParams {
    /**
     * The new data for the layer or null if the layer was removed.
     */
    layer: Layer | null;
}
/**
 * The parameters for the {@link LayersController.onLayerGroupChange | `onLayerGroupChange`} listener.
 *
 * @group Layer Groups
 */
interface LayerGroupChangeCallbackParams {
    layerGroup: LayerGroup | null;
}
/**
 * A legend item, which often represents a sub-class of features in a
 * layer in the case of categorical or classed layers.
 *
 * @group Legend Items
 */
interface LegendItem extends LegendItemIdentifier {
    /**
     * The title of the legend item.
     */
    title: string | Array<string>;
    /**
     * Whether the title depends on the zoom level or not. If it does, you
     * need to call {@link LayersController.getLegendItem | `getLegendItem`} when the zoom level changes.
     *
     * Note that as the zoom level changes, the {@link LayersController.onLegendItemChange | `onLegendItemChange`} handler
     * will not be called, so you need to call {@link LayersController.getLegendItem | `getLegendItem`} yourself.
     */
    titleDependsOnZoom: boolean;
    /**
     * Whether the legend item is visible or not.
     */
    visible: boolean;
}
/**
 * The identifier for a legend item. It is a compound key of the layer to
 * which the legend item belongs and the legend item's own id.
 *
 * @group Legend Items
 */
interface LegendItemIdentifier extends zInfer<typeof LegendItemIdentifierSchema> {
}
/** @ignore */
declare const LegendItemIdentifierSchema: z.ZodObject<{
    /**
     * The id of the legend item.
     */
    id: z.ZodString;
    /**
     * The id of the layer the legend item belongs to.
     */
    layerId: z.ZodString;
}, "strip", z.ZodTypeAny, {
    id: string;
    layerId: string;
}, {
    id: string;
    layerId: string;
}>;
/**
 * Constraints for legend items. If nothing is passed, all legend items will be returned.
 *
 * @group Legend Items
 */
interface LegendItemsConstraint extends zInfer<typeof LegendItemsConstraintSchema> {
}
/** @ignore */
declare const LegendItemsConstraintSchema: z.ZodObject<{
    /**
     * Array of legend item identifiers to constrain by.
     */
    ids: z.ZodOptional<z.ZodArray<z.ZodObject<{
        /**
         * The id of the legend item.
         */
        id: z.ZodString;
        /**
         * The id of the layer the legend item belongs to.
         */
        layerId: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        id: string;
        layerId: string;
    }, {
        id: string;
        layerId: string;
    }>, "many">>;
    /**
     * Array of layer ids to constrain legend items by.
     */
    layerIds: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
}, "strip", z.ZodTypeAny, {
    ids?: {
        id: string;
        layerId: string;
    }[] | undefined;
    layerIds?: string[] | undefined;
}, {
    ids?: {
        id: string;
        layerId: string;
    }[] | undefined;
    layerIds?: string[] | undefined;
}>;
/**
 * The parameters for the {@link LayersController.onLegendItemChange | `onLegendItemChange`} listener.
 *
 * @group Legend Items
 */
interface LegendItemChangeCallbackParams {
    /**
     * The new data for the legend item or null if the legend item was removed.
     */
    legendItem: LegendItem | null;
}
/**
 * Constraints for the {@link LayersController.getRenderedFeatures | `getRenderedFeatures`} method. This can include layer constriants, spatial constraints, or both. If no constraints are
 * provided, all rendered features will be returned.
 *
 * @group Layers
 */
interface GetRenderedFeaturesConstraint extends zInfer<typeof GetRenderedFeaturesConstraintSchema> {
    /**
     * The area to query for rendered features. This can be specific coordinates or a {@link FeltBoundary}. If omitted, the entire viewport will be queried.
     */
    areaQuery?: {
        coordinates: LatLng;
    } | {
        boundary: FeltBoundary;
    };
}
/** @ignore */
declare const GetRenderedFeaturesConstraintSchema: z.ZodObject<{
    /**
     * The ids of the layers to get rendered features for.
     */
    layerIds: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
    areaQuery: z.ZodOptional<z.ZodUnion<[z.ZodObject<{
        coordinates: z.ZodObject<{
            latitude: z.ZodNumber;
            longitude: z.ZodNumber;
        }, "strip", z.ZodTypeAny, {
            latitude: number;
            longitude: number;
        }, {
            latitude: number;
            longitude: number;
        }>;
    }, "strip", z.ZodTypeAny, {
        coordinates: {
            latitude: number;
            longitude: number;
        };
    }, {
        coordinates: {
            latitude: number;
            longitude: number;
        };
    }>, z.ZodObject<{
        boundary: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
    }, "strip", z.ZodTypeAny, {
        boundary: [number, number, number, number];
    }, {
        boundary: [number, number, number, number];
    }>]>>;
}, "strip", z.ZodTypeAny, {
    layerIds?: string[] | undefined;
    areaQuery?: {
        coordinates: {
            latitude: number;
            longitude: number;
        };
    } | {
        boundary: [number, number, number, number];
    } | undefined;
}, {
    layerIds?: string[] | undefined;
    areaQuery?: {
        coordinates: {
            latitude: number;
            longitude: number;
        };
    } | {
        boundary: [number, number, number, number];
    } | undefined;
}>;
/**
 * The schema that describes the structure of the features in a layer.
 *
 * @remarks This can be useful to build generic UIs that need to know the structure of the data in
 * a layer, such as a dropdown to choose an attribute.
 *
 * @group Layer Schema
 */
interface LayerSchema {
    /**
     * The total number of features in the layer.
     */
    featureCount: number;
    /**
     * Array of attribute schemas describing the properties available on features in this layer.
     */
    attributes: Array<LayerSchemaAttribute>;
}
/**
 * A single attribute from the layer schema.
 *
 * @remarks Each feature in a layer has a set of attributes, and these types describe the
 * structure of a single attribute, including things like id, display name, type, and sample values.
 *
 * @group Layer Schema
 */
type LayerSchemaAttribute = LayerSchemaNumericAttribute | LayerSchemaTextAttribute | LayerSchemaBooleanAttribute | LayerSchemaDateAttribute | LayerSchemaDateTimeAttribute;
/**
 * The common schema for all attributes.
 *
 * @group Layer Schema
 */
interface LayerSchemaCommonAttribute {
    /**
     * The unique identifier for this attribute.
     *
     * This can be used to fetch statistics, categories, histograms etc. for this attribute
     * via the {@link LayersController.getCategoryData}, {@link LayersController.getHistogramData},
     * and {@link LayersController.getAggregates} methods.
     */
    id: string;
    /**
     * The human-readable name of this attribute.
     */
    displayName: string;
    /**
     * The specific data type of this attribute, providing more detail than the basic type.
     *
     * For instance, a numeric attribute might be "INTEGER", "FLOAT, etc.
     */
    detailedType: string;
    /**
     * The number of distinct values present for this attribute across all features.
     */
    distinctCount: number;
}
/**
 * The schema for a numeric attribute on a layer.
 *
 * @group Layer Schema
 */
interface LayerSchemaNumericAttribute extends LayerSchemaCommonAttribute {
    /**
     * Indicates this is a numeric attribute.
     */
    type: "numeric";
    /**
     * A small sample of values for this attribute and their frequency.
     */
    sampleValues: Array<{
        value: number;
        count: number;
    }>;
    /**
     * The minimum value present for this attribute across all features.
     */
    min: number;
    /**
     * The maximum value present for this attribute across all features.
     */
    max: number;
}
/**
 * The schema for a text attribute on a layer.
 *
 * @group Layer Schema
 */
interface LayerSchemaTextAttribute extends LayerSchemaCommonAttribute {
    /**
     * Indicates this is a text attribute.
     */
    type: "text";
    /**
     * A small sample of string values for this attribute and their frequency.
     */
    sampleValues: Array<{
        value: string;
        count: number;
    }>;
}
/**
 * The schema for a boolean attribute on a layer.
 *
 * @group Layer Schema
 */
interface LayerSchemaBooleanAttribute extends LayerSchemaCommonAttribute {
    /**
     * Indicates this is a boolean attribute.
     */
    type: "boolean";
    /**
     * A representative sample of boolean values for this attribute and their frequency.
     */
    sampleValues: Array<{
        value: boolean;
        count: number;
    }>;
}
/**
 * The schema for a date attribute on a layer.
 *
 * @group Layer Schema
 */
interface LayerSchemaDateAttribute extends LayerSchemaCommonAttribute {
    /**
     * Indicates this is a date attribute.
     */
    type: "date";
    /**
     * The earliest date present for this attribute in truncated ISO8601 format (YYYY-MM-DD).
     */
    min: string;
    /**
     * The latest date present for this attribute in truncated ISO8601 format (YYYY-MM-DD).
     */
    max: string;
    /**
     * A representative sample of date values for this attribute and their frequency.
     */
    sampleValues: Array<{
        value: string;
        count: number;
    }>;
}
/**
 * The schema for a datetime attribute on a layer.
 *
 * @group Layer Schema
 */
interface LayerSchemaDateTimeAttribute extends LayerSchemaCommonAttribute {
    /**
     * Indicates this is a datetime attribute.
     */
    type: "datetime";
    /**
     * The earliest datetime present for this attribute in ISO8601 format.
     */
    min: string;
    /**
     * The latest datetime present for this attribute in ISO8601 format.
     */
    max: string;
    /**
     * A representative sample of datetime values for this attribute and their frequency.
     */
    sampleValues: Array<{
        value: string;
        count: number;
    }>;
}
/**
 * The parameters for the {@link LayersController.createLayersFromGeoJson} method.
 *
 * @group Layers
 */
declare const CreateLayersFromGeoJsonSchema: z.ZodObject<{
    source: z.ZodUnion<[z.ZodObject<{
        /**
         * Identifies this as a GeoJSON URL source.
         */
        type: z.ZodLiteral<"geoJsonUrl">;
        /**
         * The remote URL of the GeoJSON file used to populate the layer.
         */
        url: z.ZodString;
        /**
         * The interval in milliseconds between automatic refreshes of the GeoJSON.
         *
         * The value must be in the range of 250ms - 5 minutes (300,000ms).
         *
         * If the value is `null`, the GeoJSON will not be refreshed automatically.
         */
        refreshInterval: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
    }, "strip", z.ZodTypeAny, {
        type: "geoJsonUrl";
        url: string;
        refreshInterval?: number | null | undefined;
    }, {
        type: "geoJsonUrl";
        url: string;
        refreshInterval?: number | null | undefined;
    }>, z.ZodObject<{
        type: z.ZodLiteral<"geoJsonData">;
        data: z.ZodUnion<[z.ZodObject<{}, "passthrough", z.ZodTypeAny, z.objectOutputType<{}, z.ZodTypeAny, "passthrough">, z.objectInputType<{}, z.ZodTypeAny, "passthrough">>, z.ZodType<ArrayBuffer, z.ZodTypeDef, ArrayBuffer>]>;
    }, "strip", z.ZodTypeAny, {
        type: "geoJsonData";
        data: z.objectOutputType<{}, z.ZodTypeAny, "passthrough"> | ArrayBuffer;
    }, {
        type: "geoJsonData";
        data: z.objectInputType<{}, z.ZodTypeAny, "passthrough"> | ArrayBuffer;
    }>, z.ZodObject<{
        /**
         * Identifies this as a GeoJSON file source.
         */
        type: z.ZodLiteral<"geoJsonFile">;
        /**
         * The GeoJSON file for the layer.
         */
        file: z.ZodType<File, z.ZodTypeDef, File>;
    }, "strip", z.ZodTypeAny, {
        type: "geoJsonFile";
        file: File;
    }, {
        type: "geoJsonFile";
        file: File;
    }>]>;
    /**
     * The name of the layer to create.
     */
    name: z.ZodString;
    /**
     * Sets the bounds of the layer.
     */
    bounds: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
    /**
     * Sets the caption of the layer.
     */
    caption: z.ZodOptional<z.ZodString>;
    /**
     * Sets the description of the layer.
     */
    description: z.ZodOptional<z.ZodString>;
    /**
     * Sets the styles to apply to each geometry on the layer.
     */
    geometryStyles: z.ZodOptional<z.ZodObject<{
        Point: z.ZodOptional<z.ZodObject<{}, "passthrough", z.ZodTypeAny, z.objectOutputType<{}, z.ZodTypeAny, "passthrough">, z.objectInputType<{}, z.ZodTypeAny, "passthrough">>>;
        Line: z.ZodOptional<z.ZodObject<{}, "passthrough", z.ZodTypeAny, z.objectOutputType<{}, z.ZodTypeAny, "passthrough">, z.objectInputType<{}, z.ZodTypeAny, "passthrough">>>;
        Polygon: z.ZodOptional<z.ZodObject<{}, "passthrough", z.ZodTypeAny, z.objectOutputType<{}, z.ZodTypeAny, "passthrough">, z.objectInputType<{}, z.ZodTypeAny, "passthrough">>>;
    }, "strip", z.ZodTypeAny, {
        Point?: z.objectOutputType<{}, z.ZodTypeAny, "passthrough"> | undefined;
        Polygon?: z.objectOutputType<{}, z.ZodTypeAny, "passthrough"> | undefined;
        Line?: z.objectOutputType<{}, z.ZodTypeAny, "passthrough"> | undefined;
    }, {
        Point?: z.objectInputType<{}, z.ZodTypeAny, "passthrough"> | undefined;
        Polygon?: z.objectInputType<{}, z.ZodTypeAny, "passthrough"> | undefined;
        Line?: z.objectInputType<{}, z.ZodTypeAny, "passthrough"> | undefined;
    }>>;
}, "strip", z.ZodTypeAny, {
    name: string;
    source: {
        type: "geoJsonUrl";
        url: string;
        refreshInterval?: number | null | undefined;
    } | {
        type: "geoJsonData";
        data: z.objectOutputType<{}, z.ZodTypeAny, "passthrough"> | ArrayBuffer;
    } | {
        type: "geoJsonFile";
        file: File;
    };
    description?: string | undefined;
    bounds?: [number, number, number, number] | undefined;
    caption?: string | undefined;
    geometryStyles?: {
        Point?: z.objectOutputType<{}, z.ZodTypeAny, "passthrough"> | undefined;
        Polygon?: z.objectOutputType<{}, z.ZodTypeAny, "passthrough"> | undefined;
        Line?: z.objectOutputType<{}, z.ZodTypeAny, "passthrough"> | undefined;
    } | undefined;
}, {
    name: string;
    source: {
        type: "geoJsonUrl";
        url: string;
        refreshInterval?: number | null | undefined;
    } | {
        type: "geoJsonData";
        data: z.objectInputType<{}, z.ZodTypeAny, "passthrough"> | ArrayBuffer;
    } | {
        type: "geoJsonFile";
        file: File;
    };
    description?: string | undefined;
    bounds?: [number, number, number, number] | undefined;
    caption?: string | undefined;
    geometryStyles?: {
        Point?: z.objectInputType<{}, z.ZodTypeAny, "passthrough"> | undefined;
        Polygon?: z.objectInputType<{}, z.ZodTypeAny, "passthrough"> | undefined;
        Line?: z.objectInputType<{}, z.ZodTypeAny, "passthrough"> | undefined;
    } | undefined;
}>;
/**
 * The parameters for the {@link LayersController.createLayersFromGeoJson} method.
 *
 * @group Layers
 */
interface CreateLayersFromGeoJsonParams extends Omit<zInfer<typeof CreateLayersFromGeoJsonSchema>, "source" | "geometryStyles"> {
    /**
     * The source of the GeoJSON data.
     */
    source: GeoJsonDataVectorSource | GeoJsonFileVectorSource | GeoJsonUrlVectorSource;
    /**
     * The styles to apply to each geometry on the layer.
     *
     * Each style should be a valid FSL style, as described in {@link Layer.style}.
     *
     * These are optional, and if missing will use a default style determined by
     * Felt, which you can consider to be undefined behaviour.
     *
     * @example
     * ```typescript
     * const layer = await layersController.createLayersFromGeoJson({
     *   name: "My Layer",
     *   geometryStyles: {
     *     Point: {
     *       paint: { color: "red", size: 8 },
     *     },
     *     Line: {
     *       paint: { color: "blue", size: 4 },
     *       config: { labelAttribute: ["name"] },
     *       label: { minZoom: 0 },
     *     },
     *     Polygon: {
     *       paint: { color: "green", strokeColor: "darkgreen" },
     *     },
     *   },
     * });
     * ```
     */
    geometryStyles?: {
        Point?: object;
        Line?: object;
        Polygon?: object;
    };
}

/**
 * @group Filters
 */
type FilterLogicGate = z.infer<typeof FilterLogicGateSchema>;
declare const FilterLogicGateSchema: z.ZodEnum<["and", "or"]>;
/**
 * @group Filters
 */
type FilterExpression = z.infer<typeof FilterExpressionSchema>;
declare const FilterExpressionSchema: z.ZodUnion<[z.ZodTuple<[z.ZodUnion<[z.ZodString, z.ZodNull]>, z.ZodEnum<["in", "ni"]>, z.ZodUnion<[z.ZodArray<z.ZodUnion<[z.ZodNumber, z.ZodString, z.ZodBoolean, z.ZodNull]>, "many">, z.ZodNull]>], null>, z.ZodTuple<[z.ZodUnion<[z.ZodString, z.ZodNull]>, z.ZodEnum<["lt", "gt", "le", "ge", "eq", "ne", "cn", "nc", "is", "isnt"]>, z.ZodUnion<[z.ZodNumber, z.ZodString, z.ZodBoolean, z.ZodNull]>], null>]>;
/**
 * A `FilterTernary` is a tree structure for combining expressions with logical operators.
 *
 * When combining three or more conditions, you must use proper nesting rather than a flat list.
 *
 * @example
 * ```typescript
 * // A simple filter with a single condition
 * const filter = [
 *   ["AREA", "gt", 30_000],
 *   "and",
 *   ["COLOR", "eq", "red"]
 * ]
 *
 * // A complex filter with multiple conditions
 * const filter = [
 *   ["AREA", "gt", 30_000],
 *   "and",
 *   [
 *     ["COLOR", "eq", "red"],
 *     "or",
 *     ["TYPE", "eq", "residential"]
 *   ]
 * ]
 * ```
 *
 * @group Filters
 */
type FilterTernary = [
    FilterTernary | FilterExpression | null | boolean,
    FilterLogicGate,
    FilterTernary | FilterExpression | null | boolean
];
/**
 *
 * Filters can be used to change which features in a layer are rendered. Filters can be
 * applied to a layer by the {@link LayersController.setLayerFilters | setLayerFilters} method on the Felt controller.
 *
 * Filters use a tree structure for combining expressions with logical operators, called a {@link FilterTernary}.
 * When combining three or more conditions, you must use proper nesting rather than a flat list.
 *
 * See the examples below for the correct structure to use when building complex filters.
 *
 * @remarks
 * The possible operators are:
 * - `lt`: Less than
 * - `gt`: Greater than
 * - `le`: Less than or equal to
 * - `ge`: Greater than or equal to
 * - `eq`: Equal to
 * - `ne`: Not equal to
 * - `cn`: Contains
 * - `nc`: Does not contain
 * - `is`: Is
 * - `isnt`: Is not
 * - `in`: In
 * - `ni`: Not in
 *
 * The allowed boolean operators are:
 * - `and`: Logical AND
 * - `or`: Logical OR
 *
 * @example
 * ```typescript
 * // 1. Simple filter: single condition
 * felt.setLayerFilters({
 *   layerId: "layer-1",
 *   filters: ["AREA", "gt", 30_000],
 * });
 *
 * // 2. Basic compound filter: two conditions with AND
 * felt.setLayerFilters({
 *   layerId: "layer-1",
 *   filters: [
 *     ["AREA", "gt", 30_000],  // First condition
 *     "and",                   // Logic operator
 *     ["COLOR", "eq", "red"]   // Second condition
 *   ]
 * });
 *
 * // 3. Complex filter: three or more conditions require nesting
 * // ⚠️ IMPORTANT: Filters use a tree structure, not a flat list
 * felt.setLayerFilters({
 *   layerId: "layer-1",
 *   filters: [
 *     ["AREA", "gt", 30_000],                // First condition
 *     "and",                                 // First logic operator
 *     [                                      // Nested group starts
 *       ["COLOR", "eq", "red"],              //   Second condition
 *       "and",                               //   Second logic operator
 *       ["TYPE", "eq", "residential"]        //   Third condition
 *     ]                                      // Nested group ends
 *   ]
 * });
 *
 * // 4. Even more complex: four conditions with proper nesting
 * // Visual structure:
 * //          AND
 * //         /   \
 * //    condition  AND
 * //              /   \
 * //        condition  AND
 * //                  /   \
 * //            condition  condition
 * felt.setLayerFilters({
 *   layerId: "layer-1",
 *   filters: [
 *     ["AREA", "gt", 30_000],                // First condition
 *     "and",
 *     [
 *       ["COLOR", "eq", "red"],              // Second condition
 *       "and",
 *       [
 *         ["TYPE", "eq", "residential"],     // Third condition
 *         "and",
 *         ["YEAR", "gt", 2000]               // Fourth condition
 *       ]
 *     ]
 *   ]
 * });
 *
 * // 5. Mixed operators: combining AND and OR
 * // Visual structure:
 * //          AND
 * //         /   \
 * //    condition  OR
 * //              /  \
 * //        condition condition
 * felt.setLayerFilters({
 *   layerId: "layer-1",
 *   filters: [
 *     ["AREA", "gt", 30_000],                // Must have large area
 *     "and",
 *     [
 *       ["COLOR", "eq", "red"],              // Must be either red
 *       "or",
 *       ["TYPE", "eq", "residential"]        // OR residential type
 *     ]
 *   ]
 * });
 * ```
 *
 * @group Filters
 */
type Filters = FilterTernary | FilterExpression | null | boolean;
/**
 * The filters that are currently set on a layer.
 *
 * A layer's filters are the combination of various different places
 * in which filters can be applied.
 *
 * @group Filters
 */
interface LayerFilters {
    /**
     * Filters that are set in the layer's style. These are the lowest level
     * of filters, and can only be set by editing the map.
     */
    style: Filters;
    /**
     * Filters that are set in the layer's components, which are interactive
     * elements in the legend. These can be set by viewers for their own session,
     * but their default value can be set by the map creator.
     */
    components: Filters;
    /**
     * Filters that are set ephemerally by viewers in their own session.
     *
     * These are the filters that are set when the {@link LayersController.setLayerFilters | `setLayerFilters`} method is
     * called. There is no way to set these in the Felt UI - they can only be
     * set using the SDK.
     */
    ephemeral: Filters;
    /**
     * The combined result of all the filters set on the layer.
     */
    combined: Filters;
}
/**
 * The common type for filtering data by a spatial boundary.
 *
 * This can be either:
 * - `FeltBoundary`: a [w, s, e, n] bounding box
 * - `PolygonGeometry`: a GeoJSON Polygon geometry
 * - `MultiPolygonGeometry`: a GeoJSON MultiPolygon geometry
 * - `LngLatTuple[]`: a list of coordinates describing a single ring of a polygon
 *
 * @group Filters
 */
type GeometryFilter = FeltBoundary | PolygonGeometry | MultiPolygonGeometry | LngLatTuple[];
/**
 * All the different sources for boundaries for a layer, including their combined result.
 *
 * @group Filters
 */
interface LayerBoundaries {
    /**
     * Boundaries set by drawing spatial filters on the map.
     *
     * When there are multiple spatial filters, they are combined into a multi-polygon.
     */
    spatialFilters: MultiPolygonGeometry | null;
    /**
     * Boundaries that are set ephemerally by viewers in their own session.
     *
     * These are the filters that are set when the {@link LayersController.setLayerBoundary}
     * method is called. There is no way to set these in the Felt UI - they can only be
     * set using the SDK.
     */
    ephemeral: GeometryFilter | null;
    /**
     * The combined result of all the boundaries set on the layer.
     *
     * Each different source of boundary is intersected to produce the combined result.
     *
     */
    combined: MultiPolygonGeometry | null;
}

declare const AggregateMethodSchema: z.ZodEnum<["avg", "max", "min", "sum", "median"]>;
declare const PrecomputedAggregateMethodSchema: z.ZodEnum<["avg", "max", "min", "sum", "count"]>;
declare const AggregationConfigSchema: z.ZodObject<{
    /**
     * The operation to use on the values from the features in the layer
     */
    method: z.ZodEnum<["avg", "max", "min", "sum", "median"]>;
    /**
     * The attribute to use for the aggregation. This must be a numeric attribute.
     */
    attribute: z.ZodString;
}, "strip", z.ZodTypeAny, {
    attribute: string;
    method: "avg" | "max" | "min" | "sum" | "median";
}, {
    attribute: string;
    method: "avg" | "max" | "min" | "sum" | "median";
}>;
declare const MutliAggregationConfigSchema: z.ZodObject<{
    /**
     * The operations to use on the values from the features in the layer
     */
    methods: z.ZodArray<z.ZodUnion<[z.ZodEnum<["avg", "max", "min", "sum", "median"]>, z.ZodLiteral<"count">]>, "many">;
    /**
     * The attribute to use for the aggregation. This must be a numeric attribute.
     */
    attribute: z.ZodOptional<z.ZodString>;
}, "strip", z.ZodTypeAny, {
    methods: ("avg" | "max" | "min" | "sum" | "median" | "count")[];
    attribute?: string | undefined;
}, {
    methods: ("avg" | "max" | "min" | "sum" | "median" | "count")[];
    attribute?: string | undefined;
}>;
/**
 * Defines how to aggregate a value across features in a layer.
 *
 * @group Stats
 */
interface AggregationConfig extends zInfer<typeof AggregationConfigSchema> {
    /**
     * The method to use for the aggregation.
     */
    method: AggregationMethod;
}
/**
 * The method to use for the aggregation.
 *
 * @group Stats
 */
type AggregationMethod = z.infer<typeof AggregateMethodSchema>;
/**
 * The method to use for the precomputed aggregation.
 *
 * @group Stats
 */
type PrecomputedAggregationMethod = z.infer<typeof PrecomputedAggregateMethodSchema>;
/**
 * Defines how to aggregate a value across features in a layer with multiple aggregations
 * returned at once.
 *
 * @group Stats
 */
interface MultiAggregationConfig<T extends AggregationMethod | "count"> extends zInfer<typeof MutliAggregationConfigSchema> {
    methods: T[];
    /**
     * The attribute ID to use for the aggregation when aggregations other than "count" are used.
     *
     * This can be omitted if the only aggregation is "count", but must be a numeric attribute
     * otherwise.
     *
     * Use `getLayerSchema` to get the attributes available for a layer.
     */
    attribute?: string;
}
declare const ValueConfigurationSchema: z.ZodObject<{
    boundary: z.ZodOptional<z.ZodUnion<[z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>, z.ZodObject<{
        type: z.ZodLiteral<"Polygon">;
        coordinates: z.ZodArray<z.ZodEffects<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, "many">, [number, number][], [number, number][]>, "many">;
    }, "strip", z.ZodTypeAny, {
        type: "Polygon";
        coordinates: [number, number][][];
    }, {
        type: "Polygon";
        coordinates: [number, number][][];
    }>, z.ZodObject<{
        type: z.ZodLiteral<"MultiPolygon">;
        coordinates: z.ZodArray<z.ZodArray<z.ZodEffects<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, "many">, [number, number][], [number, number][]>, "many">, "many">;
    }, "strip", z.ZodTypeAny, {
        type: "MultiPolygon";
        coordinates: [number, number][][][];
    }, {
        type: "MultiPolygon";
        coordinates: [number, number][][][];
    }>, z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, "many">]>>;
    filters: z.ZodOptional<z.ZodUnion<[z.ZodType<FilterTernary, z.ZodTypeDef, FilterTernary>, z.ZodUnion<[z.ZodTuple<[z.ZodUnion<[z.ZodString, z.ZodNull]>, z.ZodEnum<["in", "ni"]>, z.ZodUnion<[z.ZodArray<z.ZodUnion<[z.ZodNumber, z.ZodString, z.ZodBoolean, z.ZodNull]>, "many">, z.ZodNull]>], null>, z.ZodTuple<[z.ZodUnion<[z.ZodString, z.ZodNull]>, z.ZodEnum<["lt", "gt", "le", "ge", "eq", "ne", "cn", "nc", "is", "isnt"]>, z.ZodUnion<[z.ZodNumber, z.ZodString, z.ZodBoolean, z.ZodNull]>], null>]>, z.ZodNull, z.ZodBoolean]>>;
    aggregation: z.ZodOptional<z.ZodObject<{
        /**
         * The operation to use on the values from the features in the layer
         */
        method: z.ZodEnum<["avg", "max", "min", "sum", "median"]>;
        /**
         * The attribute to use for the aggregation. This must be a numeric attribute.
         */
        attribute: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        attribute: string;
        method: "avg" | "max" | "min" | "sum" | "median";
    }, {
        attribute: string;
        method: "avg" | "max" | "min" | "sum" | "median";
    }>>;
}, "strip", z.ZodTypeAny, {
    filters?: boolean | FilterTernary | [string | null, "in" | "ni", (string | number | boolean | null)[] | null] | [string | null, "lt" | "gt" | "le" | "ge" | "eq" | "ne" | "cn" | "nc" | "is" | "isnt", string | number | boolean | null] | null | undefined;
    boundary?: [number, number, number, number] | [number, number][] | {
        type: "Polygon";
        coordinates: [number, number][][];
    } | {
        type: "MultiPolygon";
        coordinates: [number, number][][][];
    } | undefined;
    aggregation?: {
        attribute: string;
        method: "avg" | "max" | "min" | "sum" | "median";
    } | undefined;
}, {
    filters?: boolean | FilterTernary | [string | null, "in" | "ni", (string | number | boolean | null)[] | null] | [string | null, "lt" | "gt" | "le" | "ge" | "eq" | "ne" | "cn" | "nc" | "is" | "isnt", string | number | boolean | null] | null | undefined;
    boundary?: [number, number, number, number] | [number, number][] | {
        type: "Polygon";
        coordinates: [number, number][][];
    } | {
        type: "MultiPolygon";
        coordinates: [number, number][][][];
    } | undefined;
    aggregation?: {
        attribute: string;
        method: "avg" | "max" | "min" | "sum" | "median";
    } | undefined;
}>;
/**
 * Configuration for filtering and aggregating values across features.
 *
 * This can be used to restrict the features considered for aggregation via the `boundary`
 * and `filters` properties.
 *
 * It can also be used to specify how to aggregate the values via the `aggregation` property.
 *
 * @group Stats
 */
interface ValueConfiguration extends zInfer<typeof ValueConfigurationSchema> {
    /**
     * The spatial boundary for what to count or aggregate.
     */
    boundary?: GeometryFilter;
    /**
     * Attribute filters to determine what gets counted or aggregated.
     */
    filters?: Filters;
    /**
     * Specifies how to aggregate values within each category or bin. When omitted,
     * features are counted. When specified, the chosen calculation (avg, sum, etc.)
     * is performed on the specified attribute.
     *
     * For example, instead of counting buildings in each category, you might want
     * to sum their square footage or average their assessed values.
     */
    aggregation?: AggregationConfig;
}
declare const GetLayerCategoriesParamsSchema: z.ZodObject<{
    /**
     * The ID of the layer to get categories from.
     */
    layerId: z.ZodString;
    /**
     * The attribute to use for categorization.
     */
    attribute: z.ZodString;
    /**
     * The maximum number of categories to return.
     */
    limit: z.ZodOptional<z.ZodNumber>;
    boundary: z.ZodOptional<z.ZodUnion<[z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>, z.ZodObject<{
        type: z.ZodLiteral<"Polygon">;
        coordinates: z.ZodArray<z.ZodEffects<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, "many">, [number, number][], [number, number][]>, "many">;
    }, "strip", z.ZodTypeAny, {
        type: "Polygon";
        coordinates: [number, number][][];
    }, {
        type: "Polygon";
        coordinates: [number, number][][];
    }>, z.ZodObject<{
        type: z.ZodLiteral<"MultiPolygon">;
        coordinates: z.ZodArray<z.ZodArray<z.ZodEffects<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, "many">, [number, number][], [number, number][]>, "many">, "many">;
    }, "strip", z.ZodTypeAny, {
        type: "MultiPolygon";
        coordinates: [number, number][][][];
    }, {
        type: "MultiPolygon";
        coordinates: [number, number][][][];
    }>, z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, "many">]>>;
    filters: z.ZodOptional<z.ZodUnion<[z.ZodType<FilterTernary, z.ZodTypeDef, FilterTernary>, z.ZodUnion<[z.ZodTuple<[z.ZodUnion<[z.ZodString, z.ZodNull]>, z.ZodEnum<["in", "ni"]>, z.ZodUnion<[z.ZodArray<z.ZodUnion<[z.ZodNumber, z.ZodString, z.ZodBoolean, z.ZodNull]>, "many">, z.ZodNull]>], null>, z.ZodTuple<[z.ZodUnion<[z.ZodString, z.ZodNull]>, z.ZodEnum<["lt", "gt", "le", "ge", "eq", "ne", "cn", "nc", "is", "isnt"]>, z.ZodUnion<[z.ZodNumber, z.ZodString, z.ZodBoolean, z.ZodNull]>], null>]>, z.ZodNull, z.ZodBoolean]>>;
    values: z.ZodOptional<z.ZodObject<{
        boundary: z.ZodOptional<z.ZodUnion<[z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>, z.ZodObject<{
            type: z.ZodLiteral<"Polygon">;
            coordinates: z.ZodArray<z.ZodEffects<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, "many">, [number, number][], [number, number][]>, "many">;
        }, "strip", z.ZodTypeAny, {
            type: "Polygon";
            coordinates: [number, number][][];
        }, {
            type: "Polygon";
            coordinates: [number, number][][];
        }>, z.ZodObject<{
            type: z.ZodLiteral<"MultiPolygon">;
            coordinates: z.ZodArray<z.ZodArray<z.ZodEffects<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, "many">, [number, number][], [number, number][]>, "many">, "many">;
        }, "strip", z.ZodTypeAny, {
            type: "MultiPolygon";
            coordinates: [number, number][][][];
        }, {
            type: "MultiPolygon";
            coordinates: [number, number][][][];
        }>, z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, "many">]>>;
        filters: z.ZodOptional<z.ZodUnion<[z.ZodType<FilterTernary, z.ZodTypeDef, FilterTernary>, z.ZodUnion<[z.ZodTuple<[z.ZodUnion<[z.ZodString, z.ZodNull]>, z.ZodEnum<["in", "ni"]>, z.ZodUnion<[z.ZodArray<z.ZodUnion<[z.ZodNumber, z.ZodString, z.ZodBoolean, z.ZodNull]>, "many">, z.ZodNull]>], null>, z.ZodTuple<[z.ZodUnion<[z.ZodString, z.ZodNull]>, z.ZodEnum<["lt", "gt", "le", "ge", "eq", "ne", "cn", "nc", "is", "isnt"]>, z.ZodUnion<[z.ZodNumber, z.ZodString, z.ZodBoolean, z.ZodNull]>], null>]>, z.ZodNull, z.ZodBoolean]>>;
        aggregation: z.ZodOptional<z.ZodObject<{
            /**
             * The operation to use on the values from the features in the layer
             */
            method: z.ZodEnum<["avg", "max", "min", "sum", "median"]>;
            /**
             * The attribute to use for the aggregation. This must be a numeric attribute.
             */
            attribute: z.ZodString;
        }, "strip", z.ZodTypeAny, {
            attribute: string;
            method: "avg" | "max" | "min" | "sum" | "median";
        }, {
            attribute: string;
            method: "avg" | "max" | "min" | "sum" | "median";
        }>>;
    }, "strip", z.ZodTypeAny, {
        filters?: boolean | FilterTernary | [string | null, "in" | "ni", (string | number | boolean | null)[] | null] | [string | null, "lt" | "gt" | "le" | "ge" | "eq" | "ne" | "cn" | "nc" | "is" | "isnt", string | number | boolean | null] | null | undefined;
        boundary?: [number, number, number, number] | [number, number][] | {
            type: "Polygon";
            coordinates: [number, number][][];
        } | {
            type: "MultiPolygon";
            coordinates: [number, number][][][];
        } | undefined;
        aggregation?: {
            attribute: string;
            method: "avg" | "max" | "min" | "sum" | "median";
        } | undefined;
    }, {
        filters?: boolean | FilterTernary | [string | null, "in" | "ni", (string | number | boolean | null)[] | null] | [string | null, "lt" | "gt" | "le" | "ge" | "eq" | "ne" | "cn" | "nc" | "is" | "isnt", string | number | boolean | null] | null | undefined;
        boundary?: [number, number, number, number] | [number, number][] | {
            type: "Polygon";
            coordinates: [number, number][][];
        } | {
            type: "MultiPolygon";
            coordinates: [number, number][][][];
        } | undefined;
        aggregation?: {
            attribute: string;
            method: "avg" | "max" | "min" | "sum" | "median";
        } | undefined;
    }>>;
}, "strip", z.ZodTypeAny, {
    attribute: string;
    layerId: string;
    values?: {
        filters?: boolean | FilterTernary | [string | null, "in" | "ni", (string | number | boolean | null)[] | null] | [string | null, "lt" | "gt" | "le" | "ge" | "eq" | "ne" | "cn" | "nc" | "is" | "isnt", string | number | boolean | null] | null | undefined;
        boundary?: [number, number, number, number] | [number, number][] | {
            type: "Polygon";
            coordinates: [number, number][][];
        } | {
            type: "MultiPolygon";
            coordinates: [number, number][][][];
        } | undefined;
        aggregation?: {
            attribute: string;
            method: "avg" | "max" | "min" | "sum" | "median";
        } | undefined;
    } | undefined;
    filters?: boolean | FilterTernary | [string | null, "in" | "ni", (string | number | boolean | null)[] | null] | [string | null, "lt" | "gt" | "le" | "ge" | "eq" | "ne" | "cn" | "nc" | "is" | "isnt", string | number | boolean | null] | null | undefined;
    boundary?: [number, number, number, number] | [number, number][] | {
        type: "Polygon";
        coordinates: [number, number][][];
    } | {
        type: "MultiPolygon";
        coordinates: [number, number][][][];
    } | undefined;
    limit?: number | undefined;
}, {
    attribute: string;
    layerId: string;
    values?: {
        filters?: boolean | FilterTernary | [string | null, "in" | "ni", (string | number | boolean | null)[] | null] | [string | null, "lt" | "gt" | "le" | "ge" | "eq" | "ne" | "cn" | "nc" | "is" | "isnt", string | number | boolean | null] | null | undefined;
        boundary?: [number, number, number, number] | [number, number][] | {
            type: "Polygon";
            coordinates: [number, number][][];
        } | {
            type: "MultiPolygon";
            coordinates: [number, number][][][];
        } | undefined;
        aggregation?: {
            attribute: string;
            method: "avg" | "max" | "min" | "sum" | "median";
        } | undefined;
    } | undefined;
    filters?: boolean | FilterTernary | [string | null, "in" | "ni", (string | number | boolean | null)[] | null] | [string | null, "lt" | "gt" | "le" | "ge" | "eq" | "ne" | "cn" | "nc" | "is" | "isnt", string | number | boolean | null] | null | undefined;
    boundary?: [number, number, number, number] | [number, number][] | {
        type: "Polygon";
        coordinates: [number, number][][];
    } | {
        type: "MultiPolygon";
        coordinates: [number, number][][][];
    } | undefined;
    limit?: number | undefined;
}>;
/**
 * The parameters for getting categories from a layer, passed to
 * the {@link LayersController.getCategoryData} method.
 *
 * @group Stats
 */
interface GetLayerCategoriesParams extends zInfer<typeof GetLayerCategoriesParamsSchema> {
    /**
     * Attribute filters for the features to include when calculating the categories.
     */
    filters?: Filters;
    /**
     * The spatial boundary for the features to include when calculating the categories.
     */
    boundary?: GeometryFilter;
    /**
     * Configuration for filtering and aggregating values while preserving the full set of
     * categories in the results.
     *
     * This is particularly useful when you want to compare different subsets of data while
     * maintaining consistent categories. For example:
     *
     * - Show all building types in a city, but only count recent buildings in each type
     * - Keep all neighborhood categories but only sum up residential square footage
     *
     * Unlike top-level filters which affect both what categories appear AND their values,
     * filters in this configuration only affect the values while keeping all possible
     * categories in the results.
     */
    values?: ValueConfiguration;
}
declare const GetLayerCategoriesGroupSchema: z.ZodObject<{
    /**
     * The category for which the value was calculated.
     */
    key: z.ZodUnion<[z.ZodNumber, z.ZodString, z.ZodBoolean]>;
    /**
     * The value calculated for the category, whether a count, sum, average, etc.
     *
     * `null` is returned if there are no features in the category as opposed to zero,
     * so as not to confuse with a real zero value from some aggregation.
     */
    value: z.ZodNullable<z.ZodNumber>;
}, "strip", z.ZodTypeAny, {
    value: number | null;
    key: string | number | boolean;
}, {
    value: number | null;
    key: string | number | boolean;
}>;
/**
 * A single category from the response from the {@link LayersController.getCategoryData} method.
 *
 * @group Stats
 */
interface GetLayerCategoriesGroup extends zInfer<typeof GetLayerCategoriesGroupSchema> {
}
declare const GetLayerHistogramParamsSchema: z.ZodObject<{
    layerId: z.ZodString;
    attribute: z.ZodString;
    steps: z.ZodUnion<[z.ZodObject<{
        type: z.ZodLiteral<"equal-intervals">;
        count: z.ZodNumber;
    }, "strip", z.ZodTypeAny, {
        type: "equal-intervals";
        count: number;
    }, {
        type: "equal-intervals";
        count: number;
    }>, z.ZodObject<{
        type: z.ZodLiteral<"time-interval">;
        interval: z.ZodEnum<["hour", "day", "week", "month", "year"]>;
    }, "strip", z.ZodTypeAny, {
        type: "time-interval";
        interval: "hour" | "day" | "week" | "month" | "year";
    }, {
        type: "time-interval";
        interval: "hour" | "day" | "week" | "month" | "year";
    }>, z.ZodArray<z.ZodNumber, "many">]>;
    boundary: z.ZodOptional<z.ZodUnion<[z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>, z.ZodObject<{
        type: z.ZodLiteral<"Polygon">;
        coordinates: z.ZodArray<z.ZodEffects<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, "many">, [number, number][], [number, number][]>, "many">;
    }, "strip", z.ZodTypeAny, {
        type: "Polygon";
        coordinates: [number, number][][];
    }, {
        type: "Polygon";
        coordinates: [number, number][][];
    }>, z.ZodObject<{
        type: z.ZodLiteral<"MultiPolygon">;
        coordinates: z.ZodArray<z.ZodArray<z.ZodEffects<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, "many">, [number, number][], [number, number][]>, "many">, "many">;
    }, "strip", z.ZodTypeAny, {
        type: "MultiPolygon";
        coordinates: [number, number][][][];
    }, {
        type: "MultiPolygon";
        coordinates: [number, number][][][];
    }>, z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, "many">]>>;
    filters: z.ZodOptional<z.ZodUnion<[z.ZodType<FilterTernary, z.ZodTypeDef, FilterTernary>, z.ZodUnion<[z.ZodTuple<[z.ZodUnion<[z.ZodString, z.ZodNull]>, z.ZodEnum<["in", "ni"]>, z.ZodUnion<[z.ZodArray<z.ZodUnion<[z.ZodNumber, z.ZodString, z.ZodBoolean, z.ZodNull]>, "many">, z.ZodNull]>], null>, z.ZodTuple<[z.ZodUnion<[z.ZodString, z.ZodNull]>, z.ZodEnum<["lt", "gt", "le", "ge", "eq", "ne", "cn", "nc", "is", "isnt"]>, z.ZodUnion<[z.ZodNumber, z.ZodString, z.ZodBoolean, z.ZodNull]>], null>]>, z.ZodNull, z.ZodBoolean]>>;
    /**
     * Configuration for filtering and aggregating values while preserving the full set of
     * bin ranges in the results.
     *
     * This is particularly useful when you want to compare different subsets of data while
     * maintaining consistent ranges. For example:
     *
     * - Use the same height ranges for comparing old vs new buildings
     *
     * Unlike top-level filters which affect both what ranges appear AND their values,
     * filters in this configuration only affect the values while keeping all possible
     * ranges in the results.
     */
    values: z.ZodOptional<z.ZodObject<{
        boundary: z.ZodOptional<z.ZodUnion<[z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>, z.ZodObject<{
            type: z.ZodLiteral<"Polygon">;
            coordinates: z.ZodArray<z.ZodEffects<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, "many">, [number, number][], [number, number][]>, "many">;
        }, "strip", z.ZodTypeAny, {
            type: "Polygon";
            coordinates: [number, number][][];
        }, {
            type: "Polygon";
            coordinates: [number, number][][];
        }>, z.ZodObject<{
            type: z.ZodLiteral<"MultiPolygon">;
            coordinates: z.ZodArray<z.ZodArray<z.ZodEffects<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, "many">, [number, number][], [number, number][]>, "many">, "many">;
        }, "strip", z.ZodTypeAny, {
            type: "MultiPolygon";
            coordinates: [number, number][][][];
        }, {
            type: "MultiPolygon";
            coordinates: [number, number][][][];
        }>, z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, "many">]>>;
        filters: z.ZodOptional<z.ZodUnion<[z.ZodType<FilterTernary, z.ZodTypeDef, FilterTernary>, z.ZodUnion<[z.ZodTuple<[z.ZodUnion<[z.ZodString, z.ZodNull]>, z.ZodEnum<["in", "ni"]>, z.ZodUnion<[z.ZodArray<z.ZodUnion<[z.ZodNumber, z.ZodString, z.ZodBoolean, z.ZodNull]>, "many">, z.ZodNull]>], null>, z.ZodTuple<[z.ZodUnion<[z.ZodString, z.ZodNull]>, z.ZodEnum<["lt", "gt", "le", "ge", "eq", "ne", "cn", "nc", "is", "isnt"]>, z.ZodUnion<[z.ZodNumber, z.ZodString, z.ZodBoolean, z.ZodNull]>], null>]>, z.ZodNull, z.ZodBoolean]>>;
        aggregation: z.ZodOptional<z.ZodObject<{
            /**
             * The operation to use on the values from the features in the layer
             */
            method: z.ZodEnum<["avg", "max", "min", "sum", "median"]>;
            /**
             * The attribute to use for the aggregation. This must be a numeric attribute.
             */
            attribute: z.ZodString;
        }, "strip", z.ZodTypeAny, {
            attribute: string;
            method: "avg" | "max" | "min" | "sum" | "median";
        }, {
            attribute: string;
            method: "avg" | "max" | "min" | "sum" | "median";
        }>>;
    }, "strip", z.ZodTypeAny, {
        filters?: boolean | FilterTernary | [string | null, "in" | "ni", (string | number | boolean | null)[] | null] | [string | null, "lt" | "gt" | "le" | "ge" | "eq" | "ne" | "cn" | "nc" | "is" | "isnt", string | number | boolean | null] | null | undefined;
        boundary?: [number, number, number, number] | [number, number][] | {
            type: "Polygon";
            coordinates: [number, number][][];
        } | {
            type: "MultiPolygon";
            coordinates: [number, number][][][];
        } | undefined;
        aggregation?: {
            attribute: string;
            method: "avg" | "max" | "min" | "sum" | "median";
        } | undefined;
    }, {
        filters?: boolean | FilterTernary | [string | null, "in" | "ni", (string | number | boolean | null)[] | null] | [string | null, "lt" | "gt" | "le" | "ge" | "eq" | "ne" | "cn" | "nc" | "is" | "isnt", string | number | boolean | null] | null | undefined;
        boundary?: [number, number, number, number] | [number, number][] | {
            type: "Polygon";
            coordinates: [number, number][][];
        } | {
            type: "MultiPolygon";
            coordinates: [number, number][][][];
        } | undefined;
        aggregation?: {
            attribute: string;
            method: "avg" | "max" | "min" | "sum" | "median";
        } | undefined;
    }>>;
}, "strip", z.ZodTypeAny, {
    attribute: string;
    layerId: string;
    steps: number[] | {
        type: "equal-intervals";
        count: number;
    } | {
        type: "time-interval";
        interval: "hour" | "day" | "week" | "month" | "year";
    };
    values?: {
        filters?: boolean | FilterTernary | [string | null, "in" | "ni", (string | number | boolean | null)[] | null] | [string | null, "lt" | "gt" | "le" | "ge" | "eq" | "ne" | "cn" | "nc" | "is" | "isnt", string | number | boolean | null] | null | undefined;
        boundary?: [number, number, number, number] | [number, number][] | {
            type: "Polygon";
            coordinates: [number, number][][];
        } | {
            type: "MultiPolygon";
            coordinates: [number, number][][][];
        } | undefined;
        aggregation?: {
            attribute: string;
            method: "avg" | "max" | "min" | "sum" | "median";
        } | undefined;
    } | undefined;
    filters?: boolean | FilterTernary | [string | null, "in" | "ni", (string | number | boolean | null)[] | null] | [string | null, "lt" | "gt" | "le" | "ge" | "eq" | "ne" | "cn" | "nc" | "is" | "isnt", string | number | boolean | null] | null | undefined;
    boundary?: [number, number, number, number] | [number, number][] | {
        type: "Polygon";
        coordinates: [number, number][][];
    } | {
        type: "MultiPolygon";
        coordinates: [number, number][][][];
    } | undefined;
}, {
    attribute: string;
    layerId: string;
    steps: number[] | {
        type: "equal-intervals";
        count: number;
    } | {
        type: "time-interval";
        interval: "hour" | "day" | "week" | "month" | "year";
    };
    values?: {
        filters?: boolean | FilterTernary | [string | null, "in" | "ni", (string | number | boolean | null)[] | null] | [string | null, "lt" | "gt" | "le" | "ge" | "eq" | "ne" | "cn" | "nc" | "is" | "isnt", string | number | boolean | null] | null | undefined;
        boundary?: [number, number, number, number] | [number, number][] | {
            type: "Polygon";
            coordinates: [number, number][][];
        } | {
            type: "MultiPolygon";
            coordinates: [number, number][][][];
        } | undefined;
        aggregation?: {
            attribute: string;
            method: "avg" | "max" | "min" | "sum" | "median";
        } | undefined;
    } | undefined;
    filters?: boolean | FilterTernary | [string | null, "in" | "ni", (string | number | boolean | null)[] | null] | [string | null, "lt" | "gt" | "le" | "ge" | "eq" | "ne" | "cn" | "nc" | "is" | "isnt", string | number | boolean | null] | null | undefined;
    boundary?: [number, number, number, number] | [number, number][] | {
        type: "Polygon";
        coordinates: [number, number][][];
    } | {
        type: "MultiPolygon";
        coordinates: [number, number][][][];
    } | undefined;
}>;
/**
 * The params used to request a histogram of values from a layer, passed to
 * the {@link LayersController.getHistogramData} method.
 *
 * @group Stats
 */
interface GetLayerHistogramParams extends zInfer<typeof GetLayerHistogramParamsSchema> {
    /**
     * Attribute filters for the features to include when calculating the histogram bins.
     */
    filters?: Filters;
    /**
     * The spatial boundary for the features to include when calculating the histogram bins.
     */
    boundary?: GeometryFilter;
}
declare const GetLayerHistogramBinSchema: z.ZodObject<{
    /**
     * The left edge of the bin.
     */
    min: z.ZodNumber;
    /**
     * The right edge of the bin.
     */
    max: z.ZodNumber;
    /**
     * The number of features in the bin.
     */
    value: z.ZodNumber;
}, "strip", z.ZodTypeAny, {
    value: number;
    max: number;
    min: number;
}, {
    value: number;
    max: number;
    min: number;
}>;
/**
 * One bin from the response from the {@link LayersController.getHistogramData} method.
 *
 * @group Stats
 */
interface GetLayerHistogramBin extends zInfer<typeof GetLayerHistogramBinSchema> {
}
declare const GetLayerCalculationParamsSchema: z.ZodObject<{
    /**
     * The ID of the layer to calculate an aggregate value for.
     */
    layerId: z.ZodString;
    boundary: z.ZodOptional<z.ZodUnion<[z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>, z.ZodObject<{
        type: z.ZodLiteral<"Polygon">;
        coordinates: z.ZodArray<z.ZodEffects<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, "many">, [number, number][], [number, number][]>, "many">;
    }, "strip", z.ZodTypeAny, {
        type: "Polygon";
        coordinates: [number, number][][];
    }, {
        type: "Polygon";
        coordinates: [number, number][][];
    }>, z.ZodObject<{
        type: z.ZodLiteral<"MultiPolygon">;
        coordinates: z.ZodArray<z.ZodArray<z.ZodEffects<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, "many">, [number, number][], [number, number][]>, "many">, "many">;
    }, "strip", z.ZodTypeAny, {
        type: "MultiPolygon";
        coordinates: [number, number][][][];
    }, {
        type: "MultiPolygon";
        coordinates: [number, number][][][];
    }>, z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, "many">]>>;
    filters: z.ZodOptional<z.ZodUnion<[z.ZodType<FilterTernary, z.ZodTypeDef, FilterTernary>, z.ZodUnion<[z.ZodTuple<[z.ZodUnion<[z.ZodString, z.ZodNull]>, z.ZodEnum<["in", "ni"]>, z.ZodUnion<[z.ZodArray<z.ZodUnion<[z.ZodNumber, z.ZodString, z.ZodBoolean, z.ZodNull]>, "many">, z.ZodNull]>], null>, z.ZodTuple<[z.ZodUnion<[z.ZodString, z.ZodNull]>, z.ZodEnum<["lt", "gt", "le", "ge", "eq", "ne", "cn", "nc", "is", "isnt"]>, z.ZodUnion<[z.ZodNumber, z.ZodString, z.ZodBoolean, z.ZodNull]>], null>]>, z.ZodNull, z.ZodBoolean]>>;
    aggregation: z.ZodObject<{
        /**
         * The operations to use on the values from the features in the layer
         */
        methods: z.ZodArray<z.ZodUnion<[z.ZodEnum<["avg", "max", "min", "sum", "median"]>, z.ZodLiteral<"count">]>, "many">;
        /**
         * The attribute to use for the aggregation. This must be a numeric attribute.
         */
        attribute: z.ZodOptional<z.ZodString>;
    }, "strip", z.ZodTypeAny, {
        methods: ("avg" | "max" | "min" | "sum" | "median" | "count")[];
        attribute?: string | undefined;
    }, {
        methods: ("avg" | "max" | "min" | "sum" | "median" | "count")[];
        attribute?: string | undefined;
    }>;
}, "strip", z.ZodTypeAny, {
    layerId: string;
    aggregation: {
        methods: ("avg" | "max" | "min" | "sum" | "median" | "count")[];
        attribute?: string | undefined;
    };
    filters?: boolean | FilterTernary | [string | null, "in" | "ni", (string | number | boolean | null)[] | null] | [string | null, "lt" | "gt" | "le" | "ge" | "eq" | "ne" | "cn" | "nc" | "is" | "isnt", string | number | boolean | null] | null | undefined;
    boundary?: [number, number, number, number] | [number, number][] | {
        type: "Polygon";
        coordinates: [number, number][][];
    } | {
        type: "MultiPolygon";
        coordinates: [number, number][][][];
    } | undefined;
}, {
    layerId: string;
    aggregation: {
        methods: ("avg" | "max" | "min" | "sum" | "median" | "count")[];
        attribute?: string | undefined;
    };
    filters?: boolean | FilterTernary | [string | null, "in" | "ni", (string | number | boolean | null)[] | null] | [string | null, "lt" | "gt" | "le" | "ge" | "eq" | "ne" | "cn" | "nc" | "is" | "isnt", string | number | boolean | null] | null | undefined;
    boundary?: [number, number, number, number] | [number, number][] | {
        type: "Polygon";
        coordinates: [number, number][][];
    } | {
        type: "MultiPolygon";
        coordinates: [number, number][][][];
    } | undefined;
}>;
/**
 * The parameters for calculating a single aggregate value for a layer, passed to
 * the {@link LayersController.getAggregates} method.
 *
 * @group Stats
 */
interface GetLayerCalculationParams<T extends AggregationMethod | "count"> extends z.infer<typeof GetLayerCalculationParamsSchema> {
    /**
     * Attribute filters for the features to include when calculating the aggregate value.
     */
    filters?: Filters;
    /**
     * The spatial boundary for the features to include when calculating the aggregate value.
     */
    boundary?: GeometryFilter;
    /**
     * Specifies how to aggregate values within each category or bin. When omitted,
     * features are counted. When specified, the chosen calculation (avg, sum, etc.)
     * is performed on the specified attribute.
     */
    aggregation: MultiAggregationConfig<T>;
}
declare const GridTypeSchema: z.ZodEnum<["h3"]>;
/**
 * The type of grid to use for precomputed aggregate values.
 *
 * @group Stats
 */
type GridType = z.infer<typeof GridTypeSchema>;
declare const CountGridConfigSchema: z.ZodObject<{
    type: z.ZodEnum<["h3"]>;
    /**
     * The resolution of the grid to use for the precomputed calculation.
     */
    resolution: z.ZodNumber;
    method: z.ZodEnum<["count"]>;
}, "strip", z.ZodTypeAny, {
    type: "h3";
    method: "count";
    resolution: number;
}, {
    type: "h3";
    method: "count";
    resolution: number;
}>;
/**
 * The grid configuration for a count-based precomputed aggregate value. Compared to the
 * {@link AggregatedGridConfig}, the `attribute` property is not required, because the count
 * is the same regardless of the attribute.
 *
 * Used inside {@link GetLayerPrecomputedCalculationParams}.
 *
 * @group Stats
 */
interface CountGridConfig extends zInfer<typeof CountGridConfigSchema> {
    /**
     * The type of grid to use for the precomputed calculation.
     */
    type: GridType;
    /**
     * The method to use for the precomputed calculation, which in this case is always "count".
     */
    method: Extract<PrecomputedAggregationMethod, "count">;
}
declare const AggregatedGridConfigSchema: z.ZodObject<{
    type: z.ZodEnum<["h3"]>;
    /**
     * The resolution of the grid to use for the precomputed calculation.
     */
    resolution: z.ZodNumber;
    method: z.ZodEnum<["avg", "max", "min", "sum"]>;
    /**
     * The attribute to use for the precomputed calculation.
     *
     * This must be a numeric attribute;
     */
    attribute: z.ZodString;
}, "strip", z.ZodTypeAny, {
    type: "h3";
    attribute: string;
    method: "avg" | "max" | "min" | "sum";
    resolution: number;
}, {
    type: "h3";
    attribute: string;
    method: "avg" | "max" | "min" | "sum";
    resolution: number;
}>;
/**
 * The grid configuration for an aggregated precomputed aggregate value. This requires
 * an `attribute` property, because the numeric aggregation requires it.
 *
 * If you just want to count the features in each grid cell, use the {@link CountGridConfig}
 * instead, where you are not required to specify an `attribute`.
 *
 * Used inside {@link GetLayerPrecomputedCalculationParams}.
 *
 * @group Stats
 */
interface AggregatedGridConfig extends zInfer<typeof AggregatedGridConfigSchema> {
    /**
     * The type of grid to use for the precomputed calculation.
     */
    type: GridType;
    /**
     * The method to use for the precomputed calculation.
     */
    method: Exclude<PrecomputedAggregationMethod, "count">;
}
/**
 * Describes the type of grid to use for precomputed aggregate values.
 *
 * @group Stats
 */
type GridConfig = CountGridConfig | AggregatedGridConfig;
declare const GetLayerPrecomputedCalculationParamsSchema: z.ZodObject<{
    /**
     * The ID of the layer to calculate an aggregate value for.
     */
    layerId: z.ZodString;
    boundary: z.ZodOptional<z.ZodUnion<[z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>, z.ZodObject<{
        type: z.ZodLiteral<"Polygon">;
        coordinates: z.ZodArray<z.ZodEffects<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, "many">, [number, number][], [number, number][]>, "many">;
    }, "strip", z.ZodTypeAny, {
        type: "Polygon";
        coordinates: [number, number][][];
    }, {
        type: "Polygon";
        coordinates: [number, number][][];
    }>, z.ZodObject<{
        type: z.ZodLiteral<"MultiPolygon">;
        coordinates: z.ZodArray<z.ZodArray<z.ZodEffects<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, "many">, [number, number][], [number, number][]>, "many">, "many">;
    }, "strip", z.ZodTypeAny, {
        type: "MultiPolygon";
        coordinates: [number, number][][][];
    }, {
        type: "MultiPolygon";
        coordinates: [number, number][][][];
    }>, z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, "many">]>>;
    filters: z.ZodOptional<z.ZodUnion<[z.ZodType<FilterTernary, z.ZodTypeDef, FilterTernary>, z.ZodUnion<[z.ZodTuple<[z.ZodUnion<[z.ZodString, z.ZodNull]>, z.ZodEnum<["in", "ni"]>, z.ZodUnion<[z.ZodArray<z.ZodUnion<[z.ZodNumber, z.ZodString, z.ZodBoolean, z.ZodNull]>, "many">, z.ZodNull]>], null>, z.ZodTuple<[z.ZodUnion<[z.ZodString, z.ZodNull]>, z.ZodEnum<["lt", "gt", "le", "ge", "eq", "ne", "cn", "nc", "is", "isnt"]>, z.ZodUnion<[z.ZodNumber, z.ZodString, z.ZodBoolean, z.ZodNull]>], null>]>, z.ZodNull, z.ZodBoolean]>>;
    /**
     * The type of grid to use for the precomputed calculation.
     */
    gridConfig: z.ZodUnion<[z.ZodObject<{
        type: z.ZodEnum<["h3"]>;
        /**
         * The resolution of the grid to use for the precomputed calculation.
         */
        resolution: z.ZodNumber;
        method: z.ZodEnum<["count"]>;
    }, "strip", z.ZodTypeAny, {
        type: "h3";
        method: "count";
        resolution: number;
    }, {
        type: "h3";
        method: "count";
        resolution: number;
    }>, z.ZodObject<{
        type: z.ZodEnum<["h3"]>;
        /**
         * The resolution of the grid to use for the precomputed calculation.
         */
        resolution: z.ZodNumber;
        method: z.ZodEnum<["avg", "max", "min", "sum"]>;
        /**
         * The attribute to use for the precomputed calculation.
         *
         * This must be a numeric attribute;
         */
        attribute: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        type: "h3";
        attribute: string;
        method: "avg" | "max" | "min" | "sum";
        resolution: number;
    }, {
        type: "h3";
        attribute: string;
        method: "avg" | "max" | "min" | "sum";
        resolution: number;
    }>]>;
}, "strip", z.ZodTypeAny, {
    layerId: string;
    gridConfig: {
        type: "h3";
        method: "count";
        resolution: number;
    } | {
        type: "h3";
        attribute: string;
        method: "avg" | "max" | "min" | "sum";
        resolution: number;
    };
    filters?: boolean | FilterTernary | [string | null, "in" | "ni", (string | number | boolean | null)[] | null] | [string | null, "lt" | "gt" | "le" | "ge" | "eq" | "ne" | "cn" | "nc" | "is" | "isnt", string | number | boolean | null] | null | undefined;
    boundary?: [number, number, number, number] | [number, number][] | {
        type: "Polygon";
        coordinates: [number, number][][];
    } | {
        type: "MultiPolygon";
        coordinates: [number, number][][][];
    } | undefined;
}, {
    layerId: string;
    gridConfig: {
        type: "h3";
        method: "count";
        resolution: number;
    } | {
        type: "h3";
        attribute: string;
        method: "avg" | "max" | "min" | "sum";
        resolution: number;
    };
    filters?: boolean | FilterTernary | [string | null, "in" | "ni", (string | number | boolean | null)[] | null] | [string | null, "lt" | "gt" | "le" | "ge" | "eq" | "ne" | "cn" | "nc" | "is" | "isnt", string | number | boolean | null] | null | undefined;
    boundary?: [number, number, number, number] | [number, number][] | {
        type: "Polygon";
        coordinates: [number, number][][];
    } | {
        type: "MultiPolygon";
        coordinates: [number, number][][][];
    } | undefined;
}>;
/**
 * The parameters for calculating a single aggregate value for a layer, passed to
 * the {@link LayersController.getPrecomputedAggregates} method.
 *
 * @group Stats
 */
interface GetLayerPrecomputedCalculationParams extends z.infer<typeof GetLayerPrecomputedCalculationParamsSchema> {
    /**
     * Attribute filters for the features to include when calculating the aggregate value.
     */
    filters?: Filters;
    /**
     * The spatial boundary for the features to include when calculating the aggregate value.
     */
    boundary?: GeometryFilter;
    /**
     * The grid configuration to use for the precomputed calculation.
     */
    gridConfig: GridConfig;
}

/**
 * The Layers controller allows you to get information about the layers on the
 * map, and make changes to their visibility.
 *
 * Layers can be organised into groups, and their groups can also have their
 * visibility toggled.
 *
 * @group Controller
 * @public
 */
interface LayersController {
    /**
     * Get a single layer from the map by its id.
     *
     * @example
     * ```typescript
     * const layer = await felt.getLayer("layer-1");
     * ```
     * @returns The requested layer.
     */
    getLayer(
    /**
     * The id of the layer you want to get.
     */
    id: string): Promise<Layer | null>;
    /**
     * Gets layers from the map, according to the constraints supplied. If no
     * constraints are supplied, all layers will be returned.
     *
     * @remarks The layers in the map, ordered by the order specified in Felt. This is not
     * necessarily the order that they are drawn in, as Felt draws points above
     * lines and lines above polygons, for instance.
     *
     * @example
     * ```typescript
     * const layers = await felt.getLayers();
     * ```
     * @returns All layers on the map.
     */
    getLayers(
    /**
     * The constraints to apply to the layers returned from the map.
     */
    constraint?: GetLayersConstraint): Promise<Array<Layer | null>>;
    /**
     * Hide or show layers with the given ids.
     *
     * @example
     * ```typescript
     * felt.setLayerVisibility({ show: ["layer-1", "layer-2"], hide: ["layer-3"] });
     * ```
     */
    setLayerVisibility(visibility: SetVisibilityRequest): Promise<void>;
    /**
     * Set the style for a layer using FSL, the Felt Style Language.
     *
     * Changes are only for this session, and not persisted. This is useful to make
     * temporary changes to a layer's style, such as to highlight a particular layer
     * or feature.
     *
     * See the [FSL documentation](https://developers.felt.com/felt-style-language) for details
     * on how to read and write styles.
     *
     * If the style you set is invalid, you will receive an error explaining the problem
     * in the rejected promise value.
     *
     * @example
     * ```typescript
     * // first get the current style
     * const oldStyle = (await felt.getLayer("layer-1")).style;
     *
     * await felt.setLayerStyle({ id: "layer-1", style: {
     *   ...oldStyle,
     *   paint: {
     *     ...oldStyle.paint,
     *     color: "red",
     *   },
     * } });
     * ```
     */
    setLayerStyle(params: {
        /**
         * The id of the layer to set the style for.
         */
        id: string;
        /**
         * The style to set for the layer.
         */
        style: object;
    }): Promise<void>;
    /**
     * Hide or show layers with the given ids from the legend.
     *
     * @example
     * ```typescript
     * felt.setLayerLegendVisibility({ show: ["layer-1", "layer-2"], hide: ["layer-3"] });
     * ```
     */
    setLayerLegendVisibility(params: SetVisibilityRequest): Promise<void>;
    /**
     * Adds a listener for when a layer changes.
     *
     * @returns A function to unsubscribe from the listener
     *
     * @event
     * @example
     * ```typescript
     * const unsubscribe = felt.onLayerChange({
     *   options: { id: "layer-1" },
     *   handler: ({layer}) => console.log(layer.bounds),
     * });
     *
     * // later on...
     * unsubscribe();
     * ```
     */
    onLayerChange(args: {
        options: {
            /**
             * The id of the layer to listen for changes to.
             */
            id: string;
        };
        /**
         * The handler that is called when the layer changes.
         */
        handler: (
        /**
         * An object describing the change that occurred.
         */
        change: LayerChangeCallbackParams) => void;
    }): VoidFunction;
    /**
     * Adds layers to the map from file or URL sources.
     *
     * @remarks This allows you to add temporary layers to the map that don't depend on
     * any processing by Felt. This is useful for viewing data from external sources or
     * remote files.
     *
     * @returns The layer groups that were created.
     *
     * @example
     * ```typescript
     * const layerFromFile = await felt.createLayersFromGeoJson({
     *   source: {
     *     type: "geoJsonFile",
     *     file: someFile,
     *   },
     *   name: "Parcels",
     * });
     *
     * const layerFromUrl = await felt.createLayersFromGeoJson({
     *   source: {
     *     type: "geoJsonUrl",
     *     url: "https://example.com/parcels.geojson",
     *   },
     *   name: "Parcels",
     * ```
     */
    createLayersFromGeoJson(params: CreateLayersFromGeoJsonParams): Promise<{
        /**
         * The layer group that was created containing the created layers.
         */
        layerGroup: LayerGroup;
        /**
         * The layers that were created from the source.
         */
        layers: Array<Layer>;
    } | null>;
    /**
     * Update a layer by passing a subset of the layer's properties.
     *
     * Note that not all properties can be updated, so check the {@link UpdateLayerParams}
     * type to see which properties can be updated.
     *
     * @example
     * ```typescript
     * await felt.updateLayer({
     *   id: "layer-1",
     *   name: "My Layer",
     *   caption: "A description of the layer",
     * });
     * ```
     */
    updateLayer(params: UpdateLayerParams): Promise<Layer>;
    /**
     * Delete a layer from the map by its id.
     *
     * @remarks This only works for layers created via the SDK `createLayersFromGeoJson` method, not layers added via the Felt UI.
     *
     * @example
     * ```typescript
     * await felt.deleteLayer("layer-1");
     * ```
     */
    deleteLayer(id: string): Promise<void>;
    /**
     * Duplicate a layer from the map by its id.
     *
     * @remarks This will create an ephemeral copy of the layer, just for the duration of the session. The duplicated layer will not be persisted to the map.
     *
     * @example
     * ```typescript
     * const duplicatedLayer = await felt.duplicateLayer("layer-1");
     * ```
     * @returns The duplicated layer.
     */
    duplicateLayer(id: string): Promise<Layer>;
    /**
     * Get a layer group from the map by its id.
     *
     * @example
     * ```typescript
     * const layerGroup = await felt.getLayerGroup("layer-group-1");
     * ```
     * @returns The requested layer group.
     */
    getLayerGroup(id: string): Promise<LayerGroup | null>;
    /**
     * Gets layer groups from the map, according to the constraints supplied. If no
     * constraints are supplied, all layer groups will be returned in rendering order.
     *
     * @example
     * ```typescript
     * const layerGroups = await felt.getLayerGroups({ ids: ["layer-group-1", "layer-group-2"] });
     * ```
     * @returns The requested layer groups.
     */
    getLayerGroups(
    /**
     * The constraints to apply to the layer groups returned from the map.
     */
    constraint?: GetLayerGroupsConstraint): Promise<Array<LayerGroup | null>>;
    /**
     * Hide or show layer groups with the given ids.
     *
     * @example
     * ```typescript
     * felt.setLayerGroupVisibility({ show: ["layer-group-1", "layer-group-2"], hide: ["layer-group-3"] });
     * ```
     */
    setLayerGroupVisibility(visibility: SetVisibilityRequest): Promise<void>;
    /**
     * Hide or show layer groups with the given ids from the legend.
     *
     * @example
     * ```typescript
     * felt.setLayerGroupLegendVisibility({ show: ["layer-1", "layer-2"], hide: ["layer-3"] });
     * ```
     */
    setLayerGroupLegendVisibility(params: SetVisibilityRequest): Promise<void>;
    /**
     * Adds a listener for when a layer group changes.
     *
     * @returns A function to unsubscribe from the listener
     *
     * @event
     * @example
     * ```typescript
     * const unsubscribe = felt.onLayerGroupChange({
     *   options: { id: "layer-group-1" },
     *   handler: ({layerGroup}) => console.log(layerGroup.id),
     * });
     *
     * // later on...
     * unsubscribe();
     * ```
     */
    onLayerGroupChange(args: {
        options: {
            id: string;
        };
        handler: (change: LayerGroupChangeCallbackParams) => void;
    }): VoidFunction;
    /**
     * Allows you to get the state of a single legend item.
     *
     * @example
     * ```typescript
     * const legendItem = await felt.getLegendItem({
     *   id: "legend-item-1",
     *   layerId: "layer-1",
     * })
     * ```
     */
    getLegendItem(id: LegendItemIdentifier): Promise<LegendItem | null>;
    /**
     * Allows you to obtain the state of several legend items, by passing in
     * constraints describing which legend items you want.
     *
     * If you do not pass any constraints, you will receive all legend items.
     *
     * @example
     * ```typescript
     * const legendItems = await felt.getLegendItems({layerId: "layer-1"});
     * ```
     */
    getLegendItems(constraint?: LegendItemsConstraint): Promise<Array<LegendItem | null>>;
    /**
     * Hide or show legend items with the given identifiers.
     *
     * @example
     * ```typescript
     * felt.setLegendItemVisibility({
     *   show: [{layerId: "layer-group-1", id: "item-1-0"}],
     *   hide: [{layerId: "layer-group-2", id: "item-2-0"}],
     * })
     * ```
     */
    setLegendItemVisibility(visibility: {
        show?: Array<LegendItemIdentifier>;
        hide?: Array<LegendItemIdentifier>;
    }): Promise<void>;
    /**
     * Adds a listener for when a legend item changes.
     *
     * @returns A function to unsubscribe from the listener
     *
     * @event
     * @example
     * ```typescript
     * const unsubscribe = felt.onLegendItemChange({
     *   options: { layerId: "layer-1", id: "item-1-0" },
     *   handler: ({legendItem}) => console.log(legendItem.visible),
     * });
     *
     * // later on...
     * unsubscribe();
     * ```
     */
    onLegendItemChange(args: {
        options: LegendItemIdentifier;
        handler: (change: LegendItemChangeCallbackParams) => void;
    }): VoidFunction;
    /**
     * Get the filters for a layer.
     *
     * @remarks
     * The return type gives you the filters split up into the various sources
     * that make up the overall filters for a layer.
     *
     * @example
     * ```typescript
     * const filters = await felt.getLayerFilters("layer-1");
     * console.log(filters.combined, filters.style, filters.ephemeral, filters.components);
     * ```
     */
    getLayerFilters(layerId: string): Promise<LayerFilters | null>;
    /**
     * Sets the **ephemeral** filters for a layer.
     *
     * @example
     * ```typescript
     * await felt.setLayerFilters({
     *   layerId: "layer-1",
     *   filters: ["AREA", "gt", 30_000],
     * });
     * ```
     */
    setLayerFilters(params: {
        /**
         * The layer that you want to set the filters for.
         */
        layerId: string;
        /**
         * The filters to set for the layer. This will replace any ephemeral filters
         * that are currently set for the layer.
         */
        filters: Filters;
        /**
         * A note to display on the layer legend when this filter is applied. When the
         * note is shown, a reset button will also be shown, allowing the user to clear
         * the filter.
         */
        note?: string;
    }): Promise<void>;
    /**
     * Adds a listener for when a layer's filters change.
     *
     * @returns A function to unsubscribe from the listener
     *
     * @remarks
     * This event fires whenever any type of filter changes on the layer, including
     * ephemeral filters set via the SDK, style-based filters, or filters set through
     * the Felt UI via Components.
     *
     * @event
     * @example
     * ```typescript
     * const unsubscribe = felt.onLayerFiltersChange({
     *   options: { layerId: "layer-1" },
     *   handler: ({combined, ephemeral, style, components}) => {
     *     console.log("Layer filters updated:", {
     *       combined,  // All filters combined
     *       ephemeral, // Filters set via SDK
     *       style,     // Filters from layer style
     *       components // Filters from UI components
     *     });
     *   },
     * });
     *
     * // later on...
     * unsubscribe();
     * ```
     */
    onLayerFiltersChange(params: {
        options: {
            layerId: string;
        };
        handler: (change: LayerFilters) => void;
    }): VoidFunction;
    /**
     * Get the spatial boundaries that are filtering a layer.
     *
     * @remarks
     * The return type gives you the boundaries split up into the various sources
     * that make up the overall boundary for a layer.
     *
     * The combined boundary is the intersection of the other sources of boundaries.
     *
     * @example
     * ```typescript
     * const boundaries = await felt.getLayerBoundaries("layer-1");
     *
     * console.log(boundaries?.combined);
     * console.log(boundaries?.spatialFilters);
     * console.log(boundaries?.ephemeral);
     * ```
     */
    getLayerBoundaries(layerId: string): Promise<LayerBoundaries | null>;
    /**
     * Set the {@link LayerBoundaries.ephemeral | `ephemeral`} boundary for one or more layers.
     *
     * @example
     * ```typescript
     * await felt.setLayerBoundary({
     *   layerIds: ["layer-1", "layer-2"],
     *   boundary: { type: "MultiPolygon", coordinates: [[[100, 0], [101, 0], [101, 1], [100, 1], [100, 0]]] }
     * });
     * ```
     */
    setLayerBoundary(params: {
        /**
         * The ids of the layers to set the boundary for.
         */
        layerIds: Array<string>;
        /**
         * The boundary to set for the layer.
         *
         * Passing `null` clears the ephemeral boundary for the layer.
         */
        boundary: GeometryFilter | null;
    }): Promise<void>;
    /**
     * Adds a listener for when a layer's spatial boundaries change.
     *
     * @returns A function to unsubscribe from the listener
     *
     * @remarks
     * This event fires whenever any type of spatial boundary changes on the layer, including
     * ephemeral boundaries set via the SDK or boundaries set through the Felt UI via
     * Spatial filter components.
     *
     * @event
     * @example
     * ```typescript
     * const unsubscribe = felt.onLayerBoundariesChange({
     *   options: { layerId: "layer-1" },
     *   handler: ({combined, ephemeral, spatialFilters}) => {
     *     console.log("Layer boundaries updated:", {
     *       combined,  // All boundaries combined
     *       ephemeral, // Boundaries set via SDK
     *       spatialFilters // Boundaries set via UI
     *     });
     *   },
     * });
     *
     * // later on...
     * unsubscribe();
     * ```
     */
    onLayerBoundariesChange(params: {
        options: {
            /**
             * The id of the layer to listen for boundary changes on.
             */
            layerId: string;
        };
        /**
         * A function that is called when the boundaries change.
         *
         * @param boundaries - The new boundaries for the layer.
         */
        handler: (boundaries: LayerBoundaries | null) => void;
    }): VoidFunction;
    /**
     * Get the features that are currently **rendered** on the map in the viewport.
     *
     * Note that this is explicitly about the features that are rendered, which isn't
     * necessarily a complete list of all the features in the viewport. This is because
     * of the way features are tiled: at low zoom levels or high feature densities, many
     * features are omitted from what is rendered on the screen.
     *
     * @example
     * ```typescript
     * const features = await felt.getRenderedFeatures();
     * ```
     */
    getRenderedFeatures(
    /**
     * The constraints to apply to the features returned from the map.
     */
    params?: GetRenderedFeaturesConstraint): Promise<Array<LayerFeature>>;
    /**
     * Get a feature from the map by its ID and layer ID.
     *
     * The response is a {@link LayerFeature} object, which does not include the
     * geometry of the feature.
     *
     * You may want to use this when you don't need the geometry of a feature,
     * but you know the ID of the feature you need.
     *
     * @example
     * ```typescript
     * const feature = await felt.getFeature({ layerId: "layer-1", id: 123 });
     * ```
     */
    getFeature(params: {
        id: string | number;
        layerId: string;
    }): Promise<LayerFeature | null>;
    /**
     * Get a list of layer features.
     *
     * @remarks This list is paginated in sets of 20 features for each page. In order to paginate
     * between pages, the response includes `previousPage` and `nextPage` that are tokens
     * that should be sent in the `pagination` params for requesting sibling pages.
     *
     * Text search is case-insensitive and looks for matches across all feature properties.
     *
     * @returns
     * The response is an object which contains:
     *   - `features`: list of {@link LayerFeature} objects, which does not include
     * the geometry of the feature but it does include its bounding box.
     *   - `count`: the total number of features that match the query.
     *   - `previousPage` & `nextPage`: The tokens to pass in the `pagination` param
     * to navigate between pages.
     *
     * @example
     * ```typescript
     * const page1Response = await felt.getFeatures({
     *   layerId: "layer-1",
     *   search: "abc123",
     *   pagination: undefined,
     * });
     *
     * // Note that the search term here matches the one for the first page.
     * if (page1Response.nextPage) {
     *   const page2Response = await felt.getFeatures({
     *     layerId: "layer-1",
     *     search: "abc123",
     *     pagination: page1Response.nextPage,
     *   });
     * }
     * ```
     */
    getFeatures(params: {
        /**
         * The ID of the layer to get features from.
         */
        layerId: string;
        /**
         * Filters to be applied. These filters will merge with layer's own filters.
         */
        filters?: Filters;
        /**
         * Attribute to sort by.
         */
        sorting?: SortConfig;
        /**
         * The spatial boundary to be applied.
         */
        boundary?: GeometryFilter;
        /**
         * Search term to search by.
         *
         * Search is case-insensitive and looks for matches across all feature properties.
         */
        search?: string;
        /**
         * Pagination token. It comes from either the `previousPage` or `nextPage`
         * properties of the previous response.
         */
        pagination?: string | null;
        /**
         * The number of features to return per page. Defaults to 20.
         * Note: The larger the page size, the longer this is likely to take to respond.
         *
         */
        pageSize?: number;
        /**
         * The attributes to select from the features. If not provided, all attributes will be returned. If you set this to an empty array, no attributes will be returned.
         */
        select?: string[];
    }): Promise<{
        /**
         * The list of features returned from the query.
         */
        features: LayerFeature[];
        /**
         * The total number of features that match the query.
         */
        count: number;
        /**
         * The pagination token to get the previous page of features.
         */
        previousPage: string | null;
        /**
         * The pagination token to get the next page of features.
         */
        nextPage: string | null;
    }>;
    /**
     * Get a feature in GeoJSON format from the map by its ID and layer ID.
     *
     * The response is a GeoJSON Feature object with the complete geometry of the
     * feature. Note that for some _very_ large geometries, the response may take a
     * long time to return, and may return a very large object.
     *
     * @example
     * ```typescript
     * const feature = await felt.getGeoJsonFeature({ layerId: "layer-1", id: 123 });
     * ```
     */
    getGeoJsonFeature(params: {
        id: string | number;
        layerId: string;
    }): Promise<GeoJsonFeature | null>;
    /**
     * Gets values from a layer grouped by a given attribute.
     *
     * @remarks
     * Groups features in your layer by unique values in the specified attribute and calculates
     * a value for each group. By default, this value is the count of features in each group.
     *
     * You can apply filters in two ways:
     * 1. At the top level (using `boundary` and `filters`), which affects both what categories
     *    are included and how values are calculated
     * 2. In the `values` configuration, which only affects the values but keeps all categories
     *
     * This two-level filtering is particularly useful when you want to compare subsets of data
     * while maintaining consistent categories. For example, you might want to show the distribution
     * of all building types in a city, but only count buildings built after 2000 in each category.
     *
     * @example
     * ```typescript
     * // Basic grouping: Count of buildings by type
     * const buildingsByType = await felt.getCategoryData({
     *   layerId: "buildings",
     *   attribute: "type"
     * });
     *
     * // Filtered grouping: Only count buildings in downtown
     * const downtownBuildingsByType = await felt.getCategoryData({
     *   layerId: "buildings",
     *   attribute: "type",
     *   boundary: [-122.43, 47.60, -122.33, 47.62]  // downtown boundary
     * });
     *
     * // Advanced: Show all building types, but only sum floor area of recent buildings
     * const recentBuildingAreaByType = await felt.getCategoryData({
     *   layerId: "buildings",
     *   attribute: "type",
     *   values: {
     *     filters: ["year_built", "gte", 2000],
     *     aggregation: {
     *       method: "sum",
     *       attribute: "floor_area"
     *     }
     *   }
     * });
     *
     * // Compare residential density across neighborhoods while only counting recent buildings
     * const newBuildingDensityByNeighborhood = await felt.getCategoryData({
     *   layerId: "buildings",
     *   attribute: "neighborhood",
     *   values: {
     *     filters: ["year_built", "gte", 2000],
     *     aggregation: {
     *       method: "avg",
     *       attribute: "units_per_acre"
     *     }
     *   }
     * });
     * ```
     */
    getCategoryData(params: GetLayerCategoriesParams): Promise<Array<GetLayerCategoriesGroup>>;
    /**
     * Gets a histogram of values from a layer for a given attribute.
     *
     * @remarks
     * Creates bins (ranges) for numeric data and counts how many features fall into each bin,
     * or returns aggregated values for each bin.
     *
     * You can control how the bins are created using the `steps` parameter, choosing from
     * several methods like equal intervals, quantiles, or natural breaks (Jenks), or passing
     * in the step values directly if you know how you want to bin the data.
     *
     * Like getCategoryData, you can apply filters in two ways:
     * 1. At the top level (using `boundary` and `filters`), which affects both how the bins
     *    are calculated and what features are counted in each bin
     * 2. In the `values` configuration, which only affects what gets counted but keeps the
     *    bin ranges the same
     *
     * This is particularly useful when you want to compare distributions while keeping
     * consistent bin ranges. For example, you might want to compare the distribution of
     * building heights in different years while using the same height ranges.
     *
     * @example
     * ```typescript
     * // Basic histogram: Building heights in 5 natural break bins
     * const buildingHeights = await felt.getHistogramData({
     *   layerId: "buildings",
     *   attribute: "height",
     *   steps: { type: "jenks", count: 5 }
     * });
     *
     * // Compare old vs new buildings using the same height ranges
     * const oldBuildingHeights = await felt.getHistogramData({
     *   layerId: "buildings",
     *   attribute: "height",
     *   steps: [0, 20, 50, 100, 200, 500],
     *   values: {
     *     filters: ["year_built", "lt", 1950]
     *   }
     * });
     *
     * const newBuildingHeights = await felt.getHistogramData({
     *   layerId: "buildings",
     *   attribute: "height",
     *   steps: [0, 20, 50, 100, 200, 500],  // Same ranges as above
     *   values: {
     *     filters: ["year_built", "gte", 1950]
     *   }
     * });
     * ```
     */
    getHistogramData(params: GetLayerHistogramParams): Promise<Array<GetLayerHistogramBin>>;
    /**
     * Calculates a single aggregate value for a layer based on the provided configuration.
     *
     * @remarks
     * Performs statistical calculations on your data, like counting features or computing
     * averages, sums, etc. You can focus your calculation on specific areas or subsets
     * of your data using boundaries and filters.
     *
     * When you request an aggregation other than count, you must specify an attribute to
     * aggregate on.
     *
     * @example
     * ```typescript
     * // Count all residential buildings
     * const residentialCount = await felt.getAggregates({
     *   layerId: "buildings",
     *   filters: ["type", "eq", "residential"],
     *   aggregation: {
     *     methods: ["count"],
     *   }
     * });
     *
     * // Calculate average home value in a specific neighborhood
     * const avgHomeValue = await felt.getAggregates({
     *   layerId: "buildings",
     *   boundary: [-122.43, 47.60, -122.33, 47.62],  // neighborhood boundary
     *   aggregation: {
     *     methods: ["avg"],
     *     attribute: "assessed_value"
     *   }
     * });
     *
     * // Find the maximum building height for buildings built after 2000
     * const maxNewBuildingHeight = await felt.getAggregates({
     *   layerId: "buildings",
     *   filters: ["year_built", "gte", 2000],
     *   aggregation: {
     *     methods: ["max"],
     *     attribute: "height"
     *   }
     * });
     * ```
     */
    getAggregates<T extends AggregationMethod | "count">(params: GetLayerCalculationParams<T>): Promise<Record<T, number | null>>;
    /**
     * Calculates aggregates for spatial cells of a layer.
     *
     * @remarks
     * Performs statistical calculations on spatial cells of a layer, returning min, max, avg, sum, and count. You can focus your calculation on specific areas or subsets
     * of your data using boundaries and filters. When using the count method, an attribute is not required.
     *
     * @example
     * ```typescript
     * const aggregates = await felt.getPrecomputedAggregates({
     *   layerId: "buildings",
     *   gridConfig: {
     *     type: "h3",
     *     resolution: 10,
     *     method: "avg",
     *     attribute: "assessed_value"
     *   },
     * });
     * ```
     */
    getPrecomputedAggregates(params: GetLayerPrecomputedCalculationParams): Promise<{
        avg: number | null;
        max: number | null;
        min: number | null;
        sum: number | null;
        count: number | null;
    }>;
    /**
     * Get the schema for a layer.
     *
     * @remarks
     * The schema describes the structure of the data in a layer, including the attributes
     * that are available on the features in the layer.
     *
     * This can be useful to build generic UIs that need to know the structure of the data in
     * a layer, such as a dropdown to choose an attribute.
     *
     * @example
     * ```typescript
     * const schema = await felt.getLayerSchema("layer-1");
     * const attributeIds = schema.attributes.map((attr) => attr.id);
     * ```
     */
    getLayerSchema(layerId: string): Promise<LayerSchema>;
}

/**
 * The event object passed to the interaction listeners.
 */
interface MapInteractionEvent {
    /**
     * The cursor position in world coordinates.
     */
    coordinate: LatLng;
    /**
     * The pixel coordinates of the mouse cursor, relative to the map and measured from the top left corner.
     */
    point: {
        x: number;
        y: number;
    };
    /**
     * The vector features that are under the cursor.
     */
    features: Array<LayerFeature>;
    /**
     * The raster pixel values that are under the cursor.
     */
    rasterValues: Array<RasterValue>;
}

/**
 * The Interactions controller allows you to observe interactions with the map
 *
 * @group Controller
 * @public
 */
interface InteractionsController {
    /**
     * Allows you to be notified when the user clicks on the map.
     *
     * Use this to react to user clicks on the map, such as triggering custom
     * actions or collecting interaction data.
     *
     * @returns A function to unsubscribe from the listener.
     *
     * @event
     * @example
     * ```typescript
     * const unsubscribe = felt.onPointerClick({
     *   handler: (event) => console.log(event.center, event.features),
     * });
     *
     * // later on...
     * unsubscribe();
     * ```
     */
    onPointerClick(params: {
        handler: (event: MapInteractionEvent) => void;
    }): VoidFunction;
    /**
     * Allows you to be notified when the user moves the mouse over the map.
     *
     * Use this to track mouse movement and detect features under the cursor,
     * such as for hover effects or real-time data display.
     *
     * @returns A function to unsubscribe from the listener.
     *
     * @event
     * @example
     * ```typescript
     * // Track mouse movement and features under cursor
     * const unsubscribe = felt.onPointerMove({
     *   handler: (event) => {
     *     console.log("Mouse position:", event.center);
     *     console.log("Features under cursor:", event.features);
     *   }
     * });
     *
     * // later on...
     * unsubscribe();
     * ```
     */
    onPointerMove(
    /**
     * Params for the listener
     */
    params: {
        /**
         * The handler function
         */
        handler: (event: MapInteractionEvent) => void;
    }): VoidFunction;
}

/**
 * The details of a map.
 *
 * @group Types
 */
type MapDetails = {
    /**
     * The id of the map.
     */
    id: string;
    /**
     * The title of the map.
     */
    title: string;
    /**
     * The description of the map.
     */
    description: string | null;
};

/**
 * The Misc controller provides access to miscellaneous map functionality
 * that doesn't fit into other controller categories.
 *
 * @group Controller
 * @public
 */
interface MiscController {
    /**
     * Gets the details of the map.
     *
     * Use this method to retrieve metadata about the current map, such as
     * its title, description, and other map-level information.
     *
     * @returns A promise that resolves to the map details.
     *
     * @example
     * ```typescript
     * const details = await felt.getMapDetails();
     * console.log({
     *   id: details.id,
     *   title: details.title,
     *   description: details.description,
     * });
     * ```
     */
    getMapDetails(): Promise<MapDetails>;
}

/**
 * A reference to any kind of entity in the map.
 *
 * @remarks
 * EntityNodes are used when you have some collection of entities and you need to
 *
 * @group Entity Node
 */
type EntityNode = ElementNode | ElementGroupNode | LayerNode | LayerGroupNode | FeatureNode;
/**
 * References an element on the map.
 *
 * @interface
 * @group Entity Nodes
 */
type ElementNode = {
    type: "element";
    entity: Element;
};
/**
 * References an element group.
 *
 * @interface
 * @group Entity Nodes
 */
type ElementGroupNode = {
    type: "elementGroup";
    entity: ElementGroup;
};
/**
 * References a layer on the map.
 *
 * @interface
 * @group Entity Nodes
 */
type LayerNode = {
    type: "layer";
    entity: Layer;
};
/**
 * References a layer group on the map.
 *
 * @interface
 * @group Entity Nodes
 */
type LayerGroupNode = {
    type: "layerGroup";
    entity: LayerGroup;
};
/**
 * References a feature on the map.
 *
 * @interface
 * @group Entity Nodes
 */
type FeatureNode = {
    type: "feature";
    entity: LayerFeature;
};
/**
 * The options for selecting a feature in a layer.
 */
interface FeatureSelection extends zInfer<typeof FeatureSelectionSchema> {
}
/**
 * @ignore
 */
declare const FeatureSelectionSchema: z.ZodObject<{
    /**
     * The id of the feature to select.
     */
    id: z.ZodUnion<[z.ZodString, z.ZodNumber]>;
    /**
     * The id of the layer that the feature belongs to.
     */
    layerId: z.ZodString;
    /**
     * Whether to show the feature's popup, if it is configured in the layer's style.
     *
     * @default true
     */
    showPopup: z.ZodOptional<z.ZodBoolean>;
    /**
     * Whether to center the view on the feature after selecting it.
     *
     * When true, the viewport will be centered on the feature and zoomed to fit the feature
     * in the viewport. If you need to control the zoom level to prevent it zooming in too
     * far, you can pass an object with a `maxZoom` property.
     *
     * This is useful for avoiding zooming in too far on point features, or if you want
     * to maintain the current zoom level.
     *
     * @default true
     */
    fitViewport: z.ZodOptional<z.ZodUnion<[z.ZodBoolean, z.ZodObject<{
        maxZoom: z.ZodNumber;
    }, "strip", z.ZodTypeAny, {
        maxZoom: number;
    }, {
        maxZoom: number;
    }>]>>;
}, "strip", z.ZodTypeAny, {
    id: string | number;
    layerId: string;
    showPopup?: boolean | undefined;
    fitViewport?: boolean | {
        maxZoom: number;
    } | undefined;
}, {
    id: string | number;
    layerId: string;
    showPopup?: boolean | undefined;
    fitViewport?: boolean | {
        maxZoom: number;
    } | undefined;
}>;

/**
 * The Selection controller allows you to listen for changes to the selection on the map.
 *
 * @group Controller
 * @public
 */
interface SelectionController {
    /**
     * Gets the current selection as a list of entity identifiers.
     *
     * Use this method to retrieve the current selection state, which can include
     * features, elements, or both types of entities.
     *
     * @returns A promise that resolves to an array of selected entity nodes.
     *
     * @example
     * ```typescript
     * const selection = await felt.getSelection();
     * ```
     */
    getSelection(): Promise<EntityNode[]>;
    /**
     * Adds a listener for when the selection changes.
     *
     * Use this to react to selection changes, such as updating your UI to reflect
     * what is currently selected on the map.
     *
     * @returns A function to unsubscribe from the listener.
     *
     * @event
     * @example
     * ```typescript
     * const unsubscribe = felt.onSelectionChange({
     *   handler: ({selection}) => console.log(selection),
     * });
     *
     * // later on...
     * unsubscribe();
     * ```
     */
    onSelectionChange(params: {
        handler: (change: {
            /**
             * The new selection. In the case where there are multiple entities selected,
             * the array describes the chronological and semeantic order of the selection.
             *
             * Entities of the same type that are selected later will appear later in the
             * list, but there are cases where multiple entity types can be selected at once,
             * such as elements and features. In this case, the order of the _types_ of entities
             * tells you which are considered more semantically important.
             *
             * For example, if a feature and element are selected, the feature will be at the
             * tail of the list because pressing Escape will deselect the feature first, then
             * pressing Escape again will deselect the element.
             */
            selection: EntityNode[];
        }) => void;
    }): VoidFunction;
    /**
     * Selects a feature on a layer. This will show the feature's popup, modal or
     * sidebar (if configured) and highlight the feature.
     *
     * Use this method to programmatically select features, which can be useful for
     * highlighting specific data points or triggering feature-specific UI.
     *
     * @returns A promise that resolves when the feature is selected.
     *
     * @example
     * ```typescript
     * felt.selectFeature({
     *   id: 123,
     *   layerId: "my-layer",
     *   showPopup: true,
     *   fitViewport: { maxZoom: 15 },
     * });
     * ```
     */
    selectFeature(params: FeatureSelection): Promise<void>;
    /**
     * Clears the current selection (elements, features or both).
     *
     * Use this method to programmatically clear the current selection, which can
     * be useful for resetting the map state or preparing for new selections.
     *
     * @param params - The parameters to clear the selection. If this is not provided,
     * both features and elements will be cleared.
     * @returns A promise that resolves when the selection is cleared.
     *
     * @example
     * ```typescript
     *
     * // Removes all features and elements from the selection
     * felt.clearSelection();
     *
     * // Removes only features from the selection
     * felt.clearSelection({ features: true });
     *
     * // Removes only elements from the selection
     * felt.clearSelection({ elements: true });
     * ```
     *
     * @default
     * ```typescript
     * { features: true, elements: true }
     * ```
     */
    clearSelection(params?: {
        /**
         * Whether to clear the features from the selection.
         */
        features?: boolean;
        /**
         * Whether to clear the elements from the selection.
         */
        elements?: boolean;
    }): Promise<void>;
}

type ToolType = "circle" | "highlighter" | "line" | "link" | "marker" | "note" | "pin" | "polygon" | "route" | "text";
type ConfigurableToolType = Exclude<ToolType, "link">;
interface ShowToolInspectorSettings {
    /**
     * Whether to show the tool inspector.
     *
     * @defaultValue `false`
     */
    showInspector: boolean;
}
declare const PinToolSettingsSchema: z.ZodObject<{
    symbol: z.ZodString;
    color: z.ZodString;
    frame: z.ZodNullable<z.ZodEnum<["frame-circle", "frame-square"]>>;
    afterCreation: z.ZodEnum<["enter name", "add another", "select"]>;
}, "strip", z.ZodTypeAny, {
    symbol: string;
    color: string;
    frame: "frame-circle" | "frame-square" | null;
    afterCreation: "select" | "enter name" | "add another";
}, {
    symbol: string;
    color: string;
    frame: "frame-circle" | "frame-square" | null;
    afterCreation: "select" | "enter name" | "add another";
}>;
interface PinToolSettings extends zInfer<typeof PinToolSettingsSchema>, ShowToolInspectorSettings {
    symbol: PlaceSymbol;
    /**
     * What to do after creating the Place element.
     *
     * - `"enter name"`: Enter a name for the Place, focusing the name input.
     * - `"add another"`: Add another Place, leaving the tool still selected.
     * - `"select"`: Puts the tool down and selects the new Place element.
     *
     * @defaultValue `"enter name"`
     */
    afterCreation: "enter name" | "add another" | "select";
}
declare const LineToolSettingsSchema: z.ZodObject<{
    color: z.ZodString;
    strokeOpacity: z.ZodNumber;
    strokeWidth: z.ZodNumber;
    strokeStyle: z.ZodEnum<["solid", "dashed", "dotted"]>;
    distanceMarker: z.ZodBoolean;
}, "strip", z.ZodTypeAny, {
    color: string;
    strokeOpacity: number;
    strokeWidth: number;
    strokeStyle: "solid" | "dashed" | "dotted";
    distanceMarker: boolean;
}, {
    color: string;
    strokeOpacity: number;
    strokeWidth: number;
    strokeStyle: "solid" | "dashed" | "dotted";
    distanceMarker: boolean;
}>;
interface LineToolSettings extends zInfer<typeof LineToolSettingsSchema>, ShowToolInspectorSettings {
}
declare const RouteToolSettingsSchema: z.ZodObject<{
    color: z.ZodString;
    strokeOpacity: z.ZodNumber;
    strokeWidth: z.ZodNumber;
    strokeStyle: z.ZodEnum<["solid", "dashed", "dotted"]>;
    distanceMarker: z.ZodBoolean;
    routingMode: z.ZodNullable<z.ZodEnum<["driving", "cycling", "walking", "flying"]>>;
    endCaps: z.ZodBoolean;
}, "strip", z.ZodTypeAny, {
    color: string;
    strokeOpacity: number;
    strokeWidth: number;
    strokeStyle: "solid" | "dashed" | "dotted";
    distanceMarker: boolean;
    routingMode: "driving" | "cycling" | "walking" | "flying" | null;
    endCaps: boolean;
}, {
    color: string;
    strokeOpacity: number;
    strokeWidth: number;
    strokeStyle: "solid" | "dashed" | "dotted";
    distanceMarker: boolean;
    routingMode: "driving" | "cycling" | "walking" | "flying" | null;
    endCaps: boolean;
}>;
interface RouteToolSettings extends zInfer<typeof RouteToolSettingsSchema>, ShowToolInspectorSettings {
}
declare const PolygonToolSettingsSchema: z.ZodObject<{
    color: z.ZodString;
    strokeOpacity: z.ZodNumber;
    strokeWidth: z.ZodNumber;
    strokeStyle: z.ZodEnum<["solid", "dashed", "dotted"]>;
    fillOpacity: z.ZodNumber;
    areaMarker: z.ZodBoolean;
}, "strip", z.ZodTypeAny, {
    color: string;
    strokeOpacity: number;
    strokeWidth: number;
    strokeStyle: "solid" | "dashed" | "dotted";
    fillOpacity: number;
    areaMarker: boolean;
}, {
    color: string;
    strokeOpacity: number;
    strokeWidth: number;
    strokeStyle: "solid" | "dashed" | "dotted";
    fillOpacity: number;
    areaMarker: boolean;
}>;
interface PolygonToolSettings extends zInfer<typeof PolygonToolSettingsSchema>, ShowToolInspectorSettings {
}
declare const CircleToolSettingsSchema: z.ZodObject<{
    color: z.ZodString;
    strokeOpacity: z.ZodNumber;
    strokeWidth: z.ZodNumber;
    strokeStyle: z.ZodEnum<["solid", "dashed", "dotted"]>;
    fillOpacity: z.ZodNumber;
    radiusMarker: z.ZodBoolean;
}, "strip", z.ZodTypeAny, {
    color: string;
    strokeOpacity: number;
    strokeWidth: number;
    strokeStyle: "solid" | "dashed" | "dotted";
    fillOpacity: number;
    radiusMarker: boolean;
}, {
    color: string;
    strokeOpacity: number;
    strokeWidth: number;
    strokeStyle: "solid" | "dashed" | "dotted";
    fillOpacity: number;
    radiusMarker: boolean;
}>;
interface CircleToolSettings extends zInfer<typeof CircleToolSettingsSchema>, ShowToolInspectorSettings {
}
declare const MarkerToolSettingsSchema: z.ZodObject<{
    color: z.ZodString;
    opacity: z.ZodNumber;
    size: z.ZodNumber;
}, "strip", z.ZodTypeAny, {
    color: string;
    opacity: number;
    size: number;
}, {
    color: string;
    opacity: number;
    size: number;
}>;
interface MarkerToolSettings extends zInfer<typeof MarkerToolSettingsSchema>, ShowToolInspectorSettings {
}
declare const HighlighterToolSettingsSchema: z.ZodObject<{
    color: z.ZodString;
    opacity: z.ZodNumber;
    renderHoles: z.ZodBoolean;
    size: z.ZodNumber;
}, "strip", z.ZodTypeAny, {
    color: string;
    opacity: number;
    size: number;
    renderHoles: boolean;
}, {
    color: string;
    opacity: number;
    size: number;
    renderHoles: boolean;
}>;
interface HighlighterToolSettings extends zInfer<typeof HighlighterToolSettingsSchema>, ShowToolInspectorSettings {
}
declare const TextToolSettingsSchema: z.ZodObject<{
    color: z.ZodString;
    align: z.ZodEnum<["left", "center", "right"]>;
    style: z.ZodEnum<["italic", "light", "regular", "caps"]>;
}, "strip", z.ZodTypeAny, {
    color: string;
    align: "center" | "left" | "right";
    style: "italic" | "light" | "regular" | "caps";
}, {
    color: string;
    align: "center" | "left" | "right";
    style: "italic" | "light" | "regular" | "caps";
}>;
interface TextToolSettings extends zInfer<typeof TextToolSettingsSchema>, ShowToolInspectorSettings {
}
declare const NoteToolSettingsSchema: z.ZodObject<{
    color: z.ZodString;
    align: z.ZodEnum<["left", "center", "right"]>;
    style: z.ZodEnum<["italic", "light", "regular", "caps"]>;
}, "strip", z.ZodTypeAny, {
    color: string;
    align: "center" | "left" | "right";
    style: "italic" | "light" | "regular" | "caps";
}, {
    color: string;
    align: "center" | "left" | "right";
    style: "italic" | "light" | "regular" | "caps";
}>;
interface NoteToolSettings extends zInfer<typeof NoteToolSettingsSchema>, ShowToolInspectorSettings {
}
/**
 * The parameters for changing the settings of each tool.
 */
type InputToolSettings = ({
    tool: "pin";
} & Partial<PinToolSettings>) | ({
    tool: "line";
} & Partial<LineToolSettings>) | ({
    tool: "route";
} & Partial<RouteToolSettings>) | ({
    tool: "polygon";
} & Partial<PolygonToolSettings>) | ({
    tool: "circle";
} & Partial<CircleToolSettings>) | ({
    tool: "marker";
} & Partial<MarkerToolSettings>) | ({
    tool: "highlighter";
} & Partial<HighlighterToolSettings>) | ({
    tool: "text";
} & Partial<TextToolSettings>) | ({
    tool: "note";
} & Partial<NoteToolSettings>);
/**
 * The result of listening for changes to the settings of each tool.
 */
type ToolSettingsChangeEvent = ({
    tool: "pin";
} & PinToolSettings) | ({
    tool: "line";
} & LineToolSettings) | ({
    tool: "route";
} & RouteToolSettings) | ({
    tool: "polygon";
} & PolygonToolSettings) | ({
    tool: "circle";
} & CircleToolSettings) | ({
    tool: "marker";
} & MarkerToolSettings) | ({
    tool: "highlighter";
} & HighlighterToolSettings) | ({
    tool: "text";
} & TextToolSettings) | ({
    tool: "note";
} & NoteToolSettings);
type ToolSettingsMap = {
    pin: PinToolSettings;
    line: LineToolSettings;
    route: RouteToolSettings;
    polygon: PolygonToolSettings;
    circle: CircleToolSettings;
    marker: MarkerToolSettings;
    highlighter: HighlighterToolSettings;
    text: TextToolSettings;
    note: NoteToolSettings;
};
type PlaceFrame = "frame-circle" | "frame-square" | null;
type PlaceSymbol = "dot" | "square" | "diamond" | "triangle" | "x" | "plus" | "circle-line" | "circle-slash" | "star" | "heart" | "hexagon" | "octagon" | "pedestrian" | "bicycle" | "wheelchair" | "airport" | "car" | "bus" | "train" | "truck" | "ferry" | "sailboat" | "electric-service" | "gas-service" | "blood-clinic" | "badge" | "traffic-light" | "traffic-cone" | "road-sign-caution" | "person" | "restroom" | "house" | "work" | "letter" | "hotel" | "factory" | "hospital" | "religious-facility" | "school" | "government" | "university" | "bank" | "landmark" | "museum" | "clothing" | "shopping" | "store" | "bar" | "pub" | "cafe" | "food" | "park" | "amusement-park" | "camping-tent" | "cabin" | "picnic" | "water-refill" | "trailhead" | "guidepost" | "viewpoint" | "camera" | "us-football" | "football" | "tennis" | "binoculars" | "swimming" | "zap" | "battery-full" | "battery-half" | "battery-low" | "boom" | "radar" | "wind-turbine" | "solar-panel" | "antenna" | "telephone-pole" | "oil-well" | "oil-barrel" | "railroad-track" | "bridge" | "lighthouse" | "lock-closed" | "lock-open" | "wifi" | "trash" | "recycle" | "tree" | "flower" | "leaf" | "fire" | "mountain" | "snowy-mountain" | "volcano" | "island" | "wave" | "hot-springs" | "water" | "lake" | "ocean" | "animal" | "bird" | "duck" | "dog" | "fish" | "beach" | "wetland" | "sun" | "moon" | "cloud" | "partial-sun" | "rain" | "lightning" | "snowflake" | "wind" | "snow" | "fog" | "sleet" | "hurricane" | "warning" | "parking" | "info" | "circle-exclamation" | "circle-triangle" | "circle-x" | "circle-plus" | (`:${string}:` & {});

/**
 * The Tools controller allows you to let users draw elements on the map.
 *
 * @group Controller
 * @public
 */
interface ToolsController {
    /**
     * Sets the tool to use for drawing elements on the map.
     *
     * Use this method to programmatically activate drawing tools for users. When a tool
     * is set, users can draw elements on the map using that tool. Set to `null` to
     * deactivate all drawing tools.
     *
     * @param tool - The tool to set, or `null` to deactivate all tools.
     *
     * @example
     * ```typescript
     * // Set the tool to "marker"
     * await felt.setTool("marker");
     *
     * // put down the tool
     * await felt.setTool(null);
     * ```
     */
    setTool(tool: ToolType | null): void;
    /**
     * Gets the current tool, if any is in use.
     *
     * Use this method to check which drawing tool is currently active, if any.
     *
     * @returns A promise that resolves to the current tool, or `null` if no tool is in use.
     *
     * @example
     * ```typescript
     * const tool = await felt.getTool(); // "marker", "polygon", etc.
     * ```
     */
    getTool(): Promise<ToolType | null>;
    /**
     * Listens for changes to the current tool.
     *
     * Use this to react to tool changes, such as updating your UI to reflect
     * the currently active drawing tool.
     *
     * @example
     * ```typescript
     * const unsubscribe = felt.onToolChange({
     *   handler: tool => console.log(tool),
     * });
     *
     * // later on...
     * unsubscribe();
     * ```
     */
    onToolChange(args: {
        /**
         * This callback is called with the current tool whenever the tool changes.
         *
         * @param tool - The current tool, or `null` if no tool is in use.
         */
        handler: (tool: ToolType | null) => void;
    }): VoidFunction;
    /**
     * Sets the settings for the current tool.
     *
     * Use this method to configure how drawing tools behave, such as setting colors,
     * stroke widths, or other tool-specific properties.
     *
     * @param settings - The settings to set for the specified tool.
     *
     * @example
     * ```typescript
     * // Set the settings for the marker tool
     * await felt.setToolSettings({
     *   tool: "marker",
     *   color: "#FE17",
     * });
     * ```
     */
    setToolSettings(settings: InputToolSettings): void;
    /**
     * Gets the settings for the chosen tool.
     *
     * Use this method to retrieve the current configuration of a drawing tool.
     *
     * @param tool - The tool to get settings for.
     * @returns A promise that resolves to the settings for the chosen tool.
     *
     * @example
     * ```typescript
     * const settings = await felt.getToolSettings("marker");
     * ```
     */
    getToolSettings<T extends ConfigurableToolType>(tool: T): Promise<ToolSettingsMap[T]>;
    /**
     * Listens for changes to the settings on all tools.
     *
     * Use this to react to tool setting changes, such as updating your UI to
     * reflect the current tool configuration.
     *
     * @returns A function to unsubscribe from the listener.
     *
     * @example
     * ```typescript
     * const unsubscribe = felt.onToolSettingsChange({
     *   handler: settings => console.log(settings),
     * });
     *
     * // later on...
     * unsubscribe();
     * ```
     */
    onToolSettingsChange(args: {
        handler: (settings: ToolSettingsChangeEvent) => void;
    }): VoidFunction;
}

declare const uiElementLifecycleSchema: z.ZodObject<{
    /**
     * A function to call when the element is created.
     *
     * @param args - This function doesn't receive any parameters
     */
    onCreate: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
        id: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        id: string;
    }, {
        id: string;
    }>], z.ZodUnknown>, z.ZodVoid>>;
    /**
     * A function to call when the element is destroyed.
     *
     * @param args - This function doesn't receive any parameters
     */
    onDestroy: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
        id: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        id: string;
    }, {
        id: string;
    }>], z.ZodUnknown>, z.ZodVoid>>;
}, "strip", z.ZodTypeAny, {
    onCreate?: ((args_0: {
        id: string;
    }, ...args: unknown[]) => void) | undefined;
    onDestroy?: ((args_0: {
        id: string;
    }, ...args: unknown[]) => void) | undefined;
}, {
    onCreate?: ((args_0: {
        id: string;
    }, ...args: unknown[]) => void) | undefined;
    onDestroy?: ((args_0: {
        id: string;
    }, ...args: unknown[]) => void) | undefined;
}>;
interface UIElementLifecycle extends zInfer<typeof uiElementLifecycleSchema> {
    /**
     * A function to call when the element is created.
     *
     * @param args - The arguments passed to the function.
     * @param args.id - The id of the element.
     */
    onCreate?: (args: {
        id: string;
    }) => void;
    /**
     * A function to call when the element is destroyed.
     *
     * @param args - The arguments passed to the function.
     * @param args.id - The id of the element.
     */
    onDestroy?: (args: {
        id: string;
    }) => void;
}
declare const uiElementBaseSchema: z.ZodObject<z.objectUtil.extendShape<{
    /**
     * A function to call when the element is created.
     *
     * @param args - This function doesn't receive any parameters
     */
    onCreate: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
        id: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        id: string;
    }, {
        id: string;
    }>], z.ZodUnknown>, z.ZodVoid>>;
    /**
     * A function to call when the element is destroyed.
     *
     * @param args - This function doesn't receive any parameters
     */
    onDestroy: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
        id: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        id: string;
    }, {
        id: string;
    }>], z.ZodUnknown>, z.ZodVoid>>;
}, {
    id: z.ZodString;
}>, "strip", z.ZodTypeAny, {
    id: string;
    onCreate?: ((args_0: {
        id: string;
    }, ...args: unknown[]) => void) | undefined;
    onDestroy?: ((args_0: {
        id: string;
    }, ...args: unknown[]) => void) | undefined;
}, {
    id: string;
    onCreate?: ((args_0: {
        id: string;
    }, ...args: unknown[]) => void) | undefined;
    onDestroy?: ((args_0: {
        id: string;
    }, ...args: unknown[]) => void) | undefined;
}>;
interface UIElementBase extends Omit<zInfer<typeof uiElementBaseSchema>, "onCreate" | "onDestroy">, UIElementLifecycle {
    /**
     * The ID of the element.
     */
    id: string;
}
interface UIElementBaseCreateParams extends Omit<UIElementBase, "id"> {
    /**
     * The ID of the element.
     *
     * @remarks
     * If not provided, the element will be assigned a random ID, but it is recommended to provide it
     * to perform further updates on the element.
     *
     * If provided, it must be unique within the UI.
     *
     * @defaultValue `undefined`
     */
    id?: string;
}
declare const uiLabelReadyElementSchema: z.ZodObject<z.objectUtil.extendShape<z.objectUtil.extendShape<{
    /**
     * A function to call when the element is created.
     *
     * @param args - This function doesn't receive any parameters
     */
    onCreate: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
        id: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        id: string;
    }, {
        id: string;
    }>], z.ZodUnknown>, z.ZodVoid>>;
    /**
     * A function to call when the element is destroyed.
     *
     * @param args - This function doesn't receive any parameters
     */
    onDestroy: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
        id: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        id: string;
    }, {
        id: string;
    }>], z.ZodUnknown>, z.ZodVoid>>;
}, {
    id: z.ZodString;
}>, {
    /**
     * Label text to display above the element and used for screen readers.
     */
    label: z.ZodOptional<z.ZodString>;
}>, "strip", z.ZodTypeAny, {
    id: string;
    onCreate?: ((args_0: {
        id: string;
    }, ...args: unknown[]) => void) | undefined;
    onDestroy?: ((args_0: {
        id: string;
    }, ...args: unknown[]) => void) | undefined;
    label?: string | undefined;
}, {
    id: string;
    onCreate?: ((args_0: {
        id: string;
    }, ...args: unknown[]) => void) | undefined;
    onDestroy?: ((args_0: {
        id: string;
    }, ...args: unknown[]) => void) | undefined;
    label?: string | undefined;
}>;
interface UILabelReadyElement extends UIElementBase, Omit<zInfer<typeof uiLabelReadyElementSchema>, "onCreate" | "onDestroy"> {
}
interface UILabelReadyElementCreateParams extends Omit<UILabelReadyElement, "id">, UIElementBaseCreateParams {
}
type MakeClonableSchema<TElementCreate extends {
    id?: string;
    type: string;
}> = {
    [K in keyof TElementCreate]: TElementCreate[K] extends Function ? string : TElementCreate[K] extends Function | undefined ? string | undefined : TElementCreate[K];
};
type MakeUpdateSchema<TElement extends {
    id: string;
    type: string;
}, TElementCreate extends {
    id?: string;
    type: string;
}> = Omit<Partial<TElementCreate>, "id" | "type"> & Pick<TElement, "id" | "type">;
declare const uiControlElementOptionSchema: z.ZodObject<{
    label: z.ZodString;
    value: z.ZodString;
    disabled: z.ZodOptional<z.ZodBoolean>;
}, "strip", z.ZodTypeAny, {
    value: string;
    label: string;
    disabled?: boolean | undefined;
}, {
    value: string;
    label: string;
    disabled?: boolean | undefined;
}>;
/**
 * An option to display in a control element.
 *
 * Control elements are elements that allow the user to select one or more values from a list of options.
 * This includes:
 * - {@link UIRadioGroupElement}
 * - {@link UICheckboxGroupElement}
 * - {@link UIToggleGroupElement}
 * - {@link UISelectElement}
 *
 * The option can be disabled by setting the `disabled` property to `true`.
 *
 * @example
 * ```typescript
 * { label: "Option A", value: "optionA" }
 * ```
 *
 * @example
 * A disabled option
 * ```typescript
 * { label: "Option A", value: "optionA", disabled: true }
 * ```
 */
interface UIControlElementOption extends zInfer<typeof uiControlElementOptionSchema> {
}

declare const uiButtonElementSchema: z.ZodObject<z.objectUtil.extendShape<z.objectUtil.extendShape<{
    onCreate: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
        id: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        id: string;
    }, {
        id: string;
    }>], z.ZodUnknown>, z.ZodVoid>>;
    onDestroy: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
        id: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        id: string;
    }, {
        id: string;
    }>], z.ZodUnknown>, z.ZodVoid>>;
}, {
    id: z.ZodString;
}>, {
    type: z.ZodLiteral<"Button">;
    /**
     * The label to display in the button.
     */
    label: z.ZodString;
    /**
     * The style variant of the button.
     *
     * - `"filled"`: a button with background.
     *   - `background` color is based on button's `tint` (defaults to `default` tint)
     * - `"transparent"`: a transparent button that gets a subtle dark background when hovered.
     *   - `text` color is based on button's `tint` (defaults to `default` tint)
     * - `"outlined"`: a transparent button with a border.
     *   - `text` and `border` colors are based on button's `tint` (defaults to `default` tint)
     *
     * @defaultValue `"filled"`
     */
    variant: z.ZodOptional<z.ZodEnum<["filled", "transparent", "outlined"]>>;
    /**
     * The tint of the button.
     *
     * - `"default"`: Felt's theme-based light/dark colors.
     * - `"primary"`: Felt's primary color (pink).
     * - `"accent"`: Felt's accent color (blue).
     * - `"danger"`: Felt's danger color (red).
     *
     * @defaultValue `"default"`
     */
    tint: z.ZodOptional<z.ZodEnum<["default", "primary", "accent", "danger"]>>;
    /**
     * Whether the button is disabled.
     *
     * @defaultValue `false`
     */
    disabled: z.ZodOptional<z.ZodBoolean>;
    onClick: z.ZodFunction<z.ZodTuple<[z.ZodObject<{
        id: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        id: string;
    }, {
        id: string;
    }>], z.ZodUnknown>, z.ZodVoid>;
}>, "strip", z.ZodTypeAny, {
    type: "Button";
    id: string;
    label: string;
    onClick: (args_0: {
        id: string;
    }, ...args: unknown[]) => void;
    onCreate?: ((args_0: {
        id: string;
    }, ...args: unknown[]) => void) | undefined;
    onDestroy?: ((args_0: {
        id: string;
    }, ...args: unknown[]) => void) | undefined;
    disabled?: boolean | undefined;
    variant?: "filled" | "transparent" | "outlined" | undefined;
    tint?: "default" | "primary" | "accent" | "danger" | undefined;
}, {
    type: "Button";
    id: string;
    label: string;
    onClick: (args_0: {
        id: string;
    }, ...args: unknown[]) => void;
    onCreate?: ((args_0: {
        id: string;
    }, ...args: unknown[]) => void) | undefined;
    onDestroy?: ((args_0: {
        id: string;
    }, ...args: unknown[]) => void) | undefined;
    disabled?: boolean | undefined;
    variant?: "filled" | "transparent" | "outlined" | undefined;
    tint?: "default" | "primary" | "accent" | "danger" | undefined;
}>;
/**
 * Represents a button element in a panel.
 *
 * <figure>
 * <img src="./img/button-showcase.png" alt="Button variants" />
 * <figcaption>Button variants</figcaption>
 * </figure>
 *
 * @example
 * ```typescript
 * {
 *   type: "Button",
 *   label: "Click me",
 *   onClick: () => alert("Button clicked"),
 * }
 * ```
 */
interface UIButtonElement extends UIElementBase, Omit<zInfer<typeof uiButtonElementSchema>, "onClick" | "onCreate" | "onDestroy"> {
    /**
     * The action to perform when the button is clicked.
     *
     * @param args - The arguments passed to the function.
     * @param args.id - The id of the button.
     */
    onClick: (args: {
        id: string;
    }) => void;
}
/**
 * The parameters for creating a button element.
 *
 * See {@link UIButtonElement} for more details.
 *
 * @remarks
 * `id` is optional but recommended if you want to be able to perform updates.
 */
interface UIButtonElementCreate extends Omit<UIButtonElement, "id">, UIElementBaseCreateParams {
}
interface UIButtonElementCreateClonable extends MakeClonableSchema<UIButtonElementCreate> {
}
/**
 * The parameters for updating a button element.
 *
 * See {@link UIButtonElement} for more details.
 *
 * @remarks
 * `id` and `type` are required to identify the element to update.
 */
interface UIButtonElementUpdate extends MakeUpdateSchema<UIButtonElement, UIButtonElementCreate> {
}

/**
 * Represents a row of buttons.
 *
 * It is useful to group buttons together and align them.
 *
 * Unlike on {@link UIGridContainerElement}, buttons do not expand to fill the container.
 * Instead, they use the space they need and are wrapped to the next line when they overflow.
 *
 * ### Label
 *
 * A label can be added to the button row using the `label` property.
 *
 * <figure>
 * <img src="./img/button-row-label.png" alt="Label" />
 * <figcaption>Label</figcaption>
 * </figure>
 *
 * ```typescript
 * {
 *   type: "ButtonRow",
 *   label: "Zoom control",
 *   items: [
 *     { type: "Button", label: "Increase", onClick: () => {} },
 *     { type: "Button", label: "Decrease", onClick: () => {} },
 *   ],
 * }
 * ```
 *
 * ### Alignment
 *
 * It is possible to align the button row to the start or end of the container using the `align` property.
 *
 * #### Start alignment
 *
 * <figure>
 * <img src="./img/button-row-start-alignment.png" alt="Start alignment" />
 * <figcaption>Start alignment</figcaption>
 * </figure>
 *
 * ```typescript
 * {
 *   type: "ButtonRow",
 *   align: "start", // default value
 *   items: [
 *     { type: "Button", label: "Button 1", onClick: () => {} },
 *     { type: "Button", label: "Button 2", onClick: () => {} },
 *   ],
 * }
 * ```
 *
 * #### End alignment
 *
 * <figure>
 * <img src="./img/button-row-end-alignment.png" alt="End alignment" />
 * <figcaption>End alignment</figcaption>
 * </figure>
 *
 * ```typescript
 * {
 *   type: "ButtonRow",
 *   align: "end",
 *   items: [
 *     { type: "Button", label: "Button 1", onClick: () => {} },
 *     { type: "Button", label: "Button 2", onClick: () => {} },
 *   ],
 * }
 * ```
 *
 * ### Overflow
 *
 * When buttons overflow the container, they are wrapped to the next line.
 *
 * <figure>
 * <img src="./img/button-row-overflow.png" alt="Overflow" />
 * <figcaption>Overflow</figcaption>
 * </figure>
 *
 * ```typescript
 * {
 *   type: "ButtonRow",
 *   items: [
 *     { type: "Button", label: "Button with a very long text", onClick: () => {} },
 *     { type: "Button", label: "Button 2", onClick: () => {} },
 *     { type: "Button", label: "Button 3", onClick: () => {} },
 *   ],
 * }
 * ```
 *
 * ### With Grid container
 *
 * {@link UIGridContainerElement}, as a generic container, can render {@link UIButtonRowElement} as well.
 *
 * In this example, the combination of {@link UIGridContainerElement} and {@link UIButtonRowElement} is used to layout a footer
 * where the buttons are aligned to the end of the container and the text is at the start.
 *
 * <figure>
 * <img src="./img/button-row-with-grid-container.png" alt="With Grid container" />
 * <figcaption>With Grid container</figcaption>
 * </figure>
 *
 * ```typescript
 * {
 *   type: "Grid",
 *   grid: "auto-flow / 1fr auto",
 *   rowItemsJustify: "space-between",
 *   rowItemsAlign: "center",
 *   items: [
 *     { type: "Text", content: "Continue?" },
 *     {
 *       type: "ButtonRow",
 *       align: "end",
 *       items: [
 *         { type: "Button", variant: "transparent", label: "Cancel", onClick: () => {} },
 *         { type: "Button", variant: "filled", tint: "primary", label: "Continue", onClick: () => {} },
 *       ]
 *     },
 *   ],
 * }
 * ```
 */
interface UIButtonRowElement extends UILabelReadyElement {
    type: "ButtonRow";
    /**
     * The alignment of the button row.
     *
     * @defaultValue `"start"`
     */
    align?: "start" | "end";
    /**
     * The items to add to the button row.
     */
    items: Array<UIButtonElement>;
}
/**
 * The parameters for creating a button row element.
 *
 * See {@link UIButtonRowElement} for more details.
 */
interface UIButtonRowElementCreate extends Omit<UIButtonRowElement, "id" | "items">, UILabelReadyElementCreateParams {
    /**
     * The items to add to the button row.
     */
    items: Array<UIButtonElementCreate>;
}
type UIButtonRowElementCreateClonable = Omit<MakeClonableSchema<UIButtonRowElementCreate>, "items"> & {
    items: Array<UIButtonElementCreateClonable>;
};
/**
 * The parameters for updating a button row element.
 *
 * See {@link UIButtonRowElement} for more details.
 */
interface UIButtonRowElementUpdate extends MakeUpdateSchema<UIButtonRowElement, UIButtonRowElementCreate> {
}

declare const uiCheckboxGroupElementSchema: z.ZodObject<z.objectUtil.extendShape<z.objectUtil.extendShape<z.objectUtil.extendShape<{
    onCreate: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
        id: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        id: string;
    }, {
        id: string;
    }>], z.ZodUnknown>, z.ZodVoid>>;
    onDestroy: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
        id: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        id: string;
    }, {
        id: string;
    }>], z.ZodUnknown>, z.ZodVoid>>;
}, {
    id: z.ZodString;
}>, {
    label: z.ZodOptional<z.ZodString>;
}>, {
    type: z.ZodLiteral<"CheckboxGroup">;
    /**
     * The options to display in the checkbox group.
     */
    options: z.ZodArray<z.ZodObject<{
        label: z.ZodString;
        value: z.ZodString;
        disabled: z.ZodOptional<z.ZodBoolean>;
    }, "strip", z.ZodTypeAny, {
        value: string;
        label: string;
        disabled?: boolean | undefined;
    }, {
        value: string;
        label: string;
        disabled?: boolean | undefined;
    }>, "many">;
    /**
     * The value of the checkbox group.
     *
     * @defaultValue `[]`
     */
    value: z.ZodArray<z.ZodString, "many">;
    onChange: z.ZodFunction<z.ZodTuple<[z.ZodObject<{
        value: z.ZodArray<z.ZodString, "many">;
        id: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        value: string[];
        id: string;
    }, {
        value: string[];
        id: string;
    }>], z.ZodUnknown>, z.ZodVoid>;
}>, "strip", z.ZodTypeAny, {
    options: {
        value: string;
        label: string;
        disabled?: boolean | undefined;
    }[];
    type: "CheckboxGroup";
    value: string[];
    id: string;
    onChange: (args_0: {
        value: string[];
        id: string;
    }, ...args: unknown[]) => void;
    onCreate?: ((args_0: {
        id: string;
    }, ...args: unknown[]) => void) | undefined;
    onDestroy?: ((args_0: {
        id: string;
    }, ...args: unknown[]) => void) | undefined;
    label?: string | undefined;
}, {
    options: {
        value: string;
        label: string;
        disabled?: boolean | undefined;
    }[];
    type: "CheckboxGroup";
    value: string[];
    id: string;
    onChange: (args_0: {
        value: string[];
        id: string;
    }, ...args: unknown[]) => void;
    onCreate?: ((args_0: {
        id: string;
    }, ...args: unknown[]) => void) | undefined;
    onDestroy?: ((args_0: {
        id: string;
    }, ...args: unknown[]) => void) | undefined;
    label?: string | undefined;
}>;
/**
 * The parameters for creating a checkbox group element.
 *
 * The checkbox group is a control that allows the user to select one or more values from a list of options.
 *
 * As a control, the checkbox group can have a label displayed above the checkboxes.
 *
 * If no value is provided, `value` is `[]`, the checkbox group will be empty.
 *
 * <figure>
 * <img src="./img/checkbox-group-basic.png" alt="Checkbox group basic" />
 * <figcaption>
 * A checkbox group with a label
 * </figcaption>
 * </figure>
 *
 * ```typescript
 * {
 *   type: "CheckboxGroup",
 *   label: "Select your hobbies",
 *   options: [
 *     { label: "👾 Video games", value: "gaming" },
 *     { label: "🎨 Art", value: "art" },
 *     { label: "🎤 Singing", value: "singing" },
 *     { label: "🎬 Movies", value: "movies" },
 *   ],
 *   value: ["gaming", "art"],
 *   onChange: ({ value, id }) => { }
 * }
 * ```
 */
interface UICheckboxGroupElement extends UILabelReadyElement, Omit<zInfer<typeof uiCheckboxGroupElementSchema>, "onChange" | "onCreate" | "onDestroy" | "options"> {
    /**
     * The options to display in the checkbox group.
     */
    options: Array<UIControlElementOption>;
    /**
     * The function to call when the value of the checkbox group changes.
     *
     * @param args - The arguments passed to the function.
     * @param args.value - Array of the selected values.
     * @param args.id - The id of the checkbox group element.
     */
    onChange: (args: {
        value: Array<UIControlElementOption["value"]>;
        id: string;
    }) => void;
}
/**
 * The parameters for creating a checkbox group element.
 *
 * See {@link UICheckboxGroupElement} for more details.
 */
interface UICheckboxGroupElementCreate extends Omit<UICheckboxGroupElement, "id">, UILabelReadyElementCreateParams {
}
type UICheckboxGroupElementCreateClonable = MakeClonableSchema<UICheckboxGroupElementCreate>;
/**
 * The parameters for updating a checkbox group element.
 *
 * See {@link UICheckboxGroupElement} for more details.
 */
interface UICheckboxGroupElementUpdate extends MakeUpdateSchema<UICheckboxGroupElement, UICheckboxGroupElementCreate> {
}

declare const uiDividerElementSchema: z.ZodObject<z.objectUtil.extendShape<z.objectUtil.extendShape<{
    onCreate: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
        id: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        id: string;
    }, {
        id: string;
    }>], z.ZodUnknown>, z.ZodVoid>>;
    onDestroy: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
        id: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        id: string;
    }, {
        id: string;
    }>], z.ZodUnknown>, z.ZodVoid>>;
}, {
    id: z.ZodString;
}>, {
    type: z.ZodLiteral<"Divider">;
}>, "strip", z.ZodTypeAny, {
    type: "Divider";
    id: string;
    onCreate?: ((args_0: {
        id: string;
    }, ...args: unknown[]) => void) | undefined;
    onDestroy?: ((args_0: {
        id: string;
    }, ...args: unknown[]) => void) | undefined;
}, {
    type: "Divider";
    id: string;
    onCreate?: ((args_0: {
        id: string;
    }, ...args: unknown[]) => void) | undefined;
    onDestroy?: ((args_0: {
        id: string;
    }, ...args: unknown[]) => void) | undefined;
}>;
/**
 * Represents a divider element in a panel.
 * This element is used to separate other elements in a panel.
 * It is rendered as a gray horizontal line of 1px height.
 *
 * @example
 * Divider element is useful to separate sections of a panel.
 * ```typescript
 * {
 *   body: [
 *     { type: "Text", content: "Contact" },
 *     { type: "TextInput", placeholder: "Enter your name", ... },
 *     { type: "TextInput", placeholder: "Enter your email", ... },
 *     { type: "Divider" },
 *     { type: "Text", content: "Address" },
 *     { type: "TextInput", placeholder: "Enter your address", ... },
 *   ],
 * }
 * ```
 */
interface UIDividerElement extends UIElementBase, Omit<zInfer<typeof uiDividerElementSchema>, "onCreate" | "onDestroy"> {
}
/**
 * The parameters for creating a divider element.
 *
 * See {@link UIDividerElement} for more details.
 *
 * @remarks
 * `id` is optional but recommended if you want to be able to delete the element.
 */
interface UIDividerElementCreate extends Omit<UIDividerElement, "id">, UIElementBaseCreateParams {
}
type UIDividerElementCreateClonable = MakeClonableSchema<UIDividerElementCreate>;
/**
 * The parameters for updating a divider element.
 *
 * See {@link UIDividerElement} for more details.
 *
 * @remarks
 * `id` and `type` are required to identify the element to update.
 */
interface UIDividerElementUpdate extends MakeUpdateSchema<UIDividerElement, UIDividerElementCreate> {
}

declare const uiFlexibleSpaceElementSchema: z.ZodObject<z.objectUtil.extendShape<z.objectUtil.extendShape<{
    onCreate: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
        id: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        id: string;
    }, {
        id: string;
    }>], z.ZodUnknown>, z.ZodVoid>>;
    onDestroy: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
        id: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        id: string;
    }, {
        id: string;
    }>], z.ZodUnknown>, z.ZodVoid>>;
}, {
    id: z.ZodString;
}>, {
    type: z.ZodLiteral<"FlexibleSpace">;
}>, "strip", z.ZodTypeAny, {
    type: "FlexibleSpace";
    id: string;
    onCreate?: ((args_0: {
        id: string;
    }, ...args: unknown[]) => void) | undefined;
    onDestroy?: ((args_0: {
        id: string;
    }, ...args: unknown[]) => void) | undefined;
}, {
    type: "FlexibleSpace";
    id: string;
    onCreate?: ((args_0: {
        id: string;
    }, ...args: unknown[]) => void) | undefined;
    onDestroy?: ((args_0: {
        id: string;
    }, ...args: unknown[]) => void) | undefined;
}>;
/**
 * Represents a flexible space element in a container.
 *
 * When rendered...
 *
 * - inside {@link UIGridContainerElement}, it will add extra gap between items. It can be controlled by `grid` property.
 * - inside {@link UIPanelElement} `body` or `footer`, since they work as vertically stacks, it will add extra gap between items.
 *
 * @example
 * Paragraphs with a flexible space between makes them more visually separated.
 * ```typescript
 * {
 *   type: "Panel",
 *   body: [
 *     { type: "Paragraph", text: "Paragraph 1" },
 *     { type: "FlexibleSpace" },
 *     { type: "Paragraph", text: "Paragraph 2" },
 *   ],
 * }
 * ```
 *
 * @example
 * Horizontal stack of buttons with a flexible space between makes them more visually separated.
 * ```typescript
 * {
 *   type: "Grid",
 *   grid: "auto-flow / auto 1fr auto",
 *   items: [
 *     { type: "Button", label: "Button 1", onClick: () => {} },
 *     { type: "FlexibleSpace" },
 *     { type: "Button", label: "Button 2", onClick: () => {} },
 *   ],
 * }
 * ```
 */
interface UIFlexibleSpaceElement extends UIElementBase, Omit<zInfer<typeof uiFlexibleSpaceElementSchema>, "onCreate" | "onDestroy"> {
}
/**
 * The parameters for creating a flexible space element.
 *
 * @remarks
 * `id` is optional but recommended if you want to be able to perform updates.
 */
interface UIFlexibleSpaceElementCreate extends Omit<UIFlexibleSpaceElement, "id">, UIElementBaseCreateParams {
}
type UIFlexibleSpaceElementCreateClonable = MakeClonableSchema<UIFlexibleSpaceElementCreate>;
/**
 * The parameters for updating a flexible space element.
 *
 * See {@link UIFlexibleSpaceElement} for more details.
 *
 * @remarks
 * `id` and `type` are required to identify the element to update.
 */
interface UIFlexibleSpaceElementUpdate extends MakeUpdateSchema<UIFlexibleSpaceElement, UIFlexibleSpaceElementCreate> {
}

declare const uiIframeElementSchema: z.ZodObject<z.objectUtil.extendShape<z.objectUtil.extendShape<{
    onCreate: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
        id: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        id: string;
    }, {
        id: string;
    }>], z.ZodUnknown>, z.ZodVoid>>;
    onDestroy: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
        id: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        id: string;
    }, {
        id: string;
    }>], z.ZodUnknown>, z.ZodVoid>>;
}, {
    id: z.ZodString;
}>, {
    type: z.ZodLiteral<"Iframe">;
    /**
     * The height of the iframe.
     *
     * If not provided, the height will be automatically calculated following a 16:9 ratio.
     */
    height: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodString]>>;
    /**
     * The URL of the iframe.
     */
    url: z.ZodString;
}>, "strip", z.ZodTypeAny, {
    type: "Iframe";
    id: string;
    url: string;
    onCreate?: ((args_0: {
        id: string;
    }, ...args: unknown[]) => void) | undefined;
    onDestroy?: ((args_0: {
        id: string;
    }, ...args: unknown[]) => void) | undefined;
    height?: string | number | undefined;
}, {
    type: "Iframe";
    id: string;
    url: string;
    onCreate?: ((args_0: {
        id: string;
    }, ...args: unknown[]) => void) | undefined;
    onDestroy?: ((args_0: {
        id: string;
    }, ...args: unknown[]) => void) | undefined;
    height?: string | number | undefined;
}>;
/**
 * Represents an iframe element in a panel.
 *
 * The height of the iframe can be set by using the `height` property
 * either as a number (measured in pixels) or a string (e.g. “100px” or “50%“).
 *
 * By default, the height is calculated following a 16:9 ratio.
 *
 * <figure>
 * <img src="./img/iframe-basic.png" alt="Iframe showing an example website" />
 * <figcaption>
 * Iframe with default height (16:9)
 * </figcaption>
 * </figure>
 *
 * ```typescript
 * { type: "Iframe", url: "https://www.example.com" }
 * ```
 *
 * <figure>
 * <img src="./img/iframe-custom-height.png" alt="Iframe showing an example website with a custom height" />
 * <figcaption>
 * Iframe with custom height
 * </figcaption>
 * </figure>
 *
 * ```typescript
 * { type: "Iframe", url: "https://www.example.com", height: 300 }
 * ```
 */
interface UIIframeElement extends UIElementBase, Omit<zInfer<typeof uiIframeElementSchema>, "onCreate" | "onDestroy"> {
}
/**
 * The parameters for creating an iframe element.
 *
 * See {@link UIIframeElement} for more details.
 *
 * @remarks
 * `id` is optional but recommended if you want to be able to perform updates.
 */
interface UIIframeElementCreate extends Omit<UIIframeElement, "id">, UIElementBaseCreateParams {
}
type UIIframeElementCreateClonable = MakeClonableSchema<UIIframeElementCreate>;
/**
 * The parameters for updating an iframe element.
 *
 * See {@link UIIframeElement} for more details.
 *
 * @remarks
 * `id` and `type` are required to identify the element to update.
 */
interface UIIframeElementUpdate extends MakeUpdateSchema<UIIframeElement, UIIframeElementCreate> {
}

declare const uiToggleGroupElementSchema: z.ZodObject<z.objectUtil.extendShape<z.objectUtil.extendShape<z.objectUtil.extendShape<{
    onCreate: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
        id: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        id: string;
    }, {
        id: string;
    }>], z.ZodUnknown>, z.ZodVoid>>;
    onDestroy: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
        id: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        id: string;
    }, {
        id: string;
    }>], z.ZodUnknown>, z.ZodVoid>>;
}, {
    id: z.ZodString;
}>, {
    label: z.ZodOptional<z.ZodString>;
}>, {
    type: z.ZodLiteral<"ToggleGroup">;
    /**
     * The alignment of the toggle group.
     *
     * @defaultValue `"start"`
     */
    alignment: z.ZodOptional<z.ZodEnum<["start", "end"]>>;
    options: z.ZodArray<z.ZodObject<{
        label: z.ZodString;
        value: z.ZodString;
        disabled: z.ZodOptional<z.ZodBoolean>;
    }, "strip", z.ZodTypeAny, {
        value: string;
        label: string;
        disabled?: boolean | undefined;
    }, {
        value: string;
        label: string;
        disabled?: boolean | undefined;
    }>, "many">;
    /**
     * The value of the toggle group.
     *
     * @defaultValue `[]`
     */
    value: z.ZodArray<z.ZodString, "many">;
    onChange: z.ZodFunction<z.ZodTuple<[z.ZodObject<{
        value: z.ZodArray<z.ZodString, "many">;
        id: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        value: string[];
        id: string;
    }, {
        value: string[];
        id: string;
    }>], z.ZodUnknown>, z.ZodVoid>;
}>, "strip", z.ZodTypeAny, {
    options: {
        value: string;
        label: string;
        disabled?: boolean | undefined;
    }[];
    type: "ToggleGroup";
    value: string[];
    id: string;
    onChange: (args_0: {
        value: string[];
        id: string;
    }, ...args: unknown[]) => void;
    onCreate?: ((args_0: {
        id: string;
    }, ...args: unknown[]) => void) | undefined;
    onDestroy?: ((args_0: {
        id: string;
    }, ...args: unknown[]) => void) | undefined;
    label?: string | undefined;
    alignment?: "start" | "end" | undefined;
}, {
    options: {
        value: string;
        label: string;
        disabled?: boolean | undefined;
    }[];
    type: "ToggleGroup";
    value: string[];
    id: string;
    onChange: (args_0: {
        value: string[];
        id: string;
    }, ...args: unknown[]) => void;
    onCreate?: ((args_0: {
        id: string;
    }, ...args: unknown[]) => void) | undefined;
    onDestroy?: ((args_0: {
        id: string;
    }, ...args: unknown[]) => void) | undefined;
    label?: string | undefined;
    alignment?: "start" | "end" | undefined;
}>;
/**
 * The parameters for creating a toggle group element.
 *
 * ### Options
 *
 * The options to display in the toggle group are defined using the `options` property.
 * It can contain one or more options and each option renders a toggle.
 *
 * <figure>
 * <img src="./img/toggle-group-basic.png" alt="Toggle group basic" />
 * <figcaption>
 * A group with a single option
 * </figcaption>
 * </figure>
 *
 * ```typescript
 * {
 *   type: "ToggleGroup",
 *   options: [{ label: "Option A", value: "optionA" }],
 *   value: [],
 *   onChange: ({ value, id }) => { }
 * }
 * ```
 *
 * ### Alignment
 *
 * By default, the toggles are aligned to the start of the group,
 * but it can be changed to `end` by setting the `alignment` property to `end`.
 *
 * <figure>
 * <img src="./img/toggle-group-end-alignment.png" alt="Toggle group end alignment" />
 * <figcaption>
 * The toggles are aligned to the end
 * </figcaption>
 * </figure>
 *
 * ```typescript
 * {
 *   type: "ToggleGroup",
 *   alignment: "end",
 *   label: "All options",
 *   options: [
 *     { label: "Option A", value: "optionA" },
 *     { label: "Option B", value: "optionB" },
 *   ],
 *   value: ["optionA"],
 *   onChange: ({ value, id }) => { }
 * }
 * ```
 *
 * ### Label
 *
 * As a control, the toggle group can have a label displayed above the toggles.
 *
 * <img src="./img/toggle-group-with-label.png" alt="Toggle group with label" />
 *
 * ```typescript
 * {
 *   type: "ToggleGroup",
 *   label: "All options",
 *   options: [
 *     { label: "Option A", value: "optionA" },
 *     { label: "Option B", value: "optionB" },
 *   ],
 *   value: ["optionA"],
 *   onChange: ({ value, id }) => { }
 * }
 * ```
 */
interface UIToggleGroupElement extends UILabelReadyElement, Omit<zInfer<typeof uiToggleGroupElementSchema>, "onChange" | "onCreate" | "onDestroy" | "options"> {
    /**
     * The options to display in the toggle group.
     */
    options: Array<UIControlElementOption>;
    /**
     * The function to call when the value of the toggle group changes.
     *
     * @param args - The arguments passed to the function.
     * @param args.value - Array of the selected values.
     * @param args.id - The id of the toggle group element.
     */
    onChange: (args: {
        value: Array<UIControlElementOption["value"]>;
        id: string;
    }) => void;
}
/**
 * The parameters for creating a toggle group element.
 *
 * See {@link UIToggleGroupElement} for more details.
 */
interface UIToggleGroupElementCreate extends Omit<UIToggleGroupElement, "id">, UILabelReadyElementCreateParams {
}
type UIToggleGroupElementCreateClonable = MakeClonableSchema<UIToggleGroupElementCreate>;
/**
 * The parameters for updating a toggle group element.
 *
 * See {@link UIToggleGroupElement} for more details.
 */
interface UIToggleGroupElementUpdate extends MakeUpdateSchema<UIToggleGroupElement, UIToggleGroupElementCreate> {
}

declare const uiRadioGroupElementSchema: z.ZodObject<z.objectUtil.extendShape<z.objectUtil.extendShape<z.objectUtil.extendShape<{
    onCreate: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
        id: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        id: string;
    }, {
        id: string;
    }>], z.ZodUnknown>, z.ZodVoid>>;
    onDestroy: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
        id: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        id: string;
    }, {
        id: string;
    }>], z.ZodUnknown>, z.ZodVoid>>;
}, {
    id: z.ZodString;
}>, {
    label: z.ZodOptional<z.ZodString>;
}>, {
    type: z.ZodLiteral<"RadioGroup">;
    /**
     * The options to display in the radio group.
     */
    options: z.ZodArray<z.ZodObject<{
        label: z.ZodString;
        value: z.ZodString;
        disabled: z.ZodOptional<z.ZodBoolean>;
    }, "strip", z.ZodTypeAny, {
        value: string;
        label: string;
        disabled?: boolean | undefined;
    }, {
        value: string;
        label: string;
        disabled?: boolean | undefined;
    }>, "many">;
    /**
     * The value of the radio group.
     *
     * @defaultValue `undefined`
     */
    value: z.ZodOptional<z.ZodString>;
    onChange: z.ZodFunction<z.ZodTuple<[z.ZodObject<{
        value: z.ZodOptional<z.ZodString>;
        id: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        id: string;
        value?: string | undefined;
    }, {
        id: string;
        value?: string | undefined;
    }>], z.ZodUnknown>, z.ZodVoid>;
}>, "strip", z.ZodTypeAny, {
    options: {
        value: string;
        label: string;
        disabled?: boolean | undefined;
    }[];
    type: "RadioGroup";
    id: string;
    onChange: (args_0: {
        id: string;
        value?: string | undefined;
    }, ...args: unknown[]) => void;
    value?: string | undefined;
    onCreate?: ((args_0: {
        id: string;
    }, ...args: unknown[]) => void) | undefined;
    onDestroy?: ((args_0: {
        id: string;
    }, ...args: unknown[]) => void) | undefined;
    label?: string | undefined;
}, {
    options: {
        value: string;
        label: string;
        disabled?: boolean | undefined;
    }[];
    type: "RadioGroup";
    id: string;
    onChange: (args_0: {
        id: string;
        value?: string | undefined;
    }, ...args: unknown[]) => void;
    value?: string | undefined;
    onCreate?: ((args_0: {
        id: string;
    }, ...args: unknown[]) => void) | undefined;
    onDestroy?: ((args_0: {
        id: string;
    }, ...args: unknown[]) => void) | undefined;
    label?: string | undefined;
}>;
/**
 * The parameters for creating a radio group element.
 *
 * The radio group is a control that allows the user to select a single value from a list of options.
 *
 * As a control, the radio group can have a label displayed above the radioes.
 *
 * If no value is provided, `value` is `undefined`, the radio group will be empty.
 *
 * <figure>
 * <img src="./img/radio-group-basic.png" alt="Radio group basic" />
 * <figcaption>
 * A radio buttons group with a label
 * </figcaption>
 * </figure>
 *
 * ```typescript
 * {
 *   type: "RadioGroup",
 *   label: "Select a side",
 *   options: [
 *     { label: "🍟", value: "fries" },
 *     { label: "🍚", value: "rice" },
 *     { label: "🥗", value: "salad" },
 *   ],
 *   value: "rice",
 *   onChange: ({ value, id }) => { }
 * }
 * ```
 */
interface UIRadioGroupElement extends UILabelReadyElement, Omit<zInfer<typeof uiRadioGroupElementSchema>, "onChange" | "onCreate" | "onDestroy" | "options"> {
    /**
     * The options to display in the radio group.
     */
    options: Array<UIControlElementOption>;
    /**
     * The function to call when the value of the radio group changes.
     *
     * @param args - The arguments passed to the function.
     * @param args.value - The selected value.
     * @param args.id - The id of the radio group element.
     */
    onChange: (args: {
        value: UIControlElementOption["value"] | undefined;
        id: string;
    }) => void;
}
/**
 * The parameters for creating a radio group element.
 *
 * See {@link UIRadioGroupElement} for more details.
 */
interface UIRadioGroupElementCreate extends Omit<UIRadioGroupElement, "id">, UILabelReadyElementCreateParams {
}
type UIRadioGroupElementCreateClonable = MakeClonableSchema<UIRadioGroupElementCreate>;
/**
 * The parameters for updating a radio group element.
 *
 * See {@link UIRadioGroupElement} for more details.
 */
interface UIRadioGroupElementUpdate extends MakeUpdateSchema<UIRadioGroupElement, UIRadioGroupElementCreate> {
}

declare const uiSelectElementSchema: z.ZodObject<z.objectUtil.extendShape<z.objectUtil.extendShape<z.objectUtil.extendShape<{
    onCreate: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
        id: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        id: string;
    }, {
        id: string;
    }>], z.ZodUnknown>, z.ZodVoid>>;
    onDestroy: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
        id: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        id: string;
    }, {
        id: string;
    }>], z.ZodUnknown>, z.ZodVoid>>;
}, {
    id: z.ZodString;
}>, {
    label: z.ZodOptional<z.ZodString>;
}>, {
    type: z.ZodLiteral<"Select">;
    /**
     * The options to display in the select.
     */
    options: z.ZodArray<z.ZodObject<{
        label: z.ZodString;
        value: z.ZodString;
        disabled: z.ZodOptional<z.ZodBoolean>;
    }, "strip", z.ZodTypeAny, {
        value: string;
        label: string;
        disabled?: boolean | undefined;
    }, {
        value: string;
        label: string;
        disabled?: boolean | undefined;
    }>, "many">;
    /**
     * The value of the select.
     */
    value: z.ZodOptional<z.ZodString>;
    /**
     * The placeholder text to display in the select.
     */
    placeholder: z.ZodOptional<z.ZodString>;
    /**
     * Whether the select should allow searching through the options.
     *
     * @defaultValue `false`
     */
    search: z.ZodOptional<z.ZodBoolean>;
    onChange: z.ZodFunction<z.ZodTuple<[z.ZodObject<{
        value: z.ZodString;
        id: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        value: string;
        id: string;
    }, {
        value: string;
        id: string;
    }>], z.ZodUnknown>, z.ZodVoid>;
}>, "strip", z.ZodTypeAny, {
    options: {
        value: string;
        label: string;
        disabled?: boolean | undefined;
    }[];
    type: "Select";
    id: string;
    onChange: (args_0: {
        value: string;
        id: string;
    }, ...args: unknown[]) => void;
    value?: string | undefined;
    onCreate?: ((args_0: {
        id: string;
    }, ...args: unknown[]) => void) | undefined;
    onDestroy?: ((args_0: {
        id: string;
    }, ...args: unknown[]) => void) | undefined;
    label?: string | undefined;
    search?: boolean | undefined;
    placeholder?: string | undefined;
}, {
    options: {
        value: string;
        label: string;
        disabled?: boolean | undefined;
    }[];
    type: "Select";
    id: string;
    onChange: (args_0: {
        value: string;
        id: string;
    }, ...args: unknown[]) => void;
    value?: string | undefined;
    onCreate?: ((args_0: {
        id: string;
    }, ...args: unknown[]) => void) | undefined;
    onDestroy?: ((args_0: {
        id: string;
    }, ...args: unknown[]) => void) | undefined;
    label?: string | undefined;
    search?: boolean | undefined;
    placeholder?: string | undefined;
}>;
/**
 * Represents a select element in a panel.
 *
 * @remarks
 * `options` property is required.
 * `label` property is displayed above the select and used for screen readers.
 * `value` property is optional, for empty value use `undefined`.
 * `placeholder` property is displayed in the select when no value is selected.
 * `search` property is used to enable searching through the options.
 * `onChange` property is used to handle the value change event.
 *
 * @example
 * #### empty select
 * ```typescript
 * {
 *   type: "Select",
 *   options: [{ label: "Option 1", value: "option1" }, { label: "Option 2", value: "option2" }],
 *   value: undefined,
 *   placeholder: "Select an option",
 *   onChange: (args) => console.log(args.value),
 * }
 * ```
 *
 * @example
 * #### with label
 * `label` is displayed above the select and used for screen readers.
 * `placeholder` is displayed in the select when no value is selected.
 *
 * ```typescript
 * {
 *   type: "Select",
 *   label: "Fruit",
 *   options: [{ label: "Apple", value: "apple" }, { label: "Banana", value: "banana" }],
 *   value: undefined,
 *   placeholder: "Select a fruit",
 *   onChange: (args) => console.log(args.value),
 * }
 * ```
 *
 * @example
 * #### with search
 * ```typescript
 * {
 *   type: "Select",
 *   options: [{ label: "Option 1", value: "option1" }, { label: "Option 2", value: "option2" }],
 *   value: "option1",
 *   placeholder: "Select an option",
 *   search: true,
 *   onChange: (args) => console.log(args.value),
 * }
 * ```
 */
interface UISelectElement extends UILabelReadyElement, Omit<zInfer<typeof uiSelectElementSchema>, "onChange" | "onCreate" | "onDestroy" | "options"> {
    /**
     * The options to display in the select.
     */
    options: Array<UIControlElementOption>;
    /**
     * The function to call when the value of the select changes.
     *
     * @param args - The arguments passed to the function.
     * @param args.value - The value of the select.
     * @param args.id - The id of the select element.
     */
    onChange: (args: {
        value: string;
        id: string;
    }) => void;
}
/**
 * The parameters for creating a select element.
 *
 * See {@link UISelectElement} for more details.
 *
 * @remarks
 * `id` is optional but recommended if you want to be able to perform updates.
 */
interface UISelectElementCreate extends Omit<UISelectElement, "id">, UILabelReadyElementCreateParams {
}
type UISelectElementCreateClonable = MakeClonableSchema<UISelectElementCreate>;
/**
 * The parameters for updating a select element.
 *
 * See {@link UISelectElement} for more details.
 *
 * @remarks
 * `id` and `type` are required to identify the element to update.
 */
interface UISelectElementUpdate extends MakeUpdateSchema<UISelectElement, UISelectElementCreate> {
}

declare const uiTextInputElementSchema: z.ZodObject<z.objectUtil.extendShape<z.objectUtil.extendShape<z.objectUtil.extendShape<{
    onCreate: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
        id: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        id: string;
    }, {
        id: string;
    }>], z.ZodUnknown>, z.ZodVoid>>;
    onDestroy: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
        id: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        id: string;
    }, {
        id: string;
    }>], z.ZodUnknown>, z.ZodVoid>>;
}, {
    id: z.ZodString;
}>, {
    label: z.ZodOptional<z.ZodString>;
}>, {
    type: z.ZodLiteral<"TextInput">;
    /**
     * The value of the input. Use `""` for empty values.
     */
    value: z.ZodString;
    /**
     * The placeholder text to display in the input.
     */
    placeholder: z.ZodOptional<z.ZodString>;
    onChange: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
        value: z.ZodString;
        id: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        value: string;
        id: string;
    }, {
        value: string;
        id: string;
    }>], z.ZodUnknown>, z.ZodVoid>>;
    onBlur: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
        value: z.ZodString;
        id: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        value: string;
        id: string;
    }, {
        value: string;
        id: string;
    }>], z.ZodUnknown>, z.ZodVoid>>;
    onFocus: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
        value: z.ZodString;
        id: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        value: string;
        id: string;
    }, {
        value: string;
        id: string;
    }>], z.ZodUnknown>, z.ZodVoid>>;
}>, "strip", z.ZodTypeAny, {
    type: "TextInput";
    value: string;
    id: string;
    onCreate?: ((args_0: {
        id: string;
    }, ...args: unknown[]) => void) | undefined;
    onDestroy?: ((args_0: {
        id: string;
    }, ...args: unknown[]) => void) | undefined;
    label?: string | undefined;
    placeholder?: string | undefined;
    onChange?: ((args_0: {
        value: string;
        id: string;
    }, ...args: unknown[]) => void) | undefined;
    onBlur?: ((args_0: {
        value: string;
        id: string;
    }, ...args: unknown[]) => void) | undefined;
    onFocus?: ((args_0: {
        value: string;
        id: string;
    }, ...args: unknown[]) => void) | undefined;
}, {
    type: "TextInput";
    value: string;
    id: string;
    onCreate?: ((args_0: {
        id: string;
    }, ...args: unknown[]) => void) | undefined;
    onDestroy?: ((args_0: {
        id: string;
    }, ...args: unknown[]) => void) | undefined;
    label?: string | undefined;
    placeholder?: string | undefined;
    onChange?: ((args_0: {
        value: string;
        id: string;
    }, ...args: unknown[]) => void) | undefined;
    onBlur?: ((args_0: {
        value: string;
        id: string;
    }, ...args: unknown[]) => void) | undefined;
    onFocus?: ((args_0: {
        value: string;
        id: string;
    }, ...args: unknown[]) => void) | undefined;
}>;
/**
 * Represents a text input element in a panel.
 *
 * @remarks
 * `value` property is required, for empty value use `""`.
 * `label` property is displayed above the input and used for screen readers.
 *
 * @example
 * #### empty input
 * ```typescript
 * {
 *   type: "TextInput",
 *   value: "",
 *   onChange: (args) => console.log(args.value),
 *   placeholder: "Enter your name",
 * }
 * ```
 *
 * @example
 * #### with label
 * ```typescript
 * {
 *   type: "TextInput",
 *   label: "Name",
 *   value: "Hello",
 *   onChange: (args) => console.log(args.value),
 *   placeholder: "Enter your name",
 * }
 * ```
 */
interface UITextInputElement extends UILabelReadyElement, Omit<zInfer<typeof uiTextInputElementSchema>, "onChange" | "onBlur" | "onFocus" | "onCreate" | "onDestroy"> {
    /**
     * The function to call when the value of the input changes.
     *
     * @param args - The arguments passed to the function.
     * @param args.value - The value of the input.
     * @param args.id - The id of the input element.
     */
    onChange?: (args: {
        value: string;
        id: string;
    }) => void;
    /**
     * The function to call when the input is blurred.
     *
     * @param args - The arguments passed to the function.
     * @param args.value - The value of the input.
     * @param args.id - The id of the input element.
     */
    onBlur?: (args: {
        value: string;
        id: string;
    }) => void;
    /**
     * The function to call when the input is focused.
     *
     * @param args - The arguments passed to the function.
     * @param args.value - The value of the input.
     * @param args.id - The id of the input element.
     */
    onFocus?: (args: {
        value: string;
        id: string;
    }) => void;
}
/**
 * The parameters for creating a text input element.
 *
 * See {@link UITextInputElement} for more details.
 *
 * @remarks
 * `id` is optional but recommended if you want to be able to perform updates.
 */
interface UITextInputElementCreate extends Omit<UITextInputElement, "id">, UILabelReadyElementCreateParams {
}
type UITextInputElementCreateClonable = MakeClonableSchema<UITextInputElementCreate>;
/**
 * The parameters for updating a text input element.
 *
 * See {@link UITextInputElement} for more details.
 *
 * @remarks
 * `id` and `type` are required to identify the element to update.
 */
interface UITextInputElementUpdate extends MakeUpdateSchema<UITextInputElement, UITextInputElementCreate> {
}

declare const uiTextElementSchema: z.ZodObject<z.objectUtil.extendShape<z.objectUtil.extendShape<{
    onCreate: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
        id: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        id: string;
    }, {
        id: string;
    }>], z.ZodUnknown>, z.ZodVoid>>;
    onDestroy: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
        id: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        id: string;
    }, {
        id: string;
    }>], z.ZodUnknown>, z.ZodVoid>>;
}, {
    id: z.ZodString;
}>, {
    type: z.ZodLiteral<"Text">;
    /**
     * The text to display in the element.
     */
    content: z.ZodString;
}>, "strip", z.ZodTypeAny, {
    type: "Text";
    id: string;
    content: string;
    onCreate?: ((args_0: {
        id: string;
    }, ...args: unknown[]) => void) | undefined;
    onDestroy?: ((args_0: {
        id: string;
    }, ...args: unknown[]) => void) | undefined;
}, {
    type: "Text";
    id: string;
    content: string;
    onCreate?: ((args_0: {
        id: string;
    }, ...args: unknown[]) => void) | undefined;
    onDestroy?: ((args_0: {
        id: string;
    }, ...args: unknown[]) => void) | undefined;
}>;
/**
 * Represents a text element in a panel.
 * Markdown is supported.
 *
 * @example
 * #### simple
 * ```typescript
 * {
 *   type: "Text",
 *   content: "Hello, world!",
 * }
 * ```
 *
 * @example
 * #### with links
 * ```typescript
 * {
 *   type: "Text",
 *   content: "Fill the form https://www.google.com.",
 * }
 * ```
 *
 * @example
 * #### markdown
 * ```typescript
 * {
 *   type: "Text",
 *   content: "**Hello**, _world_!",
 * }
 * ```
 *
 * @example
 * #### complex markdown
 * Complex markdown syntax is supported like tables, images, quotes, etc.
 * ```typescript
 * {
 *   type: "Text",
 *   content: `
 *
 * ## Heading
 *
 * This is a paragraph.
 *
 * ### Subheading
 *
 * This is a paragraph.
 *
 * | Name | Age |
 * | ---- | --- |
 * | John | 25 |
 * | Jane | 30 |
 *
 * ![Image](https://via.placeholder.com/150)
 *
 * > This is a quote.
 *
 * [Link](https://www.google.com)
 * `,
 * }
 * ```
 */
interface UITextElement extends UIElementBase, Omit<zInfer<typeof uiTextElementSchema>, "onCreate" | "onDestroy"> {
}
/**
 * The parameters for creating a text element.
 *
 * See {@link UITextElement} for more details.
 *
 * @remarks
 * `id` is optional but recommended if you want to be able to perform updates.
 */
interface UITextElementCreate extends Omit<UITextElement, "id">, UIElementBaseCreateParams {
}
type UITextElementCreateClonable = MakeClonableSchema<UITextElementCreate>;
/**
 * The parameters for updating a text element.
 *
 * See {@link UITextElement} for more details.
 *
 * @remarks
 * `id` and `type` are required to identify the element to update.
 */
interface UITextElementUpdate extends MakeUpdateSchema<UITextElement, UITextElementCreate> {
}

type ItemCreateClonableType = Exclude<UIPanelElementCreateClonable, {
    type: "Grid";
}>;
/**
 * Represents a container with a grid layout in a panel.
 *
 * By default, the grid items are vertically stacked,
 * but you can change the grid to use a different layout by
 * setting the `grid` property to a different value.
 *
 * `grid` property is the exact same as CSS's shorthand property `grid`.
 * [See the MDN documentation for more details](https://developer.mozilla.org/en-US/docs/Web/CSS/grid).
 *
 * You can understand {@link UIPanel} `body` and `footer` properties
 * as grid containers using default vertical stack layout.
 *
 * ### Horizontal stack
 *
 * As part of CSS Grid Layout capabilities it is possible to create a horizontal stack.
 *
 * #### Alignment & Distribution
 *
 * On horizontal stacks, it is possible to align and distribute the items.
 *
 * `verticalAlignment` is used to align the items vertically. By default, items are aligned to the top of the container.
 * It follows the same values as CSS's `align-items` property. See [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/CSS/align-items) for more details.
 *
 * `horizontalDistribution` is used to justify the items horizontally. By default, items are justified to the start of the container.
 * It follows the same values as CSS's `justify-content` property. See [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/CSS/justify-content) for more details.
 *
 * #### Equal width columns
 *
 * <figure>
 * <img src="./img/grid-horizontal-stack.png" alt="Horizontal stack" />
 * <figcaption>Two columns, each sharing 50% of the container width</figcaption>
 * </figure>
 *
 * ```typescript
 * {
 *   type: "Grid",
 *   grid: "auto-flow / 1fr 1fr",
 *   items: [
 *     { type: "TextInput", label: "Name", value: "" },
 *     { type: "TextInput", label: "Last name", value: "" },
 *   ],
 * }
 * ```
 *
 * ### FlexibleSpace element
 *
 * `FlexibleSpace` element is a handy solution to allow more control over grid layout.
 *
 * If `grid` is not set, `FlexibleSpace` will add some space between the items.
 * By using `grid` property it is possible to control FlexibleSpace's size.

 * #### to right align the input
 *
 * <figure>
 * <img src="./img/grid-flexible-space.png" alt="Flexible space to right align the input" />
 * <figcaption>Flexible space takes 50% of the container width</figcaption>
 * </figure>
 *
 * ```typescript
 * {
 *   type: "Grid",
 *   grid: "auto-flow / 1fr 1fr",
 *   items: [
 *     { type: "FlexibleSpace" },
 *     { type: "TextInput", label: "An input" , value: "" },
 *   ],
 * }
 * ```
 *
 * #### two columns of buttons with space between them
 *
 * <figure>
 * <img src="./img/grid-two-groups-of-buttons.png" alt="Two groups of buttons" />
 * <figcaption>Two groups of buttons</figcaption>
 * </figure>
 *
 *
 * ```typescript
 * {
 *   type: "Grid",
 *   grid: "auto-flow / auto auto 1fr auto auto",
 *   items: [
 *     { type: "Button", label: "A" , onClick: () => {} },
 *     { type: "Button", label: "B" , onClick: () => {} },
 *     { type: "FlexibleSpace" },
 *     { type: "Button", label: "C" , onClick: () => {} },
 *     { type: "Button", label: "D" , onClick: () => {} },
 *   ],
 * }
 * ```
 */
interface UIGridContainerElement extends UIElementBase {
    type: "Grid";
    /**
     * The grid to use for the container.
     * It is the exact same as CSS's shorthand property `grid`.
     *
     * @example
     * #### horizontal stack
     *
     * two columns, the first column is 50px wide, the second column takes the remaining space
     * ```typescript
     * {
     *   type: "Grid",
     *   grid: "auto-flow / 50px 1fr",
     *   items: [...]
     * }
     * ```
     *
     * @see {@link https://developer.mozilla.org/en-US/docs/Web/CSS/grid} for more details.
     *
     */
    grid?: string;
    /**
     * The alignment of the items in the grid.
     * Only takes effect on horizontal stacks.
     *
     * @defaultValue `"top"`
     */
    verticalAlignment?: "top" | "center" | "bottom";
    /**
     * The distribution of the items in the grid.
     * Only takes effect on horizontal stacks.
     *
     * @defaultValue `"start"`
     */
    horizontalDistribution?: "start" | "center" | "end" | "space-between" | "space-around" | "space-evenly";
    /**
     * The items to add to the grid container.
     */
    items: Array<Exclude<UIPanelElement, {
        type: "Grid";
    }>>;
}
/**
 * The parameters for creating a grid container element.
 *
 * See {@link UIGridContainerElement} for more details.
 */
interface UIGridContainerElementCreate extends Omit<UIGridContainerElement, "id" | "items">, UIElementBaseCreateParams {
    /**
     * The items to add to the grid container.
     */
    items: Array<Exclude<UIPanelElementCreate, {
        type: "Grid";
    }>>;
}
type UIGridContainerElementCreateClonable = Omit<MakeClonableSchema<UIGridContainerElementCreate>, "items"> & {
    items: Array<ItemCreateClonableType>;
};
/**
 * The parameters for updating a grid container element.
 *
 * See {@link UIGridContainerElement} for more details.
 *
 * @remarks
 * `id` and `type` are required to identify the element to update.
 */
interface UIGridContainerElementUpdate extends MakeUpdateSchema<UIGridContainerElement, UIGridContainerElementCreate> {
}

type UIPanelElement = UIButtonElement | UITextElement | UIDividerElement | UITextInputElement | UISelectElement | UIFlexibleSpaceElement | UIButtonRowElement | UICheckboxGroupElement | UIRadioGroupElement | UIToggleGroupElement | UIIframeElement | UIGridContainerElement;
/**
 * This is a union of all the possible elements that can be created inside panel's body or footer.
 *
 * @remarks
 * For the sake of convenience, `id` is optional but recommended if you want to be able to perform updates.
 */
type UIPanelElementCreate = UIButtonElementCreate | UITextElementCreate | UIDividerElementCreate | UITextInputElementCreate | UISelectElementCreate | UIFlexibleSpaceElementCreate | UIButtonRowElementCreate | UICheckboxGroupElementCreate | UIRadioGroupElementCreate | UIToggleGroupElementCreate | UIIframeElementCreate | UIGridContainerElementCreate;
type UIPanelElementCreateClonable = UIButtonElementCreateClonable | UITextElementCreateClonable | UIDividerElementCreateClonable | UITextInputElementCreateClonable | UISelectElementCreateClonable | UIFlexibleSpaceElementCreateClonable | UIButtonRowElementCreateClonable | UICheckboxGroupElementCreateClonable | UIRadioGroupElementCreateClonable | UIToggleGroupElementCreateClonable | UIIframeElementCreateClonable | UIGridContainerElementCreateClonable;
/**
 * This is a union of all the possible elements that can be updated inside panel's body or footer (excluding Divider and FlexibleSpace elements because they cannot be updated).
 *
 * @remarks
 * `id` and `type` are required to identify the element to update.
 */
type UIPanelElementUpdate = UIButtonElementUpdate | UITextElementUpdate | UITextInputElementUpdate | UISelectElementUpdate | UIDividerElementUpdate | UIButtonRowElementUpdate | UICheckboxGroupElementUpdate | UIRadioGroupElementUpdate | UIToggleGroupElementUpdate | UIGridContainerElementUpdate | UIFlexibleSpaceElementUpdate | UIIframeElementUpdate;

declare const placementForUiElementSchema: z.ZodUnion<[z.ZodObject<{
    after: z.ZodString;
}, "strip", z.ZodTypeAny, {
    after: string;
}, {
    after: string;
}>, z.ZodObject<{
    before: z.ZodString;
}, "strip", z.ZodTypeAny, {
    before: string;
}, {
    before: string;
}>, z.ZodObject<{
    at: z.ZodEnum<["start", "end"]>;
}, "strip", z.ZodTypeAny, {
    at: "start" | "end";
}, {
    at: "start" | "end";
}>]>;
/**
 * Used in {@link UiController.createOrUpdatePanel} to specify the position of a panel in the stack
 * and in {@link UiController.createPanelElements} to specify the position of an element in a panel.
 *
 * In both cases, the default value is `{ at: "end" }`.
 */
type PlacementForUIElement = z.infer<typeof placementForUiElementSchema>;

declare const uiPanelSchema: z.ZodObject<z.objectUtil.extendShape<z.objectUtil.extendShape<{
    onCreate: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
        id: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        id: string;
    }, {
        id: string;
    }>], z.ZodUnknown>, z.ZodVoid>>;
    onDestroy: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
        id: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        id: string;
    }, {
        id: string;
    }>], z.ZodUnknown>, z.ZodVoid>>;
}, {
    id: z.ZodString;
}>, {
    type: z.ZodLiteral<"Panel">;
    /**
     * The title to display in the panel header.
     */
    title: z.ZodOptional<z.ZodString>;
    /**
     * The elements to add to the panel body.
     */
    body: z.ZodOptional<z.ZodArray<z.ZodType<UIPanelElement, z.ZodTypeDef, UIPanelElement>, "many">>;
    /**
     * The elements to add to the panel footer.
     */
    footer: z.ZodOptional<z.ZodArray<z.ZodType<UIPanelElement, z.ZodTypeDef, UIPanelElement>, "many">>;
    onClickClose: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
        id: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        id: string;
    }, {
        id: string;
    }>], z.ZodUnknown>, z.ZodVoid>>;
}>, "strip", z.ZodTypeAny, {
    type: "Panel";
    id: string;
    onCreate?: ((args_0: {
        id: string;
    }, ...args: unknown[]) => void) | undefined;
    onDestroy?: ((args_0: {
        id: string;
    }, ...args: unknown[]) => void) | undefined;
    title?: string | undefined;
    body?: UIPanelElement[] | undefined;
    footer?: UIPanelElement[] | undefined;
    onClickClose?: ((args_0: {
        id: string;
    }, ...args: unknown[]) => void) | undefined;
}, {
    type: "Panel";
    id: string;
    onCreate?: ((args_0: {
        id: string;
    }, ...args: unknown[]) => void) | undefined;
    onDestroy?: ((args_0: {
        id: string;
    }, ...args: unknown[]) => void) | undefined;
    title?: string | undefined;
    body?: UIPanelElement[] | undefined;
    footer?: UIPanelElement[] | undefined;
    onClickClose?: ((args_0: {
        id: string;
    }, ...args: unknown[]) => void) | undefined;
}>;
/**
 * A UI panel that can be added to the map using {@link UiController.createOrUpdatePanel}.
 *
 * Panels are containers for UI elements with title, body, footer, and close button.
 * Body and footer elements are arranged in vertical stacks.
 *
 * #### Body
 * Main content area that scrolls when content exceeds available space.
 *
 * #### Footer
 * Sticky bottom section for action buttons (e.g., Save, Cancel).
 *
 * #### Close Button
 * Optional close icon in header. When `onClickClose` is provided, you must handle
 * panel cleanup and removal.
 *
 * @example
 * ```typescript
 * // 1. Create panel ID
 * const panelId = await felt.createPanelId();
 *
 * // 2. Create panel with close button and footer
 * await felt.createOrUpdatePanel({
 *   panel: {
 *     id: panelId,
 *     title: "My Panel",
 *     body: [
 *       { type: "Text", content: "Hello, world!" },
 *       { type: "TextInput", label: "Name", placeholder: "Enter your name" }
 *     ],
 *     footer: [
 *       {
 *         type: "ButtonRow",
 *         align: "end",
 *         items: [
 *           { type: "Button", label: "Cancel", onClick: () => handleCancel() },
 *           { type: "Button", label: "Save", onClick: () => handleSave() }
 *         ]
 *       }
 *     ],
 *     onClickClose: (args) => {
 *       // Clean up any state or resources
 *       cleanupResources();
 *       // Close the panel
 *       felt.deletePanel(panelId);
 *     }
 *   }
 * });
 * ```
 */
interface UIPanel extends UIElementBase, Omit<zInfer<typeof uiPanelSchema>, "onClickClose" | "body" | "footer" | "onCreate" | "onDestroy" | "id"> {
    /**
     * The ID of the panel obtained from {@link UiController.createPanelId}.
     *
     * @remarks
     * Custom IDs are not supported.
     */
    id: string;
    /**
     * The elements to add to the panel body.
     */
    body?: UIPanelElement[];
    /**
     * The elements to add to the panel footer.
     */
    footer?: UIPanelElement[];
    /**
     * A function to call when panel's close button is clicked.
     *
     * @param args - The arguments passed to the function.
     * @param args.id - The id of the panel.
     */
    onClickClose?: (args: {
        id: string;
    }) => void;
}
declare const uiPanelCreateSchema: {
    params: z.ZodObject<z.objectUtil.extendShape<Omit<{
        type: z.ZodOptional<z.ZodLiteral<"Panel">>;
        id: z.ZodString;
        onCreate: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
            id: z.ZodString;
        }, "strip", z.ZodTypeAny, {
            id: string;
        }, {
            id: string;
        }>], z.ZodUnknown>, z.ZodVoid>>;
        onDestroy: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
            id: z.ZodString;
        }, "strip", z.ZodTypeAny, {
            id: string;
        }, {
            id: string;
        }>], z.ZodUnknown>, z.ZodVoid>>;
        title: z.ZodOptional<z.ZodString>;
        body: z.ZodOptional<z.ZodArray<z.ZodType<UIPanelElement, z.ZodTypeDef, UIPanelElement>, "many">>;
        footer: z.ZodOptional<z.ZodArray<z.ZodType<UIPanelElement, z.ZodTypeDef, UIPanelElement>, "many">>;
        onClickClose: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
            id: z.ZodString;
        }, "strip", z.ZodTypeAny, {
            id: string;
        }, {
            id: string;
        }>], z.ZodUnknown>, z.ZodVoid>>;
    }, "body" | "footer">, {
        body: z.ZodOptional<z.ZodArray<z.ZodType<UIPanelElementCreate, z.ZodTypeDef, UIPanelElementCreate>, "many">>;
        footer: z.ZodOptional<z.ZodArray<z.ZodType<UIPanelElementCreate, z.ZodTypeDef, UIPanelElementCreate>, "many">>;
    }>, "strip", z.ZodTypeAny, {
        id: string;
        type?: "Panel" | undefined;
        onCreate?: ((args_0: {
            id: string;
        }, ...args: unknown[]) => void) | undefined;
        onDestroy?: ((args_0: {
            id: string;
        }, ...args: unknown[]) => void) | undefined;
        title?: string | undefined;
        body?: UIPanelElementCreate[] | undefined;
        footer?: UIPanelElementCreate[] | undefined;
        onClickClose?: ((args_0: {
            id: string;
        }, ...args: unknown[]) => void) | undefined;
    }, {
        id: string;
        type?: "Panel" | undefined;
        onCreate?: ((args_0: {
            id: string;
        }, ...args: unknown[]) => void) | undefined;
        onDestroy?: ((args_0: {
            id: string;
        }, ...args: unknown[]) => void) | undefined;
        title?: string | undefined;
        body?: UIPanelElementCreate[] | undefined;
        footer?: UIPanelElementCreate[] | undefined;
        onClickClose?: ((args_0: {
            id: string;
        }, ...args: unknown[]) => void) | undefined;
    }>;
    clonable: z.ZodObject<z.objectUtil.extendShape<{
        type: z.ZodOptional<z.ZodLiteral<"Panel">>;
        id: z.ZodString;
        onCreate: z.ZodOptional<z.ZodString>;
        onDestroy: z.ZodOptional<z.ZodString>;
        title: z.ZodOptional<z.ZodString>;
        body: z.ZodOptional<z.ZodArray<z.ZodType<UIPanelElementCreate, z.ZodTypeDef, UIPanelElementCreate>, "many">>;
        footer: z.ZodOptional<z.ZodArray<z.ZodType<UIPanelElementCreate, z.ZodTypeDef, UIPanelElementCreate>, "many">>;
        onClickClose: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
            id: z.ZodString;
        }, "strip", z.ZodTypeAny, {
            id: string;
        }, {
            id: string;
        }>], z.ZodUnknown>, z.ZodVoid>>;
    }, {
        onClickClose: z.ZodOptional<z.ZodString>;
        body: z.ZodOptional<z.ZodArray<z.ZodType<UIPanelElementCreateClonable, z.ZodTypeDef, UIPanelElementCreateClonable>, "many">>;
        footer: z.ZodOptional<z.ZodArray<z.ZodType<UIPanelElementCreateClonable, z.ZodTypeDef, UIPanelElementCreateClonable>, "many">>;
    }>, "strip", z.ZodTypeAny, {
        id: string;
        type?: "Panel" | undefined;
        onCreate?: string | undefined;
        onDestroy?: string | undefined;
        title?: string | undefined;
        body?: UIPanelElementCreateClonable[] | undefined;
        footer?: UIPanelElementCreateClonable[] | undefined;
        onClickClose?: string | undefined;
    }, {
        id: string;
        type?: "Panel" | undefined;
        onCreate?: string | undefined;
        onDestroy?: string | undefined;
        title?: string | undefined;
        body?: UIPanelElementCreateClonable[] | undefined;
        footer?: UIPanelElementCreateClonable[] | undefined;
        onClickClose?: string | undefined;
    }>;
};
/**
 * The parameters for creating a panel by using {@link UiController.createOrUpdatePanel}.
 *
 * @see {@link UIPanel} for more information about panels.
 */
interface UIPanelCreateOrUpdate extends Omit<UIPanel, "body" | "footer" | "type">, Omit<UIElementBaseCreateParams, "id"> {
    type?: "Panel";
    /**
     * The elements to add to the panel body.
     */
    body?: UIPanelElementCreate[];
    /**
     * The elements to add to the panel footer.
     */
    footer?: UIPanelElementCreate[];
}

declare const uiActionTriggerSchema: {
    read: z.ZodObject<z.objectUtil.extendShape<z.objectUtil.extendShape<z.objectUtil.extendShape<{
        onCreate: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
            id: z.ZodString;
        }, "strip", z.ZodTypeAny, {
            id: string;
        }, {
            id: string;
        }>], z.ZodUnknown>, z.ZodVoid>>;
        onDestroy: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
            id: z.ZodString;
        }, "strip", z.ZodTypeAny, {
            id: string;
        }, {
            id: string;
        }>], z.ZodUnknown>, z.ZodVoid>>;
    }, {
        id: z.ZodString;
    }>, {
        type: z.ZodLiteral<"ActionTrigger">;
        /**
         * The label of the action trigger.
         */
        label: z.ZodString;
        /**
         * Whether the action trigger is disabled or not.
         */
        disabled: z.ZodOptional<z.ZodBoolean>;
    }>, {
        onTrigger: z.ZodFunction<z.ZodTuple<[z.ZodObject<{
            id: z.ZodString;
        }, "strip", z.ZodTypeAny, {
            id: string;
        }, {
            id: string;
        }>], z.ZodUnknown>, z.ZodVoid>;
    }>, "strip", z.ZodTypeAny, {
        type: "ActionTrigger";
        id: string;
        label: string;
        onTrigger: (args_0: {
            id: string;
        }, ...args: unknown[]) => void;
        onCreate?: ((args_0: {
            id: string;
        }, ...args: unknown[]) => void) | undefined;
        onDestroy?: ((args_0: {
            id: string;
        }, ...args: unknown[]) => void) | undefined;
        disabled?: boolean | undefined;
    }, {
        type: "ActionTrigger";
        id: string;
        label: string;
        onTrigger: (args_0: {
            id: string;
        }, ...args: unknown[]) => void;
        onCreate?: ((args_0: {
            id: string;
        }, ...args: unknown[]) => void) | undefined;
        onDestroy?: ((args_0: {
            id: string;
        }, ...args: unknown[]) => void) | undefined;
        disabled?: boolean | undefined;
    }>;
    create: z.ZodObject<z.objectUtil.extendShape<z.objectUtil.extendShape<z.objectUtil.extendShape<{
        id: z.ZodOptional<z.ZodString>;
        onCreate: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
            id: z.ZodString;
        }, "strip", z.ZodTypeAny, {
            id: string;
        }, {
            id: string;
        }>], z.ZodUnknown>, z.ZodVoid>>;
        onDestroy: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
            id: z.ZodString;
        }, "strip", z.ZodTypeAny, {
            id: string;
        }, {
            id: string;
        }>], z.ZodUnknown>, z.ZodVoid>>;
    }, {
        type: z.ZodLiteral<"ActionTrigger">;
        /**
         * The label of the action trigger.
         */
        label: z.ZodString;
        /**
         * Whether the action trigger is disabled or not.
         */
        disabled: z.ZodOptional<z.ZodBoolean>;
    }>, {
        type: z.ZodUndefined;
    }>, {
        onTrigger: z.ZodFunction<z.ZodTuple<[z.ZodObject<{
            id: z.ZodString;
        }, "strip", z.ZodTypeAny, {
            id: string;
        }, {
            id: string;
        }>], z.ZodUnknown>, z.ZodVoid>;
    }>, "strip", z.ZodTypeAny, {
        label: string;
        onTrigger: (args_0: {
            id: string;
        }, ...args: unknown[]) => void;
        type?: undefined;
        id?: string | undefined;
        onCreate?: ((args_0: {
            id: string;
        }, ...args: unknown[]) => void) | undefined;
        onDestroy?: ((args_0: {
            id: string;
        }, ...args: unknown[]) => void) | undefined;
        disabled?: boolean | undefined;
    }, {
        label: string;
        onTrigger: (args_0: {
            id: string;
        }, ...args: unknown[]) => void;
        type?: undefined;
        id?: string | undefined;
        onCreate?: ((args_0: {
            id: string;
        }, ...args: unknown[]) => void) | undefined;
        onDestroy?: ((args_0: {
            id: string;
        }, ...args: unknown[]) => void) | undefined;
        disabled?: boolean | undefined;
    }>;
    clonable: z.ZodObject<z.objectUtil.extendShape<z.objectUtil.extendShape<z.objectUtil.extendShape<z.objectUtil.extendShape<{
        id: z.ZodOptional<z.ZodString>;
        onCreate: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
            id: z.ZodString;
        }, "strip", z.ZodTypeAny, {
            id: string;
        }, {
            id: string;
        }>], z.ZodUnknown>, z.ZodVoid>>;
        onDestroy: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
            id: z.ZodString;
        }, "strip", z.ZodTypeAny, {
            id: string;
        }, {
            id: string;
        }>], z.ZodUnknown>, z.ZodVoid>>;
    }, {
        onCreate: z.ZodOptional<z.ZodString>;
        onDestroy: z.ZodOptional<z.ZodString>;
    }>, {
        type: z.ZodLiteral<"ActionTrigger">;
        /**
         * The label of the action trigger.
         */
        label: z.ZodString;
        /**
         * Whether the action trigger is disabled or not.
         */
        disabled: z.ZodOptional<z.ZodBoolean>;
    }>, {
        type: z.ZodUndefined;
    }>, {
        onTrigger: z.ZodString;
    }>, "strip", z.ZodTypeAny, {
        label: string;
        onTrigger: string;
        type?: undefined;
        id?: string | undefined;
        onCreate?: string | undefined;
        onDestroy?: string | undefined;
        disabled?: boolean | undefined;
    }, {
        label: string;
        onTrigger: string;
        type?: undefined;
        id?: string | undefined;
        onCreate?: string | undefined;
        onDestroy?: string | undefined;
        disabled?: boolean | undefined;
    }>;
};
/**
 * Represents an action trigger.
 * It can be added to the map by using the {@link UiController.createActionTrigger} method.
 */
interface UIActionTriggerCreate extends UIElementLifecycle, Omit<zInfer<typeof uiActionTriggerSchema.create>, "onCreate" | "onDestroy"> {
    /**
     * The function to call when the action trigger is triggered.
     *
     * @param args - The arguments passed to the function.
     * @param args.id - The id of the action trigger.
     */
    onTrigger: (args: {
        id: string;
    }) => void;
}

declare const uiFeatureActionSchema: {
    read: z.ZodObject<z.objectUtil.extendShape<z.objectUtil.extendShape<z.objectUtil.extendShape<{
        onCreate: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
            id: z.ZodString;
        }, "strip", z.ZodTypeAny, {
            id: string;
        }, {
            id: string;
        }>], z.ZodUnknown>, z.ZodVoid>>;
        onDestroy: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
            id: z.ZodString;
        }, "strip", z.ZodTypeAny, {
            id: string;
        }, {
            id: string;
        }>], z.ZodUnknown>, z.ZodVoid>>;
    }, {
        id: z.ZodString;
    }>, {
        type: z.ZodLiteral<"FeatureAction">;
        /**
         * The label of the feature action.
         */
        label: z.ZodString;
        /**
         * The function to call when the feature action is triggered.
         */
        onTrigger: z.ZodFunction<z.ZodTuple<[z.ZodObject<{
            feature: z.ZodType<LayerFeature, z.ZodTypeDef, LayerFeature>;
        }, "strip", z.ZodTypeAny, {
            feature: LayerFeature;
        }, {
            feature: LayerFeature;
        }>], z.ZodUnknown>, z.ZodVoid>;
        /**
         * The layers to add the action to. Optional. Defaults to all layers.
         */
        layerIds: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
        /**
         * The geometry type of the features to add the action to. Optional. Defaults to all geometry types.
         */
        geometryTypes: z.ZodOptional<z.ZodArray<z.ZodEnum<["Polygon", "Line", "Point", "Raster"]>, "many">>;
    }>, {
        id: z.ZodString;
    }>, "strip", z.ZodTypeAny, {
        type: "FeatureAction";
        id: string;
        label: string;
        onTrigger: (args_0: {
            feature: LayerFeature;
        }, ...args: unknown[]) => void;
        onCreate?: ((args_0: {
            id: string;
        }, ...args: unknown[]) => void) | undefined;
        onDestroy?: ((args_0: {
            id: string;
        }, ...args: unknown[]) => void) | undefined;
        layerIds?: string[] | undefined;
        geometryTypes?: ("Point" | "Polygon" | "Line" | "Raster")[] | undefined;
    }, {
        type: "FeatureAction";
        id: string;
        label: string;
        onTrigger: (args_0: {
            feature: LayerFeature;
        }, ...args: unknown[]) => void;
        onCreate?: ((args_0: {
            id: string;
        }, ...args: unknown[]) => void) | undefined;
        onDestroy?: ((args_0: {
            id: string;
        }, ...args: unknown[]) => void) | undefined;
        layerIds?: string[] | undefined;
        geometryTypes?: ("Point" | "Polygon" | "Line" | "Raster")[] | undefined;
    }>;
    create: z.ZodObject<z.objectUtil.extendShape<z.objectUtil.extendShape<{
        id: z.ZodOptional<z.ZodString>;
        onCreate: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
            id: z.ZodString;
        }, "strip", z.ZodTypeAny, {
            id: string;
        }, {
            id: string;
        }>], z.ZodUnknown>, z.ZodVoid>>;
        onDestroy: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
            id: z.ZodString;
        }, "strip", z.ZodTypeAny, {
            id: string;
        }, {
            id: string;
        }>], z.ZodUnknown>, z.ZodVoid>>;
    }, {
        type: z.ZodLiteral<"FeatureAction">;
        /**
         * The label of the feature action.
         */
        label: z.ZodString;
        /**
         * The function to call when the feature action is triggered.
         */
        onTrigger: z.ZodFunction<z.ZodTuple<[z.ZodObject<{
            feature: z.ZodType<LayerFeature, z.ZodTypeDef, LayerFeature>;
        }, "strip", z.ZodTypeAny, {
            feature: LayerFeature;
        }, {
            feature: LayerFeature;
        }>], z.ZodUnknown>, z.ZodVoid>;
        /**
         * The layers to add the action to. Optional. Defaults to all layers.
         */
        layerIds: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
        /**
         * The geometry type of the features to add the action to. Optional. Defaults to all geometry types.
         */
        geometryTypes: z.ZodOptional<z.ZodArray<z.ZodEnum<["Polygon", "Line", "Point", "Raster"]>, "many">>;
    }>, {
        type: z.ZodUndefined;
    }>, "strip", z.ZodTypeAny, {
        label: string;
        onTrigger: (args_0: {
            feature: LayerFeature;
        }, ...args: unknown[]) => void;
        type?: undefined;
        id?: string | undefined;
        onCreate?: ((args_0: {
            id: string;
        }, ...args: unknown[]) => void) | undefined;
        onDestroy?: ((args_0: {
            id: string;
        }, ...args: unknown[]) => void) | undefined;
        layerIds?: string[] | undefined;
        geometryTypes?: ("Point" | "Polygon" | "Line" | "Raster")[] | undefined;
    }, {
        label: string;
        onTrigger: (args_0: {
            feature: LayerFeature;
        }, ...args: unknown[]) => void;
        type?: undefined;
        id?: string | undefined;
        onCreate?: ((args_0: {
            id: string;
        }, ...args: unknown[]) => void) | undefined;
        onDestroy?: ((args_0: {
            id: string;
        }, ...args: unknown[]) => void) | undefined;
        layerIds?: string[] | undefined;
        geometryTypes?: ("Point" | "Polygon" | "Line" | "Raster")[] | undefined;
    }>;
    clonable: z.ZodObject<z.objectUtil.extendShape<z.objectUtil.extendShape<z.objectUtil.extendShape<z.objectUtil.extendShape<{
        id: z.ZodOptional<z.ZodString>;
        onCreate: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
            id: z.ZodString;
        }, "strip", z.ZodTypeAny, {
            id: string;
        }, {
            id: string;
        }>], z.ZodUnknown>, z.ZodVoid>>;
        onDestroy: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
            id: z.ZodString;
        }, "strip", z.ZodTypeAny, {
            id: string;
        }, {
            id: string;
        }>], z.ZodUnknown>, z.ZodVoid>>;
    }, {
        onCreate: z.ZodOptional<z.ZodString>;
        onDestroy: z.ZodOptional<z.ZodString>;
    }>, {
        type: z.ZodLiteral<"FeatureAction">;
        /**
         * The label of the feature action.
         */
        label: z.ZodString;
        /**
         * The function to call when the feature action is triggered.
         */
        onTrigger: z.ZodFunction<z.ZodTuple<[z.ZodObject<{
            feature: z.ZodType<LayerFeature, z.ZodTypeDef, LayerFeature>;
        }, "strip", z.ZodTypeAny, {
            feature: LayerFeature;
        }, {
            feature: LayerFeature;
        }>], z.ZodUnknown>, z.ZodVoid>;
        /**
         * The layers to add the action to. Optional. Defaults to all layers.
         */
        layerIds: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
        /**
         * The geometry type of the features to add the action to. Optional. Defaults to all geometry types.
         */
        geometryTypes: z.ZodOptional<z.ZodArray<z.ZodEnum<["Polygon", "Line", "Point", "Raster"]>, "many">>;
    }>, {
        type: z.ZodUndefined;
    }>, {
        onTrigger: z.ZodString;
    }>, "strip", z.ZodTypeAny, {
        label: string;
        onTrigger: string;
        type?: undefined;
        id?: string | undefined;
        onCreate?: string | undefined;
        onDestroy?: string | undefined;
        layerIds?: string[] | undefined;
        geometryTypes?: ("Point" | "Polygon" | "Line" | "Raster")[] | undefined;
    }, {
        label: string;
        onTrigger: string;
        type?: undefined;
        id?: string | undefined;
        onCreate?: string | undefined;
        onDestroy?: string | undefined;
        layerIds?: string[] | undefined;
        geometryTypes?: ("Point" | "Polygon" | "Line" | "Raster")[] | undefined;
    }>;
    update: z.ZodObject<{
        id: z.ZodString;
        onCreate: z.ZodOptional<z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
            id: z.ZodString;
        }, "strip", z.ZodTypeAny, {
            id: string;
        }, {
            id: string;
        }>], z.ZodUnknown>, z.ZodVoid>>>;
        onDestroy: z.ZodOptional<z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
            id: z.ZodString;
        }, "strip", z.ZodTypeAny, {
            id: string;
        }, {
            id: string;
        }>], z.ZodUnknown>, z.ZodVoid>>>;
        label: z.ZodOptional<z.ZodString>;
        onTrigger: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
            feature: z.ZodType<LayerFeature, z.ZodTypeDef, LayerFeature>;
        }, "strip", z.ZodTypeAny, {
            feature: LayerFeature;
        }, {
            feature: LayerFeature;
        }>], z.ZodUnknown>, z.ZodVoid>>;
        layerIds: z.ZodOptional<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
        geometryTypes: z.ZodOptional<z.ZodOptional<z.ZodArray<z.ZodEnum<["Polygon", "Line", "Point", "Raster"]>, "many">>>;
        type: z.ZodUndefined;
    }, z.UnknownKeysParam, z.ZodTypeAny, {
        id: string;
        type?: undefined;
        onCreate?: ((args_0: {
            id: string;
        }, ...args: unknown[]) => void) | undefined;
        onDestroy?: ((args_0: {
            id: string;
        }, ...args: unknown[]) => void) | undefined;
        label?: string | undefined;
        onTrigger?: ((args_0: {
            feature: LayerFeature;
        }, ...args: unknown[]) => void) | undefined;
        layerIds?: string[] | undefined;
        geometryTypes?: ("Point" | "Polygon" | "Line" | "Raster")[] | undefined;
    }, {
        id: string;
        type?: undefined;
        onCreate?: ((args_0: {
            id: string;
        }, ...args: unknown[]) => void) | undefined;
        onDestroy?: ((args_0: {
            id: string;
        }, ...args: unknown[]) => void) | undefined;
        label?: string | undefined;
        onTrigger?: ((args_0: {
            feature: LayerFeature;
        }, ...args: unknown[]) => void) | undefined;
        layerIds?: string[] | undefined;
        geometryTypes?: ("Point" | "Polygon" | "Line" | "Raster")[] | undefined;
    }>;
};
/**
 * Represents a feature action for creation.
 * It can be added to the map by using the {@link UiController.createFeatureAction} method.
 */
interface UIFeatureActionCreate extends UIElementLifecycle, Omit<zInfer<typeof uiFeatureActionSchema.create>, "onCreate" | "onDestroy" | "id"> {
    /**
     * The function to call when the feature action is triggered.
     *
     * @param args - The arguments passed to the function.
     * @param args.feature - The feature that triggered the action.
     */
    onTrigger: (args: {
        feature: LayerFeature;
    }) => void;
}
/**
 * Represents a feature action after creation (with generated id).
 */
interface UIFeatureAction extends UIFeatureActionCreate {
    id: string;
}

declare const CreateActionTriggerParamsSchema: z.ZodObject<{
    actionTrigger: z.ZodObject<z.objectUtil.extendShape<z.objectUtil.extendShape<z.objectUtil.extendShape<{
        id: z.ZodOptional<z.ZodString>;
        onCreate: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
            id: z.ZodString;
        }, "strip", z.ZodTypeAny, {
            id: string;
        }, {
            id: string;
        }>], z.ZodUnknown>, z.ZodVoid>>;
        onDestroy: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
            id: z.ZodString;
        }, "strip", z.ZodTypeAny, {
            id: string;
        }, {
            id: string;
        }>], z.ZodUnknown>, z.ZodVoid>>;
    }, {
        type: z.ZodLiteral<"ActionTrigger">;
        label: z.ZodString;
        disabled: z.ZodOptional<z.ZodBoolean>;
    }>, {
        type: z.ZodUndefined;
    }>, {
        onTrigger: z.ZodFunction<z.ZodTuple<[z.ZodObject<{
            id: z.ZodString;
        }, "strip", z.ZodTypeAny, {
            id: string;
        }, {
            id: string;
        }>], z.ZodUnknown>, z.ZodVoid>;
    }>, "strip", z.ZodTypeAny, {
        label: string;
        onTrigger: (args_0: {
            id: string;
        }, ...args: unknown[]) => void;
        type?: undefined;
        id?: string | undefined;
        onCreate?: ((args_0: {
            id: string;
        }, ...args: unknown[]) => void) | undefined;
        onDestroy?: ((args_0: {
            id: string;
        }, ...args: unknown[]) => void) | undefined;
        disabled?: boolean | undefined;
    }, {
        label: string;
        onTrigger: (args_0: {
            id: string;
        }, ...args: unknown[]) => void;
        type?: undefined;
        id?: string | undefined;
        onCreate?: ((args_0: {
            id: string;
        }, ...args: unknown[]) => void) | undefined;
        onDestroy?: ((args_0: {
            id: string;
        }, ...args: unknown[]) => void) | undefined;
        disabled?: boolean | undefined;
    }>;
    placement: z.ZodOptional<z.ZodUnion<[z.ZodObject<{
        after: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        after: string;
    }, {
        after: string;
    }>, z.ZodObject<{
        before: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        before: string;
    }, {
        before: string;
    }>, z.ZodObject<{
        at: z.ZodEnum<["start", "end"]>;
    }, "strip", z.ZodTypeAny, {
        at: "start" | "end";
    }, {
        at: "start" | "end";
    }>]>>;
}, "strip", z.ZodTypeAny, {
    actionTrigger: {
        label: string;
        onTrigger: (args_0: {
            id: string;
        }, ...args: unknown[]) => void;
        type?: undefined;
        id?: string | undefined;
        onCreate?: ((args_0: {
            id: string;
        }, ...args: unknown[]) => void) | undefined;
        onDestroy?: ((args_0: {
            id: string;
        }, ...args: unknown[]) => void) | undefined;
        disabled?: boolean | undefined;
    };
    placement?: {
        after: string;
    } | {
        before: string;
    } | {
        at: "start" | "end";
    } | undefined;
}, {
    actionTrigger: {
        label: string;
        onTrigger: (args_0: {
            id: string;
        }, ...args: unknown[]) => void;
        type?: undefined;
        id?: string | undefined;
        onCreate?: ((args_0: {
            id: string;
        }, ...args: unknown[]) => void) | undefined;
        onDestroy?: ((args_0: {
            id: string;
        }, ...args: unknown[]) => void) | undefined;
        disabled?: boolean | undefined;
    };
    placement?: {
        after: string;
    } | {
        before: string;
    } | {
        at: "start" | "end";
    } | undefined;
}>;
interface CreateActionTriggerParams extends zInfer<typeof CreateActionTriggerParamsSchema> {
    actionTrigger: UIActionTriggerCreate;
    placement?: PlacementForUIElement;
}
declare const UpdateActionTriggerParamsSchema: z.ZodObject<{
    type: z.ZodOptional<z.ZodUndefined>;
    id: z.ZodString;
    onCreate: z.ZodOptional<z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
        id: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        id: string;
    }, {
        id: string;
    }>], z.ZodUnknown>, z.ZodVoid>>>;
    onDestroy: z.ZodOptional<z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
        id: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        id: string;
    }, {
        id: string;
    }>], z.ZodUnknown>, z.ZodVoid>>>;
    label: z.ZodOptional<z.ZodString>;
    disabled: z.ZodOptional<z.ZodOptional<z.ZodBoolean>>;
    onTrigger: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
        id: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        id: string;
    }, {
        id: string;
    }>], z.ZodUnknown>, z.ZodVoid>>;
}, "strip", z.ZodTypeAny, {
    id: string;
    type?: undefined;
    onCreate?: ((args_0: {
        id: string;
    }, ...args: unknown[]) => void) | undefined;
    onDestroy?: ((args_0: {
        id: string;
    }, ...args: unknown[]) => void) | undefined;
    label?: string | undefined;
    disabled?: boolean | undefined;
    onTrigger?: ((args_0: {
        id: string;
    }, ...args: unknown[]) => void) | undefined;
}, {
    id: string;
    type?: undefined;
    onCreate?: ((args_0: {
        id: string;
    }, ...args: unknown[]) => void) | undefined;
    onDestroy?: ((args_0: {
        id: string;
    }, ...args: unknown[]) => void) | undefined;
    label?: string | undefined;
    disabled?: boolean | undefined;
    onTrigger?: ((args_0: {
        id: string;
    }, ...args: unknown[]) => void) | undefined;
}>;
/**
 * @public
 */
interface UpdateActionTriggerParams extends Omit<Partial<UIActionTriggerCreate>, "id"> {
    id: zInfer<typeof UpdateActionTriggerParamsSchema>["id"];
}
declare const CreateFeatureActionParamsSchema: z.ZodObject<{
    action: z.ZodObject<z.objectUtil.extendShape<z.objectUtil.extendShape<{
        id: z.ZodOptional<z.ZodString>;
        onCreate: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
            id: z.ZodString;
        }, "strip", z.ZodTypeAny, {
            id: string;
        }, {
            id: string;
        }>], z.ZodUnknown>, z.ZodVoid>>;
        onDestroy: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
            id: z.ZodString;
        }, "strip", z.ZodTypeAny, {
            id: string;
        }, {
            id: string;
        }>], z.ZodUnknown>, z.ZodVoid>>;
    }, {
        type: z.ZodLiteral<"FeatureAction">;
        label: z.ZodString;
        onTrigger: z.ZodFunction<z.ZodTuple<[z.ZodObject<{
            feature: z.ZodType<LayerFeature, z.ZodTypeDef, LayerFeature>;
        }, "strip", z.ZodTypeAny, {
            feature: LayerFeature;
        }, {
            feature: LayerFeature;
        }>], z.ZodUnknown>, z.ZodVoid>;
        layerIds: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
        geometryTypes: z.ZodOptional<z.ZodArray<z.ZodEnum<["Polygon", "Line", "Point", "Raster"]>, "many">>;
    }>, {
        type: z.ZodUndefined;
    }>, "strip", z.ZodTypeAny, {
        label: string;
        onTrigger: (args_0: {
            feature: LayerFeature;
        }, ...args: unknown[]) => void;
        type?: undefined;
        id?: string | undefined;
        onCreate?: ((args_0: {
            id: string;
        }, ...args: unknown[]) => void) | undefined;
        onDestroy?: ((args_0: {
            id: string;
        }, ...args: unknown[]) => void) | undefined;
        layerIds?: string[] | undefined;
        geometryTypes?: ("Point" | "Polygon" | "Line" | "Raster")[] | undefined;
    }, {
        label: string;
        onTrigger: (args_0: {
            feature: LayerFeature;
        }, ...args: unknown[]) => void;
        type?: undefined;
        id?: string | undefined;
        onCreate?: ((args_0: {
            id: string;
        }, ...args: unknown[]) => void) | undefined;
        onDestroy?: ((args_0: {
            id: string;
        }, ...args: unknown[]) => void) | undefined;
        layerIds?: string[] | undefined;
        geometryTypes?: ("Point" | "Polygon" | "Line" | "Raster")[] | undefined;
    }>;
    placement: z.ZodOptional<z.ZodUnion<[z.ZodObject<{
        after: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        after: string;
    }, {
        after: string;
    }>, z.ZodObject<{
        before: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        before: string;
    }, {
        before: string;
    }>, z.ZodObject<{
        at: z.ZodEnum<["start", "end"]>;
    }, "strip", z.ZodTypeAny, {
        at: "start" | "end";
    }, {
        at: "start" | "end";
    }>]>>;
}, "strip", z.ZodTypeAny, {
    action: {
        label: string;
        onTrigger: (args_0: {
            feature: LayerFeature;
        }, ...args: unknown[]) => void;
        type?: undefined;
        id?: string | undefined;
        onCreate?: ((args_0: {
            id: string;
        }, ...args: unknown[]) => void) | undefined;
        onDestroy?: ((args_0: {
            id: string;
        }, ...args: unknown[]) => void) | undefined;
        layerIds?: string[] | undefined;
        geometryTypes?: ("Point" | "Polygon" | "Line" | "Raster")[] | undefined;
    };
    placement?: {
        after: string;
    } | {
        before: string;
    } | {
        at: "start" | "end";
    } | undefined;
}, {
    action: {
        label: string;
        onTrigger: (args_0: {
            feature: LayerFeature;
        }, ...args: unknown[]) => void;
        type?: undefined;
        id?: string | undefined;
        onCreate?: ((args_0: {
            id: string;
        }, ...args: unknown[]) => void) | undefined;
        onDestroy?: ((args_0: {
            id: string;
        }, ...args: unknown[]) => void) | undefined;
        layerIds?: string[] | undefined;
        geometryTypes?: ("Point" | "Polygon" | "Line" | "Raster")[] | undefined;
    };
    placement?: {
        after: string;
    } | {
        before: string;
    } | {
        at: "start" | "end";
    } | undefined;
}>;
/**
 * @public
 */
interface CreateFeatureActionParams extends zInfer<typeof CreateFeatureActionParamsSchema> {
    action: UIFeatureActionCreate;
    placement?: PlacementForUIElement;
}
/**
 * @public
 */
interface UpdateFeatureActionParams extends Omit<Partial<UIFeatureAction>, "id"> {
    id: zInfer<typeof uiFeatureActionSchema.update>["id"];
}
declare const CreateOrUpdatePanelParamsSchema: z.ZodObject<{
    panel: z.ZodObject<z.objectUtil.extendShape<Omit<{
        type: z.ZodOptional<z.ZodLiteral<"Panel">>;
        id: z.ZodString;
        onCreate: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
            id: z.ZodString;
        }, "strip", z.ZodTypeAny, {
            id: string;
        }, {
            id: string;
        }>], z.ZodUnknown>, z.ZodVoid>>;
        onDestroy: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
            id: z.ZodString;
        }, "strip", z.ZodTypeAny, {
            id: string;
        }, {
            id: string;
        }>], z.ZodUnknown>, z.ZodVoid>>;
        title: z.ZodOptional<z.ZodString>;
        body: z.ZodOptional<z.ZodArray<z.ZodType<UIPanelElement, z.ZodTypeDef, UIPanelElement>, "many">>;
        footer: z.ZodOptional<z.ZodArray<z.ZodType<UIPanelElement, z.ZodTypeDef, UIPanelElement>, "many">>;
        onClickClose: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
            id: z.ZodString;
        }, "strip", z.ZodTypeAny, {
            id: string;
        }, {
            id: string;
        }>], z.ZodUnknown>, z.ZodVoid>>;
    }, "body" | "footer">, {
        body: z.ZodOptional<z.ZodArray<z.ZodType<UIPanelElementCreate, z.ZodTypeDef, UIPanelElementCreate>, "many">>;
        footer: z.ZodOptional<z.ZodArray<z.ZodType<UIPanelElementCreate, z.ZodTypeDef, UIPanelElementCreate>, "many">>;
    }>, "strip", z.ZodTypeAny, {
        id: string;
        type?: "Panel" | undefined;
        onCreate?: ((args_0: {
            id: string;
        }, ...args: unknown[]) => void) | undefined;
        onDestroy?: ((args_0: {
            id: string;
        }, ...args: unknown[]) => void) | undefined;
        title?: string | undefined;
        body?: UIPanelElementCreate[] | undefined;
        footer?: UIPanelElementCreate[] | undefined;
        onClickClose?: ((args_0: {
            id: string;
        }, ...args: unknown[]) => void) | undefined;
    }, {
        id: string;
        type?: "Panel" | undefined;
        onCreate?: ((args_0: {
            id: string;
        }, ...args: unknown[]) => void) | undefined;
        onDestroy?: ((args_0: {
            id: string;
        }, ...args: unknown[]) => void) | undefined;
        title?: string | undefined;
        body?: UIPanelElementCreate[] | undefined;
        footer?: UIPanelElementCreate[] | undefined;
        onClickClose?: ((args_0: {
            id: string;
        }, ...args: unknown[]) => void) | undefined;
    }>;
    placement: z.ZodOptional<z.ZodUnion<[z.ZodObject<{
        after: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        after: string;
    }, {
        after: string;
    }>, z.ZodObject<{
        before: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        before: string;
    }, {
        before: string;
    }>, z.ZodObject<{
        at: z.ZodEnum<["start", "end"]>;
    }, "strip", z.ZodTypeAny, {
        at: "start" | "end";
    }, {
        at: "start" | "end";
    }>]>>;
}, "strip", z.ZodTypeAny, {
    panel: {
        id: string;
        type?: "Panel" | undefined;
        onCreate?: ((args_0: {
            id: string;
        }, ...args: unknown[]) => void) | undefined;
        onDestroy?: ((args_0: {
            id: string;
        }, ...args: unknown[]) => void) | undefined;
        title?: string | undefined;
        body?: UIPanelElementCreate[] | undefined;
        footer?: UIPanelElementCreate[] | undefined;
        onClickClose?: ((args_0: {
            id: string;
        }, ...args: unknown[]) => void) | undefined;
    };
    placement?: {
        after: string;
    } | {
        before: string;
    } | {
        at: "start" | "end";
    } | undefined;
}, {
    panel: {
        id: string;
        type?: "Panel" | undefined;
        onCreate?: ((args_0: {
            id: string;
        }, ...args: unknown[]) => void) | undefined;
        onDestroy?: ((args_0: {
            id: string;
        }, ...args: unknown[]) => void) | undefined;
        title?: string | undefined;
        body?: UIPanelElementCreate[] | undefined;
        footer?: UIPanelElementCreate[] | undefined;
        onClickClose?: ((args_0: {
            id: string;
        }, ...args: unknown[]) => void) | undefined;
    };
    placement?: {
        after: string;
    } | {
        before: string;
    } | {
        at: "start" | "end";
    } | undefined;
}>;
/**
 * The parameters for creating or updating a panel by using {@link UiController.createOrUpdatePanel}.
 *
 * @public
 */
interface CreateOrUpdatePanelParams extends zInfer<typeof CreateOrUpdatePanelParamsSchema> {
    /**
     * The panel to add.
     */
    panel: UIPanelCreateOrUpdate;
    /**
     * The placement of the panel on the right sidebar stack.
     *
     * @defaultValue `{ at: "end" }`
     */
    initialPlacement?: PlacementForUIElement;
}
declare const CreatePanelElementsParamsSchema: z.ZodObject<{
    panelId: z.ZodString;
    elements: z.ZodArray<z.ZodObject<{
        element: z.ZodType<UIPanelElementCreate, z.ZodTypeDef, UIPanelElementCreate>;
        container: z.ZodOptional<z.ZodUnion<[z.ZodLiteral<"body">, z.ZodLiteral<"footer">, z.ZodObject<{
            id: z.ZodString;
        }, "strip", z.ZodTypeAny, {
            id: string;
        }, {
            id: string;
        }>]>>;
        placement: z.ZodOptional<z.ZodUnion<[z.ZodObject<{
            after: z.ZodString;
        }, "strip", z.ZodTypeAny, {
            after: string;
        }, {
            after: string;
        }>, z.ZodObject<{
            before: z.ZodString;
        }, "strip", z.ZodTypeAny, {
            before: string;
        }, {
            before: string;
        }>, z.ZodObject<{
            at: z.ZodEnum<["start", "end"]>;
        }, "strip", z.ZodTypeAny, {
            at: "start" | "end";
        }, {
            at: "start" | "end";
        }>]>>;
    }, "strip", z.ZodTypeAny, {
        element: UIPanelElementCreate;
        placement?: {
            after: string;
        } | {
            before: string;
        } | {
            at: "start" | "end";
        } | undefined;
        container?: "body" | "footer" | {
            id: string;
        } | undefined;
    }, {
        element: UIPanelElementCreate;
        placement?: {
            after: string;
        } | {
            before: string;
        } | {
            at: "start" | "end";
        } | undefined;
        container?: "body" | "footer" | {
            id: string;
        } | undefined;
    }>, "many">;
}, "strip", z.ZodTypeAny, {
    panelId: string;
    elements: {
        element: UIPanelElementCreate;
        placement?: {
            after: string;
        } | {
            before: string;
        } | {
            at: "start" | "end";
        } | undefined;
        container?: "body" | "footer" | {
            id: string;
        } | undefined;
    }[];
}, {
    panelId: string;
    elements: {
        element: UIPanelElementCreate;
        placement?: {
            after: string;
        } | {
            before: string;
        } | {
            at: "start" | "end";
        } | undefined;
        container?: "body" | "footer" | {
            id: string;
        } | undefined;
    }[];
}>;
/**
 * @public
 */
interface CreatePanelElementsParams extends zInfer<typeof CreatePanelElementsParamsSchema> {
    elements: Array<{
        element: UIPanelElementCreate | UIFlexibleSpaceElementCreate;
        /**
         * The section of the panel to add the element to.
         * It can be either one of the top-level sections of the panel (`"body"` or `"footer"`)
         * or a specific container (like {@link UIGridContainerElement}) in the panel (`{ id: string }`).
         *
         * @defaultValue `"body"`
         */
        container?: "body" | "footer" | {
            id: string;
        };
        /**
         * The placement of the element in the target container (based on the `container` property).
         *
         * @defaultValue `{ at: "end" }`
         */
        placement?: PlacementForUIElement;
    }>;
}
declare const UpdatePanelElementsParamsSchema: z.ZodObject<{
    /**
     * The ID of the panel to update.
     */
    panelId: z.ZodString;
    elements: z.ZodArray<z.ZodObject<{
        element: z.ZodDiscriminatedUnion<"type", [z.ZodObject<{
            type: z.ZodLiteral<"Button">;
            label: z.ZodOptional<z.ZodString>;
            variant: z.ZodOptional<z.ZodOptional<z.ZodEnum<["filled", "transparent", "outlined"]>>>;
            tint: z.ZodOptional<z.ZodOptional<z.ZodEnum<["default", "primary", "accent", "danger"]>>>;
            disabled: z.ZodOptional<z.ZodOptional<z.ZodBoolean>>;
            onClick: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
                id: z.ZodString;
            }, "strip", z.ZodTypeAny, {
                id: string;
            }, {
                id: string;
            }>], z.ZodUnknown>, z.ZodVoid>>;
            id: z.ZodString;
            onCreate: z.ZodOptional<z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
                id: z.ZodString;
            }, "strip", z.ZodTypeAny, {
                id: string;
            }, {
                id: string;
            }>], z.ZodUnknown>, z.ZodVoid>>>;
            onDestroy: z.ZodOptional<z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
                id: z.ZodString;
            }, "strip", z.ZodTypeAny, {
                id: string;
            }, {
                id: string;
            }>], z.ZodUnknown>, z.ZodVoid>>>;
        }, z.UnknownKeysParam, z.ZodTypeAny, {
            type: "Button";
            id: string;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            label?: string | undefined;
            disabled?: boolean | undefined;
            variant?: "filled" | "transparent" | "outlined" | undefined;
            tint?: "default" | "primary" | "accent" | "danger" | undefined;
            onClick?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
        }, {
            type: "Button";
            id: string;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            label?: string | undefined;
            disabled?: boolean | undefined;
            variant?: "filled" | "transparent" | "outlined" | undefined;
            tint?: "default" | "primary" | "accent" | "danger" | undefined;
            onClick?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
        }>, z.ZodObject<{
            type: z.ZodLiteral<"Text">;
            content: z.ZodOptional<z.ZodString>;
            id: z.ZodString;
            onCreate: z.ZodOptional<z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
                id: z.ZodString;
            }, "strip", z.ZodTypeAny, {
                id: string;
            }, {
                id: string;
            }>], z.ZodUnknown>, z.ZodVoid>>>;
            onDestroy: z.ZodOptional<z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
                id: z.ZodString;
            }, "strip", z.ZodTypeAny, {
                id: string;
            }, {
                id: string;
            }>], z.ZodUnknown>, z.ZodVoid>>>;
        }, z.UnknownKeysParam, z.ZodTypeAny, {
            type: "Text";
            id: string;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            content?: string | undefined;
        }, {
            type: "Text";
            id: string;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            content?: string | undefined;
        }>, z.ZodObject<{
            type: z.ZodLiteral<"TextInput">;
            value: z.ZodOptional<z.ZodString>;
            placeholder: z.ZodOptional<z.ZodOptional<z.ZodString>>;
            onChange: z.ZodOptional<z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
                value: z.ZodString;
                id: z.ZodString;
            }, "strip", z.ZodTypeAny, {
                value: string;
                id: string;
            }, {
                value: string;
                id: string;
            }>], z.ZodUnknown>, z.ZodVoid>>>;
            onBlur: z.ZodOptional<z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
                value: z.ZodString;
                id: z.ZodString;
            }, "strip", z.ZodTypeAny, {
                value: string;
                id: string;
            }, {
                value: string;
                id: string;
            }>], z.ZodUnknown>, z.ZodVoid>>>;
            onFocus: z.ZodOptional<z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
                value: z.ZodString;
                id: z.ZodString;
            }, "strip", z.ZodTypeAny, {
                value: string;
                id: string;
            }, {
                value: string;
                id: string;
            }>], z.ZodUnknown>, z.ZodVoid>>>;
            label: z.ZodOptional<z.ZodOptional<z.ZodString>>;
            id: z.ZodString;
            onCreate: z.ZodOptional<z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
                id: z.ZodString;
            }, "strip", z.ZodTypeAny, {
                id: string;
            }, {
                id: string;
            }>], z.ZodUnknown>, z.ZodVoid>>>;
            onDestroy: z.ZodOptional<z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
                id: z.ZodString;
            }, "strip", z.ZodTypeAny, {
                id: string;
            }, {
                id: string;
            }>], z.ZodUnknown>, z.ZodVoid>>>;
        }, z.UnknownKeysParam, z.ZodTypeAny, {
            type: "TextInput";
            id: string;
            value?: string | undefined;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            label?: string | undefined;
            placeholder?: string | undefined;
            onChange?: ((args_0: {
                value: string;
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onBlur?: ((args_0: {
                value: string;
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onFocus?: ((args_0: {
                value: string;
                id: string;
            }, ...args: unknown[]) => void) | undefined;
        }, {
            type: "TextInput";
            id: string;
            value?: string | undefined;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            label?: string | undefined;
            placeholder?: string | undefined;
            onChange?: ((args_0: {
                value: string;
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onBlur?: ((args_0: {
                value: string;
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onFocus?: ((args_0: {
                value: string;
                id: string;
            }, ...args: unknown[]) => void) | undefined;
        }>, z.ZodObject<{
            type: z.ZodLiteral<"Select">;
            options: z.ZodOptional<z.ZodArray<z.ZodObject<{
                label: z.ZodString;
                value: z.ZodString;
                disabled: z.ZodOptional<z.ZodBoolean>;
            }, "strip", z.ZodTypeAny, {
                value: string;
                label: string;
                disabled?: boolean | undefined;
            }, {
                value: string;
                label: string;
                disabled?: boolean | undefined;
            }>, "many">>;
            value: z.ZodOptional<z.ZodOptional<z.ZodString>>;
            placeholder: z.ZodOptional<z.ZodOptional<z.ZodString>>;
            search: z.ZodOptional<z.ZodOptional<z.ZodBoolean>>;
            onChange: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
                value: z.ZodString;
                id: z.ZodString;
            }, "strip", z.ZodTypeAny, {
                value: string;
                id: string;
            }, {
                value: string;
                id: string;
            }>], z.ZodUnknown>, z.ZodVoid>>;
            label: z.ZodOptional<z.ZodOptional<z.ZodString>>;
            id: z.ZodString;
            onCreate: z.ZodOptional<z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
                id: z.ZodString;
            }, "strip", z.ZodTypeAny, {
                id: string;
            }, {
                id: string;
            }>], z.ZodUnknown>, z.ZodVoid>>>;
            onDestroy: z.ZodOptional<z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
                id: z.ZodString;
            }, "strip", z.ZodTypeAny, {
                id: string;
            }, {
                id: string;
            }>], z.ZodUnknown>, z.ZodVoid>>>;
        }, z.UnknownKeysParam, z.ZodTypeAny, {
            type: "Select";
            id: string;
            options?: {
                value: string;
                label: string;
                disabled?: boolean | undefined;
            }[] | undefined;
            value?: string | undefined;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            label?: string | undefined;
            search?: boolean | undefined;
            placeholder?: string | undefined;
            onChange?: ((args_0: {
                value: string;
                id: string;
            }, ...args: unknown[]) => void) | undefined;
        }, {
            type: "Select";
            id: string;
            options?: {
                value: string;
                label: string;
                disabled?: boolean | undefined;
            }[] | undefined;
            value?: string | undefined;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            label?: string | undefined;
            search?: boolean | undefined;
            placeholder?: string | undefined;
            onChange?: ((args_0: {
                value: string;
                id: string;
            }, ...args: unknown[]) => void) | undefined;
        }>, z.ZodObject<{
            type: z.ZodLiteral<"Divider">;
            id: z.ZodString;
            onCreate: z.ZodOptional<z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
                id: z.ZodString;
            }, "strip", z.ZodTypeAny, {
                id: string;
            }, {
                id: string;
            }>], z.ZodUnknown>, z.ZodVoid>>>;
            onDestroy: z.ZodOptional<z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
                id: z.ZodString;
            }, "strip", z.ZodTypeAny, {
                id: string;
            }, {
                id: string;
            }>], z.ZodUnknown>, z.ZodVoid>>>;
        }, z.UnknownKeysParam, z.ZodTypeAny, {
            type: "Divider";
            id: string;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
        }, {
            type: "Divider";
            id: string;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
        }>, z.ZodObject<{
            type: z.ZodLiteral<"FlexibleSpace">;
            id: z.ZodString;
            onCreate: z.ZodOptional<z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
                id: z.ZodString;
            }, "strip", z.ZodTypeAny, {
                id: string;
            }, {
                id: string;
            }>], z.ZodUnknown>, z.ZodVoid>>>;
            onDestroy: z.ZodOptional<z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
                id: z.ZodString;
            }, "strip", z.ZodTypeAny, {
                id: string;
            }, {
                id: string;
            }>], z.ZodUnknown>, z.ZodVoid>>>;
        }, z.UnknownKeysParam, z.ZodTypeAny, {
            type: "FlexibleSpace";
            id: string;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
        }, {
            type: "FlexibleSpace";
            id: string;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
        }>, z.ZodObject<{
            type: z.ZodLiteral<"ButtonRow">;
            id: z.ZodString;
            align: z.ZodOptional<z.ZodOptional<z.ZodEnum<["start", "end"]>>>;
            onCreate: z.ZodOptional<z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
                id: z.ZodString;
            }, "strip", z.ZodTypeAny, {
                id: string;
            }, {
                id: string;
            }>], z.ZodUnknown>, z.ZodVoid>>>;
            onDestroy: z.ZodOptional<z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
                id: z.ZodString;
            }, "strip", z.ZodTypeAny, {
                id: string;
            }, {
                id: string;
            }>], z.ZodUnknown>, z.ZodVoid>>>;
            label: z.ZodOptional<z.ZodOptional<z.ZodString>>;
            items: z.ZodOptional<z.ZodArray<z.ZodObject<z.objectUtil.extendShape<z.objectUtil.extendShape<z.objectUtil.extendShape<{
                onCreate: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
                    id: z.ZodString;
                }, "strip", z.ZodTypeAny, {
                    id: string;
                }, {
                    id: string;
                }>], z.ZodUnknown>, z.ZodVoid>>;
                onDestroy: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
                    id: z.ZodString;
                }, "strip", z.ZodTypeAny, {
                    id: string;
                }, {
                    id: string;
                }>], z.ZodUnknown>, z.ZodVoid>>;
            }, {
                id: z.ZodString;
            }>, {
                type: z.ZodLiteral<"Button">;
                label: z.ZodString;
                variant: z.ZodOptional<z.ZodEnum<["filled", "transparent", "outlined"]>>;
                tint: z.ZodOptional<z.ZodEnum<["default", "primary", "accent", "danger"]>>;
                disabled: z.ZodOptional<z.ZodBoolean>;
                onClick: z.ZodFunction<z.ZodTuple<[z.ZodObject<{
                    id: z.ZodString;
                }, "strip", z.ZodTypeAny, {
                    id: string;
                }, {
                    id: string;
                }>], z.ZodUnknown>, z.ZodVoid>;
            }>, {
                id: z.ZodOptional<z.ZodString>;
                onCreate: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
                    id: z.ZodString;
                }, "strip", z.ZodTypeAny, {
                    id: string;
                }, {
                    id: string;
                }>], z.ZodUnknown>, z.ZodVoid>>;
                onDestroy: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
                    id: z.ZodString;
                }, "strip", z.ZodTypeAny, {
                    id: string;
                }, {
                    id: string;
                }>], z.ZodUnknown>, z.ZodVoid>>;
            }>, "strip", z.ZodTypeAny, {
                type: "Button";
                label: string;
                onClick: (args_0: {
                    id: string;
                }, ...args: unknown[]) => void;
                id?: string | undefined;
                onCreate?: ((args_0: {
                    id: string;
                }, ...args: unknown[]) => void) | undefined;
                onDestroy?: ((args_0: {
                    id: string;
                }, ...args: unknown[]) => void) | undefined;
                disabled?: boolean | undefined;
                variant?: "filled" | "transparent" | "outlined" | undefined;
                tint?: "default" | "primary" | "accent" | "danger" | undefined;
            }, {
                type: "Button";
                label: string;
                onClick: (args_0: {
                    id: string;
                }, ...args: unknown[]) => void;
                id?: string | undefined;
                onCreate?: ((args_0: {
                    id: string;
                }, ...args: unknown[]) => void) | undefined;
                onDestroy?: ((args_0: {
                    id: string;
                }, ...args: unknown[]) => void) | undefined;
                disabled?: boolean | undefined;
                variant?: "filled" | "transparent" | "outlined" | undefined;
                tint?: "default" | "primary" | "accent" | "danger" | undefined;
            }>, "many">>;
        }, z.UnknownKeysParam, z.ZodTypeAny, {
            type: "ButtonRow";
            id: string;
            align?: "start" | "end" | undefined;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            label?: string | undefined;
            items?: {
                type: "Button";
                label: string;
                onClick: (args_0: {
                    id: string;
                }, ...args: unknown[]) => void;
                id?: string | undefined;
                onCreate?: ((args_0: {
                    id: string;
                }, ...args: unknown[]) => void) | undefined;
                onDestroy?: ((args_0: {
                    id: string;
                }, ...args: unknown[]) => void) | undefined;
                disabled?: boolean | undefined;
                variant?: "filled" | "transparent" | "outlined" | undefined;
                tint?: "default" | "primary" | "accent" | "danger" | undefined;
            }[] | undefined;
        }, {
            type: "ButtonRow";
            id: string;
            align?: "start" | "end" | undefined;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            label?: string | undefined;
            items?: {
                type: "Button";
                label: string;
                onClick: (args_0: {
                    id: string;
                }, ...args: unknown[]) => void;
                id?: string | undefined;
                onCreate?: ((args_0: {
                    id: string;
                }, ...args: unknown[]) => void) | undefined;
                onDestroy?: ((args_0: {
                    id: string;
                }, ...args: unknown[]) => void) | undefined;
                disabled?: boolean | undefined;
                variant?: "filled" | "transparent" | "outlined" | undefined;
                tint?: "default" | "primary" | "accent" | "danger" | undefined;
            }[] | undefined;
        }>, z.ZodObject<{
            type: z.ZodLiteral<"CheckboxGroup">;
            options: z.ZodOptional<z.ZodArray<z.ZodObject<{
                label: z.ZodString;
                value: z.ZodString;
                disabled: z.ZodOptional<z.ZodBoolean>;
            }, "strip", z.ZodTypeAny, {
                value: string;
                label: string;
                disabled?: boolean | undefined;
            }, {
                value: string;
                label: string;
                disabled?: boolean | undefined;
            }>, "many">>;
            value: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
            onChange: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
                value: z.ZodArray<z.ZodString, "many">;
                id: z.ZodString;
            }, "strip", z.ZodTypeAny, {
                value: string[];
                id: string;
            }, {
                value: string[];
                id: string;
            }>], z.ZodUnknown>, z.ZodVoid>>;
            label: z.ZodOptional<z.ZodOptional<z.ZodString>>;
            id: z.ZodString;
            onCreate: z.ZodOptional<z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
                id: z.ZodString;
            }, "strip", z.ZodTypeAny, {
                id: string;
            }, {
                id: string;
            }>], z.ZodUnknown>, z.ZodVoid>>>;
            onDestroy: z.ZodOptional<z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
                id: z.ZodString;
            }, "strip", z.ZodTypeAny, {
                id: string;
            }, {
                id: string;
            }>], z.ZodUnknown>, z.ZodVoid>>>;
        }, z.UnknownKeysParam, z.ZodTypeAny, {
            type: "CheckboxGroup";
            id: string;
            options?: {
                value: string;
                label: string;
                disabled?: boolean | undefined;
            }[] | undefined;
            value?: string[] | undefined;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            label?: string | undefined;
            onChange?: ((args_0: {
                value: string[];
                id: string;
            }, ...args: unknown[]) => void) | undefined;
        }, {
            type: "CheckboxGroup";
            id: string;
            options?: {
                value: string;
                label: string;
                disabled?: boolean | undefined;
            }[] | undefined;
            value?: string[] | undefined;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            label?: string | undefined;
            onChange?: ((args_0: {
                value: string[];
                id: string;
            }, ...args: unknown[]) => void) | undefined;
        }>, z.ZodObject<{
            type: z.ZodLiteral<"RadioGroup">;
            options: z.ZodOptional<z.ZodArray<z.ZodObject<{
                label: z.ZodString;
                value: z.ZodString;
                disabled: z.ZodOptional<z.ZodBoolean>;
            }, "strip", z.ZodTypeAny, {
                value: string;
                label: string;
                disabled?: boolean | undefined;
            }, {
                value: string;
                label: string;
                disabled?: boolean | undefined;
            }>, "many">>;
            value: z.ZodOptional<z.ZodOptional<z.ZodString>>;
            onChange: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
                value: z.ZodOptional<z.ZodString>;
                id: z.ZodString;
            }, "strip", z.ZodTypeAny, {
                id: string;
                value?: string | undefined;
            }, {
                id: string;
                value?: string | undefined;
            }>], z.ZodUnknown>, z.ZodVoid>>;
            label: z.ZodOptional<z.ZodOptional<z.ZodString>>;
            id: z.ZodString;
            onCreate: z.ZodOptional<z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
                id: z.ZodString;
            }, "strip", z.ZodTypeAny, {
                id: string;
            }, {
                id: string;
            }>], z.ZodUnknown>, z.ZodVoid>>>;
            onDestroy: z.ZodOptional<z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
                id: z.ZodString;
            }, "strip", z.ZodTypeAny, {
                id: string;
            }, {
                id: string;
            }>], z.ZodUnknown>, z.ZodVoid>>>;
        }, z.UnknownKeysParam, z.ZodTypeAny, {
            type: "RadioGroup";
            id: string;
            options?: {
                value: string;
                label: string;
                disabled?: boolean | undefined;
            }[] | undefined;
            value?: string | undefined;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            label?: string | undefined;
            onChange?: ((args_0: {
                id: string;
                value?: string | undefined;
            }, ...args: unknown[]) => void) | undefined;
        }, {
            type: "RadioGroup";
            id: string;
            options?: {
                value: string;
                label: string;
                disabled?: boolean | undefined;
            }[] | undefined;
            value?: string | undefined;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            label?: string | undefined;
            onChange?: ((args_0: {
                id: string;
                value?: string | undefined;
            }, ...args: unknown[]) => void) | undefined;
        }>, z.ZodObject<{
            type: z.ZodLiteral<"ToggleGroup">;
            alignment: z.ZodOptional<z.ZodOptional<z.ZodEnum<["start", "end"]>>>;
            options: z.ZodOptional<z.ZodArray<z.ZodObject<{
                label: z.ZodString;
                value: z.ZodString;
                disabled: z.ZodOptional<z.ZodBoolean>;
            }, "strip", z.ZodTypeAny, {
                value: string;
                label: string;
                disabled?: boolean | undefined;
            }, {
                value: string;
                label: string;
                disabled?: boolean | undefined;
            }>, "many">>;
            value: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
            onChange: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
                value: z.ZodArray<z.ZodString, "many">;
                id: z.ZodString;
            }, "strip", z.ZodTypeAny, {
                value: string[];
                id: string;
            }, {
                value: string[];
                id: string;
            }>], z.ZodUnknown>, z.ZodVoid>>;
            label: z.ZodOptional<z.ZodOptional<z.ZodString>>;
            id: z.ZodString;
            onCreate: z.ZodOptional<z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
                id: z.ZodString;
            }, "strip", z.ZodTypeAny, {
                id: string;
            }, {
                id: string;
            }>], z.ZodUnknown>, z.ZodVoid>>>;
            onDestroy: z.ZodOptional<z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
                id: z.ZodString;
            }, "strip", z.ZodTypeAny, {
                id: string;
            }, {
                id: string;
            }>], z.ZodUnknown>, z.ZodVoid>>>;
        }, z.UnknownKeysParam, z.ZodTypeAny, {
            type: "ToggleGroup";
            id: string;
            options?: {
                value: string;
                label: string;
                disabled?: boolean | undefined;
            }[] | undefined;
            value?: string[] | undefined;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            label?: string | undefined;
            onChange?: ((args_0: {
                value: string[];
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            alignment?: "start" | "end" | undefined;
        }, {
            type: "ToggleGroup";
            id: string;
            options?: {
                value: string;
                label: string;
                disabled?: boolean | undefined;
            }[] | undefined;
            value?: string[] | undefined;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            label?: string | undefined;
            onChange?: ((args_0: {
                value: string[];
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            alignment?: "start" | "end" | undefined;
        }>, z.ZodObject<{
            type: z.ZodLiteral<"Iframe">;
            height: z.ZodOptional<z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodString]>>>;
            url: z.ZodOptional<z.ZodString>;
            id: z.ZodString;
            onCreate: z.ZodOptional<z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
                id: z.ZodString;
            }, "strip", z.ZodTypeAny, {
                id: string;
            }, {
                id: string;
            }>], z.ZodUnknown>, z.ZodVoid>>>;
            onDestroy: z.ZodOptional<z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
                id: z.ZodString;
            }, "strip", z.ZodTypeAny, {
                id: string;
            }, {
                id: string;
            }>], z.ZodUnknown>, z.ZodVoid>>>;
        }, z.UnknownKeysParam, z.ZodTypeAny, {
            type: "Iframe";
            id: string;
            url?: string | undefined;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            height?: string | number | undefined;
        }, {
            type: "Iframe";
            id: string;
            url?: string | undefined;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            height?: string | number | undefined;
        }>, z.ZodObject<{
            type: z.ZodLiteral<"Grid">;
            id: z.ZodString;
            onCreate: z.ZodOptional<z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
                id: z.ZodString;
            }, "strip", z.ZodTypeAny, {
                id: string;
            }, {
                id: string;
            }>], z.ZodUnknown>, z.ZodVoid>>>;
            onDestroy: z.ZodOptional<z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodObject<{
                id: z.ZodString;
            }, "strip", z.ZodTypeAny, {
                id: string;
            }, {
                id: string;
            }>], z.ZodUnknown>, z.ZodVoid>>>;
            grid: z.ZodOptional<z.ZodOptional<z.ZodString>>;
            verticalAlignment: z.ZodOptional<z.ZodOptional<z.ZodEnum<["top", "center", "bottom"]>>>;
            horizontalDistribution: z.ZodOptional<z.ZodOptional<z.ZodEnum<["start", "center", "end", "space-between", "space-around", "space-evenly"]>>>;
            items: z.ZodOptional<z.ZodType<(UIButtonElementCreate | UITextElementCreate | UIDividerElementCreate | UITextInputElementCreate | UISelectElementCreate | UIFlexibleSpaceElementCreate | UIButtonRowElementCreate | UICheckboxGroupElementCreate | UIRadioGroupElementCreate | UIToggleGroupElementCreate | UIIframeElementCreate)[], z.ZodTypeDef, (UIButtonElementCreate | UITextElementCreate | UIDividerElementCreate | UITextInputElementCreate | UISelectElementCreate | UIFlexibleSpaceElementCreate | UIButtonRowElementCreate | UICheckboxGroupElementCreate | UIRadioGroupElementCreate | UIToggleGroupElementCreate | UIIframeElementCreate)[]>>;
        }, z.UnknownKeysParam, z.ZodTypeAny, {
            type: "Grid";
            id: string;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            items?: (UIButtonElementCreate | UITextElementCreate | UIDividerElementCreate | UITextInputElementCreate | UISelectElementCreate | UIFlexibleSpaceElementCreate | UIButtonRowElementCreate | UICheckboxGroupElementCreate | UIRadioGroupElementCreate | UIToggleGroupElementCreate | UIIframeElementCreate)[] | undefined;
            grid?: string | undefined;
            verticalAlignment?: "center" | "top" | "bottom" | undefined;
            horizontalDistribution?: "center" | "start" | "end" | "space-between" | "space-around" | "space-evenly" | undefined;
        }, {
            type: "Grid";
            id: string;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            items?: (UIButtonElementCreate | UITextElementCreate | UIDividerElementCreate | UITextInputElementCreate | UISelectElementCreate | UIFlexibleSpaceElementCreate | UIButtonRowElementCreate | UICheckboxGroupElementCreate | UIRadioGroupElementCreate | UIToggleGroupElementCreate | UIIframeElementCreate)[] | undefined;
            grid?: string | undefined;
            verticalAlignment?: "center" | "top" | "bottom" | undefined;
            horizontalDistribution?: "center" | "start" | "end" | "space-between" | "space-around" | "space-evenly" | undefined;
        }>]>;
    }, "strip", z.ZodTypeAny, {
        element: {
            type: "Button";
            id: string;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            label?: string | undefined;
            disabled?: boolean | undefined;
            variant?: "filled" | "transparent" | "outlined" | undefined;
            tint?: "default" | "primary" | "accent" | "danger" | undefined;
            onClick?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
        } | {
            type: "Text";
            id: string;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            content?: string | undefined;
        } | {
            type: "TextInput";
            id: string;
            value?: string | undefined;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            label?: string | undefined;
            placeholder?: string | undefined;
            onChange?: ((args_0: {
                value: string;
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onBlur?: ((args_0: {
                value: string;
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onFocus?: ((args_0: {
                value: string;
                id: string;
            }, ...args: unknown[]) => void) | undefined;
        } | {
            type: "Select";
            id: string;
            options?: {
                value: string;
                label: string;
                disabled?: boolean | undefined;
            }[] | undefined;
            value?: string | undefined;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            label?: string | undefined;
            search?: boolean | undefined;
            placeholder?: string | undefined;
            onChange?: ((args_0: {
                value: string;
                id: string;
            }, ...args: unknown[]) => void) | undefined;
        } | {
            type: "Divider";
            id: string;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
        } | {
            type: "FlexibleSpace";
            id: string;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
        } | {
            type: "ButtonRow";
            id: string;
            align?: "start" | "end" | undefined;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            label?: string | undefined;
            items?: {
                type: "Button";
                label: string;
                onClick: (args_0: {
                    id: string;
                }, ...args: unknown[]) => void;
                id?: string | undefined;
                onCreate?: ((args_0: {
                    id: string;
                }, ...args: unknown[]) => void) | undefined;
                onDestroy?: ((args_0: {
                    id: string;
                }, ...args: unknown[]) => void) | undefined;
                disabled?: boolean | undefined;
                variant?: "filled" | "transparent" | "outlined" | undefined;
                tint?: "default" | "primary" | "accent" | "danger" | undefined;
            }[] | undefined;
        } | {
            type: "CheckboxGroup";
            id: string;
            options?: {
                value: string;
                label: string;
                disabled?: boolean | undefined;
            }[] | undefined;
            value?: string[] | undefined;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            label?: string | undefined;
            onChange?: ((args_0: {
                value: string[];
                id: string;
            }, ...args: unknown[]) => void) | undefined;
        } | {
            type: "RadioGroup";
            id: string;
            options?: {
                value: string;
                label: string;
                disabled?: boolean | undefined;
            }[] | undefined;
            value?: string | undefined;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            label?: string | undefined;
            onChange?: ((args_0: {
                id: string;
                value?: string | undefined;
            }, ...args: unknown[]) => void) | undefined;
        } | {
            type: "ToggleGroup";
            id: string;
            options?: {
                value: string;
                label: string;
                disabled?: boolean | undefined;
            }[] | undefined;
            value?: string[] | undefined;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            label?: string | undefined;
            onChange?: ((args_0: {
                value: string[];
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            alignment?: "start" | "end" | undefined;
        } | {
            type: "Iframe";
            id: string;
            url?: string | undefined;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            height?: string | number | undefined;
        } | {
            type: "Grid";
            id: string;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            items?: (UIButtonElementCreate | UITextElementCreate | UIDividerElementCreate | UITextInputElementCreate | UISelectElementCreate | UIFlexibleSpaceElementCreate | UIButtonRowElementCreate | UICheckboxGroupElementCreate | UIRadioGroupElementCreate | UIToggleGroupElementCreate | UIIframeElementCreate)[] | undefined;
            grid?: string | undefined;
            verticalAlignment?: "center" | "top" | "bottom" | undefined;
            horizontalDistribution?: "center" | "start" | "end" | "space-between" | "space-around" | "space-evenly" | undefined;
        };
    }, {
        element: {
            type: "Button";
            id: string;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            label?: string | undefined;
            disabled?: boolean | undefined;
            variant?: "filled" | "transparent" | "outlined" | undefined;
            tint?: "default" | "primary" | "accent" | "danger" | undefined;
            onClick?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
        } | {
            type: "Text";
            id: string;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            content?: string | undefined;
        } | {
            type: "TextInput";
            id: string;
            value?: string | undefined;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            label?: string | undefined;
            placeholder?: string | undefined;
            onChange?: ((args_0: {
                value: string;
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onBlur?: ((args_0: {
                value: string;
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onFocus?: ((args_0: {
                value: string;
                id: string;
            }, ...args: unknown[]) => void) | undefined;
        } | {
            type: "Select";
            id: string;
            options?: {
                value: string;
                label: string;
                disabled?: boolean | undefined;
            }[] | undefined;
            value?: string | undefined;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            label?: string | undefined;
            search?: boolean | undefined;
            placeholder?: string | undefined;
            onChange?: ((args_0: {
                value: string;
                id: string;
            }, ...args: unknown[]) => void) | undefined;
        } | {
            type: "Divider";
            id: string;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
        } | {
            type: "FlexibleSpace";
            id: string;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
        } | {
            type: "ButtonRow";
            id: string;
            align?: "start" | "end" | undefined;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            label?: string | undefined;
            items?: {
                type: "Button";
                label: string;
                onClick: (args_0: {
                    id: string;
                }, ...args: unknown[]) => void;
                id?: string | undefined;
                onCreate?: ((args_0: {
                    id: string;
                }, ...args: unknown[]) => void) | undefined;
                onDestroy?: ((args_0: {
                    id: string;
                }, ...args: unknown[]) => void) | undefined;
                disabled?: boolean | undefined;
                variant?: "filled" | "transparent" | "outlined" | undefined;
                tint?: "default" | "primary" | "accent" | "danger" | undefined;
            }[] | undefined;
        } | {
            type: "CheckboxGroup";
            id: string;
            options?: {
                value: string;
                label: string;
                disabled?: boolean | undefined;
            }[] | undefined;
            value?: string[] | undefined;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            label?: string | undefined;
            onChange?: ((args_0: {
                value: string[];
                id: string;
            }, ...args: unknown[]) => void) | undefined;
        } | {
            type: "RadioGroup";
            id: string;
            options?: {
                value: string;
                label: string;
                disabled?: boolean | undefined;
            }[] | undefined;
            value?: string | undefined;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            label?: string | undefined;
            onChange?: ((args_0: {
                id: string;
                value?: string | undefined;
            }, ...args: unknown[]) => void) | undefined;
        } | {
            type: "ToggleGroup";
            id: string;
            options?: {
                value: string;
                label: string;
                disabled?: boolean | undefined;
            }[] | undefined;
            value?: string[] | undefined;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            label?: string | undefined;
            onChange?: ((args_0: {
                value: string[];
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            alignment?: "start" | "end" | undefined;
        } | {
            type: "Iframe";
            id: string;
            url?: string | undefined;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            height?: string | number | undefined;
        } | {
            type: "Grid";
            id: string;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            items?: (UIButtonElementCreate | UITextElementCreate | UIDividerElementCreate | UITextInputElementCreate | UISelectElementCreate | UIFlexibleSpaceElementCreate | UIButtonRowElementCreate | UICheckboxGroupElementCreate | UIRadioGroupElementCreate | UIToggleGroupElementCreate | UIIframeElementCreate)[] | undefined;
            grid?: string | undefined;
            verticalAlignment?: "center" | "top" | "bottom" | undefined;
            horizontalDistribution?: "center" | "start" | "end" | "space-between" | "space-around" | "space-evenly" | undefined;
        };
    }>, "many">;
}, "strip", z.ZodTypeAny, {
    panelId: string;
    elements: {
        element: {
            type: "Button";
            id: string;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            label?: string | undefined;
            disabled?: boolean | undefined;
            variant?: "filled" | "transparent" | "outlined" | undefined;
            tint?: "default" | "primary" | "accent" | "danger" | undefined;
            onClick?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
        } | {
            type: "Text";
            id: string;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            content?: string | undefined;
        } | {
            type: "TextInput";
            id: string;
            value?: string | undefined;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            label?: string | undefined;
            placeholder?: string | undefined;
            onChange?: ((args_0: {
                value: string;
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onBlur?: ((args_0: {
                value: string;
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onFocus?: ((args_0: {
                value: string;
                id: string;
            }, ...args: unknown[]) => void) | undefined;
        } | {
            type: "Select";
            id: string;
            options?: {
                value: string;
                label: string;
                disabled?: boolean | undefined;
            }[] | undefined;
            value?: string | undefined;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            label?: string | undefined;
            search?: boolean | undefined;
            placeholder?: string | undefined;
            onChange?: ((args_0: {
                value: string;
                id: string;
            }, ...args: unknown[]) => void) | undefined;
        } | {
            type: "Divider";
            id: string;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
        } | {
            type: "FlexibleSpace";
            id: string;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
        } | {
            type: "ButtonRow";
            id: string;
            align?: "start" | "end" | undefined;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            label?: string | undefined;
            items?: {
                type: "Button";
                label: string;
                onClick: (args_0: {
                    id: string;
                }, ...args: unknown[]) => void;
                id?: string | undefined;
                onCreate?: ((args_0: {
                    id: string;
                }, ...args: unknown[]) => void) | undefined;
                onDestroy?: ((args_0: {
                    id: string;
                }, ...args: unknown[]) => void) | undefined;
                disabled?: boolean | undefined;
                variant?: "filled" | "transparent" | "outlined" | undefined;
                tint?: "default" | "primary" | "accent" | "danger" | undefined;
            }[] | undefined;
        } | {
            type: "CheckboxGroup";
            id: string;
            options?: {
                value: string;
                label: string;
                disabled?: boolean | undefined;
            }[] | undefined;
            value?: string[] | undefined;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            label?: string | undefined;
            onChange?: ((args_0: {
                value: string[];
                id: string;
            }, ...args: unknown[]) => void) | undefined;
        } | {
            type: "RadioGroup";
            id: string;
            options?: {
                value: string;
                label: string;
                disabled?: boolean | undefined;
            }[] | undefined;
            value?: string | undefined;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            label?: string | undefined;
            onChange?: ((args_0: {
                id: string;
                value?: string | undefined;
            }, ...args: unknown[]) => void) | undefined;
        } | {
            type: "ToggleGroup";
            id: string;
            options?: {
                value: string;
                label: string;
                disabled?: boolean | undefined;
            }[] | undefined;
            value?: string[] | undefined;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            label?: string | undefined;
            onChange?: ((args_0: {
                value: string[];
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            alignment?: "start" | "end" | undefined;
        } | {
            type: "Iframe";
            id: string;
            url?: string | undefined;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            height?: string | number | undefined;
        } | {
            type: "Grid";
            id: string;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            items?: (UIButtonElementCreate | UITextElementCreate | UIDividerElementCreate | UITextInputElementCreate | UISelectElementCreate | UIFlexibleSpaceElementCreate | UIButtonRowElementCreate | UICheckboxGroupElementCreate | UIRadioGroupElementCreate | UIToggleGroupElementCreate | UIIframeElementCreate)[] | undefined;
            grid?: string | undefined;
            verticalAlignment?: "center" | "top" | "bottom" | undefined;
            horizontalDistribution?: "center" | "start" | "end" | "space-between" | "space-around" | "space-evenly" | undefined;
        };
    }[];
}, {
    panelId: string;
    elements: {
        element: {
            type: "Button";
            id: string;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            label?: string | undefined;
            disabled?: boolean | undefined;
            variant?: "filled" | "transparent" | "outlined" | undefined;
            tint?: "default" | "primary" | "accent" | "danger" | undefined;
            onClick?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
        } | {
            type: "Text";
            id: string;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            content?: string | undefined;
        } | {
            type: "TextInput";
            id: string;
            value?: string | undefined;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            label?: string | undefined;
            placeholder?: string | undefined;
            onChange?: ((args_0: {
                value: string;
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onBlur?: ((args_0: {
                value: string;
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onFocus?: ((args_0: {
                value: string;
                id: string;
            }, ...args: unknown[]) => void) | undefined;
        } | {
            type: "Select";
            id: string;
            options?: {
                value: string;
                label: string;
                disabled?: boolean | undefined;
            }[] | undefined;
            value?: string | undefined;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            label?: string | undefined;
            search?: boolean | undefined;
            placeholder?: string | undefined;
            onChange?: ((args_0: {
                value: string;
                id: string;
            }, ...args: unknown[]) => void) | undefined;
        } | {
            type: "Divider";
            id: string;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
        } | {
            type: "FlexibleSpace";
            id: string;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
        } | {
            type: "ButtonRow";
            id: string;
            align?: "start" | "end" | undefined;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            label?: string | undefined;
            items?: {
                type: "Button";
                label: string;
                onClick: (args_0: {
                    id: string;
                }, ...args: unknown[]) => void;
                id?: string | undefined;
                onCreate?: ((args_0: {
                    id: string;
                }, ...args: unknown[]) => void) | undefined;
                onDestroy?: ((args_0: {
                    id: string;
                }, ...args: unknown[]) => void) | undefined;
                disabled?: boolean | undefined;
                variant?: "filled" | "transparent" | "outlined" | undefined;
                tint?: "default" | "primary" | "accent" | "danger" | undefined;
            }[] | undefined;
        } | {
            type: "CheckboxGroup";
            id: string;
            options?: {
                value: string;
                label: string;
                disabled?: boolean | undefined;
            }[] | undefined;
            value?: string[] | undefined;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            label?: string | undefined;
            onChange?: ((args_0: {
                value: string[];
                id: string;
            }, ...args: unknown[]) => void) | undefined;
        } | {
            type: "RadioGroup";
            id: string;
            options?: {
                value: string;
                label: string;
                disabled?: boolean | undefined;
            }[] | undefined;
            value?: string | undefined;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            label?: string | undefined;
            onChange?: ((args_0: {
                id: string;
                value?: string | undefined;
            }, ...args: unknown[]) => void) | undefined;
        } | {
            type: "ToggleGroup";
            id: string;
            options?: {
                value: string;
                label: string;
                disabled?: boolean | undefined;
            }[] | undefined;
            value?: string[] | undefined;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            label?: string | undefined;
            onChange?: ((args_0: {
                value: string[];
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            alignment?: "start" | "end" | undefined;
        } | {
            type: "Iframe";
            id: string;
            url?: string | undefined;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            height?: string | number | undefined;
        } | {
            type: "Grid";
            id: string;
            onCreate?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            onDestroy?: ((args_0: {
                id: string;
            }, ...args: unknown[]) => void) | undefined;
            items?: (UIButtonElementCreate | UITextElementCreate | UIDividerElementCreate | UITextInputElementCreate | UISelectElementCreate | UIFlexibleSpaceElementCreate | UIButtonRowElementCreate | UICheckboxGroupElementCreate | UIRadioGroupElementCreate | UIToggleGroupElementCreate | UIIframeElementCreate)[] | undefined;
            grid?: string | undefined;
            verticalAlignment?: "center" | "top" | "bottom" | undefined;
            horizontalDistribution?: "center" | "start" | "end" | "space-between" | "space-around" | "space-evenly" | undefined;
        };
    }[];
}>;
/**
 * @public
 */
interface UpdatePanelElementsParams extends Omit<zInfer<typeof UpdatePanelElementsParamsSchema>, "elements"> {
    /**
     * Dictionary of element IDs to the element to update.
     */
    elements: Array<{
        element: UIPanelElementUpdate;
    }>;
}
/**
 * @internal
 * @ignore
 */
declare const DeletePanelElementsParamsSchema: z.ZodObject<{
    panelId: z.ZodString;
    elements: z.ZodArray<z.ZodString, "many">;
}, "strip", z.ZodTypeAny, {
    panelId: string;
    elements: string[];
}, {
    panelId: string;
    elements: string[];
}>;
/**
 * @public
 */
interface DeletePanelElementsParams extends zInfer<typeof DeletePanelElementsParamsSchema> {
}
/**
 * @public
 */
interface UiControlsOptions extends zInfer<typeof UiControlsOptionsSchema> {
}
/**
 * @internal
 * @ignore
 */
declare const UiControlsOptionsSchema: z.ZodObject<{
    /**
     * Whether or not the legend is shown.
     *
     * @defaultValue true
     */
    showLegend: z.ZodOptional<z.ZodBoolean>;
    /**
     * When co-operative gestures are enabled, the pan and zoom gestures are
     * adjusted to work better when the map is embedded in another page.
     *
     * @remarks
     * On mobile devices, enabling co-operative gestures will allow the user to
     * pan past the embedded map with a single finger drag. To pan the map, they
     * must use two fingers.
     *
     * On desktop devices, enabling co-operative gestures allows the user to
     * scroll past the embedded map using their scroll wheel or trackpad. To
     * zoom the map, they must hold the Ctrl (Windows) or Command key (Mac) while
     * scrolling.
     *
     * @defaultValue true
     */
    cooperativeGestures: z.ZodOptional<z.ZodBoolean>;
    /**
     * Whether or not the full screen button is shown in an embedded map.
     *
     * @remarks
     * When clicked, this will open the map in a new tab or window.
     *
     * @defaultValue true
     */
    fullScreenButton: z.ZodOptional<z.ZodBoolean>;
    /**
     * Whether or not the geolocation button is shown in an embedded map.
     *
     * @remarks
     * The geolocation feature will plot your position on the map. If you
     * click the button again, it will start tracking your position.
     *
     * @defaultValue false
     */
    geolocation: z.ZodOptional<z.ZodBoolean>;
    /**
     * Whether or not the zoom controls are shown in an embedded map.
     *
     * @remarks
     * This does not affect whether or not the map can be zoomed, just
     * the display of the zoom controls in the bottom right corner of the map.
     *
     * @defaultValue true
     */
    zoomControls: z.ZodOptional<z.ZodBoolean>;
    /**
     * Whether or not the scale bar is shown in an embedded map.
     *
     * @defaultValue true
     */
    scaleBar: z.ZodOptional<z.ZodBoolean>;
}, "strip", z.ZodTypeAny, {
    showLegend?: boolean | undefined;
    cooperativeGestures?: boolean | undefined;
    fullScreenButton?: boolean | undefined;
    geolocation?: boolean | undefined;
    zoomControls?: boolean | undefined;
    scaleBar?: boolean | undefined;
}, {
    showLegend?: boolean | undefined;
    cooperativeGestures?: boolean | undefined;
    fullScreenButton?: boolean | undefined;
    geolocation?: boolean | undefined;
    zoomControls?: boolean | undefined;
    scaleBar?: boolean | undefined;
}>;
/**
 * The options for which parts of the Felt UI can be shown when interacting with
 * features and elements on the map.
 *
 * Switching these off can be useful if you add your own click, selection or hover
 * handlers for features and elements.
 *
 * @public
 */
interface UiOnMapInteractionsOptions extends zInfer<typeof UiOnMapInteractionsOptionsSchema> {
}
/**
 * @internal
 * @ignore
 */
declare const UiOnMapInteractionsOptionsSchema: z.ZodObject<{
    /**
     * Set this to `false` to prevent the panel that shows information about a selected
     * feature from being shown.
     */
    featureSelectPanel: z.ZodOptional<z.ZodBoolean>;
    /**
     * Set this to `false` to prevent the panel that shows information about a hovered
     * feature from being shown.
     */
    featureHoverPanel: z.ZodOptional<z.ZodBoolean>;
    /**
     * Set this to `false` to prevent the panel that shows information about a selected
     * element from being shown.
     */
    elementSelectPanel: z.ZodOptional<z.ZodBoolean>;
    /**
     * Set this to `false` to prevent clicking on a map link element from opening that link
     * in a new tab or window.
     */
    linkClickOpen: z.ZodOptional<z.ZodBoolean>;
    /**
     * Set this to `false` to prevent clicking on an image element from opening the image
     * in a lightbox.
     */
    imageLightboxOpen: z.ZodOptional<z.ZodBoolean>;
}, "strip", z.ZodTypeAny, {
    featureSelectPanel?: boolean | undefined;
    featureHoverPanel?: boolean | undefined;
    elementSelectPanel?: boolean | undefined;
    linkClickOpen?: boolean | undefined;
    imageLightboxOpen?: boolean | undefined;
}, {
    featureSelectPanel?: boolean | undefined;
    featureHoverPanel?: boolean | undefined;
    elementSelectPanel?: boolean | undefined;
    linkClickOpen?: boolean | undefined;
    imageLightboxOpen?: boolean | undefined;
}>;

/**
 * The UI controller allows you to control various aspects of the Felt UI in your map.
 *
 * This includes enabling/disabling UI controls, managing on-map interactions, and controlling
 * the visibility of UI components like the data table.
 *
 * @group Controller
 * @public
 */
interface UiController {
    /**
     * Creates an action trigger.
     * Action triggers are rendered on map's left sidebar as a button,
     * similar to other map extensions like measure and spatial filter.
     *
     * The goal of action triggers is to allow users to perform actions on the map
     * by clicking on a button.
     *
     * @param args - The arguments for the method.
     * @param args.actionTrigger - The action trigger to add.
     * @param args.placement - The placement of the action trigger. Optional. Defaults to `{ at: "end" }`.
     * - `{ at: "start" }` - Add the action trigger to the start of the stack.
     * - `{ at: "end" }` - Add the action trigger to the end of the stack.
     * - `{ after: "action-trigger-1" }` - Add the action trigger after the action trigger with the id `action-trigger-1`.
     * - `{ before: "action-trigger-1" }` - Add the action trigger before the action trigger with the id `action-trigger-1`.
     *
     * @example
     * ```typescript
     * await felt.createActionTrigger({
     *   actionTrigger: {
     *     id: "enablePolygonTool", // optional. Required if you want to update the action trigger later
     *     label: "Draw polygon",
     *     onTrigger: async () => {
     *       felt.setTool("polygon");
     *     },
     *     disabled: false, // optional, defaults to false
     *   },
     *   placement: { at: "start" }, // optional, defaults to { at: "end" }
     * });
     * ```
     */
    createActionTrigger(args: CreateActionTriggerParams): Promise<UIActionTriggerCreate>;
    /**
     * Updates an action trigger.
     *
     * Action trigger to update is identified by the `id` property.
     *
     * @remarks
     * Properties provided will override the existing properties.
     *
     * @param args - The action trigger to update.
     *
     * @example
     * ```typescript
     * await felt.updateActionTrigger({
     *   id: "enablePolygonTool",
     *   label: "Enable polygon tool", // only label changes
     * });
     * ```
     */
    updateActionTrigger(args: UpdateActionTriggerParams): Promise<UIActionTriggerCreate>;
    /**
     * Deletes an action trigger.
     *
     * @param id - The id of the action trigger to delete.
     *
     * @example
     * ```typescript
     * await felt.deleteActionTrigger("enablePolygonTool");
     * ```
     */
    deleteActionTrigger(id: string): void;
    /**
     * Creates a feature contextual action.
     *
     * @param args - The arguments for the method.
     * @param args.action - The action to create.
     * @param args.placement - The placement of the action. Optional. Defaults to `{ at: "end" }`.
     *
     * @example
     * ```typescript
     * const myAction = await felt.createFeatureAction({
     *   action: {
     *     label: "Add to selection",
     *     onTrigger: async ({ feature }) => {
     *       console.log(`Adding feature ${feature.id} from layer ${feature.layerId} to selection`);
     *     },
     *     layerIds: ["layer-1", "layer-2"], // Display the feature action only on these layers
     *   },
     *   placement: { at: "start" }, // optional, defaults to { at: "end" }
     * });
     *
     * ```
     */
    createFeatureAction(args: CreateFeatureActionParams): Promise<UIFeatureAction>;
    /**
     * Updates a feature contextual action.
     *
     * Feature contextual action to update is identified by the `id` property.
     *
     * @remarks
     * Properties provided will override the existing properties.
     *
     * @param args - The feature contextual action to update.
     *
     * @example
     * ```typescript
     * const myAction = await felt.createFeatureAction({ ... });
     * await felt.updateFeatureAction({
     *   id: myAction.id,
     *   label: "Updated action label", // only label changes
     * });
     * ```
     */
    updateFeatureAction(args: UpdateFeatureActionParams): Promise<UIFeatureAction>;
    /**
     * Deletes a feature contextual action.
     *
     * @param id - The id of the feature contextual action to delete.
     *
     * @example
     * ```typescript
     * const myAction = await felt.createFeatureAction({ ... });
     * await felt.deleteFeatureAction(myAction.id);
     * ```
     */
    deleteFeatureAction(id: string): void;
    /**
     * Creates a panel ID.
     *
     * In order to create a panel using {@link createOrUpdatePanel}, you need to create a panel ID first.
     * Panel IDs are automatically generated to prevent conflicts with other panels.
     *
     * @example
     * ```typescript
     * const panelId = await felt.createPanelId();
     * ```
     */
    createPanelId(): Promise<string>;
    /**
     * Creates or updates a panel.
     *
     * Panels are rendered on the map's right sidebar and allow you to extend Felt UI
     * for your own use cases using Felt UI elements (e.g., Text, Button, etc.).
     *
     * A panel is identified by its ID, which must be created using {@link createPanelId}.
     * Custom IDs are not supported to prevent conflicts with other panels.
     *
     * Panels have two main sections:
     *  - `body` - The main content area of the panel, which is scrollable.
     *  - `footer` - A section that sticks to the bottom of the panel, useful for
     *    action buttons like "Submit" or "Cancel".
     *
     * Panel placement is controlled by the `initialPlacement` parameter. By default,
     * panels are added to the end of the panel stack, but you can specify a different
     * placement. Note that this placement cannot be changed after the panel is created.
     *
     * Element IDs are required for targeted updates and deletions using the other
     * panel management methods. For complete panel refreshes with this method,
     * element IDs are optional but recommended for consistency.
     *
     * For dynamic content management, consider these approaches:
     *  - Use this method for complete panel refreshes (replaces all content)
     *  - Use {@link createPanelElements} to add new elements to existing panels
     *  - Use {@link updatePanelElements} to modify specific existing elements
     *  - Use {@link deletePanelElements} to remove specific elements
     *
     * @param args - The arguments for creating or updating the panel.
     * @param args.panel - The panel configuration to create or update.
     * @param args.initialPlacement - The placement of the panel when first added.
     *   Optional. Defaults to `{ at: "end" }`.
     *   - `{ at: "start" }` - Add the panel to the start of the stack.
     *   - `{ at: "end" }` - Add the panel to the end of the stack.
     *   - `{ after: "panel-1" }` - Add the panel after the panel with the id `panel-1`.
     *   - `{ before: "panel-1" }` - Add the panel before the panel with the id `panel-1`.
     *
     * @example
     * ```typescript
     * // 1. Create panel ID first (required)
     * const panelId = await felt.createPanelId();
     *
     * // 2. Define reusable elements
     * const SELECT = { id: "layer-select", type: "Select", label: "Layer", options: [...] };
     * const ANALYZE_BTN = { id: "analyze-btn", type: "Button", label: "Analyze", onClick: handleAnalyze };
     * const STATUS_TEXT = { id: "status-text", type: "Text", content: "" };
     * const CLEAR_BTN = { id: "clear-btn", type: "Button", label: "Clear", onClick: handleClear };
     *
     * // 3. Initial state
     * await felt.createOrUpdatePanel({
     *   panel: { id: panelId, title: "Data Analyzer", body: [SELECT, ANALYZE_BTN] }
     * });
     *
     * // 4. Loading state (replaces entire panel)
     * await felt.createOrUpdatePanel({
     *   panel: {
     *     id: panelId,
     *     title: "Data Analyzer",
     *     body: [SELECT, ANALYZE_BTN, { ...STATUS_TEXT, content: "Loading..." }]
     *   }
     * });
     *
     * // 5. Results state (replaces entire panel)
     * await felt.createOrUpdatePanel({
     *   panel: {
     *     id: panelId,
     *     title: "Data Analyzer",
     *     body: [SELECT, ANALYZE_BTN, { ...STATUS_TEXT, content: "**Results:**\n- Found 150 features" }, CLEAR_BTN]
     *   }
     * });
     * ```
     */
    createOrUpdatePanel(args: CreateOrUpdatePanelParams): Promise<UIPanel>;
    /**
     * Deletes a panel.
     *
     * @param id - The id of the panel to delete.
     * @example
     * ```typescript
     * await felt.deletePanel("panel-1");
     * ```
     */
    deletePanel(id: string): void;
    /**
     * Creates elements in a panel.
     *
     * Use this method to add new elements to an existing panel without replacing
     * the entire panel content. This is useful for dynamic UI updates.
     *
     * @param args - The arguments for the method.
     * @param args.panelId - The id of the panel to add the elements to.
     * @param args.elements - The elements to add.
     *
     * For every element...
     *
     * - `element`: The element to add.
     *
     * - `container`: The section of the panel to add the element to. To point to a specific container, use the `id` of the container. Optional. Defaults to `body`.
     *   - `body` - Add the element to the body section of the panel.
     *   - `footer` - Add the element to the footer section of the panel.
     *   - `{ id: "container-1" }` - Add the element to the container identified by `id`.
     *
     * - `placement`: The placement of the element in the section. Optional. Defaults to `{ at: "end" }`.
     *   - `{ after: "element-1" }` - Add the element after the element with the id `element-1`.
     *   - `{ before: "element-1" }` - Add the element before the element with the id `element-1`.
     *   - `{ at: "start" }` - Add the element to the start of the section.
     *   - `{ at: "end" }` - Add the element to the end of the section.
     *
     * @example
     * ```typescript
     * await felt.createPanelElements({
     *   panelId,
     *   elements: [
     *     {
     *       element: { type: "Text", content: "Hello, world!" },
     *       container: "body",
     *       placement: { at: "start" },
     *     },
     *   ],
     * });
     * ```
     */
    createPanelElements(args: CreatePanelElementsParams): Promise<UIPanel>;
    /**
     * Updates an existing element in a panel. This method can only update elements that
     * already exist in the panel and have an ID.
     *
     * Use this method to modify specific elements without replacing the entire panel.
     * This is more efficient than using {@link createOrUpdatePanel} for small changes.
     *
     * @param args - The arguments for the method.
     * @param args.panelId - The id of the panel to update the element in.
     * @param args.elements - Array of elements to update. Each element must have an `id` and `type`
     *   to identify which existing element to update. The element must already exist in the panel.
     *
     * @example
     * ```typescript
     * // 1. Create panel with initial elements
     * const panelId = await felt.createPanelId();
     * const STATUS_TEXT = { id: "status-text", type: "Text", content: "Ready" };
     *
     * await felt.createOrUpdatePanel({
     *   panel: {
     *     id: panelId,
     *     title: "My Panel",
     *     body: [STATUS_TEXT]
     *   }
     * });
     *
     * // 2. Update the existing element
     * await felt.updatePanelElements({
     *   panelId,
     *   elements: [
     *     {
     *       element: {
     *         ...STATUS_TEXT,                    // Reuse the same element structure
     *         content: "Updated content"         // Only change what needs updating
     *       },
     *     },
     *   ],
     * });
     * ```
     */
    updatePanelElements(args: UpdatePanelElementsParams): Promise<UIPanel>;
    /**
     * Deletes elements from a panel.
     *
     * Use this method to remove specific elements from a panel without replacing
     * the entire panel content.
     *
     * @param args - The arguments for the method.
     * @param args.panelId - The id of the panel to delete the elements from.
     * @param args.elements - The elements to delete.
     * @example
     * ```typescript
     * await felt.deletePanelElements({
     *   panelId,
     *   elements: ["element-1", "element-2"],
     * });
     * ```
     */
    deletePanelElements(args: DeletePanelElementsParams): void;
    /**
     * Updates the UI controls on the embedded map.
     *
     * Use this method to show or hide various UI controls like the legend,
     * full screen button, and other map interface elements.
     *
     * @param controls - The controls to update.
     *
     * @example
     * ```typescript
     * // Show some UI controls
     * await felt.updateUiControls({
     *   showLegend: true,
     *   fullScreenButton: true,
     * });
     *
     * // Disable some UI options
     * await felt.updateUiControls({
     *   cooperativeGestures: false,
     *   geolocation: false,
     * });
     * ```
     */
    updateUiControls(controls: UiControlsOptions): void;
    /**
     * Control the on-map UI shown when interacting with features and elements.
     *
     * If you add your own click, selection or hover handlers you may want to disable
     * various parts of the Felt UI. This method allows you to control the visibility of
     * various parts of the UI that might otherwise be shown when people click or hover
     * on things.
     *
     * This does not affect selection. That means that selectable features and elements
     * will still be selected when clicked.
     *
     * @example
     * ```typescript
     * // Disable UI when hovering or selecting features
     * await felt.setOnMapInteractionsUi({
     *   featureSelectPanel: false,
     *   featureHoverPanel: false,
     * });
     * ```
     */
    setOnMapInteractionsUi(options: UiOnMapInteractionsOptions): void;
    /**
     * Shows a data table view for the specified layer, optionally sorted by a given attribute.
     *
     * The data table displays feature data in a tabular format, making it easy to
     * browse and analyze layer data. You can control the initial sorting of the table.
     *
     * @param params - Optional parameters for showing the data table.
     * @param params.layerId - The ID of the layer to show data for.
     * @param params.sorting - Optional sorting configuration for the table.
     *
     * @example
     * ```typescript
     * // Show data table with default sorting
     * await felt.showLayerDataTable({
     *   layerId: "layer-1",
     * });
     *
     * // Show data table sorted by height in descending order
     * await felt.showLayerDataTable({
     *   layerId: "layer-1",
     *   sorting: {
     *     attribute: "height",
     *     direction: "desc",
     *   },
     * });
     *
     * // Show the data table pane with no table visible
     * await felt.showLayerDataTable();
     * ```
     */
    showLayerDataTable(params?: {
        layerId: string;
        sorting?: SortConfig;
    }): Promise<void>;
    /**
     * Hides the data table.
     *
     * @example
     * ```typescript
     * await felt.hideLayerDataTable();
     * ```
     */
    hideLayerDataTable(): Promise<void>;
}

/**
 * The input type for setting the viewport to a particular center and zoom.
 *
 * @group Types
 */
interface ViewportCenterZoom extends zInfer<typeof ViewportCenterZoomSchema> {
    /**
     * The center of the viewport in latitude and longitude.
     */
    center: LatLng;
    /**
     * The zoom level of the viewport.
     */
    zoom: FeltZoom;
}
declare const ViewportCenterZoomSchema: z.ZodObject<{
    center: z.ZodObject<{
        latitude: z.ZodNumber;
        longitude: z.ZodNumber;
    }, "strip", z.ZodTypeAny, {
        latitude: number;
        longitude: number;
    }, {
        latitude: number;
        longitude: number;
    }>;
    zoom: z.ZodNumber;
}, "strip", z.ZodTypeAny, {
    center: {
        latitude: number;
        longitude: number;
    };
    zoom: number;
}, {
    center: {
        latitude: number;
        longitude: number;
    };
    zoom: number;
}>;
/**
 * The current state of the viewport, including the derived bounds.
 *
 * @group Types
 */
interface ViewportState {
    /**
     * The center of the viewport in latitude and longitude.
     *
     * {@link LatLng}
     */
    center: LatLng;
    /**
     * The zoom level of the viewport.
     *
     * {@link FeltZoom}
     */
    zoom: FeltZoom;
    /**
     * The bounding box of the viewport in [west, south, east, north] order.
     *
     * This is derived, and depends on the center and zoom of the viewport, as
     * well as its size.
     *
     * {@link FeltBoundary}
     */
    bounds: FeltBoundary;
}
/**
 * The parameters for the {@link ViewportController.setViewport | `setViewport`} method.
 *
 * @group Types
 */
interface SetViewportCenterZoomParams extends zInfer<typeof SetViewportCenterZoomParamsSchema> {
}
declare const SetViewportCenterZoomParamsSchema: z.ZodObject<{
    center: z.ZodOptional<z.ZodObject<{
        latitude: z.ZodNumber;
        longitude: z.ZodNumber;
    }, "strip", z.ZodTypeAny, {
        latitude: number;
        longitude: number;
    }, {
        latitude: number;
        longitude: number;
    }>>;
    zoom: z.ZodOptional<z.ZodNumber>;
}, "strip", z.ZodTypeAny, {
    center?: {
        latitude: number;
        longitude: number;
    } | undefined;
    zoom?: number | undefined;
}, {
    center?: {
        latitude: number;
        longitude: number;
    } | undefined;
    zoom?: number | undefined;
}>;
/**
 * The constraints for the viewport. Used to ensure that the viewport stays
 * within certain bounds and zoom levels.
 *
 * @group Types
 */
interface ViewportConstraints {
    /**
     * The minimum zoom level for the viewport.
     *
     * {@link FeltZoom}
     */
    minZoom: FeltZoom | null;
    /**
     * The maximum zoom level for the viewport.
     *
     * {@link FeltZoom}
     */
    maxZoom: FeltZoom | null;
    /**
     * The bounds for the viewport.
     *
     * {@link FeltBoundary}
     */
    bounds: FeltBoundary | null;
}
/**
 * The parameters for the {@link ViewportController.fitViewportToBounds | `fitViewportToBounds`} method.
 *
 * @group Types
 */
interface ViewportFitBoundsParams extends zInfer<typeof ViewportFitBoundsParamsSchema> {
    /**
     * The bounds to fit the viewport to.
     *
     * {@link FeltBoundary}
     */
    bounds: FeltBoundary;
}
declare const ViewportFitBoundsParamsSchema: z.ZodObject<{
    bounds: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
}, "strip", z.ZodTypeAny, {
    bounds: [number, number, number, number];
}, {
    bounds: [number, number, number, number];
}>;

/**
 * The viewport controller allows you to control the viewport of the map.
 *
 * You can get the current viewport, move the viewport, and be notified when
 * the viewport changes.
 *
 * @group Controller
 * @public
 */
interface ViewportController {
    /**
     * Gets the current state of the viewport.
     *
     * Use this method to retrieve the current center coordinates and zoom level
     * of the map viewport.
     *
     * @returns A promise that resolves to the current viewport state.
     *
     * @example
     * ```typescript
     * // Get current viewport state
     * const viewport = await felt.getViewport();
     * console.log({
     *   center: viewport.center,
     *   zoom: viewport.zoom,
     * });
     * ```
     */
    getViewport(): Promise<ViewportState>;
    /**
     * Moves the map to the specified location.
     *
     * Use this method to programmatically change the map's viewport to a specific
     * location and zoom level. The map will animate to the new position.
     *
     * @example
     * ```typescript
     * felt.setViewport({
     *   center: { latitude: 0, longitude: 0 },
     *   zoom: 10,
     * });
     * ```
     */
    setViewport(viewport: SetViewportCenterZoomParams): void;
    /**
     * Gets the current state of the viewport constraints.
     *
     * Use this method to retrieve the current viewport constraints, which limit
     * where users can pan and zoom on the map.
     *
     * @returns A promise that resolves to the current viewport constraints, or `null` if no constraints are set.
     *
     * @example
     * ```typescript
     * // Get current viewport constraints
     * const constraints = await felt.getViewportConstraints();
     * if (constraints) {
     *   console.log({
     *     bounds: constraints.bounds,
     *     minZoom: constraints.minZoom,
     *     maxZoom: constraints.maxZoom
     *   });
     * } else {
     *   console.log("No viewport constraints set");
     * }
     * ```
     */
    getViewportConstraints(): Promise<ViewportConstraints | null>;
    /**
     * Constrains the map viewport so it stays inside certain bounds and/or certain zoom levels.
     *
     * Use this method to limit where users can navigate on the map. This is useful
     * for keeping users focused on a specific area or preventing them from zooming
     * too far in or out.
     *
     * @example
     * ```typescript
     * felt.setViewportConstraints({
     *   bounds: [-122.5372532, 37.6652478, -122.1927016, 37.881707],
     *   minZoom: 1,
     *   maxZoom: 23,
     * });
     * ```
     *
     * @example
     * every constraint is optional
     * ```typescript
     * felt.setViewportConstraints({
     *   bounds: [-122.5372532, 37.6652478, -122.1927016, 37.881707],
     * });
     * ```
     *
     * @example
     * if a constraint is null, it will be removed but keeping the others
     * ```typescript
     * felt.setViewportConstraints({ bounds: null });
     * ```
     *
     * @example
     * if method receives null, it will remove the constraints
     * ```typescript
     * felt.setViewportConstraints(null);
     * ```
     */
    setViewportConstraints(constraints: Partial<ViewportConstraints> | null): void;
    /**
     * Fits the map to the specified bounds.
     *
     * Use this method to automatically adjust the viewport to show a specific
     * geographic area. The map will calculate the appropriate center and zoom
     * level to fit the bounds within the current map size.
     *
     * @example
     * ```typescript
     * const west = -122.4194;
     * const south = 37.7749;
     * const east = -122.4194;
     * const north = 37.7749;
     * felt.fitViewportToBounds({ bounds: [west, south, east, north] });
     * ```
     */
    fitViewportToBounds(bounds: ViewportFitBoundsParams): void;
    /**
     * Adds a listener for when the viewport changes.
     *
     * Use this to react to viewport changes, such as updating your UI or
     * triggering other actions when users navigate the map.
     *
     * @returns A function to unsubscribe from the listener.
     *
     * @event
     * @example
     * ```typescript
     * const unsubscribe = felt.onViewportMove({
     *   handler: viewport => console.log(viewport.center.latitude),
     * });
     *
     * // later on...
     * unsubscribe();
     * ```
     */
    onViewportMove(args: {
        /**
         * This callback is called with the current viewport state whenever
         * the viewport changes.
         *
         * @param viewport - The current viewport state.
         */
        handler: (viewport: ViewportState) => void;
    }): VoidFunction;
    /**
     * Adds a listener for when the viewport move ends, which is when the user
     * stops dragging or zooming the map, animations have finished, or inertial
     * dragging ends.
     *
     * Use this to react to the end of viewport changes, such as triggering
     * data loading or analysis when users finish navigating.
     *
     * @returns A function to unsubscribe from the listener.
     *
     * @event
     * @example
     * ```typescript
     * const unsubscribe = felt.onViewportMoveEnd({
     *   handler: viewport => console.log(viewport.center.latitude),
     * });
     *
     * // later on...
     * unsubscribe();
     * ```
     */
    onViewportMoveEnd(args: {
        handler: (viewport: ViewportState) => void;
    }): VoidFunction;
    /**
     * Adds a listener for when the map is idle, which is defined as:
     * - No transitions are in progress
     * - The user is not interacting with the map, e.g. by panning or zooming
     * - All tiles for the current viewport have been loaded
     * - Any fade transitions (e.g. for labels) have completed
     *
     * Use this to perform actions when the map is completely stable and ready
     * for user interaction, such as enabling certain features or triggering
     * data analysis.
     *
     * @returns A function to unsubscribe from the listener.
     *
     * @event
     * @example
     * ```typescript
     * const unsubscribe = felt.onMapIdle({ handler: () => console.log("map is idle") });
     *
     * // later on...
     * unsubscribe();
     * ```
     */
    onMapIdle(args: {
        handler: () => void;
    }): VoidFunction;
}

/**
 * This is the main interface for interacting with a Felt map.
 *
 * This interface is composed of the various controllers, each having a
 * different area of responsibility.
 *
 * All the methods are listed here, but each controller is documented on its
 * own to make it easier to find related methods and events.
 *
 * @group Controller
 * @public
 */
interface FeltController extends ViewportController, UiController, LayersController, ElementsController, SelectionController, InteractionsController, ToolsController, InteractionsController, MiscController, BasemapsController {
    /**
     * The iframe element containing the Felt map, if it is an embedded map.
     *
     * @readonly
     */
    iframe: HTMLIFrameElement | null;
}

export { type GeoJsonDataVectorSource as $, type PlaceElementRead as A, type BasemapsController as B, type ColorBasemap as C, type PlaceElementUpdate as D, type Element as E, type FeltController as F, type GetElementGroupsConstraint as G, type HighlighterElementCreate as H, type ImageElementCreate as I, type PolygonElementCreate as J, type PolygonElementRead as K, type LinkElementRead as L, type MarkerElementCreate as M, type NoteElementCreate as N, type PolygonElementUpdate as O, type PathElementCreate as P, type TextElementRead as Q, type TextElementUpdate as R, type ElementsController as S, type TextElementCreate as T, type UiControlsOptions as U, type ViewportCenterZoom as V, type MapInteractionEvent as W, type InteractionsController as X, type CreateLayersFromGeoJsonParams as Y, type DataOnlyLayer as Z, type FeltTiledVectorSource as _, type Basemap as a, type SelectionController as a$, type GeoJsonFileVectorSource as a0, type GeoJsonUrlVectorSource as a1, type GetLayerGroupsConstraint as a2, type GetLayersConstraint as a3, type GetRenderedFeaturesConstraint as a4, type Layer as a5, type LayerChangeCallbackParams as a6, type LayerCommon as a7, type LayerGroup as a8, type LayerGroupChangeCallbackParams as a9, type LayerBoundaries as aA, type LayerFilters as aB, type AggregatedGridConfig as aC, type AggregationConfig as aD, type AggregationMethod as aE, type CountGridConfig as aF, type GetLayerCalculationParams as aG, type GetLayerCategoriesGroup as aH, type GetLayerCategoriesParams as aI, type GetLayerHistogramBin as aJ, type GetLayerHistogramParams as aK, type GetLayerPrecomputedCalculationParams as aL, type GridConfig as aM, type GridType as aN, type MultiAggregationConfig as aO, type PrecomputedAggregationMethod as aP, type ValueConfiguration as aQ, type LayersController as aR, type MapDetails as aS, type MiscController as aT, type ElementGroupNode as aU, type ElementNode as aV, type EntityNode as aW, type FeatureNode as aX, type FeatureSelection as aY, type LayerGroupNode as aZ, type LayerNode as a_, type LayerProcessingStatus as aa, type LegendDisplay as ab, type LegendItem as ac, type LegendItemChangeCallbackParams as ad, type LegendItemIdentifier as ae, type LegendItemsConstraint as af, type RasterBand as ag, type RasterLayer as ah, type RasterLayerSource as ai, type UpdateLayerParams as aj, type VectorLayer as ak, type LayerFeature as al, type RasterValue as am, type LayerSchema as an, type LayerSchemaAttribute as ao, type LayerSchemaBooleanAttribute as ap, type LayerSchemaCommonAttribute as aq, type LayerSchemaDateAttribute as ar, type LayerSchemaDateTimeAttribute as as, type LayerSchemaNumericAttribute as at, type LayerSchemaTextAttribute as au, type FilterExpression as av, type FilterLogicGate as aw, type FilterTernary as ax, type Filters as ay, type GeometryFilter as az, type ColorBasemapInput as b, type UIPanelElement as b$, type FeltBoundary as b0, type FeltZoom as b1, type GeoJsonFeature as b2, type GeoJsonGeometry as b3, type GeoJsonProperties as b4, type LatLng as b5, type LineStringGeometry as b6, type LngLatTuple as b7, type MultiLineStringGeometry as b8, type MultiPointGeometry as b9, type CreatePanelElementsParams as bA, type DeletePanelElementsParams as bB, type UiOnMapInteractionsOptions as bC, type UpdateActionTriggerParams as bD, type UpdateFeatureActionParams as bE, type UpdatePanelElementsParams as bF, type PlacementForUIElement as bG, type UIPanel as bH, type UIPanelCreateOrUpdate as bI, type UIButtonElement as bJ, type UIButtonElementCreate as bK, type UIButtonElementUpdate as bL, type UITextElement as bM, type UITextElementCreate as bN, type UITextElementUpdate as bO, type UIFlexibleSpaceElement as bP, type UIFlexibleSpaceElementCreate as bQ, type UIFlexibleSpaceElementUpdate as bR, type UIDividerElement as bS, type UIDividerElementCreate as bT, type UIDividerElementUpdate as bU, type UITextInputElement as bV, type UITextInputElementCreate as bW, type UITextInputElementUpdate as bX, type UISelectElement as bY, type UISelectElementCreate as bZ, type UISelectElementUpdate as b_, type MultiPolygonGeometry as ba, type PointGeometry as bb, type PolygonGeometry as bc, type SetVisibilityRequest as bd, type SortConfig as be, type SortDirection as bf, type CircleToolSettings as bg, type ConfigurableToolType as bh, type HighlighterToolSettings as bi, type InputToolSettings as bj, type LineToolSettings as bk, type MarkerToolSettings as bl, type NoteToolSettings as bm, type PinToolSettings as bn, type PlaceFrame as bo, type PlaceSymbol as bp, type PolygonToolSettings as bq, type RouteToolSettings as br, type TextToolSettings as bs, type ToolSettingsChangeEvent as bt, type ToolSettingsMap as bu, type ToolType as bv, type ToolsController as bw, type CreateActionTriggerParams as bx, type CreateFeatureActionParams as by, type CreateOrUpdatePanelParams as bz, type CustomTileBasemap as c, type UIPanelElementCreate as c0, type UIPanelElementUpdate as c1, type UIGridContainerElement as c2, type UIGridContainerElementCreate as c3, type UIGridContainerElementUpdate as c4, type UIButtonRowElement as c5, type UIButtonRowElementCreate as c6, type UIButtonRowElementUpdate as c7, type UICheckboxGroupElement as c8, type UICheckboxGroupElementCreate as c9, type MakeClonableSchema as cA, type UIButtonRowElementCreateClonable as cB, type PromiseOrNot as cC, type UnionToIntersection as cD, type UICheckboxGroupElementUpdate as ca, type UIRadioGroupElement as cb, type UIRadioGroupElementCreate as cc, type UIRadioGroupElementUpdate as cd, type UIToggleGroupElement as ce, type UIToggleGroupElementCreate as cf, type UIToggleGroupElementUpdate as cg, type UIIframeElement as ch, type UIIframeElementCreate as ci, type UIIframeElementUpdate as cj, type UIControlElementOption as ck, type UIActionTriggerCreate as cl, type UIFeatureAction as cm, type UIFeatureActionCreate as cn, type UiController as co, type SetViewportCenterZoomParams as cp, type ViewportConstraints as cq, type ViewportFitBoundsParams as cr, type ViewportState as cs, type ViewportController as ct, type UnwrapPromise as cu, uiActionTriggerSchema as cv, uiFeatureActionSchema as cw, type UIPanelElementCreateClonable as cx, uiPanelCreateSchema as cy, type UIButtonElementCreateClonable as cz, type CustomTileBasemapInput as d, type FeltBasemap as e, type CircleElementCreate as f, type CircleElementRead as g, type CircleElementUpdate as h, type ElementChangeCallbackParams as i, type ElementCreate as j, type ElementGroup as k, type ElementGroupChangeCallbackParams as l, type ElementUpdate as m, type GetElementsConstraint as n, type HighlighterElementRead as o, type HighlighterElementUpdate as p, type ImageElementRead as q, type ImageElementUpdate as r, type MarkerElementRead as s, type MarkerElementUpdate as t, type NoteElementRead as u, type NoteElementUpdate as v, type PathElementRead as w, type PathElementUpdate as x, type PlaceElementCreate as y, type zInfer as z };