@microsoft/sp-webpart-base
Version: 
SharePoint Framework support for building web parts
1,139 lines (1,086 loc) • 81.9 kB
TypeScript
/**
 * SharePoint Framework support for building web parts.
 *
 * @remarks
 * This package defines the APIs used by developers to create a custom web part.
 * A web part is a reusable visual object that a page author can add to their content,
 * and customize using a property pane.  Examples of web parts include an embedded
 * video player, a map, a group calendar, a chart, etc.
 *
 * @packagedocumentation
 */
/// <reference types="office-js" />
import { BaseComponent } from '@microsoft/sp-component-base';
import { BaseComponentContext } from '@microsoft/sp-component-base';
import { DisplayMode } from '@microsoft/sp-core-library';
import type { HttpClient } from '@microsoft/sp-http';
import type { IAdaptiveCardExtensionManifest } from '@microsoft/sp-module-interfaces';
import type { IClientSideWebPartManifest } from '@microsoft/sp-module-interfaces';
import type { IClientSideWebPartManifestInstance } from '@microsoft/sp-module-interfaces';
import type { _IComponentContextParameters } from '@microsoft/sp-component-base';
import type { _IComponentPosition } from '@microsoft/sp-component-base';
import type { IComponentPropertyMetadata } from '@microsoft/sp-component-base';
import type { _IConfigurableOptionsController } from '@microsoft/sp-property-pane';
import type { IPropertyPaneConsumer } from '@microsoft/sp-property-pane';
import type { IPropertyPaneCustomFieldProps as IPropertyPaneCustomFieldProps_2 } from '@microsoft/sp-property-pane';
import type { IPropertyPaneData } from '@microsoft/sp-property-pane';
import type { IPropertyPaneField as IPropertyPaneField_2 } from '@microsoft/sp-property-pane';
import { IReadonlyTheme } from '@microsoft/sp-component-base';
import { ISerializedServerProcessedData } from '@microsoft/sp-component-base';
import type { ISpPageContext } from '@ms/odsp-datasources/lib/interfaces/ISpPageContext';
import type { ITopActions } from '@microsoft/sp-top-actions';
import type * as microsoftTeams from '@microsoft/teams-js-v2';
import type { PageContext } from '@microsoft/sp-page-context';
import type { PropertyPaneAction as PropertyPaneAction_2 } from '@microsoft/sp-property-pane';
import type { PropertyPaneLifeCycleEvent } from '@microsoft/sp-property-pane';
import { ServiceKey } from '@microsoft/sp-core-library';
import { ServiceScope } from '@microsoft/sp-core-library';
import { SPEvent } from '@microsoft/sp-core-library';
import { SPEventArgs } from '@microsoft/sp-core-library';
import type { SPHttpClient } from '@microsoft/sp-http';
import type * as SPPropertyPane from '@microsoft/sp-property-pane';
import { Version } from '@microsoft/sp-core-library';
/* Excluded from this release type: _AdaptiveCardExtensionWidthCalculator */
/* Excluded from this release type: _audienceFormServiceKey */
/**
 * This abstract class implements the the base functionality for a client-side web part. Every client-side web part
 * needs to inherit from this class.
 *
 * @remarks
 * Along with the base functionality, this class provides some APIs that can be
 * used by the web part. These APIs fall in two catagories.
 *
 * The first category of APIs provide data and functionality. Example, the web part context (i.e. this.context). This
 * API should be used to access contextual data relevant to this web part instance.
 *
 * The second category of APIs provide a base implementation for the web part lifecycle and can be overridden for an
 * updated implementation. The render() API is the only API that is mandatory to be implemented/overridden by a web
 * part. All other life cycle APIs have a base implementation and can be overridden based on the needs of the web part.
 * Please refer to the documentation of the individual APIs to make the right decision.
 *
 * @public
 */
