import { Component } from "../../model/components/SDKComponent";
import { DesignComponent } from "../../model/components/SDKDesignComponent";
import { ElementDataView } from "../../model/elements/SDKElementDataView";
import { ElementDataViewColumn } from "../../model/elements/SDKElementDataViewColumn";
import { ElementProperty, ElementPropertyCreationModel, ElementPropertyUpdateModel } from "../../model/elements/SDKElementProperty";
import { ElementPropertyValue } from "../../model/elements/values/SDKElementPropertyValue";
import { ComponentGroup } from "../../model/groups/SDKComponentGroup";
import { DesignComponentGroup } from "../../model/groups/SDKDesignComponentGroup";
import { DataCore } from "../data/SDKDataCore";
import { RemoteVersionIdentifier } from "./SDKRemoteIdentifiers";
export declare class AreaComponents {
    /** Internal: Engine */
    private dataCore;
    constructor(dataCore: DataCore);
    /** Fetches all remote components in the version
     * @param from - Remote version to fetch from
     * @returns All components in the specified version
     */
    getComponents(from: RemoteVersionIdentifier, filter?: {
        brandId?: string;
    }): Promise<Array<Component>>;
    /** Fetches all remote component groups in the version
     * @param from - Remote version to fetch from
     * @returns All component groups in the specified version
     */
    getComponentGroups(from: RemoteVersionIdentifier): Promise<Array<ComponentGroup>>;
    /** Fetches all remote design components in the version
     * @param from - Remote version to fetch from
     * @returns All design components in the specified version
     */
    getDesignComponents(from: RemoteVersionIdentifier, filter?: {
        brandId?: string;
    }): Promise<Array<DesignComponent>>;
    /** Fetches all remote design component groups in the version
     * @param from - Remote version to fetch from
     * @param filter - Optional filter
     * @returns All design component groups in the specified version
     */
    getDesignComponentGroups(from: RemoteVersionIdentifier, filter?: {
        brandId?: string;
    }): Promise<Array<DesignComponentGroup>>;
    /** Retrieves all remote properties for components
     * @param from - Remote version to fetch from
     * @returns All component properties in the specified version
     */
    getComponentProperties(from: RemoteVersionIdentifier): Promise<Array<ElementProperty>>;
    /** Retrieves all remote property definitions for components
     * @param from - Remote version to fetch from
     * @returns All property definitions in the specified version
     */
    getComponentPropertyValues(from: RemoteVersionIdentifier): Promise<Array<ElementPropertyValue>>;
    /** Retrieves all remote property views for components
     * @param from - Remote version to fetch from
     * @returns All component views in the specified version
     */
    getComponentDataViews(from: RemoteVersionIdentifier): Promise<Array<ElementDataView>>;
    /** Creates remote component. This method can only be used once per component and will assign persistent id to the component. Calling this version on component that already has id assigned will result in error
     * @param to - Remote version to write to
     * @param component - Component to create
     * @param parentId - Id of the group to add the component to. This is id of the group, not the versioned id
     * @returns New remote component ids
     */
    createComponent(to: RemoteVersionIdentifier, component: Component): Promise<{
        id: string;
        idInVersion: string;
    }>;
    /** Creates local component. This component doesn't have id associated with it on remote, and must be created once with `createComponent` to be stored in design system
     * @returns New component filled with default values not associated with remote (yet)
     */
    createLocalComponent(versionId: string, brandId: string): Component;
    /** Creates remote component group. This method can only be used once per group and will assign persistent id to the group. Calling this version on group that already has id assigned will result in error
     * @param to - Remote version to write to
     * @param group - Group to create
     * @param parentId - Id of the group to add the group to. This is id of the group, not the versioned id
     * @returns New remote component group ids
     */
    createComponentGroup(to: RemoteVersionIdentifier, group: ComponentGroup): Promise<{
        id: string;
        idInVersion: string;
    }>;
    /** Creates local component group. This group doesn't have id associated with it on remote, and must be created once with `createComponentGroup` to be stored in design system
     * @param versionId - Id of the version to create the group in
     * @param brandId - Id of the brand to create the group in
     * @returns New group with id assigned
     */
    createLocalComponentGroup(versionId: string, brandId: string): ComponentGroup;
    /** Updates remote component. This method can only be used on components that already exist in the version
     * @param to - Remote version to write to
     * @param component - Component to update
     * @returns Nothing
     */
    updateComponent(to: RemoteVersionIdentifier, component: Component): Promise<void>;
    /** Updates remote component groups. This method can only be used on component groups that already exist in the version
     * @param to - Remote version to write to
     * @param component - Component group to update
     * @returns Nothing
     */
    updateComponentGroup(to: RemoteVersionIdentifier, group: ComponentGroup): Promise<void>;
    /** Updates remote component property value. This also creates the property value if it doesn't exist
     * @param to - Remote version to write to
     * @param newValue - Value to set - this can be multiple things, from ID to raw string value to others
     * @param forComponent - Component to assign the value to
     * @param forProperty - Property to assign the value to
     */
    updateComponentPropertyValue(to: RemoteVersionIdentifier, newValue: string, forComponent: Component, forProperty: ElementProperty): Promise<void>;
    /** Deletes remote component property value
     * @param to - Remote version to write to
     * @param valueId - Value identifier
     */
    deleteComponentPropertyValue(to: RemoteVersionIdentifier, valueId: string): Promise<void>;
    /** Create component property
     * @param to - Remote version to write to
     * @param model - Property creation model to create the property from
     */
    createComponentProperty(to: RemoteVersionIdentifier, model: ElementPropertyCreationModel): Promise<{
        id: string;
        idInVersion: string;
    }>;
    /** Update component property
     * @param to - Remote version to write to
     * @param propertyIdInVersion - Remote element property to update
     * @param model - Property update model to apply to property
     */
    updateComponentProperty(to: RemoteVersionIdentifier, propertyIdInVersion: string, model: ElementPropertyUpdateModel): Promise<void>;
    /** Delete component property. This will remove all values associated with the property
     * @param to - Remote version to write to
     * @param propertyIdInVersion - Id of the property to delete
     */
    deleteComponentProperty(to: RemoteVersionIdentifier, propertyIdInVersion: string): Promise<void>;
    /** Resize specific component column
     * @param to - Remote version to write to
     * @param columnIdInVersion - Id of the column to update
     * @param newWidth - New width of the column
     */
    updateResizeComponentColumn(to: RemoteVersionIdentifier, view: ElementDataView, column: ElementDataViewColumn, newWidth: number): Promise<void>;
    /** Move column to a new index and reorder all other columns around it
     * @param to - Remote version to write to
     * @param colum - Column object to move
     * @param newIndex - New index to move the component to
     */
    updateReorderComponentColumn(to: RemoteVersionIdentifier, view: ElementDataView, column: ElementDataViewColumn, newIndex: number): Promise<void>;
    /** Deletes remote component. Calling this method on component that doesn't exist in the version will result in error
     * @param to - Remote version to write to
     * @param componentIdInVersion - Component idInVersion to delete
     * @returns Nothing
     */
    deleteComponent(to: RemoteVersionIdentifier, componentIdInVersion: string): Promise<void>;
    /** Deletes remote component group. This method will also fix the component group tree by moving any subgroups to parent - do note it will NOT delete contents of the group. Calling this method on group that doesn't exist in the version will result in error
     * @param to - Remote version to write to
     * @param componentGroupIdInVersion - Component group idInVersion to delete
     * @returns Nothing
     */
    ungroupComponentGroup(to: RemoteVersionIdentifier, componentGroupIdInVersion: string): Promise<void>;
    /** Deletes remote component group and all its descendants. All items (groups and components) underneath will be deleted. Calling this method on group that doesn't exist in the version will result in error
     * @param to - Remote version to write to
     * @param componentGroupToDelete - Component group to delete
     * @param allComponents - Components for lookup
     * @param allComponentGroup - Component group for lookup
     * @returns Nothing
     */
    deleteComponentGroup(to: RemoteVersionIdentifier, componentGroupToDelete: ComponentGroup, components: Array<Component>, componentGroups: Array<ComponentGroup>): Promise<void>;
}
