import type Collection from 'ol/Collection' import type Feature from 'ol/Feature' import type { Vector as VectorSource } from 'ol/source' import type MapBrowserEvent from 'ol/MapBrowserEvent' import BaseEvent from 'ol/events/Event' import CurrentMap from './CurrentMap' export enum CopyPasteEventType { DELETESTART = 'deletestart', DELETEEND = 'deleteend' } export interface Options { condition?: (e: MapBrowserEvent) => 'copy' | 'paste' | 'cut'; features?: Collection; sources?: VectorSource | VectorSource[]; destination?: VectorSource; } /** An interaction to copy/paste features on a map * @constructor * @fires focus * @fires copy * @fires paste * @extends {Interaction} */ export default class CopyPaste extends CurrentMap { /** * @param {Object} options Options * @param {function} options.condition a function that take a mapBrowserEvent and return the actio nto perform: 'copy', 'cut' or 'paste', default Ctrl+C / Ctrl+V * @param {Collection} options.features list of features to copy * @param {VectorSource | Array} options.sources the source to copy from (used for cut), if not defined, it will use the destination * @param {VectorSource} options.destination the source to copy to */ constructor(options?: Options); /** Sources to cut feature from * @param { VectorSource | Array } sources */ setSources(sources: VectorSource | VectorSource[]): void; /** Get sources to cut feature from * @return { Array } */ getSources(): VectorSource[]; /** Source to paste features * @param { VectorSource } source */ setDestination(source: VectorSource): void; /** Get source to paste features * @param { VectorSource } */ getDestination(): void; /** Get current feature to copy * @return {Array} */ getFeatures(): Feature[]; /** Set current feature to copy * @param {Object} options * @param {Array | Collection} options.features feature to copy, default get in the provided collection * @param {boolean} options.cut try to cut feature from the sources, default false * @param {boolean} options.silent true to send an event, default true */ copy(options?: { features?: Feature[] | Collection; cut?: boolean; silent?: boolean; }): void; /** Paste features * @param {Object} options * @param {Array | Collection} features feature to copy, default get current features * @param {VectorSource} options.destination Source to paste to, default the current source * @param {boolean} options.silent true to send an event, default true */ paste(options?: { features?: Feature[] | Collection; destination?: VectorSource; silent?: boolean; }): void } export class CopyPasteEvent extends BaseEvent { constructor( type: CopyPasteEventType, features: Feature[] | Collection, time: number ); features: Feature[] | Collection time: number }