# QuickAdd API
The API is an interface accessible from scripts, macros and choices.
As of v0.8.0, the API is available for public consumption from just `app.plugins.plugins.quickadd.api`.<br/>
This means you can use the API methods found below in your Dataviewjs scripts, Templater scripts, and so on.
### `inputPrompt(header: string, placeholder?: string, value?: string): Promise<string>`
Opens a prompt that asks for an input. Returns a string with the input.
This function is asynchronous. You should ``await`` it.
### `wideInputPrompt: (header: string, placeholder?: string, value?): Promise<string>`
Opens a wide prompt that asks for an input. Returns a string with the input.
This function is asynchronous. You should ``await`` it.
### `yesNoPrompt: (header: string, text?: string): Promise<boolean>`
Opens a prompt asking for confirmation. Returns `true` or `false` based on answer.
This function is asynchronous. You should ``await`` it.
### `suggester: (displayItems: string[] | ((value: string, index?: number, arr?: string[]) => string[]), actualItems: string[]): Promise<string>`
Opens a suggester. Displays the `displayItems`, but you map these the other values with `actualItems`.
The ``displayItems`` can either be an array of strings, or a map function that will be executed on the actual items.
This means that the following syntax is possible:
````js
const pickedFile = await params.quickAddApi.suggester(
(file) => file.basename,
params.app.vault.getMarkdownFiles()
);
````
Returns the selected value.
This function is asynchronous. You should ``await`` it.
### `checkboxPrompt: (items: string[], selectedItems: string[]): Promise<string[]>`
Opens a checkbox prompt with the items given. Items in the `selectedItems` array will be selected by default.
Returns an array of the selected items.
This function is asynchronous. You should ``await`` it.
### ``executeChoice(choiceName: string, variables?: {[key: string]: any}): Promise``
Executes choice with the given name.
You can also pass an optional parameter, ``variables``.
The object will be read as variables for the choice to be executed. These variables do _not_ affect the currently set variables.
You should view the execution as a new branch, separate from the one executing the macro.
This function is asynchronous. You should ``await`` it.
#### Example use case for `executeChoice`
Say you have added a [Capture Choice](./Choices/CaptureChoice.md). Now you want to call it from within a script / macro, because you want to execute it repeatedly with different parameters.
Then you'd be able to do something like this:
```js
const massiveDataArray = [/* ... */];
massiveDataArray.forEach(async (data) => {
await params.quickAddApi.executeChoice('Capture Choice', {
X: data.x,
Y: data.y,
Z: data.z,
// ...
});
});
```
This would execute the choice for each item in the array, passing the data as a variable. This means you can access the variables from within your Capture with `{{VALUE:X}}` (and so on, for each key-value pair in the object).
## Utility module
### ``getClipboard(): Promise<string>``
Returns the contents of your clipboard.
This function is asynchronous. You should ``await`` it.
Syntax: `await quickAddApi.utility.getClipboard();`
### ``setClipboard(text: string): Promise``
Sets the contents of your clipboard to the given input.
This function is asynchronous. You should ``await`` it.
Syntax: `await quickAddApi.utility.setClipboard();`
## Date module
Formats always default to ``YYYY-MM-DD``.
### ``now(format?: string, offset?: number)``
Gets the current time and formats according to the given format.
Providing an offset will offset the date by number of days. Giving -1 would mean yesterday, and giving 1 would mean tomorrow - and so on.
### ``tomorrow(format?: string)``
Same as ``now`` but with offset set to 1.
### ``yesterday(format?: string)``
Again, same as ``now`` but with offset set to -1.
## Obsidian
The Obsidian API is exposed as well.
Accessible through the first parameter in your scripts. For example:
````js
module.exports = ({obsidian}) => {
// obsidian is the API
}
````