export declare abstract class BaseClientSideWebPart<TProperties> extends BaseWebPart<TProperties> {
    /**
     * {@inheritDoc @microsoft/sp-component-base#BaseComponent.context}
     */
    readonly context: WebPartContext;
    private _firstTimeRenderPromises;
    private _renderedOnce;
    private _logSource;
    /**
     * Container width allocated for the web part
     */
    private _width;
    /**
     * A timer guard, QOS monitor and resolver delegate for the Async render scenarios. An async render scenario
     * is one in which the web part is rendering an IFRAME OR fetching async data outside of the onInit API
     * OR rendering an image tag. In these cases much of the web part rendering lifecycle is controlled by external
     * factors once the IFRAME is created or the data fetch request is sent OR the image tag is set. The web part
     * needs to call the renderCompleted API once the final rendering is complete and data is displayed.
     */
    private _asyncRenderGuardTimer;
    private _asyncRenderQosMonitor;
    private _renderPromiseResolver;
    private _renderPromiseRejecter;
    private _asyncRenderCompleteCalled;
    private _asyncRenderCompleteDidUpdate;
    /**
     * Whether the web part is visible.
     */
    private _isVisible;
    /**
     * Theme Provider to handle theme changes
     */
    private _internalThemeProvider;
    /**
     * Current theme
     */
    private _internalThemeVariant;
    private _internalIsDisposing;
    /**
     * Time when syncRender is finished.
     */
    private _syncRenderTime;
    /**
     * Constructor for the BaseClientSideWebPart class.
     *
     * @remarks
     * It is highly recommended that the web part use the `onInit()` API to perform any web part specific
     * initialization.  Most of the web part features like this.context and `this.properties` are not
     * available to be used before the the `onInit()` part of the web part loading lifecycle.
     */
    constructor();
    /**
     * This property is a pointer to the root DOM element of the web part. This is a DIV element and contains the whole
     * DOM subtree of the web part.
     *
     * @readonly
     */
    protected get domElement(): HTMLElement;
    /**
     * This property returns the width of the container for the web part.
     * @returns Width (in pixels) of the container for the web part.
     *
     * @remarks
     * Web parts should utilize this property to perform operations such as any conditional styling of components
     * based on the initial available width for the web part.
     * @readonly
     */
    protected get width(): number;
    /**
     * This property indicates whether the web part has been rendered once or not. After the first time rendering,
     * the value of this property is always true until a full re-render of the web part happens.
     *
     * @readonly
     */
    protected get renderedOnce(): boolean;
    /**
     * This property indicates whether the web part was rendered from the persisted data (serialized state from the
     * last time that the web part was saved) or not.
     *
     * @remarks
     * Example: When web part is added for the first time using toolbox then the value is false.
     *
     * @readonly
     */
    protected get renderedFromPersistedData(): boolean;
    /**
     * This property indicates whether a web part can open a popup on initial render.
     *
     * @remarks
     * In some environments the host
     * re-renders the web parts frequently, and therefore opening popups during render will cause popups to open
     * repeatedly, which is a poor user experience. As an example, the classic SharePoint pages perform postbacks
     * causing the page to re-render on all button clicks.
     *
     * If a web part needs to open a popup on render, it should use this API before opening the popup. If this API
     * returns false, the web part should not open popup on initial render. Some web parts that open popups during
     * render are the document embed web part that pops up the file picker on initial render, embedded video web part
     * that pops up the PropertyPane on initial render.
     *
     * @readonly
     */
    protected get canOpenPopupOnRender(): boolean;
    /**
     * Indicates whether the web part is rendering in Async mode.
     *
     * @remarks
     * If the web part overrides this field to return true, then it needs to call renderCompleted API
     * after the web part rendering is complete.
     *
     * The default value is false.
     *
     * @virtual
     */
    protected get isRenderAsync(): boolean;
    /* Excluded from this release type: isVisible */
    /* Excluded from this release type: isVisible */
    /* Excluded from this release type: _isDisposing */
    /* Excluded from this release type: _internalOnAfterResize */
    /* Excluded from this release type: _internalFirstTimeRender */
    /* Excluded from this release type: _internalSetDisplayMode */
    /* Excluded from this release type: _internalInitialize */
    /* Excluded from this release type: _internalDispose */
    /**
     * This API is called to render the web part. There is no base implementation of this API and the web part is
     * required to override this API.
     */
    protected abstract render(): void;
    /**
     * This API should be called by web parts that perform Async rendering. Those web part are required to override
     * the isRenderAsync API and return true. One such example is web parts that render content in an IFrame. The
     * web part initiates the IFrame rendering in the `render()` API but the actual rendering is complete only after
     * the iframe loading completes.
     *
     * @param error - error object indicating async render has completed with an error
     * @param didUpdate - used to override end performance time with sync render time
     */
    protected renderCompleted(error?: Error, didUpdate?: boolean): void;
    /**
     * This event method is called when the display mode of a web part is changed.
     *
     * @remarks
     * The default implementation of this API calls
     * the web part render method to re-render the web part with the new display mode. If a web part developer does not
     * want a full re-render to happen on display mode change, they can override this API and perform specific updates
     * to the web part DOM to switch its display mode.
     *
     * If the web part is initialized or re-initialized when switching to a different display mode then this
     * lifecycle method is not called. Example: SharePoint Site Page.
     *
     * @param oldDisplayMode - The old display mode.
     *
     * @virtual
     */
    protected onDisplayModeChanged(oldDisplayMode: DisplayMode): void;
    /**
     * This API should be used to refresh the contents of the PropertyPane.
     *
     * @remarks
     * This API is called at the end of the web part lifecycle on a page. It should be used to dispose any local
     * resources (i.e. DOM elements) that the web part is holding onto. This API is expected to be called in scenarios
     * like page navigation i.e. the host is transitioning from one page to another and disposes the page that is being
     * transitioned out.
     *
     * @virtual
     */
    protected onDispose(): void;
    /**
     * This API is invoked when the web part container dom element width is changed, e.g. when the browser
     * browser window is resized and when the property pane is toggled open/closed.
     *
     * @param newWidth - Width (in pixels) of the container for the web part after the resize event.
     * @remarks
     * Web parts should utilize this method to perform operations such as potentially re-rendering components
     * based on the new available width for the web part.
     *
     * @virtual
     */
    protected onAfterResize(newWidth: number): void;
    /**
     * This API is called when a theme is initialized or changed on the page or for the current section.
     * @param theme - New theme for the page or section
     * @remarks
     * Developers sould not call render in overridden method. It can lead to unpredicted re-flow of the web part.
     * render will be called from the base class when needed.
     *
     * @virtual
     */
    protected onThemeChanged(theme: IReadonlyTheme | undefined): void;
    /**
     * This API should be used to render an error message in the web part display area. Also logs the error message
     * using the trace logger.
     *
     * @param error - An error object containing the error message to render.
     */
    protected renderError(error: Error): void;
    /**
     * This API should be used to clear the error message from the web part display area.
     */
    protected clearError(): void;
    /* Excluded from this release type: _refresh */
    /* Excluded from this release type: _dynamicPropertyRefresh */
    /**
     * Waits for all render promises to resolve before disposing.
     */
    private _disposeAfterRenderPromises;
    /* Excluded from this release type: _getExtendedWidthCacheKey */
    /**
     * The actual initialization and rendering of the Web part starts when it is close enough
     * to the Viewport
     */
    private _onInViewport;
    /**
     * Wraps render to ensure any type of rendering has access to the latest context
     * to provide the most accurate accessible info to screen readers.
     */
    private _renderWithAccessibleTitle;
    /**
     * Start async guard timer. This timer is to help avoid losing performance markers for a web part
     * that renders asynchronously but does not call the `renderCompleted` API;
     */
    private _startAsyncRenderGuardTimer;
    /**
     * Render completed.
     *
     * @param didUpdate - used to override end performance time with sync render time.
     */
    private _renderCompleted;
    private _handleAsyncRenderFailed;
    /**
     * Async render timed out. Log error information and
     */
    private _asyncRenderTimeout;
    private _logAsyncRenderError;
    private _clearAsyncRenderGuardTimer;
    /**
     * This is called for every web part whether sync or async once rendering is completed.
     *
     * @param error - error object indicating asycn render has completed with an error
     * @param didUpdate - used to override end performance time with sync render time.
     */
    private _resolveOrRejectOnRenderPromise;
    private _clearRenderPromises;
    private _internalHandleThemeChangedEvent;
}
/**
 * This abstract class implements the UI-agnostic base functionality for a client-side web part.
 * The purpose is to allow a common core between 2D and MR WebParts.
 *
 * @privateRemarks
 * The _refresh() and _dynamicPropertyRefresh() API are the only API that are
 * mandatory to be implemented by our base WebPart classes.
 *
 * @public
 */
