diff --git a/src/clipboard.d.ts b/src/clipboard.d.ts index bad95ff..b45dcc6 100644 --- a/src/clipboard.d.ts +++ b/src/clipboard.d.ts @@ -1,136 +1,84 @@ /// -import { TinyEmitter } from 'tiny-emitter'; - type Action = 'cut' | 'copy'; - -type Target = string | HTMLElement; - -type Trigger = string | HTMLElement | HTMLCollection | NodeList; +type Response = 'success' | 'error'; type Options = { - emmiter?: TinyEmitter; text?: string; action?: Action; target?: Element; - trigger?: Trigger; container?: Element; - selectedText?: string; }; -/** - * Inner class which performs selection from either `text` or `target` - * properties and then executes copy or cut operations. - */ -export declare class ClipboardAction { - constructor(options: Options); - /** - * Defines base properties passed from constructor. - */ - // better define the type of options - resolveOptions(options: Options): void; - /** - * Decides which selection strategy is going to be applied based - * on the existence of `text` and `target` properties. - */ - initSelection(): void; - /** - * Creates a fake textarea element, sets its value from `text` property, - * and makes a selection on it. - */ - selectFake(): void; - /** - * Only removes the fake element after another click event, that way - * a user can hit `Ctrl+C` to copy because selection still exists. - */ - removeFake(): void; - /** - * Selects the content from element passed on `target` property. - */ - selectTarget(): void; - /** - * Executes the copy operation based on the current selection. - */ - copyText(): void; - /** - * Fires an event based on the copy operation result. - */ - handleResult(succeeded: boolean): void; - /** - * Moves focus away from `target` and back to the trigger, removes current selection. - */ - clearSelection(): void; - /** - * Sets the `action` to be performed which can be either 'copy' or 'cut'. - */ - /** - * Sets the `action` to be performed which can be either 'copy' or 'cut'. - */ - action: Action; - /** - * Sets the `target` property using an element - * that will be have its content copied. - */ - target: Target; - /** - * Sets the `target` property using an element - * that will be have its content copied. - */ - /** - * Destroy lifecycle. - */ - destroy(): void; -} - /** * Base class which takes one or more elements, adds event listeners to them, * and instantiates a new `ClipboardAction` on each click. */ -export declare class ClipboardJS { - constructor(trigger: Trigger, options?: Options); +declare class ClipboardJS { + constructor( + selector: string | Element | NodeListOf, + options?: ClipboardJS.Options + ); + /** - * Defines if attributes would be resolved using internal setter functions - * or custom functions that were passed in the constructor. + * Subscribes to events that indicate the result of a copy/cut operation. + * @param type Event type ('success' or 'error'). + * @param handler Callback function. */ - resolveOptions(options: Options): void; + on(type: Response, handler: (e: ClipboardJS.Event) => void): this; + + on(type: string, handler: (...args: any[]) => void): this; + /** - * Adds a click event listener to the passed trigger. - */ - listenClick(trigger: Trigger): void; - /** - * Defines a new `ClipboardAction` on each click event. - */ - onClick(e: Event): void; - /** - * Default `action` lookup function. - */ - defaultAction(trigger: Trigger): string | undefined; - /** - * Default `target` lookup function. - */ - // check the return here - defaultTarget(trigger: Trigger): void; - /** - * Returns the support of the given action, or all actions if no action is - * given. - */ - static isSupported(action?: Action): boolean; - /** - * Default `text` lookup function. - */ - defaultText(trigger: Trigger): string | undefined; - /** - * Destroy lifecycle. + * Clears all event bindings. */ destroy(): void; + + /** + * Checks if clipboard.js is supported + */ + static isSupported(): boolean; } -/** - * Helper function to retrieve attribute value. - */ -export declare function getAttributeValue( - suffix: string, - element: Element -): string | undefined; +declare namespace ClipboardJS { + interface Options { + /** + * Overwrites default command ('cut' or 'copy'). + * @param elem Current element + */ + action?(elem: Element): Action; -export default ClipboardJS; + /** + * Overwrites default target input element. + * @param elem Current element + * @returns element to use. + */ + target?(elem: Element): Element; + + /** + * Returns the explicit text to copy. + * @param elem Current element + * @returns Text to be copied. + */ + text?(elem: Element): string; + + /** + * For use in Bootstrap Modals or with any + * other library that changes the focus + * you'll want to set the focused element + * as the container value. + */ + container?: Element; + } + + interface Event { + action: string; + text: string; + trigger: Element; + clearSelection(): void; + } +} + +export = ClipboardJS; + +export as namespace ClipboardJS;