export declare abstract class BaseWebPart<TProperties extends {}> extends BaseComponent implements IPropertyPaneConsumer {
    /**
     * {@inheritDoc @microsoft/sp-component-base#BaseComponent.context}
     */
    readonly context: BaseWebPartContext;
    /* Excluded from this release type: _renderedFromPersistedData */
    private _displayMode;
    private _properties;
    private _initialized;
    /**
     * Keep a copy of the properties to be used for discard in non-reactive mode and this new set
     * of `properties('_backUpProperties')` is what will be persisted until the apply button is clicked.
     */
    private _backupProperties;
    private _previousState;
    private _baseLogSource;
    private _title;
    private _modifiedByGraph;
    private _description;
    private _iconImageUrl;
    private _audiences;
    /**
     * It makes sure we only log edit events once during one editing session.
     */
    private _hasEditLogged;
    /**
     * Cache init properties value, it would be used to check whether web part has been changed or not.
     */
    private _initPropertiesSnapshot;
    private _loadPropertyPaneResourcesPromise;
    private _emptyResolvedPromise;
    /**
     * This property points to the preview image for the web part. The base implementation returns undefined. Web parts
     * that want to provide a valid preview image url need to override this API. The preview image url can be used to
     * create a preview of the web part or of the page on which the web part is present.
     * virtual
     */
    get previewImageUrl(): string | undefined;
    /**
     * This property is the current display mode of the web part.
     *
     * @readonly
     */
    get displayMode(): DisplayMode;
    /* Excluded from this release type: modifiedByGraph */
    /**
     * The value of this property is stored in the serialized data of the web part to allow developers to manage
     * versioning of their web part. The default version is 1.0
     */
    protected get dataVersion(): Version;
    /**
     * This property is the pointer to the custom property bag of the web part.
     *
     * @readonly
     */
    protected get properties(): TProperties;
    /**
     * This property defines metadata for the web part property bag. The metadata can help SharePoint understand
     * the content of the properties better and perform relevant services on the data.
     * virtual
     *
     * @remarks
     * See {@link IWebPartPropertiesMetadata} for more information about how to define metadata
     */
    protected get propertiesMetadata(): IWebPartPropertiesMetadata | undefined;
    /**
     * This property is used to change the web part's property pane interaction from Reactive to NonReactive.
     * virtual
     *
     * @remarks
     * The default behavior is Reactive.
     *
     * Reactive implies that changes made in the PropertyPane are transmitted to the web part instantly and the user can
     * see instant updates. This helps the page creator get instant feedback and decide if they should keep the new
     * configuration changes or not.
     *
     * NonReactive implies that the configuration changes are transmitted to the web part only after "Apply" PropertyPane
     * button is clicked.
     */
    protected get disableReactivePropertyChanges(): boolean;
    /**
     * This property points to the accessible title of web part made available to screen readers. The base implementation
     * returns that default title in the manifest. Web parts that want to provide more descriptive title containing
     * contextual information need to override this API.
     * virtual
     */
    protected get accessibleTitle(): string;
    /**
     * Title of the WebPart
     *
     * @readonly
     */
    protected get title(): string;
    /* Excluded from this release type: iconImageUrl */
    /**
     * Description of the WebPart
     *
     * @readonly
     */
    protected get description(): string;
    /* Excluded from this release type: audiences */
    /**
     * This property is a pointer to the current set of properties which are already or needs to be persisted.
     *
     * @readonly
     */
    private get _persistedProperties();
    /**
     * Constructor for the `BaseWebPart` class.
     *
     * @remarks
     * It is highly recommended that the web part use the OnInit API to perform any web part specific initialization.
     * Most of the web part features like this.context and this.properties are not available to be used before the
     * the onInit part of the web part loading lifecycle.
     */
    constructor();
    /* Excluded from this release type: _getPropertyPaneData */
    /* Excluded from this release type: _loadPropertyPaneResources */
    /* Excluded from this release type: _onPropertyPaneFieldChanged */
    /* Excluded from this release type: _onPropertyPaneLifeCycleEvent */
    /* Excluded from this release type: _isPropertyPaneReactive */
    /* Excluded from this release type: _internalSerialize */
    /* Excluded from this release type: _internalDispose */
    /* Excluded from this release type: _internalOnAfterResize */
    /* Excluded from this release type: _internalSetWebPartData */
    /* Excluded from this release type: _internalSetDisplayMode */
    /* Excluded from this release type: _internalSetDirtyBit */
    /* Excluded from this release type: _internalInitialize */
    /* Excluded from this release type: _internalDeserialize */
    /**
     * Returns the configuration for this webpart's top actions or undefined if the webpart
     * doesn't support top actions.
     */
    getTopActionsConfiguration(): ITopActions | undefined;
    /**
     * This event method is called when the web part is initialized.
     * virtual
     *
     * @remarks
     * This API should be overridden to perform long running operations e.g. data fetching from a remote service before
     * the initial rendering of the web part. The loading indicator is displayed during the lifetime of this method.
     * This API is called only once during the lifecycle of a web part.
     */
    protected onInit(): Promise<void>;
    /**
     * This event method is called when the display mode of a web part is changed.
     * virtual
     *
     * @remarks
     * The default implementation of this API calls
     * the web part render method to re-render the web part with the new display mode. If a web part developer does not
     * want a full re-render to happen on display mode change, they can override this API and perform specific updates
     * to the web part DOM to switch its display mode.
     *
     * If the web part is initialized or re-initialized when switching to a different display mode then this
     * lifecycle method is not called. Example: SharePoint Site Page.
     *
     * @param oldDisplayMode - The old display mode.
     */
    protected onDisplayModeChanged(oldDisplayMode: DisplayMode): void;
    /**
     * This event method is called before the web part is serialized.
     * virtual
     *
     * @remarks
     * The default implementation is a no-op. The serialization
     * process serializes the web part property bag i.e. this.properties. This API gives the web part a chance to
     * update it's property bag before the serialization happens. Some web part's may keep their state other objects
     * or even in the DOM. If a web part needs to persist some of that state, it needs to override this API and update
     * the web part property bag to the latest state. If a web part updates the property bag with invalid property
     * values, those will get persisted. So that should be avoided. The web part property bag should always contain
     * valid property values.
     */
    protected onBeforeSerialize(): void;
    /**
     * This API is called after the web part is deserialized to an object, right before the property bag is populated.
     * virtual
     *
     * @remarks
     * The default implementation is a no-op. A web part developer can override this API if the deserialized object
     * does not fully reflect the initial state of the property bag. This gives the web part developer a chance to
     * populate the property bag right after the data is deserialized to an object.
     *
     * An important scenario to use deserialize is upgrading. An upgraded web part may load the data
     * that was serialized by an older version of the web part that supported a different schema of the property bag,
     * resulting the deserialized object to be inconsistent with the current schema of the property bag. The developer
     * can use `onAfterDeserialize` to check the dataVersion and fix the property bag.
     *
     * @param deserializedObject - The object deserialized from the stored data. Note that the schema of  this object
     * is not necessarily consistent with the current property bag, because the serialization could have been done by
     * an older version of the web part
     * @param dataVersion - The data version of the stored data being deserialized. You can use this value to determine
     * if the data was serialized by an older web part. Web parts can define their data version by overriding the
     * dataVersion property.
     *
     * @returns The property bag of the web part
     */
    protected onAfterDeserialize(deserializedObject: any, dataVersion: Version): TProperties;
    /**
     * This API enables asynchronous loading of property pane related resources of the web part.
     * @virtual
     *
     * @remarks
     * If not overridden by the web part, base web part resolves the promise immediately.
     *
     * This method is called before any property pane APIs are called.
     * Other property pane APIs cannot be called until this promise is resolved.
     * No other property pane related events are raised except 'PropertyPaneConfigurationComplete'.
     *
     * 'PropertyPaneConfigurationComplete' event can be raised to clean up any pending resources
     * including 'loadPropertyPaneResources' promise.
     */
    protected loadPropertyPaneResources(): Promise<void>;
    /**
     * This API is used to ger the configuration to build the property pane for the web part. If the web part wants
     * to use the PropertyPane for configuration, this API needs to be overridden and the web part needs to return
     * the configuration for the PropertyPane.
     *
     * This API is not invoked until the 'loadPropertyPaneResources' promise is resolved.
     *
     * See IPropertyPane and other PropertyPane integration wiki documentation for more details.
     * virtual
     */
    protected getPropertyPaneConfiguration(): IPropertyPaneConfiguration;
    /* Excluded from this release type: getDetailsPaneConfiguration */
    /**
     * This API should be used to refresh the contents of the PropertyPane.
     * virtual
     *
     * @remarks
     * This API is called at the end of the web part lifecycle on a page. It should be used to dispose any local
     * resources (i.e. DOM elements) that the web part is holding onto. This API is expected to be called in scenarios
     * like page navigation i.e. the host is transitioning from one page to another and disposes the page that is being
     * transitioned out.
     */
    protected onDispose(): void;
    /**
     * This API is invoked after updating the new value of the property in the property bag when the PropertyPane
     * is being used in Reactive mode.
     * virtual
     *
     * @param propertyPath - JSON path of the property in the property bag.
     *  In the case of custom field, if no target property is provided then a custom value is assigned,
     *  which will be in the form of `__CustomField_<key provided when the custom field is created>`.
     * @param oldValue - Old value of the property.
     *  This value could be undefined/empty in the case of custom field.
     * @param newValue - New value of the property.
     *  This value could be undefined/empty in the case of custom field.
     */
    protected onPropertyPaneFieldChanged(propertyPath: string, oldValue: any, newValue: any): void;
    /**
     * This event method is invoked when the configuration starts on the PropertyPane.
     * virtual
     *
     * @remarks
     * This event method is invoked in the following cases:
     *
     *  - When the PropertyPane is opened.
     *
     *  - When the user switches web parts then the new web part gets this event.
     */
    protected onPropertyPaneConfigurationStart(): void;
    /**
     * This API is invoked when the configuration is completed on the PropertyPane.
     * virtual
     *
     * @remarks
     * This event method is invoked in the following cases:
     *
     *  - When the CONFIGURATION_COMPLETE_TIMEOUT((currently the value is 5 secs) elapses after the last change.
     *
     *  - When user clicks the "X" (close) button before the CONFIGURATION_COMPLETE_TIMEOUT elapses.
     *
     *  - When user clicks the 'Apply' button before the CONFIGURATION_COMPLETE_TIMEOUT elapses.
     *
     *  - When the user switches web parts then the current web part gets this event.
     */
    protected onPropertyPaneConfigurationComplete(): void;
    /**
     * This API is invoked after the changes made on the PropertyPane are applied when the PropertyPane is used in
     * Non-Reactive mode. This API is not invoked when the PropertyPane is used in Reactive mode.
     * virtual
     */
    protected onAfterPropertyPaneChangesApplied(): void;
    /**
     * This API is invoked when the PropertyPane is rendered.
     * virtual
     * @privateRemarks
     * From framework standpoint, we do not want to allow this event handler to be passed in, and trigger it.
     * This api should be deprecated and then removed as part of refactoring.
     */
    protected onPropertyPaneRendered(): void;
    /* Excluded from this release type: onAfterPropertiesUpdatedExternally */
    /* Excluded from this release type: _internalGetData */
    /* Excluded from this release type: _refresh */
    /* Excluded from this release type: _dynamicPropertyRefresh */
    /* Excluded from this release type: _getDefaultAccessibleTitle */
    /* Excluded from this release type: _onPropertyPaneChangesApplied */
    /**
     * This method consumes the properties object from the serialized data and re-applies
     * the field values from the serverProcessedContent. This process will result in the
     * properties bag as it was when the serialization happened.
     */
    private _reInstateServerProcessedData;
    /**
     * Iterates and validates each metadata property before calling metadata processor.
     *
     * @param metadataProcessor - Callback handler to to process validated metadata.
     * @param properties - Optional properties to process instead of default this.properties
     */
    private _forEachPropertyWithMetaData;
    /**
     * Validates path and iterate over one or multiple wildcard paths
     *
     * @param propPath - Original property path provided in metadata
     * @param properties - Properties to look for the given path.
     * @param propertyPathHandler - Handler to process validated and fixed path
     */
    private _validateAndIteratePath;
    /**
     * Operations to be done after the property bag is updated.
     *
     * @param shouldRefresh - Indicating whether web part needs to be shouldRefresh or not.
     */
    private _afterPropertyUpdated;
    /**
     * Fixes up a property pane configuration to use dynamic data. This happens in-place.
     * The fix-up consists on adding the necessary hooks to the web part that are required,
     * like the dynamic data provider, the render function and the object it refers to.
     *
     * @param configuration - Property pane configuration to fix up.
     */
    private _fixUpDynamicDataConfiguration;
    /**
     * Adds a new group with an audiences picker to the first page of the property pane configuration.
     * This happens in-place.
     *
     * @param configuration - Property pane configuration to add the audience targeting picker group to
     */
    private _addAudienceTargetingConfiguration;
    /**
     * The serializer for the exposed part of the web part data
     *
     * @privateRemarks
     * This serialize API is a public candidate for post-GA (after removing the input parameter)
     */
    private _serialize;
    /**
     * This function serializes the Dynamic Data objects from the web part properties into the serialized web part data.
     *
     * If there is a property "myDynamicProperty" in the property bag that points to `"PageContext:user"`,
     * the serialized data is updated as the following:
     * ```
     * serializedData = {
     *   dynamicDataPaths: {
     *     "myDynamicProperty": "PageContext:user"
     *   }
     * }
     * ```
     */
    private _serializeDynamicData;
    /**
     * This function deserializes the Dynamic Data objects from serialized web part data into web part properties.
     *
     * If the serializedData has a "dynamicDataPaths" or "dynamicDataValues" property,
     * it creates DynamicData objects for it.
     *
     * Example:
     * ```
     * serializedData = {
     *   dynamicDataPaths: {
     *     "myDynamicProperty": "PageContext:user"
     *   }
     * }
     * ```
     *
     * This will create a property "myDynamicProperty" in the web parts properties, with a new DynamicData object that
     * points at "PageContext:user"
     */
    private _deserializeDynamicData;
    /**
     * For each property in the serialized properties of the web part, we check if the property is declared
     * as dynamicProperty in the properties metadata of the web part.
     *  - If yes, then we check
     *    - if the value of it is an instance of DynamicProperty
     *      - If No, then we create and assign a DynamicProperty with the type given specified in the
     *        'dynamicPropertyType' property
     *      - else, it's a no-op.
     *  - If no, then it's a no-op
     *
     * While creating the DynamicProperty, we use the pre-configured value associated with that property from
     * the web part's property bag as the default value.
     * @param deSerializedProperties - deserialized properties of the web part.
     */
    private _initializeDynamicPropertiesIfRequired;
    /**
     * Disposing the dynamic properties, for those which are declared as dynamic properties.
     *
     * @privateRemarks
     * We are disposing only the declared dynamic properties because we created them on behalf of
     * the web part and hence it is our responsiblity to clean them.
     */
    private _disposeDynamicPropertiesIfRequired;
    /**
     * Update the web part property if it is in the property bag.
     *
     * @param propertyPath - property path as expected by lodash update (https://lodash.com/docs#update).
     *   (e.g. 'o.a.b', 'o[0].a.b[1].c'). These paths are similar to those in the JSONPath spec described by
     *   Stefan Goessner at (http://goessner.net/articles/JsonPath/). Currently we plan to use lodash.get, has
     *   and update APIs which support paths. Some day we may migrate to using actual JSONPath.js. But that
     *   should not be an issue because the path formatting conventions are same in lodash and JSONPath.
     * @param newValue - new value entered by the user for the associated target property
     */
    private _updateProperty;
    /**
     * Using 'cloneDeepWith' because the web part properties bag will now serialize the
     * dynamic properties as well. One of the building blocks of these properties are dataProviders,
     * which when serialized will result in 'Maximum call stack size exceeded' based on what kind of
     * sources they hold references to.
     * Hence using cloneDeepWith, which lets us handle the special cases and in this case if the property
     * in question is a 'DynamicProperty' and we call '_cloneDeep' api on the dynamicProperty.
     */
    private _cloneProperties;
}
/**
 * Web part context object. This object contains the contextual services available to a web part. e.g.
 * a contextual instance to the http client.
 *
 * This base is to be extended by UI-specific WebPart's base.
 *
 * @public
 */
export declare class BaseWebPartContext extends BaseComponentContext {
    /**
     * {@inheritDoc @microsoft/sp-component-base#BaseComponentContext.manifest}
     */
    readonly manifest: IClientSideWebPartManifestInstance<any>;
    private _webPartTag;
    private _requestPropertyPaneAction;
    private _isPropertyPaneRenderedByWebPart;
    private _isPropertyPaneOpen;
    private _isContentPanelOpen;
    private _host;
    private _propertyPaneAccessor;
    private _privateDataUpdatedEvent;
    private _formFactor;
    /* Excluded from this release type: __constructor */
    /**
     * Web part tag to be used for logging and telemetry.
     */
    get webPartTag(): string;
    /**
     * Accessor for common web part property pane operations.
     */
    get propertyPane(): IPropertyPaneAccessor;
    /* Excluded from this release type: formFactor */
    /* Excluded from this release type: host */
    /* Excluded from this release type: _dataUpdatedEvent */
}
/* Excluded from this release type: _BaseWebPartHost */
/**
 * Callback to clear the dom node.
 */
declare type ClearDomElementCallback = (domElement: Element) => void;
/* Excluded from this release type: ClientSideWebPartManager */
/* Excluded from this release type: ClientSideWebPartManagerFactory */
/* Excluded from this release type: _ClientSideWebPartStatusRenderer */
/* Excluded from this release type: CONTENT_PANEL_TOGGLED */
/**
 * Enum for the possible values of shared depth of the dynamic data reference.
 *
 * @public
 * @deprecated This is obsolete now. This enum has been moved to `@microsoft/sp-property-pane`.
 * Please consume it from there.
 * @remarks We have left the original implementation here to avoid breaking the public API contract.
 */
export declare enum DynamicDataSharedDepth {
    /**
     * Indicates that nothing is shared.
     */
    None = 0,
    /**
     * Indicates that the dynamic data source is shared.
     */
    Source = 1,
    /**
     * Indicates that both the dynamic data source and the property are shared.
     */
    Property = 2
}
/* Excluded from this release type: _getErrorAceLoadConfiguration */
/* Excluded from this release type: IAdaptiveCardExtensionManifest */
/* Excluded from this release type: _IAudienceFormOptions */
/* Excluded from this release type: _IAudienceFormService */
/* Excluded from this release type: _IBaseWebPartContextParameters */
/* Excluded from this release type: _ICardWidthMap */
/**
 * Interface to be implemented by a component that should display the loading indicator and
 * error messages for a web part.
 *
 * @public
 */
export declare interface IClientSideWebPartStatusRenderer {
    /**
     * Display a loading spinner.
     * @param domElement - the web part container div.
     * @param loadingMessage - the message to be displayed when the loading spinner id displayed.
     * @param timeout - timeout to render the loading indicator. Default is 1500ms.
     * @param clearDomElementCallback - Callback to clear the dom node before rendering the indicator. Standard DOM API will be used after the callback.
     */
    displayLoadingIndicator(domElement: Element, loadingMessage: string, timeout?: number, clearDomElementCallback?: ClearDomElementCallback): void;
    /**
     * Clear the loading indicator.
     * @param domElement - the web part container div.
     */
    clearLoadingIndicator(domElement: Element): void;
    /**
     * Render the provided error message in the webpart container div.
     * @param domElement - the web part container div.
     * @param error - the error message.
     * @param clearDomElementCallback - Callback to clear the dom node before rendering the error element. Standard DOM API will be used after the callback.
     */
    renderError(domElement: HTMLElement, error: Error | string, clearDomElementCallback?: ClearDomElementCallback): void;
    /**
     * Clear the webpart error message.
     * @param domElement - the web part container div.
     */
    clearError(domElement: HTMLElement): void;
}
/* Excluded from this release type: _IComponentContextParameters */
/* Excluded from this release type: _IComponentPosition */
/* Excluded from this release type: _IConfigurableOptionsController */
/**
 * Configuration related to a shared property.
 *
 * @public
 * @deprecated This is obsolete now. This interface has been moved to `@microsoft/sp-property-pane`.
 * Please consume it from there.
 * @remarks We have left the original implementation here to avoid breaking the public API contract.
 */
export declare interface IDynamicDataSharedPropertyConfiguration extends SPPropertyPane.IDynamicDataSharedPropertyConfiguration {
}
/**
 * Property pane dynamic data property filters.
 *
 * @public
 * @deprecated This is obsolete now. This interface has been moved to `@microsoft/sp-property-pane`.
 * Please consume it from there.
 * @remarks We have left the original implementation here to avoid breaking the public API contract.
 */
export declare interface IDynamicDataSharedPropertyFilters extends SPPropertyPane.IDynamicDataSharedPropertyFilters {
}
/**
 * Configuration related to a shared source.
 *
 * @public
 * @deprecated This is obsolete now. This interface has been moved to `@microsoft/sp-property-pane`.
 * Please consume it from there.
 * @remarks We have left the original implementation here to avoid breaking the public API contract.
 */
export declare interface IDynamicDataSharedSourceConfiguration extends SPPropertyPane.IDynamicDataSharedSourceConfiguration {
}
/**
 * Property pane dynamic data source filters.
 *
 * @public
 * @deprecated This is obsolete now. This interface has been moved to `@microsoft/sp-property-pane`.
 * Please consume it from there.
 * @remarks We have left the original implementation here to avoid breaking the public API contract.
 */
export declare interface IDynamicDataSharedSourceFilters extends SPPropertyPane.IDynamicDataSharedSourceFilters {
}
/* Excluded from this release type: _IframedLifeCycleMethods */
/* Excluded from this release type: _IframedWebPartAction */
/* Excluded from this release type: _IIframedWebPartMessage */
/* Excluded from this release type: IInternalWebPartData */
/* Excluded from this release type: _IIsolatedItemContext */
/**
 * Provides access to the Teams SDK and Teams context. Only provided when the web part is loaded in Teams.
 *
 * @public
 */
export declare interface IMicrosoftTeams {
    /**
     * Microsoft Teams SDK.
     */
    teamsJs: typeof microsoftTeams;
    /**
     * Microsoft Teams' Context.
     *
     * @deprecated
     * This property is deprecated. Use the `teamsJs.app.getContext()` method instead.
     *
     * @remarks
     * For more information, please see:
     * {@link https://docs.microsoft.com/en-us/javascript/api/@microsoft/teams-js/microsoftteams.context?view=msteams-client-js-latest}
     */
    context: microsoftTeams.Context;
}
/* Excluded from this release type: _IMinimalWebPartContainerProps */
/* Excluded from this release type: IModifiedMetadata */
/* Excluded from this release type: IOffice */
/* Excluded from this release type: IParentHostLifeCycle */
/**
 * Web part context property pane accessor interface. Provides some most commonly used operations
 * to access the property pane and content panel.
 *
 * @public
 */
export declare interface IPropertyPaneAccessor {
    /**
     * This API should be used to open the PropertyPane or Content Panel to help configure the web part.
     */
    open(): void;
    /**
     * This API should be used to close the PropertyPane or Content Panel to help configure the web part.
     */
    close(): void;
    /**
     * This API should be used to open the Details PropertyPane/Content Panel to help configure the items in the web part.
     * @remarks
     * This API is mainly used for configuring Details, which is different from configuring the web part itself.
     *
     * @param context - Add additional context for property pane or content panel
     */
    openDetails(context?: any): void;
    /**
     * This API should be used to invoke the PropertyPane or Content Panel to help configure the web part.
     *
     * @remarks
     * This operation only works when the PropertyPane is already open for the currently active web part.
     * If the PropertyPane is opened for another web part, calling the refresh API will have no impact.
     */
    refresh(): void;
    /**
     * Indicates whether the PropertyPane/Content Panel was initially opened by the web part.
     * @remarks
     * For example, if the web part calls this.context.propertyPane.open() then the property would be true,
     * whereas if the configuration was opened by the host, then the value will be false.
     */
    isRenderedByWebPart(): boolean;
    /**
     * Returns true if the PropertyPane is open.
     * @remarks
     * This is true whenever the Property Pane is open whether it is hosted in the Content Panel
     * or traditional Property Pane UI.
     *
     */
    isPropertyPaneOpen(): boolean;
    /* Excluded from this release type: isPropertyPaneOpen */
    /* Excluded from this release type: isContentPanelOpen */
}
/**
 * PropertyPane button props.
 *
 * @public
 * @deprecated This is obsolete now. This interface has been moved to `@microsoft/sp-property-pane`.
 * Please consume it from there.
 * @remarks We have left the original implementation here to avoid breaking the public API contract.
 */
export declare interface IPropertyPaneButtonProps extends SPPropertyPane.IPropertyPaneButtonProps {
}
/**
 * PropertyPane CheckBox component props.
 *
 * @public
 * @deprecated This is obsolete now. This interface has been moved to `@microsoft/sp-property-pane`.
 * Please consume it from there.
 * @remarks We have left the original implementation here to avoid breaking the public API contract.
 */
export declare interface IPropertyPaneCheckboxProps extends SPPropertyPane.IPropertyPaneCheckboxProps {
}
/**
 * PropertyPane ChoiceGroup option props.
 *
 * @public
 * @deprecated This is obsolete now. This interface has been moved to `@microsoft/sp-property-pane`.
 * Please consume it from there.
 * @remarks We have left the original implementation here to avoid breaking the public API contract.
 */
export declare interface IPropertyPaneChoiceGroupOption extends SPPropertyPane.IPropertyPaneChoiceGroupOption {
}
/**
 * PropertyPane ChoiceGroup icon props.
 *
 * @public
 * @deprecated This is obsolete now. This interface has been moved to `@microsoft/sp-property-pane`.
 * Please consume it from there.
 * @remarks We have left the original implementation here to avoid breaking the public API contract.
 */
export declare interface IPropertyPaneChoiceGroupOptionIconProps extends SPPropertyPane.IPropertyPaneChoiceGroupOptionIconProps {
}
/**
 * PropertyPane ChoiceGroup props.
 *
 * @public
 * @deprecated This is obsolete now. This interface has been moved to `@microsoft/sp-property-pane`.
 * Please consume it from there.
 * @remarks We have left the original implementation here to avoid breaking the public API contract.
 */
export declare interface IPropertyPaneChoiceGroupProps extends SPPropertyPane.IPropertyPaneChoiceGroupProps {
}
/**
 * Property pane conditional group.
 *
 * @public
 * @deprecated This is obsolete now. This interface has been moved to `@microsoft/sp-property-pane`.
 * Please consume it from there.
 * @remarks We have left the original implementation here to avoid breaking the public API contract.
 */
export declare interface IPropertyPaneConditionalGroup extends SPPropertyPane.IPropertyPaneConditionalGroup {
}
/**
 * Web part configuration settings
 *
 * @public
 * @deprecated This is obsolete now. This interface has been moved to `@microsoft/sp-property-pane`.
 * Please consume it from there.
 * @remarks We have left the original implementation here to avoid breaking the public API contract.
 */
export declare interface IPropertyPaneConfiguration extends SPPropertyPane.IPropertyPaneConfiguration {
}
/* Excluded from this release type: IPropertyPaneConsumer */
/**
 * PropertyPane CustomPropertyField props.
 *
 * @public
 * @deprecated This is obsolete now. This interface has been moved to `@microsoft/sp-property-pane`.
 * Please consume it from there.
 * @remarks We have left the original implementation here to avoid breaking the public API contract.
 */
export declare interface IPropertyPaneCustomFieldProps extends SPPropertyPane.IPropertyPaneCustomFieldProps {
}
/* Excluded from this release type: IPropertyPaneData */
/**
 * PropertyPane dropdown callout properties.
 *
 * @public
 * @deprecated This is obsolete now. This interface has been moved to `@microsoft/sp-property-pane`.
 * Please consume it from there.
 * @remarks We have left the original implementation here to avoid breaking the public API contract.
 */
export declare interface IPropertyPaneDropdownCalloutProps extends SPPropertyPane.IPropertyPaneDropdownCalloutProps {
}
/**
 * PropertyPane drop down options.
 *
 * @public
 * @deprecated This is obsolete now. This interface has been moved to `@microsoft/sp-property-pane`.
 * Please consume it from there.
 * @remarks We have left the original implementation here to avoid breaking the public API contract.
 */
export declare interface IPropertyPaneDropdownOption extends SPPropertyPane.IPropertyPaneDropdownOption {
}
/**
 * PropertyPane drop down component props.
 *
 * @public
 * @deprecated This is obsolete now. This interface has been moved to `@microsoft/sp-property-pane`.
 * Please consume it from there.
 * @remarks We have left the original implementation here to avoid breaking the public API contract.
 */
export declare interface IPropertyPaneDropdownProps extends SPPropertyPane.IPropertyPaneDropdownProps {
}
/**
 * Property pane dynamic field filters which is an intersection of both
 * source and property filters.
 *
 * @public
 * @deprecated This is obsolete now. This interface has be