2023-08-28 16:42:29 +02:00

8600 lines
284 KiB
TypeScript

declare const SignatureSaveMode: {
readonly ALWAYS: "ALWAYS";
readonly NEVER: "NEVER";
readonly USING_UI: "USING_UI";
};
type ISignatureSaveMode = (typeof SignatureSaveMode)[keyof typeof SignatureSaveMode];
/**
* Copyright (c) 2014-present, Facebook, Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
/**
* Immutable data encourages pure functions (data-in, data-out) and lends itself
* to much simpler application development and enabling techniques from
* functional programming such as lazy evaluation.
*
* While designed to bring these powerful functional concepts to JavaScript, it
* presents an Object-Oriented API familiar to Javascript engineers and closely
* mirroring that of Array, Map, and Set. It is easy and efficient to convert to
* and from plain Javascript types.
*
* ## How to read these docs
*
* In order to better explain what kinds of values the Immutable.js API expects
* and produces, this documentation is presented in a statically typed dialect of
* JavaScript (like [Flow][] or [TypeScript][]). You *don't need* to use these
* type checking tools in order to use Immutable.js, however becoming familiar
* with their syntax will help you get a deeper understanding of this API.
*
* **A few examples and how to read them.**
*
* All methods describe the kinds of data they accept and the kinds of data
* they return. For example a function which accepts two numbers and returns
* a number would look like this:
*
* ```js
* sum(first: number, second: number): number
* ```
*
* Sometimes, methods can accept different kinds of data or return different
* kinds of data, and this is described with a *type variable*, which is
* typically in all-caps. For example, a function which always returns the same
* kind of data it was provided would look like this:
*
* ```js
* identity<T>(value: T): T
* ```
*
* Type variables are defined with classes and referred to in methods. For
* example, a class that holds onto a value for you might look like this:
*
* ```js
* class Box<T> {
* constructor(value: T)
* getValue(): T
* }
* ```
*
* In order to manipulate Immutable data, methods that we're used to affecting
* a Collection instead return a new Collection of the same type. The type
* `this` refers to the same kind of class. For example, a List which returns
* new Lists when you `push` a value onto it might look like:
*
* ```js
* class List<T> {
* push(value: T): this
* }
* ```
*
* Many methods in Immutable.js accept values which implement the JavaScript
* [Iterable][] protocol, and might appear like `Iterable<string>` for something
* which represents sequence of strings. Typically in JavaScript we use plain
* Arrays (`[]`) when an Iterable is expected, but also all of the Immutable.js
* collections are iterable themselves!
*
* For example, to get a value deep within a structure of data, we might use
* `getIn` which expects an `Iterable` path:
*
* ```
* getIn(path: Iterable<string | number>): any
* ```
*
* To use this method, we could pass an array: `data.getIn([ "key", 2 ])`.
*
*
* Note: All examples are presented in the modern [ES2015][] version of
* JavaScript. Use tools like Babel to support older browsers.
*
* For example:
*
* ```js
* // ES2015
* const mappedFoo = foo.map(x => x * x);
* // ES5
* var mappedFoo = foo.map(function (x) { return x * x; });
* ```
*
* [ES2015]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/New_in_JavaScript/ECMAScript_6_support_in_Mozilla
* [TypeScript]: http://www.typescriptlang.org/
* [Flow]: https://flowtype.org/
* [Iterable]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols
*/
/**
* Lists are ordered indexed dense collections, much like a JavaScript
* Array.
*
* Lists are immutable and fully persistent with O(log32 N) gets and sets,
* and O(1) push and pop.
*
* Lists implement Deque, with efficient addition and removal from both the
* end (`push`, `pop`) and beginning (`unshift`, `shift`).
*
* Unlike a JavaScript Array, there is no distinction between an
* "unset" index and an index set to `undefined`. `List#forEach` visits all
* indices from 0 to size, regardless of whether they were explicitly defined.
*/
declare module List {
/**
* True if the provided value is a List
*
* <!-- runkit:activate -->
* ```js
* const { List } = require('immutable');
* List.isList([]); // false
* List.isList(List()); // true
* ```
*/
function isList(maybeList: any): maybeList is List<any>;
/**
* Creates a new List containing `values`.
*
* <!-- runkit:activate -->
* ```js
* const { List } = require('immutable');
* List.of(1, 2, 3, 4)
* // List [ 1, 2, 3, 4 ]
* ```
*
* Note: Values are not altered or converted in any way.
*
* <!-- runkit:activate -->
* ```js
* const { List } = require('immutable');
* List.of({x:1}, 2, [3], 4)
* // List [ { x: 1 }, 2, [ 3 ], 4 ]
* ```
*/
function of<T>(...values: Array<T>): List<T>;
}
/**
* Create a new immutable List containing the values of the provided
* collection-like.
*
* Note: `List` is a factory function and not a class, and does not use the
* `new` keyword during construction.
*
* <!-- runkit:activate -->
* ```js
* const { List, Set } = require('immutable')
*
* const emptyList = List()
* // List []
*
* const plainArray = [ 1, 2, 3, 4 ]
* const listFromPlainArray = List(plainArray)
* // List [ 1, 2, 3, 4 ]
*
* const plainSet = Set([ 1, 2, 3, 4 ])
* const listFromPlainSet = List(plainSet)
* // List [ 1, 2, 3, 4 ]
*
* const arrayIterator = plainArray[Symbol.iterator]()
* const listFromCollectionArray = List(arrayIterator)
* // List [ 1, 2, 3, 4 ]
*
* listFromPlainArray.equals(listFromCollectionArray) // true
* listFromPlainSet.equals(listFromCollectionArray) // true
* listFromPlainSet.equals(listFromPlainArray) // true
* ```
*/
declare function List(): List<any>;
declare function List<T>(): List<T>;
declare function List<T>(collection: Iterable<T>): List<T>;
interface List<T> extends Collection.Indexed<T> {
/**
* The number of items in this List.
*/
readonly size: number;
// Persistent changes
/**
* Returns a new List which includes `value` at `index`. If `index` already
* exists in this List, it will be replaced.
*
* `index` may be a negative number, which indexes back from the end of the
* List. `v.set(-1, "value")` sets the last item in the List.
*
* If `index` larger than `size`, the returned List's `size` will be large
* enough to include the `index`.
*
* <!-- runkit:activate
* { "preamble": "const { List } = require('immutable');" }
* -->
* ```js
* const originalList = List([ 0 ]);
* // List [ 0 ]
* originalList.set(1, 1);
* // List [ 0, 1 ]
* originalList.set(0, 'overwritten');
* // List [ "overwritten" ]
* originalList.set(2, 2);
* // List [ 0, undefined, 2 ]
*
* List().set(50000, 'value').size;
* // 50001
* ```
*
* Note: `set` can be used in `withMutations`.
*/
set(index: number, value: T): List<T>;
/**
* Returns a new List which excludes this `index` and with a size 1 less
* than this List. Values at indices above `index` are shifted down by 1 to
* fill the position.
*
* This is synonymous with `list.splice(index, 1)`.
*
* `index` may be a negative number, which indexes back from the end of the
* List. `v.delete(-1)` deletes the last item in the List.
*
* Note: `delete` cannot be safely used in IE8
*
* <!-- runkit:activate
* { "preamble": "const { List } = require('immutable');" }
* -->
* ```js
* List([ 0, 1, 2, 3, 4 ]).delete(0);
* // List [ 1, 2, 3, 4 ]
* ```
*
* Since `delete()` re-indexes values, it produces a complete copy, which
* has `O(N)` complexity.
*
* Note: `delete` *cannot* be used in `withMutations`.
*
* @alias remove
*/
delete(index: number): List<T>;
remove(index: number): List<T>;
/**
* Returns a new List with `value` at `index` with a size 1 more than this
* List. Values at indices above `index` are shifted over by 1.
*
* This is synonymous with `list.splice(index, 0, value)`.
*
* <!-- runkit:activate
* { "preamble": "const { List } = require('immutable');" }
* -->
* ```js
* List([ 0, 1, 2, 3, 4 ]).insert(6, 5)
* // List [ 0, 1, 2, 3, 4, 5 ]
* ```
*
* Since `insert()` re-indexes values, it produces a complete copy, which
* has `O(N)` complexity.
*
* Note: `insert` *cannot* be used in `withMutations`.
*/
insert(index: number, value: T): List<T>;
/**
* Returns a new List with 0 size and no values in constant time.
*
* <!-- runkit:activate
* { "preamble": "const { List } = require('immutable');" }
* -->
* ```js
* List([ 1, 2, 3, 4 ]).clear()
* // List []
* ```
*
* Note: `clear` can be used in `withMutations`.
*/
clear(): List<T>;
/**
* Returns a new List with the provided `values` appended, starting at this
* List's `size`.
*
* <!-- runkit:activate
* { "preamble": "const { List } = require('immutable');" }
* -->
* ```js
* List([ 1, 2, 3, 4 ]).push(5)
* // List [ 1, 2, 3, 4, 5 ]
* ```
*
* Note: `push` can be used in `withMutations`.
*/
push(...values: Array<T>): List<T>;
/**
* Returns a new List with a size ones less than this List, excluding
* the last index in this List.
*
* Note: this differs from `Array#pop` because it returns a new
* List rather than the removed value. Use `last()` to get the last value
* in this List.
*
* ```js
* List([ 1, 2, 3, 4 ]).pop()
* // List[ 1, 2, 3 ]
* ```
*
* Note: `pop` can be used in `withMutations`.
*/
pop(): List<T>;
/**
* Returns a new List with the provided `values` prepended, shifting other
* values ahead to higher indices.
*
* <!-- runkit:activate
* { "preamble": "const { List } = require('immutable');" }
* -->
* ```js
* List([ 2, 3, 4]).unshift(1);
* // List [ 1, 2, 3, 4 ]
* ```
*
* Note: `unshift` can be used in `withMutations`.
*/
unshift(...values: Array<T>): List<T>;
/**
* Returns a new List with a size ones less than this List, excluding
* the first index in this List, shifting all other values to a lower index.
*
* Note: this differs from `Array#shift` because it returns a new
* List rather than the removed value. Use `first()` to get the first
* value in this List.
*
* <!-- runkit:activate
* { "preamble": "const { List } = require('immutable');" }
* -->
* ```js
* List([ 0, 1, 2, 3, 4 ]).shift();
* // List [ 1, 2, 3, 4 ]
* ```
*
* Note: `shift` can be used in `withMutations`.
*/
shift(): List<T>;
/**
* Returns a new List with an updated value at `index` with the return
* value of calling `updater` with the existing value, or `notSetValue` if
* `index` was not set. If called with a single argument, `updater` is
* called with the List itself.
*
* `index` may be a negative number, which indexes back from the end of the
* List. `v.update(-1)` updates the last item in the List.
*
* <!-- runkit:activate
* { "preamble": "const { List } = require('immutable');" }
* -->
* ```js
* const list = List([ 'a', 'b', 'c' ])
* const result = list.update(2, val => val.toUpperCase())
* // List [ "a", "b", "C" ]
* ```
*
* This can be very useful as a way to "chain" a normal function into a
* sequence of methods. RxJS calls this "let" and lodash calls it "thru".
*
* For example, to sum a List after mapping and filtering:
*
* <!-- runkit:activate
* { "preamble": "const { List } = require('immutable');" }
* -->
* ```js
* function sum(collection) {
* return collection.reduce((sum, x) => sum + x, 0)
* }
*
* List([ 1, 2, 3 ])
* .map(x => x + 1)
* .filter(x => x % 2 === 0)
* .update(sum)
* // 6
* ```
*
* Note: `update(index)` can be used in `withMutations`.
*
* @see `Map#update`
*/
update(index: number, notSetValue: T, updater: (value: T) => T): this;
update(index: number, updater: (value: T) => T): this;
update<R>(updater: (value: this) => R): R;
/**
* Returns a new List with size `size`. If `size` is less than this
* List's size, the new List will exclude values at the higher indices.
* If `size` is greater than this List's size, the new List will have
* undefined values for the newly available indices.
*
* When building a new List and the final size is known up front, `setSize`
* used in conjunction with `withMutations` may result in the more
* performant construction.
*/
setSize(size: number): List<T>;
// Deep persistent changes
/**
* Returns a new List having set `value` at this `keyPath`. If any keys in
* `keyPath` do not exist, a new immutable Map will be created at that key.
*
* Index numbers are used as keys to determine the path to follow in
* the List.
*
* <!-- runkit:activate -->
* ```js
* const { List } = require('immutable')
* const list = List([ 0, 1, 2, List([ 3, 4 ])])
* list.setIn([3, 0], 999);
* // List [ 0, 1, 2, List [ 999, 4 ] ]
* ```
*
* Plain JavaScript Object or Arrays may be nested within an Immutable.js
* Collection, and setIn() can update those values as well, treating them
* immutably by creating new copies of those values with the changes applied.
*
* <!-- runkit:activate -->
* ```js
* const { List } = require('immutable')
* const list = List([ 0, 1, 2, { plain: 'object' }])
* list.setIn([3, 'plain'], 'value');
* // List([ 0, 1, 2, { plain: 'value' }])
* ```
*
* Note: `setIn` can be used in `withMutations`.
*/
setIn(keyPath: Iterable<any>, value: any): this;
/**
* Returns a new List having removed the value at this `keyPath`. If any
* keys in `keyPath` do not exist, no change will occur.
*
* <!-- runkit:activate -->
* ```js
* const { List } = require('immutable')
* const list = List([ 0, 1, 2, List([ 3, 4 ])])
* list.deleteIn([3, 0]);
* // List [ 0, 1, 2, List [ 4 ] ]
* ```
*
* Plain JavaScript Object or Arrays may be nested within an Immutable.js
* Collection, and removeIn() can update those values as well, treating them
* immutably by creating new copies of those values with the changes applied.
*
* <!-- runkit:activate -->
* ```js
* const { List } = require('immutable')
* const list = List([ 0, 1, 2, { plain: 'object' }])
* list.removeIn([3, 'plain']);
* // List([ 0, 1, 2, {}])
* ```
*
* Note: `deleteIn` *cannot* be safely used in `withMutations`.
*
* @alias removeIn
*/
deleteIn(keyPath: Iterable<any>): this;
removeIn(keyPath: Iterable<any>): this;
/**
* Note: `updateIn` can be used in `withMutations`.
*
* @see `Map#updateIn`
*/
updateIn(keyPath: Iterable<any>, notSetValue: any, updater: (value: any) => any): this;
updateIn(keyPath: Iterable<any>, updater: (value: any) => any): this;
/**
* Note: `mergeIn` can be used in `withMutations`.
*
* @see `Map#mergeIn`
*/
mergeIn(keyPath: Iterable<any>, ...collections: Array<any>): this;
/**
* Note: `mergeDeepIn` can be used in `withMutations`.
*
* @see `Map#mergeDeepIn`
*/
mergeDeepIn(keyPath: Iterable<any>, ...collections: Array<any>): this;
// Transient changes
/**
* Note: Not all methods can be safely used on a mutable collection or within
* `withMutations`! Check the documentation for each method to see if it
* allows being used in `withMutations`.
*
* @see `Map#withMutations`
*/
withMutations(mutator: (mutable: this) => any): this;
/**
* An alternative API for withMutations()
*
* Note: Not all methods can be safely used on a mutable collection or within
* `withMutations`! Check the documentation for each method to see if it
* allows being used in `withMutations`.
*
* @see `Map#asMutable`
*/
asMutable(): this;
/**
* @see `Map#wasAltered`
*/
wasAltered(): boolean;
/**
* @see `Map#asImmutable`
*/
asImmutable(): this;
// Sequence algorithms
/**
* Returns a new List with other values or collections concatenated to this one.
*
* Note: `concat` can be used in `withMutations`.
*
* @alias merge
*/
concat<C>(...valuesOrCollections: Array<Iterable<C> | C>): List<T | C>;
merge<C>(...collections: Array<Iterable<C>>): List<T | C>;
/**
* Returns a new List with values passed through a
* `mapper` function.
*
* <!-- runkit:activate
* { "preamble": "const { List } = require('immutable');" }
* -->
* ```js
* List([ 1, 2 ]).map(x => 10 * x)
* // List [ 10, 20 ]
* ```
*/
map<M>(
mapper: (value: T, key: number, iter: this) => M,
context?: any
): List<M>;
/**
* Flat-maps the List, returning a new List.
*
* Similar to `list.map(...).flatten(true)`.
*/
flatMap<M>(
mapper: (value: T, key: number, iter: this) => Iterable<M>,
context?: any
): List<M>;
/**
* Returns a new List with only the values for which the `predicate`
* function returns true.
*
* Note: `filter()` always returns a new instance, even if it results in
* not filtering out any values.
*/
filter<F extends T>(
predicate: (value: T, index: number, iter: this) => value is F,
context?: any
): List<F>;
filter(
predicate: (value: T, index: number, iter: this) => any,
context?: any
): this;
/**
* Returns a List "zipped" with the provided collection.
*
* Like `zipWith`, but using the default `zipper`: creating an `Array`.
*
* <!-- runkit:activate
* { "preamble": "const { List } = require('immutable');" }
* -->
* ```js
* const a = List([ 1, 2, 3 ]);
* const b = List([ 4, 5, 6 ]);
* const c = a.zip(b); // List [ [ 1, 4 ], [ 2, 5 ], [ 3, 6 ] ]
* ```
*/
zip<U>(other: Collection<any, U>): List<[T, U]>;
zip<U, V>(other: Collection<any, U>, other2: Collection<any, V>): List<[T, U, V]>;
zip(...collections: Array<Collection<any, any>>): List<any>;
/**
* Returns a List "zipped" with the provided collections.
*
* Unlike `zip`, `zipAll` continues zipping until the longest collection is
* exhausted. Missing values from shorter collections are filled with `undefined`.
*
* <!-- runkit:activate
* { "preamble": "const { List } = require('immutable');" }
* -->
* ```js
* const a = List([ 1, 2 ]);
* const b = List([ 3, 4, 5 ]);
* const c = a.zipAll(b); // List [ [ 1, 3 ], [ 2, 4 ], [ undefined, 5 ] ]
* ```
*
* Note: Since zipAll will return a collection as large as the largest
* input, some results may contain undefined values. TypeScript cannot
* account for these without cases (as of v2.5).
*/
zipAll<U>(other: Collection<any, U>): List<[T, U]>;
zipAll<U, V>(other: Collection<any, U>, other2: Collection<any, V>): List<[T, U, V]>;
zipAll(...collections: Array<Collection<any, any>>): List<any>;
/**
* Returns a List "zipped" with the provided collections by using a
* custom `zipper` function.
*
* <!-- runkit:activate
* { "preamble": "const { List } = require('immutable');" }
* -->
* ```js
* const a = List([ 1, 2, 3 ]);
* const b = List([ 4, 5, 6 ]);
* const c = a.zipWith((a, b) => a + b, b);
* // List [ 5, 7, 9 ]
* ```
*/
zipWith<U, Z>(
zipper: (value: T, otherValue: U) => Z,
otherCollection: Collection<any, U>
): List<Z>;
zipWith<U, V, Z>(
zipper: (value: T, otherValue: U, thirdValue: V) => Z,
otherCollection: Collection<any, U>,
thirdCollection: Collection<any, V>
): List<Z>;
zipWith<Z>(
zipper: (...any: Array<any>) => Z,
...collections: Array<Collection<any, any>>
): List<Z>;
}
/**
* Immutable Map is an unordered Collection.Keyed of (key, value) pairs with
* `O(log32 N)` gets and `O(log32 N)` persistent sets.
*
* Iteration order of a Map is undefined, however is stable. Multiple
* iterations of the same Map will iterate in the same order.
*
* Map's keys can be of any type, and use `Immutable.is` to determine key
* equality. This allows the use of any value (including NaN) as a key.
*
* Because `Immutable.is` returns equality based on value semantics, and
* Immutable collections are treated as values, any Immutable collection may
* be used as a key.
*
* <!-- runkit:activate -->
* ```js
* const { Map, List } = require('immutable');
* Map().set(List([ 1 ]), 'listofone').get(List([ 1 ]));
* // 'listofone'
* ```
*
* Any JavaScript object may be used as a key, however strict identity is used
* to evaluate key equality. Two similar looking objects will represent two
* different keys.
*
* Implemented by a hash-array mapped trie.
*/
declare module Map {
/**
* True if the provided value is a Map
*
* <!-- runkit:activate -->
* ```js
* const { Map } = require('immutable')
* Map.isMap({}) // false
* Map.isMap(Map()) // true
* ```
*/
function isMap(maybeMap: any): maybeMap is Map<any, any>;
/**
* Creates a new Map from alternating keys and values
*
* <!-- runkit:activate -->
* ```js
* const { Map } = require('immutable')
* Map.of(
* 'key', 'value',
* 'numerical value', 3,
* 0, 'numerical key'
* )
* // Map { 0: "numerical key", "key": "value", "numerical value": 3 }
* ```
*
* @deprecated Use Map([ [ 'k', 'v' ] ]) or Map({ k: 'v' })
*/
function of(...keyValues: Array<any>): Map<any, any>;
}
/**
* Creates a new Immutable Map.
*
* Created with the same key value pairs as the provided Collection.Keyed or
* JavaScript Object or expects a Collection of [K, V] tuple entries.
*
* Note: `Map` is a factory function and not a class, and does not use the
* `new` keyword during construction.
*
* <!-- runkit:activate -->
* ```js
* const { Map } = require('immutable')
* Map({ key: "value" })
* Map([ [ "key", "value" ] ])
* ```
*
* Keep in mind, when using JS objects to construct Immutable Maps, that
* JavaScript Object properties are always strings, even if written in a
* quote-less shorthand, while Immutable Maps accept keys of any type.
*
* <!-- runkit:activate
* { "preamble": "const { Map } = require('immutable');" }
* -->
* ```js
* let obj = { 1: "one" }
* Object.keys(obj) // [ "1" ]
* assert.equal(obj["1"], obj[1]) // "one" === "one"
*
* let map = Map(obj)
* assert.notEqual(map.get("1"), map.get(1)) // "one" !== undefined
* ```
*
* Property access for JavaScript Objects first converts the key to a string,
* but since Immutable Map keys can be of any type the argument to `get()` is
* not altered.
*/
declare function Map<K, V>(collection: Iterable<[K, V]>): Map<K, V>;
declare function Map<T>(collection: Iterable<Iterable<T>>): Map<T, T>;
declare function Map<V>(obj: { [key: string]: V }): Map<string, V>;
declare function Map<K, V>(): Map<K, V>;
declare function Map(): Map<any, any>;
interface Map<K, V> extends Collection.Keyed<K, V> {
/**
* The number of entries in this Map.
*/
readonly size: number;
// Persistent changes
/**
* Returns a new Map also containing the new key, value pair. If an equivalent
* key already exists in this Map, it will be replaced.
*
* <!-- runkit:activate -->
* ```js
* const { Map } = require('immutable')
* const originalMap = Map()
* const newerMap = originalMap.set('key', 'value')
* const newestMap = newerMap.set('key', 'newer value')
*
* originalMap
* // Map {}
* newerMap
* // Map { "key": "value" }
* newestMap
* // Map { "key": "newer value" }
* ```
*
* Note: `set` can be used in `withMutations`.
*/
set(key: K, value: V): this;
/**
* Returns a new Map which excludes this `key`.
*
* Note: `delete` cannot be safely used in IE8, but is provided to mirror
* the ES6 collection API.
*
* <!-- runkit:activate -->
* ```js
* const { Map } = require('immutable')
* const originalMap = Map({
* key: 'value',
* otherKey: 'other value'
* })
* // Map { "key": "value", "otherKey": "other value" }
* originalMap.delete('otherKey')
* // Map { "key": "value" }
* ```
*
* Note: `delete` can be used in `withMutations`.
*
* @alias remove
*/
delete(key: K): this;
remove(key: K): this;
/**
* Returns a new Map which excludes the provided `keys`.
*
* <!-- runkit:activate -->
* ```js
* const { Map } = require('immutable')
* const names = Map({ a: "Aaron", b: "Barry", c: "Connor" })
* names.deleteAll([ 'a', 'c' ])
* // Map { "b": "Barry" }
* ```
*
* Note: `deleteAll` can be used in `withMutations`.
*
* @alias removeAll
*/
deleteAll(keys: Iterable<K>): this;
removeAll(keys: Iterable<K>): this;
/**
* Returns a new Map containing no keys or values.
*
* <!-- runkit:activate -->
* ```js
* const { Map } = require('immutable')
* Map({ key: 'value' }).clear()
* // Map {}
* ```
*
* Note: `clear` can be used in `withMutations`.
*/
clear(): this;
/**
* Returns a new Map having updated the value at this `key` with the return
* value of calling `updater` with the existing value.
*
* Similar to: `map.set(key, updater(map.get(key)))`.
*
* <!-- runkit:activate -->
* ```js
* const { Map } = require('immutable')
* const aMap = Map({ key: 'value' })
* const newMap = aMap.update('key', value => value + value)
* // Map { "key": "valuevalue" }
* ```
*
* This is most commonly used to call methods on collections within a
* structure of data. For example, in order to `.push()` onto a nested `List`,
* `update` and `push` can be used together:
*
* <!-- runkit:activate
* { "preamble": "const { Map, List } = require('immutable');" }
* -->
* ```js
* const aMap = Map({ nestedList: List([ 1, 2, 3 ]) })
* const newMap = aMap.update('nestedList', list => list.push(4))
* // Map { "nestedList": List [ 1, 2, 3, 4 ] }
* ```
*
* When a `notSetValue` is provided, it is provided to the `updater`
* function when the value at the key does not exist in the Map.
*
* <!-- runkit:activate
* { "preamble": "const { Map } = require('immutable');" }
* -->
* ```js
* const aMap = Map({ key: 'value' })
* const newMap = aMap.update('noKey', 'no value', value => value + value)
* // Map { "key": "value", "noKey": "no valueno value" }
* ```
*
* However, if the `updater` function returns the same value it was called
* with, then no change will occur. This is still true if `notSetValue`
* is provided.
*
* <!-- runkit:activate
* { "preamble": "const { Map } = require('immutable');" }
* -->
* ```js
* const aMap = Map({ apples: 10 })
* const newMap = aMap.update('oranges', 0, val => val)
* // Map { "apples": 10 }
* assert.strictEqual(newMap, map);
* ```
*
* For code using ES2015 or later, using `notSetValue` is discourged in
* favor of function parameter default values. This helps to avoid any
* potential confusion with identify functions as described above.
*
* The previous example behaves differently when written with default values:
*
* <!-- runkit:activate
* { "preamble": "const { Map } = require('immutable');" }
* -->
* ```js
* const aMap = Map({ apples: 10 })
* const newMap = aMap.update('oranges', (val = 0) => val)
* // Map { "apples": 10, "oranges": 0 }
* ```
*
* If no key is provided, then the `updater` function return value is
* returned as well.
*
* <!-- runkit:activate
* { "preamble": "const { Map } = require('immutable');" }
* -->
* ```js
* const aMap = Map({ key: 'value' })
* const result = aMap.update(aMap => aMap.get('key'))
* // "value"
* ```
*
* This can be very useful as a way to "chain" a normal function into a
* sequence of methods. RxJS calls this "let" and lodash calls it "thru".
*
* For example, to sum the values in a Map
*
* <!-- runkit:activate
* { "preamble": "const { Map } = require('immutable');" }
* -->
* ```js
* function sum(collection) {
* return collection.reduce((sum, x) => sum + x, 0)
* }
*
* Map({ x: 1, y: 2, z: 3 })
* .map(x => x + 1)
* .filter(x => x % 2 === 0)
* .update(sum)
* // 6
* ```
*
* Note: `update(key)` can be used in `withMutations`.
*/
update(key: K, notSetValue: V, updater: (value: V) => V): this;
update(key: K, updater: (value: V) => V): this;
update<R>(updater: (value: this) => R): R;
/**
* Returns a new Map resulting from merging the provided Collections
* (or JS objects) into this Map. In other words, this takes each entry of
* each collection and sets it on this Map.
*
* Note: Values provided to `merge` are shallowly converted before being
* merged. No nested values are altered.
*
* <!-- runkit:activate -->
* ```js
* const { Map } = require('immutable')
* const one = Map({ a: 10, b: 20, c: 30 })
* const two = Map({ b: 40, a: 50, d: 60 })
* one.merge(two) // Map { "a": 50, "b": 40, "c": 30, "d": 60 }
* two.merge(one) // Map { "b": 20, "a": 10, "d": 60, "c": 30 }
* ```
*
* Note: `merge` can be used in `withMutations`.
*
* @alias concat
*/
merge<KC, VC>(...collections: Array<Iterable<[KC, VC]>>): Map<K | KC, V | VC>;
merge<C>(...collections: Array<{ [key: string]: C }>): Map<K | string, V | C>;
concat<KC, VC>(...collections: Array<Iterable<[KC, VC]>>): Map<K | KC, V | VC>;
concat<C>(...collections: Array<{ [key: string]: C }>): Map<K | string, V | C>;
/**
* Like `merge()`, `mergeWith()` returns a new Map resulting from merging
* the provided Collections (or JS objects) into this Map, but uses the
* `merger` function for dealing with conflicts.
*
* <!-- runkit:activate -->
* ```js
* const { Map } = require('immutable')
* const one = Map({ a: 10, b: 20, c: 30 })
* const two = Map({ b: 40, a: 50, d: 60 })
* one.mergeWith((oldVal, newVal) => oldVal / newVal, two)
* // { "a": 0.2, "b": 0.5, "c": 30, "d": 60 }
* two.mergeWith((oldVal, newVal) => oldVal / newVal, one)
* // { "b": 2, "a": 5, "d": 60, "c": 30 }
* ```
*
* Note: `mergeWith` can be used in `withMutations`.
*/
mergeWith(
merger: (oldVal: V, newVal: V, key: K) => V,
...collections: Array<Iterable<[K, V]> | { [key: string]: V }>
): this;
/**
* Like `merge()`, but when two Collections conflict, it merges them as well,
* recursing deeply through the nested data.
*
* Note: Values provided to `merge` are shallowly converted before being
* merged. No nested values are altered unless they will also be merged at
* a deeper level.
*
* <!-- runkit:activate -->
* ```js
* const { Map } = require('immutable')
* const one = Map({ a: Map({ x: 10, y: 10 }), b: Map({ x: 20, y: 50 }) })
* const two = Map({ a: Map({ x: 2 }), b: Map({ y: 5 }), c: Map({ z: 3 }) })
* one.mergeDeep(two)
* // Map {
* // "a": Map { "x": 2, "y": 10 },
* // "b": Map { "x": 20, "y": 5 },
* // "c": Map { "z": 3 }
* // }
* ```
*
* Note: `mergeDeep` can be used in `withMutations`.
*/
mergeDeep(...collections: Array<Iterable<[K, V]> | { [key: string]: V }>): this;
/**
* Like `mergeDeep()`, but when two non-Collections conflict, it uses the
* `merger` function to determine the resulting value.
*
* <!-- runkit:activate -->
* ```js
* const { Map } = require('immutable')
* const one = Map({ a: Map({ x: 10, y: 10 }), b: Map({ x: 20, y: 50 }) })
* const two = Map({ a: Map({ x: 2 }), b: Map({ y: 5 }), c: Map({ z: 3 }) })
* one.mergeDeepWith((oldVal, newVal) => oldVal / newVal, two)
* // Map {
* // "a": Map { "x": 5, "y": 10 },
* // "b": Map { "x": 20, "y": 10 },
* // "c": Map { "z": 3 }
* // }
* ```
* Note: `mergeDeepWith` can be used in `withMutations`.
*/
mergeDeepWith(
merger: (oldVal: any, newVal: any, key: any) => any,
...collections: Array<Iterable<[K, V]> | { [key: string]: V }>
): this;
// Deep persistent changes
/**
* Returns a new Map having set `value` at this `keyPath`. If any keys in
* `keyPath` do not exist, a new immutable Map will be created at that key.
*
* <!-- runkit:activate -->
* ```js
* const { Map } = require('immutable')
* const originalMap = Map({
* subObject: Map({
* subKey: 'subvalue',
* subSubObject: Map({
* subSubKey: 'subSubValue'
* })
* })
* })
*
* const newMap = originalMap.setIn(['subObject', 'subKey'], 'ha ha!')
* // Map {
* // "subObject": Map {
* // "subKey": "ha ha!",
* // "subSubObject": Map { "subSubKey": "subSubValue" }
* // }
* // }
*
* const newerMap = originalMap.setIn(
* ['subObject', 'subSubObject', 'subSubKey'],
* 'ha ha ha!'
* )
* // Map {
* // "subObject": Map {
* // "subKey": "subvalue",
* // "subSubObject": Map { "subSubKey": "ha ha ha!" }
* // }
* // }
* ```
*
* Plain JavaScript Object or Arrays may be nested within an Immutable.js
* Collection, and setIn() can update those values as well, treating them
* immutably by creating new copies of those values with the changes applied.
*
* <!-- runkit:activate -->
* ```js
* const { Map } = require('immutable')
* const originalMap = Map({
* subObject: {
* subKey: 'subvalue',
* subSubObject: {
* subSubKey: 'subSubValue'
* }
* }
* })
*
* originalMap.setIn(['subObject', 'subKey'], 'ha ha!')
* // Map {
* // "subObject": {
* // subKey: "ha ha!",
* // subSubObject: { subSubKey: "subSubValue" }
* // }
* // }
* ```
*
* If any key in the path exists but cannot be updated (such as a primitive
* like number or a custom Object like Date), an error will be thrown.
*
* Note: `setIn` can be used in `withMutations`.
*/
setIn(keyPath: Iterable<any>, value: any): this;
/**
* Returns a new Map having removed the value at this `keyPath`. If any keys
* in `keyPath` do not exist, no change will occur.
*
* Note: `deleteIn` can be used in `withMutations`.
*
* @alias removeIn
*/
deleteIn(keyPath: Iterable<any>): this;
removeIn(keyPath: Iterable<any>): this;
/**
* Returns a new Map having applied the `updater` to the entry found at the
* keyPath.
*
* This is most commonly used to call methods on collections nested within a
* structure of data. For example, in order to `.push()` onto a nested `List`,
* `updateIn` and `push` can be used together:
*
* <!-- runkit:activate -->
* ```js
* const { Map, List } = require('immutable')
* const map = Map({ inMap: Map({ inList: List([ 1, 2, 3 ]) }) })
* const newMap = map.updateIn(['inMap', 'inList'], list => list.push(4))
* // Map { "inMap": Map { "inList": List [ 1, 2, 3, 4 ] } }
* ```
*
* If any keys in `keyPath` do not exist, new Immutable `Map`s will
* be created at those keys. If the `keyPath` does not already contain a
* value, the `updater` function will be called with `notSetValue`, if
* provided, otherwise `undefined`.
*
* <!-- runkit:activate
* { "preamble": "const { Map } = require('immutable')" }
* -->
* ```js
* const map = Map({ a: Map({ b: Map({ c: 10 }) }) })
* const newMap = map.updateIn(['a', 'b', 'c'], val => val * 2)
* // Map { "a": Map { "b": Map { "c": 20 } } }
* ```
*
* If the `updater` function returns the same value it was called with, then
* no change will occur. This is still true if `notSetValue` is provided.
*
* <!-- runkit:activate
* { "preamble": "const { Map } = require('immutable')" }
* -->
* ```js
* const map = Map({ a: Map({ b: Map({ c: 10 }) }) })
* const newMap = map.updateIn(['a', 'b', 'x'], 100, val => val)
* // Map { "a": Map { "b": Map { "c": 10 } } }
* assert.strictEqual(newMap, aMap)
* ```
*
* For code using ES2015 or later, using `notSetValue` is discourged in
* favor of function parameter default values. This helps to avoid any
* potential confusion with identify functions as described above.
*
* The previous example behaves differently when written with default values:
*
* <!-- runkit:activate
* { "preamble": "const { Map } = require('immutable')" }
* -->
* ```js
* const map = Map({ a: Map({ b: Map({ c: 10 }) }) })
* const newMap = map.updateIn(['a', 'b', 'x'], (val = 100) => val)
* // Map { "a": Map { "b": Map { "c": 10, "x": 100 } } }
* ```
*
* Plain JavaScript Object or Arrays may be nested within an Immutable.js
* Collection, and updateIn() can update those values as well, treating them
* immutably by creating new copies of those values with the changes applied.
*
* <!-- runkit:activate
* { "preamble": "const { Map } = require('immutable')" }
* -->
* ```js
* const map = Map({ a: { b: { c: 10 } } })
* const newMap = map.updateIn(['a', 'b', 'c'], val => val * 2)
* // Map { "a": { b: { c: 20 } } }
* ```
*
* If any key in the path exists but cannot be updated (such as a primitive
* like number or a custom Object like Date), an error will be thrown.
*
* Note: `updateIn` can be used in `withMutations`.
*/
updateIn(keyPath: Iterable<any>, notSetValue: any, updater: (value: any) => any): this;
updateIn(keyPath: Iterable<any>, updater: (value: any) => any): this;
/**
* A combination of `updateIn` and `merge`, returning a new Map, but
* performing the merge at a point arrived at by following the keyPath.
* In other words, these two lines are equivalent:
*
* ```js
* map.updateIn(['a', 'b', 'c'], abc => abc.merge(y))
* map.mergeIn(['a', 'b', 'c'], y)
* ```
*
* Note: `mergeIn` can be used in `withMutations`.
*/
mergeIn(keyPath: Iterable<any>, ...collections: Array<any>): this;
/**
* A combination of `updateIn` and `mergeDeep`, returning a new Map, but
* performing the deep merge at a point arrived at by following the keyPath.
* In other words, these two lines are equivalent:
*
* ```js
* map.updateIn(['a', 'b', 'c'], abc => abc.mergeDeep(y))
* map.mergeDeepIn(['a', 'b', 'c'], y)
* ```
*
* Note: `mergeDeepIn` can be used in `withMutations`.
*/
mergeDeepIn(keyPath: Iterable<any>, ...collections: Array<any>): this;
// Transient changes
/**
* Every time you call one of the above functions, a new immutable Map is
* created. If a pure function calls a number of these to produce a final
* return value, then a penalty on performance and memory has been paid by
* creating all of the intermediate immutable Maps.
*
* If you need to apply a series of mutations to produce a new immutable
* Map, `withMutations()` creates a temporary mutable copy of the Map which
* can apply mutations in a highly performant manner. In fact, this is
* exactly how complex mutations like `merge` are done.
*
* As an example, this results in the creation of 2, not 4, new Maps:
*
* <!-- runkit:activate -->
* ```js
* const { Map } = require('immutable')
* const map1 = Map()
* const map2 = map1.withMutations(map => {
* map.set('a', 1).set('b', 2).set('c', 3)
* })
* assert.equal(map1.size, 0)
* assert.equal(map2.size, 3)
* ```
*
* Note: Not all methods can be used on a mutable collection or within
* `withMutations`! Read the documentation for each method to see if it
* is safe to use in `withMutations`.
*/
withMutations(mutator: (mutable: this) => any): this;
/**
* Another way to avoid creation of intermediate Immutable maps is to create
* a mutable copy of this collection. Mutable copies *always* return `this`,
* and thus shouldn't be used for equality. Your function should never return
* a mutable copy of a collection, only use it internally to create a new
* collection.
*
* If possible, use `withMutations` to work with temporary mutable copies as
* it provides an easier to use API and considers many common optimizations.
*
* Note: if the collection is already mutable, `asMutable` returns itself.
*
* Note: Not all methods can be used on a mutable collection or within
* `withMutations`! Read the documentation for each method to see if it
* is safe to use in `withMutations`.
*
* @see `Map#asImmutable`
*/
asMutable(): this;
/**
* Returns true if this is a mutable copy (see `asMutable()`) and mutative
* alterations have been applied.
*
* @see `Map#asMutable`
*/
wasAltered(): boolean;
/**
* The yin to `asMutable`'s yang. Because it applies to mutable collections,
* this operation is *mutable* and may return itself (though may not
* return itself, i.e. if the result is an empty collection). Once
* performed, the original mutable copy must no longer be mutated since it
* may be the immutable result.
*
* If possible, use `withMutations` to work with temporary mutable copies as
* it provides an easier to use API and considers many common optimizations.
*
* @see `Map#asMutable`
*/
asImmutable(): this;
// Sequence algorithms
/**
* Returns a new Map with values passed through a
* `mapper` function.
*
* Map({ a: 1, b: 2 }).map(x => 10 * x)
* // Map { a: 10, b: 20 }
*/
map<M>(
mapper: (value: V, key: K, iter: this) => M,
context?: any
): Map<K, M>;
/**
* @see Collection.Keyed.mapKeys
*/
mapKeys<M>(
mapper: (key: K, value: V, iter: this) => M,
context?: any
): Map<M, V>;
/**
* @see Collection.Keyed.mapEntries
*/
mapEntries<KM, VM>(
mapper: (entry: [K, V], index: number, iter: this) => [KM, VM],
context?: any
): Map<KM, VM>;
/**
* Flat-maps the Map, returning a new Map.
*
* Similar to `data.map(...).flatten(true)`.
*/
flatMap<KM, VM>(
mapper: (value: V, key: K, iter: this) => Iterable<[KM, VM]>,
context?: any
): Map<KM, VM>;
/**
* Returns a new Map with only the entries for which the `predicate`
* function returns true.
*
* Note: `filter()` always returns a new instance, even if it results in
* not filtering out any values.
*/
filter<F extends V>(
predicate: (value: V, key: K, iter: this) => value is F,
context?: any
): Map<K, F>;
filter(
predicate: (value: V, key: K, iter: this) => any,
context?: any
): this;
/**
* @see Collection.Keyed.flip
*/
flip(): Map<V, K>;
}
/**
* A type of Map that has the additional guarantee that the iteration order of
* entries will be the order in which they were set().
*
* The iteration behavior of OrderedMap is the same as native ES6 Map and
* JavaScript Object.
*
* Note that `OrderedMap` are more expensive than non-ordered `Map` and may
* consume more memory. `OrderedMap#set` is amortized O(log32 N), but not
* stable.
*/
declare module OrderedMap {
/**
* True if the provided value is an OrderedMap.
*/
function isOrderedMap(maybeOrderedMap: any): maybeOrderedMap is OrderedMap<any, any>;
}
/**
* Creates a new Immutable OrderedMap.
*
* Created with the same key value pairs as the provided Collection.Keyed or
* JavaScript Object or expects a Collection of [K, V] tuple entries.
*
* The iteration order of key-value pairs provided to this constructor will
* be preserved in the OrderedMap.
*
* let newOrderedMap = OrderedMap({key: "value"})
* let newOrderedMap = OrderedMap([["key", "value"]])
*
* Note: `OrderedMap` is a factory function and not a class, and does not use
* the `new` keyword during construction.
*/
declare function OrderedMap<K, V>(collection: Iterable<[K, V]>): OrderedMap<K, V>;
declare function OrderedMap<T>(collection: Iterable<Iterable<T>>): OrderedMap<T, T>;
declare function OrderedMap<V>(obj: { [key: string]: V }): OrderedMap<string, V>;
declare function OrderedMap<K, V>(): OrderedMap<K, V>;
declare function OrderedMap(): OrderedMap<any, any>;
interface OrderedMap<K, V> extends Map<K, V> {
/**
* The number of entries in this OrderedMap.
*/
readonly size: number;
/**
* Returns a new OrderedMap also containing the new key, value pair. If an
* equivalent key already exists in this OrderedMap, it will be replaced
* while maintaining the existing order.
*
* <!-- runkit:activate -->
* ```js
* const { OrderedMap } = require('immutable')
* const originalMap = OrderedMap({a:1, b:1, c:1})
* const updatedMap = originalMap.set('b', 2)
*
* originalMap
* // OrderedMap {a: 1, b: 1, c: 1}
* updatedMap
* // OrderedMap {a: 1, b: 2, c: 1}
* ```
*
* Note: `set` can be used in `withMutations`.
*/
set(key: K, value: V): this;
/**
* Returns a new OrderedMap resulting from merging the provided Collections
* (or JS objects) into this OrderedMap. In other words, this takes each
* entry of each collection and sets it on this OrderedMap.
*
* Note: Values provided to `merge` are shallowly converted before being
* merged. No nested values are altered.
*
* <!-- runkit:activate -->
* ```js
* const { OrderedMap } = require('immutable')
* const one = OrderedMap({ a: 10, b: 20, c: 30 })
* const two = OrderedMap({ b: 40, a: 50, d: 60 })
* one.merge(two) // OrderedMap { "a": 50, "b": 40, "c": 30, "d": 60 }
* two.merge(one) // OrderedMap { "b": 20, "a": 10, "d": 60, "c": 30 }
* ```
*
* Note: `merge` can be used in `withMutations`.
*
* @alias concat
*/
merge<KC, VC>(...collections: Array<Iterable<[KC, VC]>>): OrderedMap<K | KC, V | VC>;
merge<C>(...collections: Array<{ [key: string]: C }>): OrderedMap<K | string, V | C>;
concat<KC, VC>(...collections: Array<Iterable<[KC, VC]>>): OrderedMap<K | KC, V | VC>;
concat<C>(...collections: Array<{ [key: string]: C }>): OrderedMap<K | string, V | C>;
// Sequence algorithms
/**
* Returns a new OrderedMap with values passed through a
* `mapper` function.
*
* OrderedMap({ a: 1, b: 2 }).map(x => 10 * x)
* // OrderedMap { "a": 10, "b": 20 }
*
* Note: `map()` always returns a new instance, even if it produced the same
* value at every step.
*/
map<M>(
mapper: (value: V, key: K, iter: this) => M,
context?: any
): OrderedMap<K, M>;
/**
* @see Collection.Keyed.mapKeys
*/
mapKeys<M>(
mapper: (key: K, value: V, iter: this) => M,
context?: any
): OrderedMap<M, V>;
/**
* @see Collection.Keyed.mapEntries
*/
mapEntries<KM, VM>(
mapper: (entry: [K, V], index: number, iter: this) => [KM, VM],
context?: any
): OrderedMap<KM, VM>;
/**
* Flat-maps the OrderedMap, returning a new OrderedMap.
*
* Similar to `data.map(...).flatten(true)`.
*/
flatMap<KM, VM>(
mapper: (value: V, key: K, iter: this) => Iterable<[KM, VM]>,
context?: any
): OrderedMap<KM, VM>;
/**
* Returns a new OrderedMap with only the entries for which the `predicate`
* function returns true.
*
* Note: `filter()` always returns a new instance, even if it results in
* not filtering out any values.
*/
filter<F extends V>(
predicate: (value: V, key: K, iter: this) => value is F,
context?: any
): OrderedMap<K, F>;
filter(
predicate: (value: V, key: K, iter: this) => any,
context?: any
): this;
/**
* @see Collection.Keyed.flip
*/
flip(): OrderedMap<V, K>;
}
/**
* A Collection of unique values with `O(log32 N)` adds and has.
*
* When iterating a Set, the entries will be (value, value) pairs. Iteration
* order of a Set is undefined, however is stable. Multiple iterations of the
* same Set will iterate in the same order.
*
* Set values, like Map keys, may be of any type. Equality is determined using
* `Immutable.is`, enabling Sets to uniquely include other Immutable
* collections, custom value types, and NaN.
*/
declare module Set {
/**
* True if the provided value is a Set
*/
function isSet(maybeSet: any): maybeSet is Set<any>;
/**
* Creates a new Set containing `values`.
*/
function of<T>(...values: Array<T>): Set<T>;
/**
* `Set.fromKeys()` creates a new immutable Set containing the keys from
* this Collection or JavaScript Object.
*/
function fromKeys<T>(iter: Collection<T, any>): Set<T>;
function fromKeys(obj: { [key: string]: any }): Set<string>;
/**
* `Set.intersect()` creates a new immutable Set that is the intersection of
* a collection of other sets.
*
* ```js
* const { Set } = require('immutable')
* const intersected = Set.intersect([
* Set([ 'a', 'b', 'c' ])
* Set([ 'c', 'a', 't' ])
* ])
* // Set [ "a", "c"" ]
* ```
*/
function intersect<T>(sets: Iterable<Iterable<T>>): Set<T>;
/**
* `Set.union()` creates a new immutable Set that is the union of a
* collection of other sets.
*
* ```js
* const { Set } = require('immutable')
* const unioned = Set.union([
* Set([ 'a', 'b', 'c' ])
* Set([ 'c', 'a', 't' ])
* ])
* // Set [ "a", "b", "c", "t"" ]
* ```
*/
function union<T>(sets: Iterable<Iterable<T>>): Set<T>;
}
/**
* Create a new immutable Set containing the values of the provided
* collection-like.
*
* Note: `Set` is a factory function and not a class, and does not use the
* `new` keyword during construction.
*/
declare function Set(): Set<any>;
declare function Set<T>(): Set<T>;
declare function Set<T>(collection: Iterable<T>): Set<T>;
interface Set<T> extends Collection.Set<T> {
/**
* The number of items in this Set.
*/
readonly size: number;
// Persistent changes
/**
* Returns a new Set which also includes this value.
*
* Note: `add` can be used in `withMutations`.
*/
add(value: T): this;
/**
* Returns a new Set which excludes this value.
*
* Note: `delete` can be used in `withMutations`.
*
* Note: `delete` **cannot** be safely used in IE8, use `remove` if
* supporting old browsers.
*
* @alias remove
*/
delete(value: T): this;
remove(value: T): this;
/**
* Returns a new Set containing no values.
*
* Note: `clear` can be used in `withMutations`.
*/
clear(): this;
/**
* Returns a Set including any value from `collections` that does not already
* exist in this Set.
*
* Note: `union` can be used in `withMutations`.
* @alias merge
* @alias concat
*/
union<C>(...collections: Array<Iterable<C>>): Set<T | C>;
merge<C>(...collections: Array<Iterable<C>>): Set<T | C>;
concat<C>(...collections: Array<Iterable<C>>): Set<T | C>;
/**
* Returns a Set which has removed any values not also contained
* within `collections`.
*
* Note: `intersect` can be used in `withMutations`.
*/
intersect(...collections: Array<Iterable<T>>): this;
/**
* Returns a Set excluding any values contained within `collections`.
*
* <!-- runkit:activate -->
* ```js
* const { OrderedSet } = require('immutable')
* OrderedSet([ 1, 2, 3 ]).subtract([1, 3])
* // OrderedSet [2]
* ```
*
* Note: `subtract` can be used in `withMutations`.
*/
subtract(...collections: Array<Iterable<T>>): this;
// Transient changes
/**
* Note: Not all methods can be used on a mutable collection or within
* `withMutations`! Check the documentation for each method to see if it
* mentions being safe to use in `withMutations`.
*
* @see `Map#withMutations`
*/
withMutations(mutator: (mutable: this) => any): this;
/**
* Note: Not all methods can be used on a mutable collection or within
* `withMutations`! Check the documentation for each method to see if it
* mentions being safe to use in `withMutations`.
*
* @see `Map#asMutable`
*/
asMutable(): this;
/**
* @see `Map#wasAltered`
*/
wasAltered(): boolean;
/**
* @see `Map#asImmutable`
*/
asImmutable(): this;
// Sequence algorithms
/**
* Returns a new Set with values passed through a
* `mapper` function.
*
* Set([1,2]).map(x => 10 * x)
* // Set [10,20]
*/
map<M>(
mapper: (value: T, key: T, iter: this) => M,
context?: any
): Set<M>;
/**
* Flat-maps the Set, returning a new Set.
*
* Similar to `set.map(...).flatten(true)`.
*/
flatMap<M>(
mapper: (value: T, key: T, iter: this) => Iterable<M>,
context?: any
): Set<M>;
/**
* Returns a new Set with only the values for which the `predicate`
* function returns true.
*
* Note: `filter()` always returns a new instance, even if it results in
* not filtering out any values.
*/
filter<F extends T>(
predicate: (value: T, key: T, iter: this) => value is F,
context?: any
): Set<F>;
filter(
predicate: (value: T, key: T, iter: this) => any,
context?: any
): this;
}
/**
* A type of Set that has the additional guarantee that the iteration order of
* values will be the order in which they were `add`ed.
*
* The iteration behavior of OrderedSet is the same as native ES6 Set.
*
* Note that `OrderedSet` are more expensive than non-ordered `Set` and may
* consume more memory. `OrderedSet#add` is amortized O(log32 N), but not
* stable.
*/
declare module OrderedSet {
/**
* True if the provided value is an OrderedSet.
*/
function isOrderedSet(maybeOrderedSet: any): boolean;
/**
* Creates a new OrderedSet containing `values`.
*/
function of<T>(...values: Array<T>): OrderedSet<T>;
/**
* `OrderedSet.fromKeys()` creates a new immutable OrderedSet containing
* the keys from this Collection or JavaScript Object.
*/
function fromKeys<T>(iter: Collection<T, any>): OrderedSet<T>;
function fromKeys(obj: { [key: string]: any }): OrderedSet<string>;
}
/**
* Create a new immutable OrderedSet containing the values of the provided
* collection-like.
*
* Note: `OrderedSet` is a factory function and not a class, and does not use
* the `new` keyword during construction.
*/
declare function OrderedSet(): OrderedSet<any>;
declare function OrderedSet<T>(): OrderedSet<T>;
declare function OrderedSet<T>(collection: Iterable<T>): OrderedSet<T>;
interface OrderedSet<T> extends Set<T> {
/**
* The number of items in this OrderedSet.
*/
readonly size: number;
/**
* Returns an OrderedSet including any value from `collections` that does
* not already exist in this OrderedSet.
*
* Note: `union` can be used in `withMutations`.
* @alias merge
* @alias concat
*/
union<C>(...collections: Array<Iterable<C>>): OrderedSet<T | C>;
merge<C>(...collections: Array<Iterable<C>>): OrderedSet<T | C>;
concat<C>(...collections: Array<Iterable<C>>): OrderedSet<T | C>;
// Sequence algorithms
/**
* Returns a new Set with values passed through a
* `mapper` function.
*
* OrderedSet([ 1, 2 ]).map(x => 10 * x)
* // OrderedSet [10, 20]
*/
map<M>(
mapper: (value: T, key: T, iter: this) => M,
context?: any
): OrderedSet<M>;
/**
* Flat-maps the OrderedSet, returning a new OrderedSet.
*
* Similar to `set.map(...).flatten(true)`.
*/
flatMap<M>(
mapper: (value: T, key: T, iter: this) => Iterable<M>,
context?: any
): OrderedSet<M>;
/**
* Returns a new OrderedSet with only the values for which the `predicate`
* function returns true.
*
* Note: `filter()` always returns a new instance, even if it results in
* not filtering out any values.
*/
filter<F extends T>(
predicate: (value: T, key: T, iter: this) => value is F,
context?: any
): OrderedSet<F>;
filter(
predicate: (value: T, key: T, iter: this) => any,
context?: any
): this;
/**
* Returns an OrderedSet of the same type "zipped" with the provided
* collections.
*
* Like `zipWith`, but using the default `zipper`: creating an `Array`.
*
* ```js
* const a = OrderedSet([ 1, 2, 3 ])
* const b = OrderedSet([ 4, 5, 6 ])
* const c = a.zip(b)
* // OrderedSet [ [ 1, 4 ], [ 2, 5 ], [ 3, 6 ] ]
* ```
*/
zip<U>(other: Collection<any, U>): OrderedSet<[T, U]>;
zip<U, V>(other1: Collection<any, U>, other2: Collection<any, V>): OrderedSet<[T, U, V]>;
zip(...collections: Array<Collection<any, any>>): OrderedSet<any>;
/**
* Returns a OrderedSet of the same type "zipped" with the provided
* collections.
*
* Unlike `zip`, `zipAll` continues zipping until the longest collection is
* exhausted. Missing values from shorter collections are filled with `undefined`.
*
* ```js
* const a = OrderedSet([ 1, 2 ]);
* const b = OrderedSet([ 3, 4, 5 ]);
* const c = a.zipAll(b); // OrderedSet [ [ 1, 3 ], [ 2, 4 ], [ undefined, 5 ] ]
* ```
*
* Note: Since zipAll will return a collection as large as the largest
* input, some results may contain undefined values. TypeScript cannot
* account for these without cases (as of v2.5).
*/
zipAll<U>(other: Collection<any, U>): OrderedSet<[T, U]>;
zipAll<U, V>(other1: Collection<any, U>, other2: Collection<any, V>): OrderedSet<[T, U, V]>;
zipAll(...collections: Array<Collection<any, any>>): OrderedSet<any>;
/**
* Returns an OrderedSet of the same type "zipped" with the provided
* collections by using a custom `zipper` function.
*
* @see Seq.Indexed.zipWith
*/
zipWith<U, Z>(
zipper: (value: T, otherValue: U) => Z,
otherCollection: Collection<any, U>
): OrderedSet<Z>;
zipWith<U, V, Z>(
zipper: (value: T, otherValue: U, thirdValue: V) => Z,
otherCollection: Collection<any, U>,
thirdCollection: Collection<any, V>
): OrderedSet<Z>;
zipWith<Z>(
zipper: (...any: Array<any>) => Z,
...collections: Array<Collection<any, any>>
): OrderedSet<Z>;
}
/**
* Stacks are indexed collections which support very efficient O(1) addition
* and removal from the front using `unshift(v)` and `shift()`.
*
* For familiarity, Stack also provides `push(v)`, `pop()`, and `peek()`, but
* be aware that they also operate on the front of the list, unlike List or
* a JavaScript Array.
*
* Note: `reverse()` or any inherent reverse traversal (`reduceRight`,
* `lastIndexOf`, etc.) is not efficient with a Stack.
*
* Stack is implemented with a Single-Linked List.
*/
declare module Stack {
/**
* True if the provided value is a Stack
*/
function isStack(maybeStack: any): maybeStack is Stack<any>;
/**
* Creates a new Stack containing `values`.
*/
function of<T>(...values: Array<T>): Stack<T>;
}
/**
* Create a new immutable Stack containing the values of the provided
* collection-like.
*
* The iteration order of the provided collection is preserved in the
* resulting `Stack`.
*
* Note: `Stack` is a factory function and not a class, and does not use the
* `new` keyword during construction.
*/
declare function Stack(): Stack<any>;
declare function Stack<T>(): Stack<T>;
declare function Stack<T>(collection: Iterable<T>): Stack<T>;
interface Stack<T> extends Collection.Indexed<T> {
/**
* The number of items in this Stack.
*/
readonly size: number;
// Reading values
/**
* Alias for `Stack.first()`.
*/
peek(): T | undefined;
// Persistent changes
/**
* Returns a new Stack with 0 size and no values.
*
* Note: `clear` can be used in `withMutations`.
*/
clear(): Stack<T>;
/**
* Returns a new Stack with the provided `values` prepended, shifting other
* values ahead to higher indices.
*
* This is very efficient for Stack.
*
* Note: `unshift` can be used in `withMutations`.
*/
unshift(...values: Array<T>): Stack<T>;
/**
* Like `Stack#unshift`, but accepts a collection rather than varargs.
*
* Note: `unshiftAll` can be used in `withMutations`.
*/
unshiftAll(iter: Iterable<T>): Stack<T>;
/**
* Returns a new Stack with a size ones less than this Stack, excluding
* the first item in this Stack, shifting all other values to a lower index.
*
* Note: this differs from `Array#shift` because it returns a new
* Stack rather than the removed value. Use `first()` or `peek()` to get the
* first value in this Stack.
*
* Note: `shift` can be used in `withMutations`.
*/
shift(): Stack<T>;
/**
* Alias for `Stack#unshift` and is not equivalent to `List#push`.
*/
push(...values: Array<T>): Stack<T>;
/**
* Alias for `Stack#unshiftAll`.
*/
pushAll(iter: Iterable<T>): Stack<T>;
/**
* Alias for `Stack#shift` and is not equivalent to `List#pop`.
*/
pop(): Stack<T>;
// Transient changes
/**
* Note: Not all methods can be used on a mutable collection or within
* `withMutations`! Check the documentation for each method to see if it
* mentions being safe to use in `withMutations`.
*
* @see `Map#withMutations`
*/
withMutations(mutator: (mutable: this) => any): this;
/**
* Note: Not all methods can be used on a mutable collection or within
* `withMutations`! Check the documentation for each method to see if it
* mentions being safe to use in `withMutations`.
*
* @see `Map#asMutable`
*/
asMutable(): this;
/**
* @see `Map#wasAltered`
*/
wasAltered(): boolean;
/**
* @see `Map#asImmutable`
*/
asImmutable(): this;
// Sequence algorithms
/**
* Returns a new Stack with other collections concatenated to this one.
*/
concat<C>(...valuesOrCollections: Array<Iterable<C> | C>): Stack<T | C>;
/**
* Returns a new Stack with values passed through a
* `mapper` function.
*
* Stack([ 1, 2 ]).map(x => 10 * x)
* // Stack [ 10, 20 ]
*
* Note: `map()` always returns a new instance, even if it produced the same
* value at every step.
*/
map<M>(
mapper: (value: T, key: number, iter: this) => M,
context?: any
): Stack<M>;
/**
* Flat-maps the Stack, returning a new Stack.
*
* Similar to `stack.map(...).flatten(true)`.
*/
flatMap<M>(
mapper: (value: T, key: number, iter: this) => Iterable<M>,
context?: any
): Stack<M>;
/**
* Returns a new Set with only the values for which the `predicate`
* function returns true.
*
* Note: `filter()` always returns a new instance, even if it results in
* not filtering out any values.
*/
filter<F extends T>(
predicate: (value: T, index: number, iter: this) => value is F,
context?: any
): Set<F>;
filter(
predicate: (value: T, index: number, iter: this) => any,
context?: any
): this;
/**
* Returns a Stack "zipped" with the provided collections.
*
* Like `zipWith`, but using the default `zipper`: creating an `Array`.
*
* ```js
* const a = Stack([ 1, 2, 3 ]);
* const b = Stack([ 4, 5, 6 ]);
* const c = a.zip(b); // Stack [ [ 1, 4 ], [ 2, 5 ], [ 3, 6 ] ]
* ```
*/
zip<U>(other: Collection<any, U>): Stack<[T, U]>;
zip<U, V>(other: Collection<any, U>, other2: Collection<any, V>): Stack<[T, U, V]>;
zip(...collections: Array<Collection<any, any>>): Stack<any>;
/**
* Returns a Stack "zipped" with the provided collections.
*
* Unlike `zip`, `zipAll` continues zipping until the longest collection is
* exhausted. Missing values from shorter collections are filled with `undefined`.
*
* ```js
* const a = Stack([ 1, 2 ]);
* const b = Stack([ 3, 4, 5 ]);
* const c = a.zipAll(b); // Stack [ [ 1, 3 ], [ 2, 4 ], [ undefined, 5 ] ]
* ```
*
* Note: Since zipAll will return a collection as large as the largest
* input, some results may contain undefined values. TypeScript cannot
* account for these without cases (as of v2.5).
*/
zipAll<U>(other: Collection<any, U>): Stack<[T, U]>;
zipAll<U, V>(other: Collection<any, U>, other2: Collection<any, V>): Stack<[T, U, V]>;
zipAll(...collections: Array<Collection<any, any>>): Stack<any>;
/**
* Returns a Stack "zipped" with the provided collections by using a
* custom `zipper` function.
*
* ```js
* const a = Stack([ 1, 2, 3 ]);
* const b = Stack([ 4, 5, 6 ]);
* const c = a.zipWith((a, b) => a + b, b);
* // Stack [ 5, 7, 9 ]
* ```
*/
zipWith<U, Z>(
zipper: (value: T, otherValue: U) => Z,
otherCollection: Collection<any, U>
): Stack<Z>;
zipWith<U, V, Z>(
zipper: (value: T, otherValue: U, thirdValue: V) => Z,
otherCollection: Collection<any, U>,
thirdCollection: Collection<any, V>
): Stack<Z>;
zipWith<Z>(
zipper: (...any: Array<any>) => Z,
...collections: Array<Collection<any, any>>
): Stack<Z>;
}
/**
* A record is similar to a JS object, but enforces a specific set of allowed
* string keys, and has default values.
*
* The `Record()` function produces new Record Factories, which when called
* create Record instances.
*
* ```js
* const { Record } = require('immutable')
* const ABRecord = Record({ a: 1, b: 2 })
* const myRecord = ABRecord({ b: 3 })
* ```
*
* Records always have a value for the keys they define. `remove`ing a key
* from a record simply resets it to the default value for that key.
*
* ```js
* myRecord.size // 2
* myRecord.get('a') // 1
* myRecord.get('b') // 3
* const myRecordWithoutB = myRecord.remove('b')
* myRecordWithoutB.get('b') // 2
* myRecordWithoutB.size // 2
* ```
*
* Values provided to the constructor not found in the Record type will
* be ignored. For example, in this case, ABRecord is provided a key "x" even
* though only "a" and "b" have been defined. The value for "x" will be
* ignored for this record.
*
* ```js
* const myRecord = ABRecord({ b: 3, x: 10 })
* myRecord.get('x') // undefined
* ```
*
* Because Records have a known set of string keys, property get access works
* as expected, however property sets will throw an Error.
*
* Note: IE8 does not support property access. Only use `get()` when
* supporting IE8.
*
* ```js
* myRecord.b // 3
* myRecord.b = 5 // throws Error
* ```
*
* Record Types can be extended as well, allowing for custom methods on your
* Record. This is not a common pattern in functional environments, but is in
* many JS programs.
*
* However Record Types are more restricted than typical JavaScript classes.
* They do not use a class constructor, which also means they cannot use
* class properties (since those are technically part of a constructor).
*
* While Record Types can be syntactically created with the JavaScript `class`
* form, the resulting Record function is actually a factory function, not a
* class constructor. Even though Record Types are not classes, JavaScript
* currently requires the use of `new` when creating new Record instances if
* they are defined as a `class`.
*
* ```
* class ABRecord extends Record({ a: 1, b: 2 }) {
* getAB() {
* return this.a + this.b;
* }
* }
*
* var myRecord = new ABRecord({b: 3})
* myRecord.getAB() // 4
* ```
*
*
* **Flow Typing Records:**
*
* Immutable.js exports two Flow types designed to make it easier to use
* Records with flow typed code, `RecordOf<TProps>` and `RecordFactory<TProps>`.
*
* When defining a new kind of Record factory function, use a flow type that
* describes the values the record contains along with `RecordFactory<TProps>`.
* To type instances of the Record (which the factory function returns),
* use `RecordOf<TProps>`.
*
* Typically, new Record definitions will export both the Record factory
* function as well as the Record instance type for use in other code.
*
* ```js
* import type { RecordFactory, RecordOf } from 'immutable';
*
* // Use RecordFactory<TProps> for defining new Record factory functions.
* type Point3DProps = { x: number, y: number, z: number };
* const defaultValues: Point3DProps = { x: 0, y: 0, z: 0 };
* const makePoint3D: RecordFactory<Point3DProps> = Record(defaultValues);
* export makePoint3D;
*
* // Use RecordOf<T> for defining new instances of that Record.
* export type Point3D = RecordOf<Point3DProps>;
* const some3DPoint: Point3D = makePoint3D({ x: 10, y: 20, z: 30 });
* ```
*
* **Flow Typing Record Subclasses:**
*
* Records can be subclassed as a means to add additional methods to Record
* instances. This is generally discouraged in favor of a more functional API,
* since Subclasses have some minor overhead. However the ability to create
* a rich API on Record types can be quite valuable.
*
* When using Flow to type Subclasses, do not use `RecordFactory<TProps>`,
* instead apply the props type when subclassing:
*
* ```js
* type PersonProps = {name: string, age: number};
* const defaultValues: PersonProps = {name: 'Aristotle', age: 2400};
* const PersonRecord = Record(defaultValues);
* class Person extends PersonRecord<PersonProps> {
* getName(): string {
* return this.get('name')
* }
*
* setName(name: string): this {
* return this.set('name', name);
* }
* }
* ```
*
* **Choosing Records vs plain JavaScript objects**
*
* Records offer a persistently immutable alternative to plain JavaScript
* objects, however they're not required to be used within Immutable.js
* collections. In fact, the deep-access and deep-updating functions
* like `getIn()` and `setIn()` work with plain JavaScript Objects as well.
*
* Deciding to use Records or Objects in your application should be informed
* by the tradeoffs and relative benefits of each:
*
* - *Runtime immutability*: plain JS objects may be carefully treated as
* immutable, however Record instances will *throw* if attempted to be
* mutated directly. Records provide this additional guarantee, however at
* some marginal runtime cost. While JS objects are mutable by nature, the
* use of type-checking tools like [Flow](https://medium.com/@gcanti/immutability-with-flow-faa050a1aef4)
* can help gain confidence in code written to favor immutability.
*
* - *Value equality*: Records use value equality when compared with `is()`
* or `record.equals()`. That is, two Records with the same keys and values
* are equal. Plain objects use *reference equality*. Two objects with the
* same keys and values are not equal since they are different objects.
* This is important to consider when using objects as keys in a `Map` or
* values in a `Set`, which use equality when retrieving values.
*
* - *API methods*: Records have a full featured API, with methods like
* `.getIn()`, and `.equals()`. These can make working with these values
* easier, but comes at the cost of not allowing keys with those names.
*
* - *Default values*: Records provide default values for every key, which
* can be useful when constructing Records with often unchanging values.
* However default values can make using Flow and TypeScript more laborious.
*
* - *Serialization*: Records use a custom internal representation to
* efficiently store and update their values. Converting to and from this
* form isn't free. If converting Records to plain objects is common,
* consider sticking with plain objects to begin with.
*/
declare module Record$1 {
/**
* True if `maybeRecord` is an instance of a Record.
*/
export function isRecord(maybeRecord: any): maybeRecord is Record$1<any>;
/**
* Records allow passing a second parameter to supply a descriptive name
* that appears when converting a Record to a string or in any error
* messages. A descriptive name for any record can be accessed by using this
* method. If one was not provided, the string "Record" is returned.
*
* ```js
* const { Record } = require('immutable')
* const Person = Record({
* name: null
* }, 'Person')
*
* var me = Person({ name: 'My Name' })
* me.toString() // "Person { "name": "My Name" }"
* Record.getDescriptiveName(me) // "Person"
* ```
*/
export function getDescriptiveName(record: Record$1<any>): string;
/**
* A Record.Factory is created by the `Record()` function. Record instances
* are created by passing it some of the accepted values for that Record
* type:
*
* <!-- runkit:activate
* { "preamble": "const { Record } = require('immutable')" }
* -->
* ```js
* // makePerson is a Record Factory function
* const makePerson = Record({ name: null, favoriteColor: 'unknown' });
*
* // alan is a Record instance
* const alan = makePerson({ name: 'Alan' });
* ```
*
* Note that Record Factories return `Record<TProps> & Readonly<TProps>`,
* this allows use of both the Record instance API, and direct property
* access on the resulting instances:
*
* <!-- runkit:activate
* { "preamble": "const { Record } = require('immutable');const makePerson = Record({ name: null, favoriteColor: 'unknown' });const alan = makePerson({ name: 'Alan' });" }
* -->
* ```js
* // Use the Record API
* console.log('Record API: ' + alan.get('name'))
*
* // Or direct property access (Readonly)
* console.log('property access: ' + alan.name)
* ```
*
* **Flow Typing Records:**
*
* Use the `RecordFactory<TProps>` Flow type to get high quality type checking of
* Records:
*
* ```js
* import type { RecordFactory, RecordOf } from 'immutable';
*
* // Use RecordFactory<TProps> for defining new Record factory functions.
* type PersonProps = { name: ?string, favoriteColor: string };
* const makePerson: RecordFactory<PersonProps> = Record({ name: null, favoriteColor: 'unknown' });
*
* // Use RecordOf<T> for defining new instances of that Record.
* type Person = RecordOf<PersonProps>;
* const alan: Person = makePerson({ name: 'Alan' });
* ```
*/
export module Factory { }
export interface Factory<TProps extends Object> {
(values?: Partial<TProps> | Iterable<[string, any]>): Record$1<TProps> & Readonly<TProps>;
new(values?: Partial<TProps> | Iterable<[string, any]>): Record$1<TProps> & Readonly<TProps>;
}
export function Factory<TProps extends Object>(values?: Partial<TProps> | Iterable<[string, any]>): Record$1<TProps> & Readonly<TProps>;
}
/**
* Unlike other types in Immutable.js, the `Record()` function creates a new
* Record Factory, which is a function that creates Record instances.
*
* See above for examples of using `Record()`.
*
* Note: `Record` is a factory function and not a class, and does not use the
* `new` keyword during construction.
*/
declare function Record$1<TProps extends object>(defaultValues: TProps, name?: string): Record$1.Factory<TProps>;
interface Record$1<TProps extends Object> {
// Reading values
has(key: string): key is keyof TProps & string;
/**
* Returns the value associated with the provided key, which may be the
* default value defined when creating the Record factory function.
*
* If the requested key is not defined by this Record type, then
* notSetValue will be returned if provided. Note that this scenario would
* produce an error when using Flow or TypeScript.
*/
get<K extends keyof TProps>(key: K, notSetValue?: any): TProps[K];
get<T>(key: string, notSetValue: T): T;
// Reading deep values
hasIn(keyPath: Iterable<any>): boolean;
getIn(keyPath: Iterable<any>): any;
// Value equality
equals(other: any): boolean;
hashCode(): number;
// Persistent changes
set<K extends keyof TProps>(key: K, value: TProps[K]): this;
update<K extends keyof TProps>(key: K, updater: (value: TProps[K]) => TProps[K]): this;
merge(...collections: Array<Partial<TProps> | Iterable<[string, any]>>): this;
mergeDeep(...collections: Array<Partial<TProps> | Iterable<[string, any]>>): this;
mergeWith(
merger: (oldVal: any, newVal: any, key: keyof TProps) => any,
...collections: Array<Partial<TProps> | Iterable<[string, any]>>
): this;
mergeDeepWith(
merger: (oldVal: any, newVal: any, key: any) => any,
...collections: Array<Partial<TProps> | Iterable<[string, any]>>
): this;
/**
* Returns a new instance of this Record type with the value for the
* specific key set to its default value.
*
* @alias remove
*/
delete<K extends keyof TProps>(key: K): this;
remove<K extends keyof TProps>(key: K): this;
/**
* Returns a new instance of this Record type with all values set
* to their default values.
*/
clear(): this;
// Deep persistent changes
setIn(keyPath: Iterable<any>, value: any): this;
updateIn(keyPath: Iterable<any>, updater: (value: any) => any): this;
mergeIn(keyPath: Iterable<any>, ...collections: Array<any>): this;
mergeDeepIn(keyPath: Iterable<any>, ...collections: Array<any>): this;
/**
* @alias removeIn
*/
deleteIn(keyPath: Iterable<any>): this;
removeIn(keyPath: Iterable<any>): this;
// Conversion to JavaScript types
/**
* Deeply converts this Record to equivalent native JavaScript Object.
*
* Note: This method may not be overridden. Objects with custom
* serialization to plain JS may override toJSON() instead.
*/
toJS(): { [K in keyof TProps]: any };
/**
* Shallowly converts this Record to equivalent native JavaScript Object.
*/
toJSON(): TProps;
/**
* Shallowly converts this Record to equivalent JavaScript Object.
*/
toObject(): TProps;
// Transient changes
/**
* Note: Not all methods can be used on a mutable collection or within
* `withMutations`! Only `set` may be used mutatively.
*
* @see `Map#withMutations`
*/
withMutations(mutator: (mutable: this) => any): this;
/**
* @see `Map#asMutable`
*/
asMutable(): this;
/**
* @see `Map#wasAltered`
*/
wasAltered(): boolean;
/**
* @see `Map#asImmutable`
*/
asImmutable(): this;
// Sequence algorithms
toSeq(): Seq.Keyed<keyof TProps, TProps[keyof TProps]>;
[Symbol.iterator](): IterableIterator<[keyof TProps, TProps[keyof TProps]]>;
}
/**
* `Seq` describes a lazy operation, allowing them to efficiently chain
* use of all the higher-order collection methods (such as `map` and `filter`)
* by not creating intermediate collections.
*
* **Seq is immutable** — Once a Seq is created, it cannot be
* changed, appended to, rearranged or otherwise modified. Instead, any
* mutative method called on a `Seq` will return a new `Seq`.
*
* **Seq is lazy** — `Seq` does as little work as necessary to respond to any
* method call. Values are often created during iteration, including implicit
* iteration when reducing or converting to a concrete data structure such as
* a `List` or JavaScript `Array`.
*
* For example, the following performs no work, because the resulting
* `Seq`'s values are never iterated:
*
* ```js
* const { Seq } = require('immutable')
* const oddSquares = Seq([ 1, 2, 3, 4, 5, 6, 7, 8 ])
* .filter(x => x % 2 !== 0)
* .map(x => x * x)
* ```
*
* Once the `Seq` is used, it performs only the work necessary. In this
* example, no intermediate arrays are ever created, filter is called three
* times, and map is only called once:
*
* ```js
* oddSquares.get(1); // 9
* ```
*
* Any collection can be converted to a lazy Seq with `Seq()`.
*
* <!-- runkit:activate -->
* ```js
* const { Map } = require('immutable')
* const map = Map({ a: 1, b: 2, c: 3 }
* const lazySeq = Seq(map)
* ```
*
* `Seq` allows for the efficient chaining of operations, allowing for the
* expression of logic that can otherwise be very tedious:
*
* ```js
* lazySeq
* .flip()
* .map(key => key.toUpperCase())
* .flip()
* // Seq { A: 1, B: 1, C: 1 }
* ```
*
* As well as expressing logic that would otherwise seem memory or time
* limited, for example `Range` is a special kind of Lazy sequence.
*
* <!-- runkit:activate -->
* ```js
* const { Range } = require('immutable')
* Range(1, Infinity)
* .skip(1000)
* .map(n => -n)
* .filter(n => n % 2 === 0)
* .take(2)
* .reduce((r, n) => r * n, 1)
* // 1006008
* ```
*
* Seq is often used to provide a rich collection API to JavaScript Object.
*
* ```js
* Seq({ x: 0, y: 1, z: 2 }).map(v => v * 2).toObject();
* // { x: 0, y: 2, z: 4 }
* ```
*/
declare module Seq {
/**
* True if `maybeSeq` is a Seq, it is not backed by a concrete
* structure such as Map, List, or Set.
*/
function isSeq(maybeSeq: any): maybeSeq is Seq.Indexed<any> | Seq.Keyed<any, any> | Seq.Set<any>;
/**
* `Seq` which represents key-value pairs.
*/
export module Keyed { }
/**
* Always returns a Seq.Keyed, if input is not keyed, expects an
* collection of [K, V] tuples.
*
* Note: `Seq.Keyed` is a conversion function and not a class, and does not
* use the `new` keyword during construction.
*/
export function Keyed<K, V>(collection: Iterable<[K, V]>): Seq.Keyed<K, V>;
export function Keyed<V>(obj: { [key: string]: V }): Seq.Keyed<string, V>;
export function Keyed<K, V>(): Seq.Keyed<K, V>;
export function Keyed(): Seq.Keyed<any, any>;
export interface Keyed<K, V> extends Seq<K, V>, Collection.Keyed<K, V> {
/**
* Deeply converts this Keyed Seq to equivalent native JavaScript Object.
*
* Converts keys to Strings.
*/
toJS(): Object;
/**
* Shallowly converts this Keyed Seq to equivalent native JavaScript Object.
*
* Converts keys to Strings.
*/
toJSON(): { [key: string]: V };
/**
* Shallowly converts this collection to an Array.
*/
toArray(): Array<[K, V]>;
/**
* Returns itself
*/
toSeq(): this;
/**
* Returns a new Seq with other collections concatenated to this one.
*
* All entries will be present in the resulting Seq, even if they
* have the same key.
*/
concat<KC, VC>(...collections: Array<Iterable<[KC, VC]>>): Seq.Keyed<K | KC, V | VC>;
concat<C>(...collections: Array<{ [key: string]: C }>): Seq.Keyed<K | string, V | C>;
/**
* Returns a new Seq.Keyed with values passed through a
* `mapper` function.
*
* ```js
* const { Seq } = require('immutable')
* Seq.Keyed({ a: 1, b: 2 }).map(x => 10 * x)
* // Seq { "a": 10, "b": 20 }
* ```
*
* Note: `map()` always returns a new instance, even if it produced the
* same value at every step.
*/
map<M>(
mapper: (value: V, key: K, iter: this) => M,
context?: any
): Seq.Keyed<K, M>;
/**
* @see Collection.Keyed.mapKeys
*/
mapKeys<M>(
mapper: (key: K, value: V, iter: this) => M,
context?: any
): Seq.Keyed<M, V>;
/**
* @see Collection.Keyed.mapEntries
*/
mapEntries<KM, VM>(
mapper: (entry: [K, V], index: number, iter: this) => [KM, VM],
context?: any
): Seq.Keyed<KM, VM>;
/**
* Flat-maps the Seq, returning a Seq of the same type.
*
* Similar to `seq.map(...).flatten(true)`.
*/
flatMap<KM, VM>(
mapper: (value: V, key: K, iter: this) => Iterable<[KM, VM]>,
context?: any
): Seq.Keyed<KM, VM>;
/**
* Returns a new Seq with only the entries for which the `predicate`
* function returns true.
*
* Note: `filter()` always returns a new instance, even if it results in
* not filtering out any values.
*/
filter<F extends V>(
predicate: (value: V, key: K, iter: this) => value is F,
context?: any
): Seq.Keyed<K, F>;
filter(
predicate: (value: V, key: K, iter: this) => any,
context?: any
): this;
/**
* @see Collection.Keyed.flip
*/
flip(): Seq.Keyed<V, K>;
}
/**
* `Seq` which represents an ordered indexed list of values.
*/
module Indexed {
/**
* Provides an Seq.Indexed of the values provided.
*/
function of<T>(...values: Array<T>): Seq.Indexed<T>;
}
/**
* Always returns Seq.Indexed, discarding associated keys and
* supplying incrementing indices.
*
* Note: `Seq.Indexed` is a conversion function and not a class, and does
* not use the `new` keyword during construction.
*/
export function Indexed(): Seq.Indexed<any>;
export function Indexed<T>(): Seq.Indexed<T>;
export function Indexed<T>(collection: Iterable<T>): Seq.Indexed<T>;
export interface Indexed<T> extends Seq<number, T>, Collection.Indexed<T> {
/**
* Deeply converts this Indexed Seq to equivalent native JavaScript Array.
*/
toJS(): Array<any>;
/**
* Shallowly converts this Indexed Seq to equivalent native JavaScript Array.
*/
toJSON(): Array<T>;
/**
* Shallowly converts this collection to an Array.
*/
toArray(): Array<T>;
/**
* Returns itself
*/
toSeq(): this
/**
* Returns a new Seq with other collections concatenated to this one.
*/
concat<C>(...valuesOrCollections: Array<Iterable<C> | C>): Seq.Indexed<T | C>;
/**
* Returns a new Seq.Indexed with values passed through a
* `mapper` function.
*
* ```js
* const { Seq } = require('immutable')
* Seq.Indexed([ 1, 2 ]).map(x => 10 * x)
* // Seq [ 10, 20 ]
* ```
*
* Note: `map()` always returns a new instance, even if it produced the
* same value at every step.
*/
map<M>(
mapper: (value: T, key: number, iter: this) => M,
context?: any
): Seq.Indexed<M>;
/**
* Flat-maps the Seq, returning a a Seq of the same type.
*
* Similar to `seq.map(...).flatten(true)`.
*/
flatMap<M>(
mapper: (value: T, key: number, iter: this) => Iterable<M>,
context?: any
): Seq.Indexed<M>;
/**
* Returns a new Seq with only the values for which the `predicate`
* function returns true.
*
* Note: `filter()` always returns a new instance, even if it results in
* not filtering out any values.
*/
filter<F extends T>(
predicate: (value: T, index: number, iter: this) => value is F,
context?: any
): Seq.Indexed<F>;
filter(
predicate: (value: T, index: number, iter: this) => any,
context?: any
): this;
/**
* Returns a Seq "zipped" with the provided collections.
*
* Like `zipWith`, but using the default `zipper`: creating an `Array`.
*
* ```js
* const a = Seq([ 1, 2, 3 ]);
* const b = Seq([ 4, 5, 6 ]);
* const c = a.zip(b); // Seq [ [ 1, 4 ], [ 2, 5 ], [ 3, 6 ] ]
* ```
*/
zip<U>(other: Collection<any, U>): Seq.Indexed<[T, U]>;
zip<U, V>(other: Collection<any, U>, other2: Collection<any, V>): Seq.Indexed<[T, U, V]>;
zip(...collections: Array<Collection<any, any>>): Seq.Indexed<any>;
/**
* Returns a Seq "zipped" with the provided collections.
*
* Unlike `zip`, `zipAll` continues zipping until the longest collection is
* exhausted. Missing values from shorter collections are filled with `undefined`.
*
* ```js
* const a = Seq([ 1, 2 ]);
* const b = Seq([ 3, 4, 5 ]);
* const c = a.zipAll(b); // Seq [ [ 1, 3 ], [ 2, 4 ], [ undefined, 5 ] ]
* ```
*/
zipAll<U>(other: Collection<any, U>): Seq.Indexed<[T, U]>;
zipAll<U, V>(other: Collection<any, U>, other2: Collection<any, V>): Seq.Indexed<[T, U, V]>;
zipAll(...collections: Array<Collection<any, any>>): Seq.Indexed<any>;
/**
* Returns a Seq "zipped" with the provided collections by using a
* custom `zipper` function.
*
* ```js
* const a = Seq([ 1, 2, 3 ]);
* const b = Seq([ 4, 5, 6 ]);
* const c = a.zipWith((a, b) => a + b, b);
* // Seq [ 5, 7, 9 ]
* ```
*/
zipWith<U, Z>(
zipper: (value: T, otherValue: U) => Z,
otherCollection: Collection<any, U>
): Seq.Indexed<Z>;
zipWith<U, V, Z>(
zipper: (value: T, otherValue: U, thirdValue: V) => Z,
otherCollection: Collection<any, U>,
thirdCollection: Collection<any, V>
): Seq.Indexed<Z>;
zipWith<Z>(
zipper: (...any: Array<any>) => Z,
...collections: Array<Collection<any, any>>
): Seq.Indexed<Z>;
}
/**
* `Seq` which represents a set of values.
*
* Because `Seq` are often lazy, `Seq.Set` does not provide the same guarantee
* of value uniqueness as the concrete `Set`.
*/
export module Set {
/**
* Returns a Seq.Set of the provided values
*/
function of<T>(...values: Array<T>): Seq.Set<T>;
}
/**
* Always returns a Seq.Set, discarding associated indices or keys.
*
* Note: `Seq.Set` is a conversion function and not a class, and does not
* use the `new` keyword during construction.
*/
export function Set(): Seq.Set<any>;
export function Set<T>(): Seq.Set<T>;
export function Set<T>(collection: Iterable<T>): Seq.Set<T>;
export interface Set<T> extends Seq<T, T>, Collection.Set<T> {
/**
* Deeply converts this Set Seq to equivalent native JavaScript Array.
*/
toJS(): Array<any>;
/**
* Shallowly converts this Set Seq to equivalent native JavaScript Array.
*/
toJSON(): Array<T>;
/**
* Shallowly converts this collection to an Array.
*/
toArray(): Array<T>;
/**
* Returns itself
*/
toSeq(): this
/**
* Returns a new Seq with other collections concatenated to this one.
*
* All entries will be present in the resulting Seq, even if they
* are duplicates.
*/
concat<U>(...collections: Array<Iterable<U>>): Seq.Set<T | U>;
/**
* Returns a new Seq.Set with values passed through a
* `mapper` function.
*
* ```js
* Seq.Set([ 1, 2 ]).map(x => 10 * x)
* // Seq { 10, 20 }
* ```
*
* Note: `map()` always returns a new instance, even if it produced the
* same value at every step.
*/
map<M>(
mapper: (value: T, key: T, iter: this) => M,
context?: any
): Seq.Set<M>;
/**
* Flat-maps the Seq, returning a Seq of the same type.
*
* Similar to `seq.map(...).flatten(true)`.
*/
flatMap<M>(
mapper: (value: T, key: T, iter: this) => Iterable<M>,
context?: any
): Seq.Set<M>;
/**
* Returns a new Seq with only the values for which the `predicate`
* function returns true.
*
* Note: `filter()` always returns a new instance, even if it results in
* not filtering out any values.
*/
filter<F extends T>(
predicate: (value: T, key: T, iter: this) => value is F,
context?: any
): Seq.Set<F>;
filter(
predicate: (value: T, key: T, iter: this) => any,
context?: any
): this;
}
}
/**
* Creates a Seq.
*
* Returns a particular kind of `Seq` based on the input.
*
* * If a `Seq`, that same `Seq`.
* * If an `Collection`, a `Seq` of the same kind (Keyed, Indexed, or Set).
* * If an Array-like, an `Seq.Indexed`.
* * If an Iterable Object, an `Seq.Indexed`.
* * If an Object, a `Seq.Keyed`.
*
* Note: An Iterator itself will be treated as an object, becoming a `Seq.Keyed`,
* which is usually not what you want. You should turn your Iterator Object into
* an iterable object by defining a Symbol.iterator (or @@iterator) method which
* returns `this`.
*
* Note: `Seq` is a conversion function and not a class, and does not use the
* `new` keyword during construction.
*/
declare function Seq<S extends Seq<any, any>>(seq: S): S;
declare function Seq<K, V>(collection: Collection.Keyed<K, V>): Seq.Keyed<K, V>;
declare function Seq<T>(collection: Collection.Indexed<T>): Seq.Indexed<T>;
declare function Seq<T>(collection: Collection.Set<T>): Seq.Set<T>;
declare function Seq<T>(collection: Iterable<T>): Seq.Indexed<T>;
declare function Seq<V>(obj: { [key: string]: V }): Seq.Keyed<string, V>;
declare function Seq(): Seq<any, any>;
interface Seq<K, V> extends Collection<K, V> {
/**
* Some Seqs can describe their size lazily. When this is the case,
* size will be an integer. Otherwise it will be undefined.
*
* For example, Seqs returned from `map()` or `reverse()`
* preserve the size of the original `Seq` while `filter()` does not.
*
* Note: `Range`, `Repeat` and `Seq`s made from `Array`s and `Object`s will
* always have a size.
*/
readonly size: number | undefined;
// Force evaluation
/**
* Because Sequences are lazy and designed to be chained together, they do
* not cache their results. For example, this map function is called a total
* of 6 times, as each `join` iterates the Seq of three values.
*
* var squares = Seq([ 1, 2, 3 ]).map(x => x * x)
* squares.join() + squares.join()
*
* If you know a `Seq` will be used multiple times, it may be more
* efficient to first cache it in memory. Here, the map function is called
* only 3 times.
*
* var squares = Seq([ 1, 2, 3 ]).map(x => x * x).cacheResult()
* squares.join() + squares.join()
*
* Use this method judiciously, as it must fully evaluate a Seq which can be
* a burden on memory and possibly performance.
*
* Note: after calling `cacheResult`, a Seq will always have a `size`.
*/
cacheResult(): this;
// Sequence algorithms
/**
* Returns a new Seq with values passed through a
* `mapper` function.
*
* ```js
* const { Seq } = require('immutable')
* Seq([ 1, 2 ]).map(x => 10 * x)
* // Seq [ 10, 20 ]
* ```
*
* Note: `map()` always returns a new instance, even if it produced the same
* value at every step.
*/
map<M>(
mapper: (value: V, key: K, iter: this) => M,
context?: any
): Seq<K, M>;
/**
* Returns a new Seq with values passed through a
* `mapper` function.
*
* ```js
* const { Seq } = require('immutable')
* Seq([ 1, 2 ]).map(x => 10 * x)
* // Seq [ 10, 20 ]
* ```
*
* Note: `map()` always returns a new instance, even if it produced the same
* value at every step.
* Note: used only for sets.
*/
map<M>(
mapper: (value: V, key: K, iter: this) => M,
context?: any
): Seq<M, M>;
/**
* Flat-maps the Seq, returning a Seq of the same type.
*
* Similar to `seq.map(...).flatten(true)`.
*/
flatMap<M>(
mapper: (value: V, key: K, iter: this) => Iterable<M>,
context?: any
): Seq<K, M>;
/**
* Flat-maps the Seq, returning a Seq of the same type.
*
* Similar to `seq.map(...).flatten(true)`.
* Note: Used only for sets.
*/
flatMap<M>(
mapper: (value: V, key: K, iter: this) => Iterable<M>,
context?: any
): Seq<M, M>;
/**
* Returns a new Seq with only the values for which the `predicate`
* function returns true.
*
* Note: `filter()` always returns a new instance, even if it results in
* not filtering out any values.
*/
filter<F extends V>(
predicate: (value: V, key: K, iter: this) => value is F,
context?: any
): Seq<K, F>;
filter(
predicate: (value: V, key: K, iter: this) => any,
context?: any
): this;
}
/**
* The `Collection` is a set of (key, value) entries which can be iterated, and
* is the base class for all collections in `immutable`, allowing them to
* make use of all the Collection methods (such as `map` and `filter`).
*
* Note: A collection is always iterated in the same order, however that order
* may not always be well defined, as is the case for the `Map` and `Set`.
*
* Collection is the abstract base class for concrete data structures. It
* cannot be constructed directly.
*
* Implementations should extend one of the subclasses, `Collection.Keyed`,
* `Collection.Indexed`, or `Collection.Set`.
*/
declare module Collection {
/**
* @deprecated use `const { isKeyed } = require('immutable')`
*/
function isKeyed(maybeKeyed: any): maybeKeyed is Collection.Keyed<any, any>;
/**
* @deprecated use `const { isIndexed } = require('immutable')`
*/
function isIndexed(maybeIndexed: any): maybeIndexed is Collection.Indexed<any>;
/**
* @deprecated use `const { isAssociative } = require('immutable')`
*/
function isAssociative(maybeAssociative: any): maybeAssociative is Collection.Keyed<any, any> | Collection.Indexed<any>;
/**
* @deprecated use `const { isOrdered } = require('immutable')`
*/
function isOrdered(maybeOrdered: any): boolean;
/**
* Keyed Collections have discrete keys tied to each value.
*
* When iterating `Collection.Keyed`, each iteration will yield a `[K, V]`
* tuple, in other words, `Collection#entries` is the default iterator for
* Keyed Collections.
*/
export module Keyed { }
/**
* Creates a Collection.Keyed
*
* Similar to `Collection()`, however it expects collection-likes of [K, V]
* tuples if not constructed from a Collection.Keyed or JS Object.
*
* Note: `Collection.Keyed` is a conversion function and not a class, and
* does not use the `new` keyword during construction.
*/
export function Keyed<K, V>(collection: Iterable<[K, V]>): Collection.Keyed<K, V>;
export function Keyed<V>(obj: { [key: string]: V }): Collection.Keyed<string, V>;
export interface Keyed<K, V> extends Collection<K, V> {
/**
* Deeply converts this Keyed collection to equivalent native JavaScript Object.
*
* Converts keys to Strings.
*/
toJS(): Object;
/**
* Shallowly converts this Keyed collection to equivalent native JavaScript Object.
*
* Converts keys to Strings.
*/
toJSON(): { [key: string]: V };
/**
* Shallowly converts this collection to an Array.
*/
toArray(): Array<[K, V]>;
/**
* Returns Seq.Keyed.
* @override
*/
toSeq(): Seq.Keyed<K, V>;
// Sequence functions
/**
* Returns a new Collection.Keyed of the same type where the keys and values
* have been flipped.
*
* <!-- runkit:activate -->
* ```js
* const { Map } = require('immutable')
* Map({ a: 'z', b: 'y' }).flip()
* // Map { "z": "a", "y": "b" }
* ```
*/
flip(): Collection.Keyed<V, K>;
/**
* Returns a new Collection with other collections concatenated to this one.
*/
concat<KC, VC>(...collections: Array<Iterable<[KC, VC]>>): Collection.Keyed<K | KC, V | VC>;
concat<C>(...collections: Array<{ [key: string]: C }>): Collection.Keyed<K | string, V | C>;
/**
* Returns a new Collection.Keyed with values passed through a
* `mapper` function.
*
* ```js
* const { Collection } = require('immutable')
* Collection.Keyed({ a: 1, b: 2 }).map(x => 10 * x)
* // Seq { "a": 10, "b": 20 }
* ```
*
* Note: `map()` always returns a new instance, even if it produced the
* same value at every step.
*/
map<M>(
mapper: (value: V, key: K, iter: this) => M,
context?: any
): Collection.Keyed<K, M>;
/**
* Returns a new Collection.Keyed of the same type with keys passed through
* a `mapper` function.
*
* <!-- runkit:activate -->
* ```js
* const { Map } = require('immutable')
* Map({ a: 1, b: 2 }).mapKeys(x => x.toUpperCase())
* // Map { "A": 1, "B": 2 }
* ```
*
* Note: `mapKeys()` always returns a new instance, even if it produced
* the same key at every step.
*/
mapKeys<M>(
mapper: (key: K, value: V, iter: this) => M,
context?: any
): Collection.Keyed<M, V>;
/**
* Returns a new Collection.Keyed of the same type with entries
* ([key, value] tuples) passed through a `mapper` function.
*
* <!-- runkit:activate -->
* ```js
* const { Map } = require('immutable')
* Map({ a: 1, b: 2 })
* .mapEntries(([ k, v ]) => [ k.toUpperCase(), v * 2 ])
* // Map { "A": 2, "B": 4 }
* ```
*
* Note: `mapEntries()` always returns a new instance, even if it produced
* the same entry at every step.
*/
mapEntries<KM, VM>(
mapper: (entry: [K, V], index: number, iter: this) => [KM, VM],
context?: any
): Collection.Keyed<KM, VM>;
/**
* Flat-maps the Collection, returning a Collection of the same type.
*
* Similar to `collection.map(...).flatten(true)`.
*/
flatMap<KM, VM>(
mapper: (value: V, key: K, iter: this) => Iterable<[KM, VM]>,
context?: any
): Collection.Keyed<KM, VM>;
/**
* Returns a new Collection with only the values for which the `predicate`
* function returns true.
*
* Note: `filter()` always returns a new instance, even if it results in
* not filtering out any values.
*/
filter<F extends V>(
predicate: (value: V, key: K, iter: this) => value is F,
context?: any
): Collection.Keyed<K, F>;
filter(
predicate: (value: V, key: K, iter: this) => any,
context?: any
): this;
[Symbol.iterator](): IterableIterator<[K, V]>;
}
/**
* Indexed Collections have incrementing numeric keys. They exhibit
* slightly different behavior than `Collection.Keyed` for some methods in order
* to better mirror the behavior of JavaScript's `Array`, and add methods
* which do not make sense on non-indexed Collections such as `indexOf`.
*
* Unlike JavaScript arrays, `Collection.Indexed`s are always dense. "Unset"
* indices and `undefined` indices are indistinguishable, and all indices from
* 0 to `size` are visited when iterated.
*
* All Collection.Indexed methods return re-indexed Collections. In other words,
* indices always start at 0 and increment until size. If you wish to
* preserve indices, using them as keys, convert to a Collection.Keyed by
* calling `toKeyedSeq`.
*/
export module Indexed { }
/**
* Creates a new Collection.Indexed.
*
* Note: `Collection.Indexed` is a conversion function and not a class, and
* does not use the `new` keyword during construction.
*/
export function Indexed<T>(collection: Iterable<T>): Collection.Indexed<T>;
export interface Indexed<T> extends Collection<number, T> {
/**
* Deeply converts this Indexed collection to equivalent native JavaScript Array.
*/
toJS(): Array<any>;
/**
* Shallowly converts this Indexed collection to equivalent native JavaScript Array.
*/
toJSON(): Array<T>;
/**
* Shallowly converts this collection to an Array.
*/
toArray(): Array<T>;
// Reading values
/**
* Returns the value associated with the provided index, or notSetValue if
* the index is beyond the bounds of the Collection.
*
* `index` may be a negative number, which indexes back from the end of the
* Collection. `s.get(-1)` gets the last item in the Collection.
*/
get<NSV>(index: number, notSetValue: NSV): T | NSV;
get(index: number): T | undefined;
// Conversion to Seq
/**
* Returns Seq.Indexed.
* @override
*/
toSeq(): Seq.Indexed<T>;
/**
* If this is a collection of [key, value] entry tuples, it will return a
* Seq.Keyed of those entries.
*/
fromEntrySeq(): Seq.Keyed<any, any>;
// Combination
/**
* Returns a Collection of the same type with `separator` between each item
* in this Collection.
*/
interpose(separator: T): this;
/**
* Returns a Collection of the same type with the provided `collections`
* interleaved into this collection.
*
* The resulting Collection includes the first item from each, then the
* second from each, etc.
*
* <!-- runkit:activate
* { "preamble": "require('immutable')"}
* -->
* ```js
* const { List } = require('immutable')
* List([ 1, 2, 3 ]).interleave(List([ 'A', 'B', 'C' ]))
* // List [ 1, "A", 2, "B", 3, "C"" ]
* ```
*
* The shortest Collection stops interleave.
*
* <!-- runkit:activate
* { "preamble": "const { List } = require('immutable')" }
* -->
* ```js
* List([ 1, 2, 3 ]).interleave(
* List([ 'A', 'B' ]),
* List([ 'X', 'Y', 'Z' ])
* )
* // List [ 1, "A", "X", 2, "B", "Y"" ]
* ```
*
* Since `interleave()` re-indexes values, it produces a complete copy,
* which has `O(N)` complexity.
*
* Note: `interleave` *cannot* be used in `withMutations`.
*/
interleave(...collections: Array<Collection<any, T>>): this;
/**
* Splice returns a new indexed Collection by replacing a region of this
* Collection with new values. If values are not provided, it only skips the
* region to be removed.
*
* `index` may be a negative number, which indexes back from the end of the
* Collection. `s.splice(-2)` splices after the second to last item.
*
* <!-- runkit:activate -->
* ```js
* const { List } = require('immutable')
* List([ 'a', 'b', 'c', 'd' ]).splice(1, 2, 'q', 'r', 's')
* // List [ "a", "q", "r", "s", "d" ]
* ```
*
* Since `splice()` re-indexes values, it produces a complete copy, which
* has `O(N)` complexity.
*
* Note: `splice` *cannot* be used in `withMutations`.
*/
splice(
index: number,
removeNum: number,
...values: Array<T>
): this;
/**
* Returns a Collection of the same type "zipped" with the provided
* collections.
*
* Like `zipWith`, but using the default `zipper`: creating an `Array`.
*
*
* <!-- runkit:activate
* { "preamble": "const { List } = require('immutable')" }
* -->
* ```js
* const a = List([ 1, 2, 3 ]);
* const b = List([ 4, 5, 6 ]);
* const c = a.zip(b); // List [ [ 1, 4 ], [ 2, 5 ], [ 3, 6 ] ]
* ```
*/
zip<U>(other: Collection<any, U>): Collection.Indexed<[T, U]>;
zip<U, V>(other: Collection<any, U>, other2: Collection<any, V>): Collection.Indexed<[T, U, V]>;
zip(...collections: Array<Collection<any, any>>): Collection.Indexed<any>;
/**
* Returns a Collection "zipped" with the provided collections.
*
* Unlike `zip`, `zipAll` continues zipping until the longest collection is
* exhausted. Missing values from shorter collections are filled with `undefined`.
*
* ```js
* const a = List([ 1, 2 ]);
* const b = List([ 3, 4, 5 ]);
* const c = a.zipAll(b); // List [ [ 1, 3 ], [ 2, 4 ], [ undefined, 5 ] ]
* ```
*/
zipAll<U>(other: Collection<any, U>): Collection.Indexed<[T, U]>;
zipAll<U, V>(other: Collection<any, U>, other2: Collection<any, V>): Collection.Indexed<[T, U, V]>;
zipAll(...collections: Array<Collection<any, any>>): Collection.Indexed<any>;
/**
* Returns a Collection of the same type "zipped" with the provided
* collections by using a custom `zipper` function.
*
* <!-- runkit:activate
* { "preamble": "const { List } = require('immutable')" }
* -->
* ```js
* const a = List([ 1, 2, 3 ]);
* const b = List([ 4, 5, 6 ]);
* const c = a.zipWith((a, b) => a + b, b);
* // List [ 5, 7, 9 ]
* ```
*/
zipWith<U, Z>(
zipper: (value: T, otherValue: U) => Z,
otherCollection: Collection<any, U>
): Collection.Indexed<Z>;
zipWith<U, V, Z>(
zipper: (value: T, otherValue: U, thirdValue: V) => Z,
otherCollection: Collection<any, U>,
thirdCollection: Collection<any, V>
): Collection.Indexed<Z>;
zipWith<Z>(
zipper: (...any: Array<any>) => Z,
...collections: Array<Collection<any, any>>
): Collection.Indexed<Z>;
// Search for value
/**
* Returns the first index at which a given value can be found in the
* Collection, or -1 if it is not present.
*/
indexOf(searchValue: T): number;
/**
* Returns the last index at which a given value can be found in the
* Collection, or -1 if it is not present.
*/
lastIndexOf(searchValue: T): number;
/**
* Returns the first index in the Collection where a value satisfies the
* provided predicate function. Otherwise -1 is returned.
*/
findIndex(
predicate: (value: T, index: number, iter: this) => boolean,
context?: any
): number;
/**
* Returns the last index in the Collection where a value satisfies the
* provided predicate function. Otherwise -1 is returned.
*/
findLastIndex(
predicate: (value: T, index: number, iter: this) => boolean,
context?: any
): number;
// Sequence algorithms
/**
* Returns a new Collection with other collections concatenated to this one.
*/
concat<C>(...valuesOrCollections: Array<Iterable<C> | C>): Collection.Indexed<T | C>;
/**
* Returns a new Collection.Indexed with values passed through a
* `mapper` function.
*
* ```js
* const { Collection } = require('immutable')
* Collection.Indexed([1,2]).map(x => 10 * x)
* // Seq [ 1, 2 ]
* ```
*
* Note: `map()` always returns a new instance, even if it produced the
* same value at every step.
*/
map<M>(
mapper: (value: T, key: number, iter: this) => M,
context?: any
): Collection.Indexed<M>;
/**
* Flat-maps the Collection, returning a Collection of the same type.
*
* Similar to `collection.map(...).flatten(true)`.
*/
flatMap<M>(
mapper: (value: T, key: number, iter: this) => Iterable<M>,
context?: any
): Collection.Indexed<M>;
/**
* Returns a new Collection with only the values for which the `predicate`
* function returns true.
*
* Note: `filter()` always returns a new instance, even if it results in
* not filtering out any values.
*/
filter<F extends T>(
predicate: (value: T, index: number, iter: this) => value is F,
context?: any
): Collection.Indexed<F>;
filter(
predicate: (value: T, index: number, iter: this) => any,
context?: any
): this;
[Symbol.iterator](): IterableIterator<T>;
}
/**
* Set Collections only represent values. They have no associated keys or
* indices. Duplicate values are possible in the lazy `Seq.Set`s, however
* the concrete `Set` Collection does not allow duplicate values.
*
* Collection methods on Collection.Set such as `map` and `forEach` will provide
* the value as both the first and second arguments to the provided function.
*
* ```js
* const { Collection } = require('immutable')
* const seq = Collection.Set([ 'A', 'B', 'C' ])
* // Seq { "A", "B", "C" }
* seq.forEach((v, k) =>
* assert.equal(v, k)
* )
* ```
*/
export module Set { }
/**
* Similar to `Collection()`, but always returns a Collection.Set.
*
* Note: `Collection.Set` is a factory function and not a class, and does
* not use the `new` keyword during construction.
*/
export function Set<T>(collection: Iterable<T>): Collection.Set<T>;
export interface Set<T> extends Collection<T, T> {
/**
* Deeply converts this Set collection to equivalent native JavaScript Array.
*/
toJS(): Array<any>;
/**
* Shallowly converts this Set collection to equivalent native JavaScript Array.
*/
toJSON(): Array<T>;
/**
* Shallowly converts this collection to an Array.
*/
toArray(): Array<T>;
/**
* Returns Seq.Set.
* @override
*/
toSeq(): Seq.Set<T>;
// Sequence algorithms
/**
* Returns a new Collection with other collections concatenated to this one.
*/
concat<U>(...collections: Array<Iterable<U>>): Collection.Set<T | U>;
/**
* Returns a new Collection.Set with values passed through a
* `mapper` function.
*
* ```
* Collection.Set([ 1, 2 ]).map(x => 10 * x)
* // Seq { 1, 2 }
* ```
*
* Note: `map()` always returns a new instance, even if it produced the
* same value at every step.
*/
map<M>(
mapper: (value: T, key: T, iter: this) => M,
context?: any
): Collection.Set<M>;
/**
* Flat-maps the Collection, returning a Collection of the same type.
*
* Similar to `collection.map(...).flatten(true)`.
*/
flatMap<M>(
mapper: (value: T, key: T, iter: this) => Iterable<M>,
context?: any
): Collection.Set<M>;
/**
* Returns a new Collection with only the values for which the `predicate`
* function returns true.
*
* Note: `filter()` always returns a new instance, even if it results in
* not filtering out any values.
*/
filter<F extends T>(
predicate: (value: T, key: T, iter: this) => value is F,
context?: any
): Collection.Set<F>;
filter(
predicate: (value: T, key: T, iter: this) => any,
context?: any
): this;
[Symbol.iterator](): IterableIterator<T>;
}
}
/**
* Creates a Collection.
*
* The type of Collection created is based on the input.
*
* * If an `Collection`, that same `Collection`.
* * If an Array-like, an `Collection.Indexed`.
* * If an Object with an Iterator defined, an `Collection.Indexed`.
* * If an Object, an `Collection.Keyed`.
*
* This methods forces the conversion of Objects and Strings to Collections.
* If you want to ensure that a Collection of one item is returned, use
* `Seq.of`.
*
* Note: An Iterator itself will be treated as an object, becoming a `Seq.Keyed`,
* which is usually not what you want. You should turn your Iterator Object into
* an iterable object by defining a Symbol.iterator (or @@iterator) method which
* returns `this`.
*
* Note: `Collection` is a conversion function and not a class, and does not
* use the `new` keyword during construction.
*/
declare function Collection<I extends Collection<any, any>>(collection: I): I;
declare function Collection<T>(collection: Iterable<T>): Collection.Indexed<T>;
declare function Collection<V>(obj: { [key: string]: V }): Collection.Keyed<string, V>;
interface Collection<K, V> extends ValueObject {
// Value equality
/**
* True if this and the other Collection have value equality, as defined
* by `Immutable.is()`.
*
* Note: This is equivalent to `Immutable.is(this, other)`, but provided to
* allow for chained expressions.
*/
equals(other: any): boolean;
/**
* Computes and returns the hashed identity for this Collection.
*
* The `hashCode` of a Collection is used to determine potential equality,
* and is used when adding this to a `Set` or as a key in a `Map`, enabling
* lookup via a different instance.
*
* <!-- runkit:activate
* { "preamble": "const { Set, List } = require('immutable')" }
* -->
* ```js
* const a = List([ 1, 2, 3 ]);
* const b = List([ 1, 2, 3 ]);
* assert.notStrictEqual(a, b); // different instances
* const set = Set([ a ]);
* assert.equal(set.has(b), true);
* ```
*
* If two values have the same `hashCode`, they are [not guaranteed
* to be equal][Hash Collision]. If two values have different `hashCode`s,
* they must not be equal.
*
* [Hash Collision]: http://en.wikipedia.org/wiki/Collision_(computer_science)
*/
hashCode(): number;
// Reading values
/**
* Returns the value associated with the provided key, or notSetValue if
* the Collection does not contain this key.
*
* Note: it is possible a key may be associated with an `undefined` value,
* so if `notSetValue` is not provided and this method returns `undefined`,
* that does not guarantee the key was not found.
*/
get<NSV>(key: K, notSetValue: NSV): V | NSV;
get(key: K): V | undefined;
/**
* True if a key exists within this `Collection`, using `Immutable.is`
* to determine equality
*/
has(key: K): boolean;
/**
* True if a value exists within this `Collection`, using `Immutable.is`
* to determine equality
* @alias contains
*/
includes(value: V): boolean;
contains(value: V): boolean;
/**
* In case the `Collection` is not empty returns the first element of the
* `Collection`.
* In case the `Collection` is empty returns the optional default
* value if provided, if no default value is provided returns undefined.
*/
first<NSV>(notSetValue?: NSV): V | NSV;
/**
* In case the `Collection` is not empty returns the last element of the
* `Collection`.
* In case the `Collection` is empty returns the optional default
* value if provided, if no default value is provided returns undefined.
*/
last<NSV>(notSetValue?: NSV): V | NSV;
// Reading deep values
/**
* Returns the value found by following a path of keys or indices through
* nested Collections.
*
* <!-- runkit:activate -->
* ```js
* const { Map, List } = require('immutable')
* const deepData = Map({ x: List([ Map({ y: 123 }) ]) });
* deepData.getIn(['x', 0, 'y']) // 123
* ```
*
* Plain JavaScript Object or Arrays may be nested within an Immutable.js
* Collection, and getIn() can access those values as well:
*
* <!-- runkit:activate -->
* ```js
* const { Map, List } = require('immutable')
* const deepData = Map({ x: [ { y: 123 } ] });
* deepData.getIn(['x', 0, 'y']) // 123
* ```
*/
getIn(searchKeyPath: Iterable<any>, notSetValue?: any): any;
/**
* True if the result of following a path of keys or indices through nested
* Collections results in a set value.
*/
hasIn(searchKeyPath: Iterable<any>): boolean;
// Persistent changes
/**
* This can be very useful as a way to "chain" a normal function into a
* sequence of methods. RxJS calls this "let" and lodash calls it "thru".
*
* For example, to sum a Seq after mapping and filtering:
*
* <!-- runkit:activate -->
* ```js
* const { Seq } = require('immutable')
*
* function sum(collection) {
* return collection.reduce((sum, x) => sum + x, 0)
* }
*
* Seq([ 1, 2, 3 ])
* .map(x => x + 1)
* .filter(x => x % 2 === 0)
* .update(sum)
* // 6
* ```
*/
update<R>(updater: (value: this) => R): R;
// Conversion to JavaScript types
/**
* Deeply converts this Collection to equivalent native JavaScript Array or Object.
*
* `Collection.Indexed`, and `Collection.Set` become `Array`, while
* `Collection.Keyed` become `Object`, converting keys to Strings.
*/
toJS(): Array<any> | { [key: string]: any };
/**
* Shallowly converts this Collection to equivalent native JavaScript Array or Object.
*
* `Collection.Indexed`, and `Collection.Set` become `Array`, while
* `Collection.Keyed` become `Object`, converting keys to Strings.
*/
toJSON(): Array<V> | { [key: string]: V };
/**
* Shallowly converts this collection to an Array.
*
* `Collection.Indexed`, and `Collection.Set` produce an Array of values.
* `Collection.Keyed` produce an Array of [key, value] tuples.
*/
toArray(): Array<V> | Array<[K, V]>;
/**
* Shallowly converts this Collection to an Object.
*
* Converts keys to Strings.
*/
toObject(): { [key: string]: V };
// Conversion to Collections
/**
* Converts this Collection to a Map, Throws if keys are not hashable.
*
* Note: This is equivalent to `Map(this.toKeyedSeq())`, but provided
* for convenience and to allow for chained expressions.
*/
toMap(): Map<K, V>;
/**
* Converts this Collection to a Map, maintaining the order of iteration.
*
* Note: This is equivalent to `OrderedMap(this.toKeyedSeq())`, but
* provided for convenience and to allow for chained expressions.
*/
toOrderedMap(): OrderedMap<K, V>;
/**
* Converts this Collection to a Set, discarding keys. Throws if values
* are not hashable.
*
* Note: This is equivalent to `Set(this)`, but provided to allow for
* chained expressions.
*/
toSet(): Set<V>;
/**
* Converts this Collection to a Set, maintaining the order of iteration and
* discarding keys.
*
* Note: This is equivalent to `OrderedSet(this.valueSeq())`, but provided
* for convenience and to allow for chained expressions.
*/
toOrderedSet(): OrderedSet<V>;
/**
* Converts this Collection to a List, discarding keys.
*
* This is similar to `List(collection)`, but provided to allow for chained
* expressions. However, when called on `Map` or other keyed collections,
* `collection.toList()` discards the keys and creates a list of only the
* values, whereas `List(collection)` creates a list of entry tuples.
*
* <!-- runkit:activate -->
* ```js
* const { Map, List } = require('immutable')
* var myMap = Map({ a: 'Apple', b: 'Banana' })
* List(myMap) // List [ [ "a", "Apple" ], [ "b", "Banana" ] ]
* myMap.toList() // List [ "Apple", "Banana" ]
* ```
*/
toList(): List<V>;
/**
* Converts this Collection to a Stack, discarding keys. Throws if values
* are not hashable.
*
* Note: This is equivalent to `Stack(this)`, but provided to allow for
* chained expressions.
*/
toStack(): Stack<V>;
// Conversion to Seq
/**
* Converts this Collection to a Seq of the same kind (indexed,
* keyed, or set).
*/
toSeq(): Seq<K, V>;
/**
* Returns a Seq.Keyed from this Collection where indices are treated as keys.
*
* This is useful if you want to operate on an
* Collection.Indexed and preserve the [index, value] pairs.
*
* The returned Seq will have identical iteration order as
* this Collection.
*
* <!-- runkit:activate -->
* ```js
* const { Seq } = require('immutable')
* const indexedSeq = Seq([ 'A', 'B', 'C' ])
* // Seq [ "A", "B", "C" ]
* indexedSeq.filter(v => v === 'B')
* // Seq [ "B" ]
* const keyedSeq = indexedSeq.toKeyedSeq()
* // Seq { 0: "A", 1: "B", 2: "C" }
* keyedSeq.filter(v => v === 'B')
* // Seq { 1: "B" }
* ```
*/
toKeyedSeq(): Seq.Keyed<K, V>;
/**
* Returns an Seq.Indexed of the values of this Collection, discarding keys.
*/
toIndexedSeq(): Seq.Indexed<V>;
/**
* Returns a Seq.Set of the values of this Collection, discarding keys.
*/
toSetSeq(): Seq.Set<V>;
// Iterators
/**
* An iterator of this `Collection`'s keys.
*
* Note: this will return an ES6 iterator which does not support
* Immutable.js sequence algorithms. Use `keySeq` instead, if this is
* what you want.
*/
keys(): IterableIterator<K>;
/**
* An iterator of this `Collection`'s values.
*
* Note: this will return an ES6 iterator which does not support
* Immutable.js sequence algorithms. Use `valueSeq` instead, if this is
* what you want.
*/
values(): IterableIterator<V>;
/**
* An iterator of this `Collection`'s entries as `[ key, value ]` tuples.
*
* Note: this will return an ES6 iterator which does not support
* Immutable.js sequence algorithms. Use `entrySeq` instead, if this is
* what you want.
*/
entries(): IterableIterator<[K, V]>;
// Collections (Seq)
/**
* Returns a new Seq.Indexed of the keys of this Collection,
* discarding values.
*/
keySeq(): Seq.Indexed<K>;
/**
* Returns an Seq.Indexed of the values of this Collection, discarding keys.
*/
valueSeq(): Seq.Indexed<V>;
/**
* Returns a new Seq.Indexed of [key, value] tuples.
*/
entrySeq(): Seq.Indexed<[K, V]>;
// Sequence algorithms
/**
* Returns a new Collection of the same type with values passed through a
* `mapper` function.
*
* <!-- runkit:activate -->
* ```js
* const { Collection } = require('immutable')
* Collection({ a: 1, b: 2 }).map(x => 10 * x)
* // Seq { "a": 10, "b": 20 }
* ```
*
* Note: `map()` always returns a new instance, even if it produced the same
* value at every step.
*/
map<M>(
mapper: (value: V, key: K, iter: this) => M,
context?: any
): Collection<K, M>;
/**
* Note: used only for sets, which return Collection<M, M> but are otherwise
* identical to normal `map()`.
*
* @ignore
*/
map<M>(...args: never[]): any;
/**
* Returns a new Collection of the same type with only the entries for which
* the `predicate` function returns true.
*
* <!-- runkit:activate -->
* ```js
* const { Map } = require('immutable')
* Map({ a: 1, b: 2, c: 3, d: 4}).filter(x => x % 2 === 0)
* // Map { "b": 2, "d": 4 }
* ```
*
* Note: `filter()` always returns a new instance, even if it results in
* not filtering out any values.
*/
filter<F extends V>(
predicate: (value: V, key: K, iter: this) => value is F,
context?: any
): Collection<K, F>;
filter(
predicate: (value: V, key: K, iter: this) => any,
context?: any
): this;
/**
* Returns a new Collection of the same type with only the entries for which
* the `predicate` function returns false.
*
* <!-- runkit:activate -->
* ```js
* const { Map } = require('immutable')
* Map({ a: 1, b: 2, c: 3, d: 4}).filterNot(x => x % 2 === 0)
* // Map { "a": 1, "c": 3 }
* ```
*
* Note: `filterNot()` always returns a new instance, even if it results in
* not filtering out any values.
*/
filterNot(
predicate: (value: V, key: K, iter: this) => boolean,
context?: any
): this;
/**
* Returns a new Collection of the same type in reverse order.
*/
reverse(): this;
/**
* Returns a new Collection of the same type which includes the same entries,
* stably sorted by using a `comparator`.
*
* If a `comparator` is not provided, a default comparator uses `<` and `>`.
*
* `comparator(valueA, valueB)`:
*
* * Returns `0` if the elements should not be swapped.
* * Returns `-1` (or any negative number) if `valueA` comes before `valueB`
* * Returns `1` (or any positive number) if `valueA` comes after `valueB`
* * Is pure, i.e. it must always return the same value for the same pair
* of values.
*
* When sorting collections which have no defined order, their ordered
* equivalents will be returned. e.g. `map.sort()` returns OrderedMap.
*
* <!-- runkit:activate -->
* ```js
* const { Map } = require('immutable')
* Map({ "c": 3, "a": 1, "b": 2 }).sort((a, b) => {
* if (a < b) { return -1; }
* if (a > b) { return 1; }
* if (a === b) { return 0; }
* });
* // OrderedMap { "a": 1, "b": 2, "c": 3 }
* ```
*
* Note: `sort()` Always returns a new instance, even if the original was
* already sorted.
*
* Note: This is always an eager operation.
*/
sort(comparator?: (valueA: V, valueB: V) => number): this;
/**
* Like `sort`, but also accepts a `comparatorValueMapper` which allows for
* sorting by more sophisticated means:
*
* hitters.sortBy(hitter => hitter.avgHits)
*
* Note: `sortBy()` Always returns a new instance, even if the original was
* already sorted.
*
* Note: This is always an eager operation.
*/
sortBy<C>(
comparatorValueMapper: (value: V, key: K, iter: this) => C,
comparator?: (valueA: C, valueB: C) => number
): this;
/**
* Returns a `Collection.Keyed` of `Collection.Keyeds`, grouped by the return
* value of the `grouper` function.
*
* Note: This is always an eager operation.
*
* <!-- runkit:activate -->
* ```js
* const { List, Map } = require('immutable')
* const listOfMaps = List([
* Map({ v: 0 }),
* Map({ v: 1 }),
* Map({ v: 1 }),
* Map({ v: 0 }),
* Map({ v: 2 })
* ])
* const groupsOfMaps = listOfMaps.groupBy(x => x.get('v'))
* // Map {
* // 0: List [ Map{ "v": 0 }, Map { "v": 0 } ],
* // 1: List [ Map{ "v": 1 }, Map { "v": 1 } ],
* // 2: List [ Map{ "v": 2 } ],
* // }
* ```
*/
groupBy<G>(
grouper: (value: V, key: K, iter: this) => G,
context?: any
): /*Map*/Seq.Keyed<G, /*this*/Collection<K, V>>;
// Side effects
/**
* The `sideEffect` is executed for every entry in the Collection.
*
* Unlike `Array#forEach`, if any call of `sideEffect` returns
* `false`, the iteration will stop. Returns the number of entries iterated
* (including the last iteration which returned false).
*/
forEach(
sideEffect: (value: V, key: K, iter: this) => any,
context?: any
): number;
// Creating subsets
/**
* Returns a new Collection of the same type representing a portion of this
* Collection from start up to but not including end.
*
* If begin is negative, it is offset from the end of the Collection. e.g.
* `slice(-2)` returns a Collection of the last two entries. If it is not
* provided the new Collection will begin at the beginning of this Collection.
*
* If end is negative, it is offset from the end of the Collection. e.g.
* `slice(0, -1)` returns a Collection of everything but the last entry. If
* it is not provided, the new Collection will continue through the end of
* this Collection.
*
* If the requested slice is equivalent to the current Collection, then it
* will return itself.
*/
slice(begin?: number, end?: number): this;
/**
* Returns a new Collection of the same type containing all entries except
* the first.
*/
rest(): this;
/**
* Returns a new Collection of the same type containing all entries except
* the last.
*/
butLast(): this;
/**
* Returns a new Collection of the same type which excludes the first `amount`
* entries from this Collection.
*/
skip(amount: number): this;
/**
* Returns a new Collection of the same type which excludes the last `amount`
* entries from this Collection.
*/
skipLast(amount: number): this;
/**
* Returns a new Collection of the same type which includes entries starting
* from when `predicate` first returns false.
*
* <!-- runkit:activate -->
* ```js
* const { List } = require('immutable')
* List([ 'dog', 'frog', 'cat', 'hat', 'god' ])
* .skipWhile(x => x.match(/g/))
* // List [ "cat", "hat", "god"" ]
* ```
*/
skipWhile(
predicate: (value: V, key: K, iter: this) => boolean,
context?: any
): this;
/**
* Returns a new Collection of the same type which includes entries starting
* from when `predicate` first returns true.
*
* <!-- runkit:activate -->
* ```js
* const { List } = require('immutable')
* List([ 'dog', 'frog', 'cat', 'hat', 'god' ])
* .skipUntil(x => x.match(/hat/))
* // List [ "hat", "god"" ]
* ```
*/
skipUntil(
predicate: (value: V, key: K, iter: this) => boolean,
context?: any
): this;
/**
* Returns a new Collection of the same type which includes the first `amount`
* entries from this Collection.
*/
take(amount: number): this;
/**
* Returns a new Collection of the same type which includes the last `amount`
* entries from this Collection.
*/
takeLast(amount: number): this;
/**
* Returns a new Collection of the same type which includes entries from this
* Collection as long as the `predicate` returns true.
*
* <!-- runkit:activate -->
* ```js
* const { List } = require('immutable')
* List([ 'dog', 'frog', 'cat', 'hat', 'god' ])
* .takeWhile(x => x.match(/o/))
* // List [ "dog", "frog" ]
* ```
*/
takeWhile(
predicate: (value: V, key: K, iter: this) => boolean,
context?: any
): this;
/**
* Returns a new Collection of the same type which includes entries from this
* Collection as long as the `predicate` returns false.
*
* <!-- runkit:activate -->
* ```js
* const { List } = require('immutable')
* List([ 'dog', 'frog', 'cat', 'hat', 'god' ])
* .takeUntil(x => x.match(/at/))
* // List [ "dog", "frog" ]
* ```
*/
takeUntil(
predicate: (value: V, key: K, iter: this) => boolean,
context?: any
): this;
// Combination
/**
* Returns a new Collection of the same type with other values and
* collection-like concatenated to this one.
*
* For Seqs, all entries will be present in the resulting Seq, even if they
* have the same key.
*/
concat(...valuesOrCollections: Array<any>): Collection<any, any>;
/**
* Flattens nested Collections.
*
* Will deeply flatten the Collection by default, returning a Collection of the
* same type, but a `depth` can be provided in the form of a number or
* boolean (where true means to shallowly flatten one level). A depth of 0
* (or shallow: false) will deeply flatten.
*
* Flattens only others Collection, not Arrays or Objects.
*
* Note: `flatten(true)` operates on Collection<any, Collection<K, V>> and
* returns Collection<K, V>
*/
flatten(depth?: number): Collection<any, any>;
flatten(shallow?: boolean): Collection<any, any>;
/**
* Flat-maps the Collection, returning a Collection of the same type.
*
* Similar to `collection.map(...).flatten(true)`.
*/
flatMap<M>(
mapper: (value: V, key: K, iter: this) => Iterable<M>,
context?: any
): Collection<K, M>;
/**
* Flat-maps the Collection, returning a Collection of the same type.
*
* Similar to `collection.map(...).flatten(true)`.
* Used for Dictionaries only.
*/
flatMap<KM, VM>(
mapper: (value: V, key: K, iter: this) => Iterable<[KM, VM]>,
context?: any
): Collection<KM, VM>;
// Reducing a value
/**
* Reduces the Collection to a value by calling the `reducer` for every entry
* in the Collection and passing along the reduced value.
*
* If `initialReduction` is not provided, the first item in the
* Collection will be used.
*
* @see `Array#reduce`.
*/
reduce<R>(
reducer: (reduction: R, value: V, key: K, iter: this) => R,
initialReduction: R,
context?: any
): R;
reduce<R>(
reducer: (reduction: V | R, value: V, key: K, iter: this) => R
): R;
/**
* Reduces the Collection in reverse (from the right side).
*
* Note: Similar to this.reverse().reduce(), and provided for parity
* with `Array#reduceRight`.
*/
reduceRight<R>(
reducer: (reduction: R, value: V, key: K, iter: this) => R,
initialReduction: R,
context?: any
): R;
reduceRight<R>(
reducer: (reduction: V | R, value: V, key: K, iter: this) => R
): R;
/**
* True if `predicate` returns true for all entries in the Collection.
*/
every(
predicate: (value: V, key: K, iter: this) => boolean,
context?: any
): boolean;
/**
* True if `predicate` returns true for any entry in the Collection.
*/
some(
predicate: (value: V, key: K, iter: this) => boolean,
context?: any
): boolean;
/**
* Joins values together as a string, inserting a separator between each.
* The default separator is `","`.
*/
join(separator?: string): string;
/**
* Returns true if this Collection includes no values.
*
* For some lazy `Seq`, `isEmpty` might need to iterate to determine
* emptiness. At most one iteration will occur.
*/
isEmpty(): boolean;
/**
* Returns the size of this Collection.
*
* Regardless of if this Collection can describe its size lazily (some Seqs
* cannot), this method will always return the correct size. E.g. it
* evaluates a lazy `Seq` if necessary.
*
* If `predicate` is provided, then this returns the count of entries in the
* Collection for which the `predicate` returns true.
*/
count(): number;
count(
predicate: (value: V, key: K, iter: this) => boolean,
context?: any
): number;
/**
* Returns a `Seq.Keyed` of counts, grouped by the return value of
* the `grouper` function.
*
* Note: This is not a lazy operation.
*/
countBy<G>(
grouper: (value: V, key: K, iter: this) => G,
context?: any
): Map<G, number>;
// Search for value
/**
* Returns the first value for which the `predicate` returns true.
*/
find(
predicate: (value: V, key: K, iter: this) => boolean,
context?: any,
notSetValue?: V
): V | undefined;
/**
* Returns the last value for which the `predicate` returns true.
*
* Note: `predicate` will be called for each entry in reverse.
*/
findLast(
predicate: (value: V, key: K, iter: this) => boolean,
context?: any,
notSetValue?: V
): V | undefined;
/**
* Returns the first [key, value] entry for which the `predicate` returns true.
*/
findEntry(
predicate: (value: V, key: K, iter: this) => boolean,
context?: any,
notSetValue?: V
): [K, V] | undefined;
/**
* Returns the last [key, value] entry for which the `predicate`
* returns true.
*
* Note: `predicate` will be called for each entry in reverse.
*/
findLastEntry(
predicate: (value: V, key: K, iter: this) => boolean,
context?: any,
notSetValue?: V
): [K, V] | undefined;
/**
* Returns the key for which the `predicate` returns true.
*/
findKey(
predicate: (value: V, key: K, iter: this) => boolean,
context?: any
): K | undefined;
/**
* Returns the last key for which the `predicate` returns true.
*
* Note: `predicate` will be called for each entry in reverse.
*/
findLastKey(
predicate: (value: V, key: K, iter: this) => boolean,
context?: any
): K | undefined;
/**
* Returns the key associated with the search value, or undefined.
*/
keyOf(searchValue: V): K | undefined;
/**
* Returns the last key associated with the search value, or undefined.
*/
lastKeyOf(searchValue: V): K | undefined;
/**
* Returns the maximum value in this collection. If any values are
* comparatively equivalent, the first one found will be returned.
*
* The `comparator` is used in the same way as `Collection#sort`. If it is not
* provided, the default comparator is `>`.
*
* When two values are considered equivalent, the first encountered will be
* returned. Otherwise, `max` will operate independent of the order of input
* as long as the comparator is commutative. The default comparator `>` is
* commutative *only* when types do not differ.
*
* If `comparator` returns 0 and either value is NaN, undefined, or null,
* that value will be returned.
*/
max(comparator?: (valueA: V, valueB: V) => number): V | undefined;
/**
* Like `max`, but also accepts a `comparatorValueMapper` which allows for
* comparing by more sophisticated means:
*
* hitters.maxBy(hitter => hitter.avgHits);
*
*/
maxBy<C>(
comparatorValueMapper: (value: V, key: K, iter: this) => C,
comparator?: (valueA: C, valueB: C) => number
): V | undefined;
/**
* Returns the minimum value in this collection. If any values are
* comparatively equivalent, the first one found will be returned.
*
* The `comparator` is used in the same way as `Collection#sort`. If it is not
* provided, the default comparator is `<`.
*
* When two values are considered equivalent, the first encountered will be
* returned. Otherwise, `min` will operate independent of the order of input
* as long as the comparator is commutative. The default comparator `<` is
* commutative *only* when types do not differ.
*
* If `comparator` returns 0 and either value is NaN, undefined, or null,
* that value will be returned.
*/
min(comparator?: (valueA: V, valueB: V) => number): V | undefined;
/**
* Like `min`, but also accepts a `comparatorValueMapper` which allows for
* comparing by more sophisticated means:
*
* hitters.minBy(hitter => hitter.avgHits);
*
*/
minBy<C>(
comparatorValueMapper: (value: V, key: K, iter: this) => C,
comparator?: (valueA: C, valueB: C) => number
): V | undefined;
// Comparison
/**
* True if `iter` includes every value in this Collection.
*/
isSubset(iter: Iterable<V>): boolean;
/**
* True if this Collection includes every value in `iter`.
*/
isSuperset(iter: Iterable<V>): boolean;
}
/**
* The interface to fulfill to qualify as a Value Object.
*/
interface ValueObject {
/**
* True if this and the other Collection have value equality, as defined
* by `Immutable.is()`.
*
* Note: This is equivalent to `Immutable.is(this, other)`, but provided to
* allow for chained expressions.
*/
equals(other: any): boolean;
/**
* Computes and returns the hashed identity for this Collection.
*
* The `hashCode` of a Collection is used to determine potential equality,
* and is used when adding this to a `Set` or as a key in a `Map`, enabling
* lookup via a different instance.
*
* <!-- runkit:activate -->
* ```js
* const { List, Set } = require('immutable');
* const a = List([ 1, 2, 3 ]);
* const b = List([ 1, 2, 3 ]);
* assert.notStrictEqual(a, b); // different instances
* const set = Set([ a ]);
* assert.equal(set.has(b), true);
* ```
*
* Note: hashCode() MUST return a Uint32 number. The easiest way to
* guarantee this is to return `myHash | 0` from a custom implementation.
*
* If two values have the same `hashCode`, they are [not guaranteed
* to be equal][Hash Collision]. If two values have different `hashCode`s,
* they must not be equal.
*
* Note: `hashCode()` is not guaranteed to always be called before
* `equals()`. Most but not all Immutable.js collections use hash codes to
* organize their internal data structures, while all Immutable.js
* collections use equality during lookups.
*
* [Hash Collision]: http://en.wikipedia.org/wiki/Collision_(computer_science)
*/
hashCode(): number;
}
type IFunction<T = void> = (...args: Array<any>) => T;
type IObject = Record<string, any>;
type Without<T, U> = {
[P in Exclude<keyof T, keyof U>]?: never;
};
type XOR<T, U> = T | U extends object ? (Without<T, U> & U) | (Without<U, T> & T) : T | U;
type Class<T> = new (...args: Array<any>) => T;
declare const TransformationMatrix_base: Record$1.Factory<{
a: number;
b: number;
c: number;
d: number;
e: number;
f: number;
}>;
declare class TransformationMatrix extends TransformationMatrix_base {
a: number;
b: number;
c: number;
d: number;
e: number;
f: number;
static defaultValues: IObject;
static IDENTITY: TransformationMatrix;
translate({ x: tx, y: ty }: {
x: number;
y: number;
}): TransformationMatrix;
translateX(tx: number): TransformationMatrix;
translateY(ty: number): TransformationMatrix;
scale(sx: number, sy?: number): TransformationMatrix;
transform(a2: number, b2: number, c2: number, d2: number, e2: number, f2: number): TransformationMatrix;
rotate(degCW: number): TransformationMatrix;
rotateRad(a: number): TransformationMatrix;
inverse(): TransformationMatrix;
toCssValue(): string;
applyToPoint([x, y]: [number, number]): [number, number];
applyToVector([x, y]: [number, number]): [number, number];
}
interface PointCtorProps {
x?: number;
y?: number;
[k: string]: unknown;
}
declare const Point_base: Record$1.Factory<PointCtorProps>;
declare class Point extends Point_base {
x: number;
y: number;
static defaultValues: IObject;
constructor(options?: PointCtorProps);
scale(sx: number, sy?: number): this;
translate({ x: tx, y: ty }: {
x: number;
y: number;
}): this;
translateX(tx: number): this;
translateY(ty: number): this;
distance(other: this): number;
rotate(deg: number): this;
apply(matrix: TransformationMatrix): this;
}
interface IDrawingPoint extends PointCtorProps {
intensity?: number;
}
declare class DrawingPoint extends Point {
intensity: number;
static defaultValues: IObject;
constructor(options?: IDrawingPoint);
}
interface ISize {
width: number;
height: number;
}
declare const Size_base: Record$1.Factory<ISize>;
declare class Size extends Size_base {
scale(factor: number): Size;
ceil(): Size;
floor(): Size;
swapDimensions(): Size;
apply(matrix: TransformationMatrix): Size;
}
interface IRect {
left?: number;
top?: number;
width?: number;
height?: number;
}
declare const Rect_base: Record$1.Factory<IRect>;
declare class Rect extends Rect_base {
left: number;
top: number;
width: number;
height: number;
static defaultValues: IObject;
constructor(options?: IRect);
get right(): number;
get bottom(): number;
static fromClientRect({ top, left, width, height }: ClientRect): Rect;
static union(rects: List<Rect>): Rect;
static getCenteredRect(inner: Size, outer: Size): Rect;
static fromInset(inset: Inset): Rect;
static fromPoints(...points: Point[]): Rect;
expandToIncludePoints(...points: Point[]): Rect;
static areRectsCloserThan(a: Rect, b: Rect, distance: number): boolean;
translate({ x: tx, y: ty }: Point): Rect;
translateX(tx: number): Rect;
translateY(ty: number): Rect;
scale(sx: number, sy?: number): Rect;
grow(growth: number): Rect;
getLocation(): Point;
getSize(): Size;
getCenter(): Point;
setLocation(location: Point): Rect;
roundOverlap(): Rect;
round(): Rect;
isPointInside(point: Point): boolean;
isRectInside(other: Rect): boolean;
isRectOverlapping(other: Rect): boolean;
normalize(): Rect;
apply(matrix: TransformationMatrix): Rect;
}
interface IInset {
left: number;
top: number;
right: number;
bottom: number;
}
declare const Inset_base: Record$1.Factory<IInset>;
declare class Inset extends Inset_base {
static applyToRect(inset: Inset, rect: Rect): Rect;
static fromRect(rect: Rect): Inset;
static fromValue(insetValue: number): Inset;
apply(matrix: TransformationMatrix): Inset;
setScale(scale: number): Inset;
}
type InsetJSON = [left: number, top: number, right: number, bottom: number];
type ActionCtorProps = {
subActions?: List<Action> | null;
};
declare abstract class Action extends InheritableImmutableRecord<ActionCtorProps> {
subActions?: List<Action> | null | undefined;
protected constructor(args?: ActionCtorProps);
}
type ActionTriggerEventType = 'onPointerEnter' | 'onPointerLeave' | 'onPointerDown' | 'onPointerUp' | 'onPageOpen' | 'onPageClose' | 'onPageVisible' | 'onPageHidden';
interface IGoToAction extends ActionCtorProps {
pageIndex?: number;
}
declare class GoToAction extends Action {
pageIndex: number;
static defaultValues: IObject;
constructor(args?: IGoToAction);
}
interface IGoToEmbeddedAction extends ActionCtorProps {
newWindow?: boolean;
relativePath?: string;
targetType?: 'parent' | 'child';
}
declare class GoToEmbeddedAction extends Action {
newWindow: boolean;
relativePath: string;
targetType: 'parent' | 'child';
static defaultValues: IObject;
constructor(args?: IGoToEmbeddedAction);
}
interface IGoToRemoteAction extends ActionCtorProps {
relativePath?: string;
namedDestination?: string;
}
declare class GoToRemoteAction extends Action {
relativePath: string;
namedDestination: string;
static defaultValues: IObject;
constructor(args?: IGoToRemoteAction);
}
type AnnotationReference = {
fieldName: string;
} | {
pdfObjectId: number;
};
interface IHideAction extends ActionCtorProps {
hide?: boolean;
annotationReferences?: List<AnnotationReference>;
}
declare class HideAction extends Action {
hide: boolean;
annotationReferences: List<AnnotationReference>;
static defaultValues: IObject;
constructor(args?: IHideAction);
}
interface IJavaScriptAction extends ActionCtorProps {
script?: string;
}
declare class JavaScriptAction extends Action {
script: string;
static defaultValues: IObject;
constructor(args?: IJavaScriptAction);
}
interface ILaunchAction extends ActionCtorProps {
filePath?: string;
}
declare class LaunchAction extends Action {
filePath: string;
static defaultValues: IObject;
constructor(args?: ILaunchAction);
}
interface INamedAction extends ActionCtorProps {
action?: string;
}
declare class NamedAction extends Action {
action: string;
static defaultValues: IObject;
constructor(args?: INamedAction);
}
interface IResetFormAction extends ActionCtorProps {
fields?: List<string> | null | undefined;
includeExclude?: boolean;
}
declare class ResetFormAction extends Action {
fields: List<string> | null | undefined;
includeExclude: boolean;
static defaultValues: IObject;
constructor(args?: IResetFormAction);
}
interface ISubmitFormAction extends ActionCtorProps {
uri?: string;
fields?: List<string>;
includeExclude?: boolean;
includeNoValueFields?: boolean;
exportFormat?: boolean;
getMethod?: boolean;
submitCoordinated?: boolean;
xfdf?: boolean;
includeAppendSaves?: boolean;
includeAnnotations?: boolean;
submitPDF?: boolean;
canonicalFormat?: boolean;
excludeNonUserAnnotations?: boolean;
excludeFKey?: boolean;
embedForm?: boolean;
}
declare class SubmitFormAction extends Action {
uri: string;
fields: List<string> | null | undefined;
includeExclude: boolean;
includeNoValueFields: boolean;
exportFormat: boolean;
getMethod: boolean;
submitCoordinated: boolean;
xfdf: boolean;
includeAppendSaves: boolean;
includeAnnotations: boolean;
submitPDF: boolean;
canonicalFormat: boolean;
excludeNonUserAnnotations: boolean;
excludeFKey: boolean;
embedForm: boolean;
static defaultValues: IObject;
constructor(args?: ISubmitFormAction);
}
interface IURIAction extends ActionCtorProps {
uri?: string;
}
declare class URIAction extends Action {
uri: string;
static defaultValues: IObject;
constructor(args?: IURIAction);
}
declare const Color_base: Record$1.Factory<{
r: number;
g: number;
b: number;
transparent: boolean;
}>;
declare class Color extends Color_base {
static BLACK: Color;
static GREY: Color;
static WHITE: Color;
static DARK_BLUE: Color;
static RED: Color;
static PURPLE: Color;
static PINK: Color;
static GREEN: Color;
static ORANGE: Color;
static YELLOW: Color;
static LIGHT_BLUE: Color;
static LIGHT_RED: Color;
static LIGHT_GREEN: Color;
static LIGHT_YELLOW: Color;
static BLUE: Color;
static LIGHT_ORANGE: Color;
static LIGHT_GREY: Color;
static DARK_GREY: Color;
static MAUVE: Color;
static TRANSPARENT: Color;
static fromHex: (hexColor: string) => Color;
constructor(args: {
r?: number;
g?: number;
b?: number;
transparent?: boolean;
});
lighter(percent: number): Color;
darker(percent: number): Color;
equals(color: Color | {
r: number;
g: number;
b: number;
transparent: boolean;
}): boolean;
saturate(percent: number): Color;
sRGBToRGBComponent(RGBComponent: number): number;
relativeLuminance(): number;
contrastRatio(color: Color): number;
toCSSValue(): string;
toHex(): string;
}
declare const BlendMode: {
readonly normal: "normal";
readonly multiply: "multiply";
readonly screen: "screen";
readonly overlay: "overlay";
readonly darken: "darken";
readonly lighten: "lighten";
readonly colorDodge: "colorDodge";
readonly colorBurn: "colorBurn";
readonly hardLight: "hardLight";
readonly softLight: "softLight";
readonly difference: "difference";
readonly exclusion: "exclusion";
};
type IBlendMode = (typeof BlendMode)[keyof typeof BlendMode];
interface ITextMarkupAnnotation extends AnnotationProperties {
rects: List<Rect>;
color: Color;
blendMode: IBlendMode;
}
declare class TextMarkupAnnotation<T extends ITextMarkupAnnotation = ITextMarkupAnnotation> extends Annotation<T> {
rects: List<Rect>;
color: Color;
blendMode: IBlendMode;
static defaultValues: IObject;
static readableName: string;
}
interface IHighlightAnnotation extends ITextMarkupAnnotation {
color: Color;
blendMode: IBlendMode | 'multiply';
}
declare class HighlightAnnotation<T extends IHighlightAnnotation = IHighlightAnnotation> extends TextMarkupAnnotation<T> {
blendMode: IBlendMode;
static className: string;
static readableName: string;
static defaultValues: IObject;
}
interface IImageAnnotation extends AnnotationProperties {
description: string | null;
fileName: string | null;
contentType: string | null;
imageAttachmentId: string | null;
isSignature: boolean;
xfdfAppearanceStream: string | null;
}
declare class ImageAnnotation<T extends IImageAnnotation = IImageAnnotation> extends Annotation<T> {
description: null | string;
fileName: null | string;
contentType: string;
imageAttachmentId: string;
isSignature: boolean;
xfdfAppearanceStream: null | string;
static defaultValues: IObject;
static readableName: string;
}
interface IInkAnnotation extends AnnotationProperties {
lines: List<List<DrawingPoint>>;
lineWidth: number | null;
strokeColor: Color | null;
backgroundColor: Color | null;
isDrawnNaturally: boolean;
isSignature: boolean;
}
declare class InkAnnotation<T extends IInkAnnotation = IInkAnnotation> extends Annotation<T> {
lines: List<List<DrawingPoint>>;
lineWidth: number;
strokeColor: Color | null;
backgroundColor: Color | null;
isDrawnNaturally: boolean;
isSignature: boolean;
static defaultValues: IObject;
static readableName: string;
}
declare const MeasurementPrecision: {
readonly WHOLE: "whole";
readonly ONE: "oneDp";
readonly TWO: "twoDp";
readonly THREE: "threeDp";
readonly FOUR: "fourDp";
readonly HALVES: "1/2";
readonly QUARTERS: "1/4";
readonly EIGHTHS: "1/8";
readonly SIXTEENTHS: "1/16";
};
type IMeasurementPrecision = (typeof MeasurementPrecision)[keyof typeof MeasurementPrecision];
declare const MeasurementScaleUnitFrom: {
readonly INCHES: "in";
readonly MILLIMETERS: "mm";
readonly CENTIMETERS: "cm";
readonly POINTS: "pt";
};
type IMeasurementScaleUnitFrom = (typeof MeasurementScaleUnitFrom)[keyof typeof MeasurementScaleUnitFrom];
declare const MeasurementScaleUnitTo: {
readonly INCHES: "in";
readonly MILLIMETERS: "mm";
readonly CENTIMETERS: "cm";
readonly POINTS: "pt";
readonly FEET: "ft";
readonly METERS: "m";
readonly YARDS: "yd";
readonly KILOMETERS: "km";
readonly MILES: "mi";
};
type IMeasurementScaleUnitTo = (typeof MeasurementScaleUnitTo)[keyof typeof MeasurementScaleUnitTo];
interface IMeasurementScale {
unitFrom: IMeasurementScaleUnitFrom;
unitTo: IMeasurementScaleUnitTo;
fromValue: number;
toValue: number;
}
declare const MeasurementScale_base: Record$1.Factory<IMeasurementScale>;
declare class MeasurementScale extends MeasurementScale_base {
}
interface IShapeAnnotation extends AnnotationProperties {
strokeDashArray: [number, number] | null;
strokeWidth: number | null;
strokeColor: Color | null;
fillColor: Color | null;
measurementScale: MeasurementScale | null;
measurementPrecision: IMeasurementPrecision | null;
}
declare abstract class ShapeAnnotation<T extends IShapeAnnotation = IShapeAnnotation> extends Annotation<T> {
strokeDashArray: null | [number, number];
strokeWidth: number;
strokeColor: null | Color;
fillColor: null | Color;
measurementPrecision: null | IMeasurementPrecision;
measurementScale: null | MeasurementScale;
static readableName: string;
static defaultValues: IObject;
isMeasurement(): boolean;
getMeasurementDetails: () => {
value: number;
label: string;
};
}
declare const LineCap: {
readonly square: "square";
readonly circle: "circle";
readonly diamond: "diamond";
readonly openArrow: "openArrow";
readonly closedArrow: "closedArrow";
readonly butt: "butt";
readonly reverseOpenArrow: "reverseOpenArrow";
readonly reverseClosedArrow: "reverseClosedArrow";
readonly slash: "slash";
};
type ILineCap = (typeof LineCap)[keyof typeof LineCap];
type LineCapsType = {
start?: ILineCap | null;
end?: ILineCap | null;
};
interface ILineAnnotation extends IShapeAnnotation {
startPoint: Point | null;
endPoint: Point | null;
lineCaps: LineCapsType | null;
points: List<Point> | null;
}
declare class LineAnnotation<T extends ILineAnnotation = ILineAnnotation> extends ShapeAnnotation<T> {
startPoint: Point;
endPoint: Point;
lineCaps: LineCapsType | null;
points: List<Point> | null;
static defaultValues: IObject;
static readableName: string;
}
interface IRectangleAnnotation extends IShapeAnnotation {
cloudyBorderIntensity?: number | null;
cloudyBorderInset?: Inset | null;
}
declare class RectangleAnnotation<T extends IRectangleAnnotation = IRectangleAnnotation> extends ShapeAnnotation<T> {
cloudyBorderIntensity: null | number;
cloudyBorderInset: null | Inset;
measurementBBox: null | Rect;
static defaultValues: IObject;
static readableName: string;
constructor(options?: Partial<T>);
}
interface IEllipseAnnotation extends IShapeAnnotation {
cloudyBorderIntensity?: number | null;
cloudyBorderInset?: Inset | null;
}
declare class EllipseAnnotation<T extends IEllipseAnnotation = IEllipseAnnotation> extends ShapeAnnotation<T> {
cloudyBorderIntensity: null | number;
cloudyBorderInset: null | Inset;
measurementBBox: null | Rect;
static defaultValues: IObject;
static readableName: string;
constructor(options?: Partial<T>);
}
interface IPolygonAnnotation extends IShapeAnnotation {
points: List<Point> | null;
cloudyBorderIntensity: number | null;
}
declare class PolygonAnnotation<T extends IPolygonAnnotation = IPolygonAnnotation> extends ShapeAnnotation<T> {
points: List<Point>;
cloudyBorderIntensity: null | number;
static defaultValues: IObject;
static readableName: string;
}
interface IPolyLineAnnotation extends IShapeAnnotation {
points: List<Point> | null;
lineCaps: LineCapsType | null;
}
declare class PolylineAnnotation<T extends IPolyLineAnnotation = IPolyLineAnnotation> extends ShapeAnnotation<T> {
points: List<Point>;
lineCaps: null | LineCapsType;
static defaultValues: IObject;
static readableName: string;
}
declare const BorderStyle: {
readonly solid: "solid";
readonly dashed: "dashed";
readonly beveled: "beveled";
readonly inset: "inset";
readonly underline: "underline";
};
type IBorderStyle = (typeof BorderStyle)[keyof typeof BorderStyle];
interface ILinkAnnotation extends AnnotationProperties {
action: Action | null;
borderColor: Color | null;
borderStyle: IBorderStyle | null;
borderWidth: number | null;
}
declare class LinkAnnotation<T extends ILinkAnnotation = ILinkAnnotation> extends Annotation<T> {
action: Action;
borderColor: null | Color;
borderStyle: null | IBorderStyle;
borderWidth: null | number;
static readableName: string;
static defaultValues: IObject;
}
declare const NoteIcon: {
readonly COMMENT: "COMMENT";
readonly RIGHT_POINTER: "RIGHT_POINTER";
readonly RIGHT_ARROW: "RIGHT_ARROW";
readonly CHECK: "CHECK";
readonly CIRCLE: "CIRCLE";
readonly CROSS: "CROSS";
readonly INSERT: "INSERT";
readonly NEW_PARAGRAPH: "NEW_PARAGRAPH";
readonly NOTE: "NOTE";
readonly PARAGRAPH: "PARAGRAPH";
readonly HELP: "HELP";
readonly STAR: "STAR";
readonly KEY: "KEY";
};
type INoteIcon = (typeof NoteIcon)[keyof typeof NoteIcon];
interface INoteAnnotation extends AnnotationProperties {
text: {
format: 'plain';
value: string;
};
icon: string | INoteIcon;
color: Color;
}
declare class NoteAnnotation<T extends INoteAnnotation = INoteAnnotation> extends Annotation<T> {
text: {
format: 'plain';
value: string;
};
icon: INoteIcon;
color: Color;
static isEditable: boolean;
static readableName: string;
static defaultValues: IObject;
}
interface ISquiggleAnnotation extends ITextMarkupAnnotation {
color: Color;
}
declare class SquiggleAnnotation<T extends ISquiggleAnnotation = ISquiggleAnnotation> extends TextMarkupAnnotation<T> {
static className: string;
static readableName: string;
static defaultValues: IObject;
}
interface IStrikeOutAnnotation extends ITextMarkupAnnotation {
color: Color;
}
declare class StrikeOutAnnotation<T extends IStrikeOutAnnotation = IStrikeOutAnnotation> extends TextMarkupAnnotation<T> {
static className: string;
static readableName: string;
static defaultValues: IObject;
}
type ICallout = {
start: Point | null;
knee: Point | null;
end: Point | null;
cap: ILineCap | null;
innerRectInset: Inset | null;
};
declare class Callout extends InheritableImmutableRecord<ICallout> {
start: Point | null;
knee: Point | null;
end: Point | null;
cap: ILineCap | null;
innerRectInset: Inset | null;
static defaultValues: {
start: null;
knee: null;
end: null;
cap: null;
innerRectInset: null;
};
}
interface ITextAnnotation extends AnnotationProperties {
text: {
format: 'plain' | 'xhtml';
value: string | null;
};
fontColor: Color | null;
backgroundColor: Color | null;
font: string;
fontSize: number | null;
isBold: boolean | null;
isItalic: boolean | null;
horizontalAlign: 'left' | 'center' | 'right';
verticalAlign: 'top' | 'center' | 'bottom';
callout: Callout | null;
borderStyle: IBorderStyle | null;
borderWidth: number | null;
borderColor: Color | null;
isFitting: boolean;
lineHeightFactor: number | null;
}
declare class TextAnnotation<T extends ITextAnnotation = ITextAnnotation> extends Annotation<T> {
text: {
format: 'plain' | 'xhtml';
value: string;
};
fontColor: null | Color;
backgroundColor: null | Color;
font: string;
fontSize: number;
isBold: boolean;
isItalic: boolean;
horizontalAlign: 'left' | 'center' | 'right';
verticalAlign: 'top' | 'center' | 'bottom';
isFitting: boolean;
callout: null | Callout;
borderStyle: null | IBorderStyle;
borderWidth: null | number;
borderColor: Color | null;
lineHeightFactor: null | number;
static defaultValues: IObject;
static readonly isEditable = true;
static readonly readableName = "Text";
static readonly fontSizePresets: readonly number[];
}
interface IUnderlineAnnotation extends ITextMarkupAnnotation {
color: Color;
}
declare class UnderlineAnnotation<T extends IUnderlineAnnotation = IUnderlineAnnotation> extends TextMarkupAnnotation<T> {
static className: string;
static readableName: string;
static defaultValues: IObject;
}
declare class UnknownAnnotation extends Annotation {
}
type FontSize = 'auto' | number;
type WidgetActionTriggerEventType = ActionTriggerEventType | 'onFocus' | 'onBlur';
type WidgetAnnotationAdditionalActionsType = {
onFocus?: JavaScriptAction;
onBlur?: JavaScriptAction;
onChange?: JavaScriptAction;
onFormat?: JavaScriptAction;
onInput?: JavaScriptAction;
onPointerDown?: Action;
onPointerUp?: Action;
onPointerEnter?: Action;
onPointerLeave?: Action;
};
interface IWidgetAnnotation extends AnnotationProperties {
formFieldName: string | null;
borderColor: Color | null;
borderStyle: IBorderStyle | null;
borderDashArray: number[] | null;
borderWidth: number | null;
backgroundColor: Color | null;
fontSize: FontSize | null;
font: string | null;
fontColor: Color | null;
isBold: boolean | null;
isItalic: boolean | null;
horizontalAlign: 'left' | 'center' | 'right' | null;
verticalAlign: 'top' | 'center' | 'bottom' | null;
additionalActions: WidgetAnnotationAdditionalActionsType | null;
rotation: number;
lineHeightFactor: number | null;
}
declare class WidgetAnnotation<T extends IWidgetAnnotation = IWidgetAnnotation> extends Annotation<T> {
formFieldName: string;
borderColor: null | Color;
borderStyle: null | IBorderStyle;
borderDashArray: null | number[];
borderWidth: null | number;
backgroundColor: null | Color;
fontSize: null | FontSize;
font: null | string;
fontColor: null | Color;
isBold: boolean;
isItalic: boolean;
horizontalAlign: 'left' | 'center' | 'right' | null;
verticalAlign: 'top' | 'center' | 'bottom' | null;
additionalActions: null | WidgetAnnotationAdditionalActionsType;
rotation: number;
lineHeightFactor: null | number;
action: null | Action;
static defaultValues: IObject;
static readableName: string;
}
declare class CommentMarkerAnnotation extends Annotation {
static readableName: string;
}
interface IRedactionAnnotation extends ITextMarkupAnnotation {
color: Color;
fillColor: null | Color;
overlayText: null | string;
repeatOverlayText: null | boolean;
outlineColor: null | Color;
}
declare class RedactionAnnotation<T extends IRedactionAnnotation = IRedactionAnnotation> extends TextMarkupAnnotation<T> {
fillColor: null | Color;
overlayText: null | string;
repeatOverlayText: null | boolean;
outlineColor: null | Color;
color: Color;
static readableName: string;
static defaultValues: IObject;
}
interface IMediaAnnotation extends AnnotationProperties {
description: null | string;
fileName: null | string;
contentType: string | null;
mediaAttachmentId: string | null;
}
declare class MediaAnnotation<T extends IMediaAnnotation = IMediaAnnotation> extends Annotation<T> {
description: null | string;
fileName: null | string;
contentType: string | null;
mediaAttachmentId: string | null;
static defaultValues: IObject;
static readableName: string;
}
type SignatureInfo = {
type: 'pspdfkit/signature-info';
signatureType: SignatureTypeType | null | undefined;
signerName: string | null | undefined;
creationDate: Date | null | undefined;
signatureReason: string | null | undefined;
signatureLocation: string | null | undefined;
documentIntegrityStatus: DocumentIntegrityStatusType;
certificateChainValidationStatus: CertificateChainValidationStatusType;
signatureValidationStatus: SignatureValidationStatusType;
isTrusted: boolean;
isSelfSigned: boolean;
isExpired: boolean;
documentModifiedSinceSignature: boolean;
signatureFormFQN: string;
};
declare const DocumentIntegrityStatus: {
readonly ok: "ok";
readonly tampered_document: "tampered_document";
readonly failed_to_retrieve_signature_contents: "failed_to_retrieve_signature_contents";
readonly failed_to_retrieve_byterange: "failed_to_retrieve_byterange";
readonly failed_to_compute_digest: "failed_to_compute_digest";
readonly failed_retrieve_signing_certificate: "failed_retrieve_signing_certificate";
readonly failed_retrieve_public_key: "failed_retrieve_public_key";
readonly failed_encryption_padding: "failed_encryption_padding";
readonly general_failure: "general_failure";
};
type DocumentIntegrityStatusType = (typeof DocumentIntegrityStatus)[keyof typeof DocumentIntegrityStatus];
declare const CertificateChainValidationStatus: {
readonly ok: "ok";
readonly ok_but_self_signed: "ok_but_self_signed";
readonly untrusted: "untrusted";
readonly expired: "expired";
readonly not_yet_valid: "not_yet_valid";
readonly invalid: "invalid";
readonly revoked: "revoked";
readonly failed_to_retrieve_signature_contents: "failed_to_retrieve_signature_contents";
readonly general_validation_problem: "general_validation_problem";
};
type CertificateChainValidationStatusType = (typeof CertificateChainValidationStatus)[keyof typeof CertificateChainValidationStatus];
declare const SignatureValidationStatus: {
readonly valid: "valid";
readonly warning: "warning";
readonly error: "error";
};
type SignatureValidationStatusType = (typeof SignatureValidationStatus)[keyof typeof SignatureValidationStatus];
declare const SignatureType: {
CMS: string;
CAdES: string;
};
type SignatureTypeType = (typeof SignatureType)[keyof typeof SignatureType];
type SignaturesInfo = {
status: DocumentValidationStatusType;
checkedAt: Date;
signatures?: Array<SignatureInfo>;
documentModifiedSinceSignature?: boolean;
};
declare const DocumentValidationStatus: {
valid: string;
warning: string;
error: string;
not_signed: string;
};
type DocumentValidationStatusType = keyof typeof DocumentValidationStatus;
type MeasurementValueConfiguration = {
name?: string;
scale: IMeasurementScale;
precision: IMeasurementPrecision;
selected?: boolean;
};
type MeasurementValueConfigurationCallback = (configuration: MeasurementValueConfiguration[]) => MeasurementValueConfiguration[];
type IAnnotationJSON = Omit<BaseAnnotationJSON, 'id' | 'group' | 'permissions'>;
declare class AnnotationSerializer {
static VERSION: number;
annotation: AnnotationsUnion;
constructor(annotation: AnnotationsUnion);
toJSON(): Omit<BaseAnnotationJSON, 'type'>;
static fromJSON(id: ID | null, json: IAnnotationJSON, options?: ICollaboratorPermissionsOptions): {
group?: string | null | undefined;
canSetGroup?: boolean | undefined;
isEditable?: boolean | undefined;
isDeletable?: boolean | undefined;
blendMode?: IBlendMode | undefined;
id: string | null;
name: string | null;
subject: string | null;
pdfObjectId: number | null;
pageIndex: number;
opacity: number;
boundingBox: Rect;
noPrint: boolean;
noZoom: boolean;
noRotate: boolean;
noView: boolean;
hidden: boolean;
locked: boolean;
lockedContents: boolean;
readOnly: boolean;
action: Action | null | undefined;
note: string | null;
createdAt: Date;
updatedAt: Date;
creatorName: string | null;
customData: Record<string, unknown> | null;
isCommentThreadRoot: boolean;
};
static blendModeObjectForAnnotation(json: IAnnotationJSON): {
blendMode: IBlendMode;
} | null;
serializeFlags(): ("noView" | "noPrint" | "locked" | "lockedContents" | "readOnly" | "hidden" | "noZoom" | "noRotate")[] | null;
}
declare class InkAnnotationSerializer extends AnnotationSerializer {
annotation: InkAnnotation;
constructor(annotation: InkAnnotation);
toJSON(): InkAnnotationJSON;
static fromJSON(id: ID | null, json: Omit<InkAnnotationJSON, 'id' | 'group' | 'permissions'>, options?: ICollaboratorPermissionsOptions): InkAnnotation;
_linesToJSON(): {
points: [number, number][][];
intensities: number[][];
};
static _JSONToLines(linesJSON: {
points: Array<Array<[number, number]>>;
intensities: Array<Array<number>>;
}): List<List<DrawingPoint>>;
}
declare abstract class ShapeAnnotationSerializer extends AnnotationSerializer {
annotation: ShapeAnnotationsUnion;
toJSON(): ShapeAnnotationJSON;
static fromJSON(id: ID | null, json: Omit<ShapeAnnotationJSON, 'id' | 'group' | 'permissions'>, options?: ICollaboratorPermissionsOptions): {
strokeWidth: number | null;
strokeColor: Color | null;
fillColor: Color | null;
strokeDashArray: [number, number] | null | undefined;
measurementPrecision: IMeasurementPrecision | null | undefined;
measurementScale: MeasurementScale | null;
group?: string | null | undefined;
canSetGroup?: boolean | undefined;
isEditable?: boolean | undefined;
isDeletable?: boolean | undefined;
blendMode?: IBlendMode | undefined;
id: string | null;
name: string | null;
subject: string | null;
pdfObjectId: number | null;
pageIndex: number;
opacity: number;
boundingBox: Rect;
noPrint: boolean;
noZoom: boolean;
noRotate: boolean;
noView: boolean;
hidden: boolean;
locked: boolean;
lockedContents: boolean;
readOnly: boolean;
action: Action | null | undefined;
note: string | null;
createdAt: Date;
updatedAt: Date;
creatorName: string | null;
customData: Record<string, unknown> | null;
isCommentThreadRoot: boolean;
};
_pointsToJSON(): Array<[number, number]>;
static _JSONToPoints(pointsJSON: Array<[number, number]>): List<Point>;
static _JSONLinesToPoints(linesJSON: {
points: Array<Array<[number, number]>>;
intensities: Array<Array<number>>;
}): List<Point>;
}
type MeasurementScaleJSON = {
unitFrom: IMeasurementScaleUnitFrom;
unitTo: IMeasurementScaleUnitTo;
from: number;
to: number;
};
declare class LineAnnotationSerializer extends ShapeAnnotationSerializer {
annotation: LineAnnotation;
toJSON(): LineAnnotationJSON;
static fromJSON(id: ID | null, json: Omit<LineAnnotationJSON, 'id' | 'group' | 'permissions'>, options?: ICollaboratorPermissionsOptions): LineAnnotation;
}
declare class RectangleAnnotationSerializer extends ShapeAnnotationSerializer {
annotation: RectangleAnnotation;
toJSON(): RectangleAnnotationJSON;
static fromJSON(id: ID | null, json: Omit<RectangleAnnotationJSON, 'id' | 'group' | 'permissions'>, options?: ICollaboratorPermissionsOptions): RectangleAnnotation;
}
declare class EllipseAnnotationSerializer extends ShapeAnnotationSerializer {
annotation: EllipseAnnotation;
toJSON(): EllipseAnnotationJSON;
static fromJSON(id: ID | null, json: Omit<EllipseAnnotationJSON, 'id' | 'group' | 'permissions'>, options?: ICollaboratorPermissionsOptions): EllipseAnnotation;
}
declare class PolygonAnnotationSerializer extends ShapeAnnotationSerializer {
annotation: PolygonAnnotation;
toJSON(): PolygonAnnotationJSON;
static fromJSON(id: ID | null, json: Omit<PolygonAnnotationJSON, 'id' | 'group' | 'permissions'>, options?: IObject): PolygonAnnotation;
}
declare class PolylineAnnotationSerializer extends ShapeAnnotationSerializer {
annotation: PolylineAnnotation;
toJSON(): PolylineAnnotationJSON;
static fromJSON(id: ID | null, json: Omit<PolylineAnnotationJSON, 'id' | 'group' | 'permissions'>, options?: ICollaboratorPermissionsOptions): PolylineAnnotation;
}
declare class LinkAnnotationSerializer extends AnnotationSerializer {
annotation: LinkAnnotation;
constructor(annotation: LinkAnnotation);
toJSON(): LinkAnnotationJSON;
static fromJSON(id: ID | null, json: Omit<LinkAnnotationJSON, 'id' | 'group' | 'permissions'>, options?: ICollaboratorPermissionsOptions): LinkAnnotation;
}
declare abstract class BaseTextMarkupSerializer extends AnnotationSerializer {
annotation: RedactionAnnotation | TextMarkupAnnotation;
constructor(annotation: RedactionAnnotation | TextMarkupAnnotation);
toJSON(): BaseTextMarkupAnnotationJSON;
static fromJSON(id: ID | null, json: Omit<BaseTextMarkupAnnotationJSON, 'id' | 'group' | 'permissions'>, options?: ICollaboratorPermissionsOptions): {
rects: List<Rect>;
group?: string | null | undefined;
canSetGroup?: boolean | undefined;
isEditable?: boolean | undefined;
isDeletable?: boolean | undefined;
blendMode?: IBlendMode | undefined;
id: string | null;
name: string | null;
subject: string | null;
pdfObjectId: number | null;
pageIndex: number;
opacity: number;
boundingBox: Rect;
noPrint: boolean;
noZoom: boolean;
noRotate: boolean;
noView: boolean;
hidden: boolean;
locked: boolean;
lockedContents: boolean;
readOnly: boolean;
action: Action | null | undefined;
note: string | null;
createdAt: Date;
updatedAt: Date;
creatorName: string | null;
customData: Record<string, unknown> | null;
isCommentThreadRoot: boolean;
};
}
declare class TextMarkupAnnotationSerializer extends BaseTextMarkupSerializer {
annotation: TextMarkupAnnotationsUnion;
constructor(annotation: TextMarkupAnnotationsUnion);
toJSON(): TextMarkupAnnotationJSON;
static fromJSON(id: ID | null, json: Omit<TextMarkupAnnotationJSON, 'id' | 'group' | 'permissions'>, options?: ICollaboratorPermissionsOptions): TextMarkupAnnotationsUnion;
typeForAnnotation(): "pspdfkit/markup/highlight" | "pspdfkit/markup/squiggly" | "pspdfkit/markup/strikeout" | "pspdfkit/markup/underline" | "pspdfkit/markup/redaction";
}
declare class RedactionAnnotationSerializer extends BaseTextMarkupSerializer {
annotation: RedactionAnnotation;
constructor(annotation: RedactionAnnotation);
toJSON(): RedactionAnnotationJSON;
static fromJSON(id: ID | null, json: Omit<RedactionAnnotationJSON, 'id' | 'group' | 'permissions'>, options?: ICollaboratorPermissionsOptions): RedactionAnnotation;
}
declare class TextAnnotationSerializer extends AnnotationSerializer {
annotation: TextAnnotation;
constructor(annotation: TextAnnotation);
toJSON(): TextAnnotationJSON;
static fromJSON(id: ID | null, json: Omit<TextAnnotationJSON, 'id' | 'group' | 'permissions'>, options?: ICollaboratorPermissionsOptions): TextAnnotation;
_calloutToJSON(): {
start: [number, number];
knee: [number, number] | null;
end: [number, number];
cap: ILineCap | null;
innerRectInset: InsetJSON | null;
} | null;
static _JSONToCallout(calloutJSON: TextAnnotationJSON['callout']): Callout | null | undefined;
}
declare class NoteAnnotationSerializer extends AnnotationSerializer {
annotation: NoteAnnotation;
constructor(annotation: NoteAnnotation);
toJSON(): NoteAnnotationJSON;
static fromJSON(id: ID | null, json: Omit<NoteAnnotationJSON, 'id' | 'group' | 'permissions'>, options?: ICollaboratorPermissionsOptions): NoteAnnotation;
}
declare class ImageAnnotationSerializer extends AnnotationSerializer {
annotation: ImageAnnotation;
constructor(annotation: ImageAnnotation);
toJSON(): ImageAnnotationJSON;
static fromJSON(id: ID | null, json: Omit<ImageAnnotationJSON, 'id' | 'group' | 'permissions'>, options?: ICollaboratorPermissionsOptions): ImageAnnotation;
}
declare class StampAnnotationSerializer extends AnnotationSerializer {
annotation: StampAnnotation;
constructor(annotation: StampAnnotation);
toJSON(): StampAnnotationJSON;
static fromJSON(id: ID | null, json: Omit<StampAnnotationJSON, 'id' | 'group' | 'permissions'>, options?: ICollaboratorPermissionsOptions): StampAnnotation;
}
declare class WidgetAnnotationSerializer extends AnnotationSerializer {
annotation: WidgetAnnotation;
constructor(annotation: WidgetAnnotation);
toJSON(): WidgetAnnotationJSON;
static fromJSON(id: ID | null, json: Omit<WidgetAnnotationJSON, 'id' | 'group' | 'permissions'>, options?: ICollaboratorPermissionsOptions): WidgetAnnotation;
}
type InstantID = string;
declare function generateInstantId(): InstantID;
declare class CommentMarkerAnnotationSerializer extends AnnotationSerializer {
annotation: CommentMarkerAnnotation;
constructor(annotation: CommentMarkerAnnotation);
toJSON(): CommentMarkerAnnotationJSON;
static fromJSON(id: InstantID | null, json: Omit<CommentMarkerAnnotationJSON, 'id' | 'group' | 'permissions'>, options?: ICollaboratorPermissionsOptions): CommentMarkerAnnotation;
}
declare class UnknownAnnotationSerializer extends AnnotationSerializer {
annotation: UnknownAnnotation;
constructor(annotation: UnknownAnnotation);
toJSON(): UnknownAnnotationJSON;
static fromJSON(id: ID | null, json: Omit<UnknownAnnotationJSON, 'id' | 'group' | 'permissions'>, options?: ICollaboratorPermissionsOptions): UnknownAnnotation;
}
declare class MediaAnnotationSerializer extends AnnotationSerializer {
annotation: MediaAnnotation;
constructor(annotation: MediaAnnotation);
toJSON(): MediaAnnotationJSON;
static fromJSON(id: ID | null, json: Omit<MediaAnnotationJSON, 'id' | 'group' | 'permissions'>, options?: ICollaboratorPermissionsOptions): MediaAnnotation;
}
type AnnotationSerializerTypeMap = {
'pspdfkit/ink': {
serializer: InkAnnotationSerializer;
annotation: InkAnnotation;
json: InkAnnotationJSON;
jsonForBackend: AnnotationBackendJSON<InkAnnotationJSON>;
};
'pspdfkit/shape/line': {
serializer: LineAnnotationSerializer;
annotation: LineAnnotation;
json: LineAnnotationJSON;
jsonForBackend: AnnotationBackendJSON<LineAnnotationJSON>;
};
'pspdfkit/shape/rectangle': {
serializer: RectangleAnnotationSerializer;
annotation: RectangleAnnotation;
json: RectangleAnnotationJSON;
jsonForBackend: AnnotationBackendJSON<RectangleAnnotationJSON>;
};
'pspdfkit/shape/ellipse': {
serializer: EllipseAnnotationSerializer;
annotation: EllipseAnnotation;
json: EllipseAnnotationJSON;
jsonForBackend: AnnotationBackendJSON<EllipseAnnotationJSON>;
};
'pspdfkit/shape/polygon': {
serializer: PolygonAnnotationSerializer;
annotation: PolygonAnnotation;
json: PolygonAnnotationJSON;
jsonForBackend: AnnotationBackendJSON<PolygonAnnotationJSON>;
};
'pspdfkit/shape/polyline': {
serializer: PolylineAnnotationSerializer;
annotation: PolylineAnnotation;
json: PolylineAnnotationJSON;
jsonForBackend: AnnotationBackendJSON<PolylineAnnotationJSON>;
};
'pspdfkit/link': {
serializer: LinkAnnotationSerializer;
annotation: LinkAnnotation;
json: LinkAnnotationJSON;
jsonForBackend: AnnotationBackendJSON<LinkAnnotationJSON>;
};
'pspdfkit/markup/highlight': {
serializer: TextMarkupAnnotationSerializer;
annotation: HighlightAnnotation;
json: TextMarkupAnnotationJSON;
jsonForBackend: AnnotationBackendJSON<TextMarkupAnnotationJSON>;
};
'pspdfkit/markup/squiggly': {
serializer: TextMarkupAnnotationSerializer;
annotation: SquiggleAnnotation;
json: TextMarkupAnnotationJSON;
jsonForBackend: AnnotationBackendJSON<TextMarkupAnnotationJSON>;
};
'pspdfkit/markup/strikeout': {
serializer: TextMarkupAnnotationSerializer;
annotation: StrikeOutAnnotation;
json: TextMarkupAnnotationJSON;
jsonForBackend: AnnotationBackendJSON<TextMarkupAnnotationJSON>;
};
'pspdfkit/markup/underline': {
serializer: TextMarkupAnnotationSerializer;
annotation: UnderlineAnnotation;
json: TextMarkupAnnotationJSON;
jsonForBackend: AnnotationBackendJSON<TextMarkupAnnotationJSON>;
};
'pspdfkit/markup/redaction': {
serializer: RedactionAnnotationSerializer;
annotation: RedactionAnnotation;
json: RedactionAnnotationJSON;
jsonForBackend: AnnotationBackendJSON<RedactionAnnotationJSON>;
};
'pspdfkit/text': {
serializer: TextAnnotationSerializer;
annotation: TextAnnotation;
json: TextAnnotationJSON;
jsonForBackend: AnnotationBackendJSON<TextAnnotationJSON>;
};
'pspdfkit/note': {
serializer: NoteAnnotationSerializer;
annotation: NoteAnnotation;
json: NoteAnnotationJSON;
jsonForBackend: AnnotationBackendJSON<NoteAnnotationJSON>;
};
'pspdfkit/image': {
serializer: ImageAnnotationSerializer;
annotation: ImageAnnotation;
json: ImageAnnotationJSON;
jsonForBackend: AnnotationBackendJSON<ImageAnnotationJSON>;
};
'pspdfkit/stamp': {
serializer: StampAnnotationSerializer;
annotation: StampAnnotation;
json: StampAnnotationJSON;
jsonForBackend: AnnotationBackendJSON<StampAnnotationJSON, 'color'>;
};
'pspdfkit/widget': {
serializer: WidgetAnnotationSerializer;
annotation: WidgetAnnotation;
json: WidgetAnnotationJSON;
jsonForBackend: AnnotationBackendJSON<WidgetAnnotationJSON>;
};
'pspdfkit/comment-marker': {
serializer: CommentMarkerAnnotationSerializer;
annotation: CommentMarkerAnnotation;
json: CommentMarkerAnnotationJSON;
jsonForBackend: AnnotationBackendJSON<CommentMarkerAnnotationJSON>;
};
'pspdfkit/unknown': {
serializer: UnknownAnnotationSerializer;
annotation: UnknownAnnotation;
json: UnknownAnnotationJSON;
jsonForBackend: AnnotationBackendJSON<UnknownAnnotationJSON>;
};
'pspdfkit/media': {
serializer: MediaAnnotationSerializer;
annotation: MediaAnnotation;
json: MediaAnnotationJSON;
jsonForBackend: AnnotationBackendJSON<MediaAnnotationJSON>;
};
};
type GetTypeFromAnnotationJSON<T extends {
type: keyof AnnotationSerializerTypeMap;
}> = T extends {
type: infer U;
} ? U : never;
type AnnotationJSONToAnnotation<T extends {
type: keyof AnnotationSerializerTypeMap;
}> = AnnotationSerializerTypeMap[GetTypeFromAnnotationJSON<T>]['annotation'];
type Intersection<T, U> = T extends U ? T : never;
type BackendRequiredKeys = 'id' | 'v' | 'pageIndex' | 'type' | 'bbox';
type AnnotationBackendJSON<K extends BaseAnnotationJSON = AnnotationJSONUnion, R extends string = never> = {
[P in keyof K]?: NonNullable<K[P]>;
} & {
[P in Intersection<keyof K, BackendRequiredKeys | R>]-?: Exclude<NonNullable<K[P]>, undefined>;
};
type AnnotationsUnion = {
[K in keyof AnnotationSerializerTypeMap]: AnnotationSerializerTypeMap[K]['annotation'];
}[keyof AnnotationSerializerTypeMap];
type AnnotationsUnionClass = {
[K in keyof AnnotationSerializerTypeMap]: Class<AnnotationSerializerTypeMap[K]['annotation']>;
}[keyof AnnotationSerializerTypeMap];
type ShapeAnnotationsUnion = PolylineAnnotation | PolygonAnnotation | LineAnnotation | RectangleAnnotation | EllipseAnnotation;
type AnnotationsBackendJSONUnion = {
[K in keyof AnnotationSerializerTypeMap]: AnnotationSerializerTypeMap[K]['jsonForBackend'];
}[keyof AnnotationSerializerTypeMap];
type TextMarkupAnnotationsUnion = HighlightAnnotation | UnderlineAnnotation | StrikeOutAnnotation | SquiggleAnnotation | RedactionAnnotation;
type CommentProps = {
id: InstantID | null;
rootId: InstantID | null;
pageIndex: null | number;
pdfObjectId: number | null;
creatorName: string | null;
createdAt: Date;
updatedAt: Date;
text: {
format: 'plain' | 'xhtml';
value: string | null;
};
customData: Record<string, unknown> | null;
group?: string | null;
isEditable?: boolean;
isDeletable?: boolean;
canSetGroup?: boolean;
isAnonymous?: boolean | null;
};
declare const Comment_base: Record$1.Factory<CommentProps>;
declare class Comment extends Comment_base {
getMentionedUserIds(): Set<string>;
}
type MentionableUser = {
id: string;
name: string;
avatarUrl?: string;
displayName: string;
description?: string;
};
type IGroup = string | null | undefined;
type IPermissions = {
edit: boolean;
delete: boolean;
setGroup: boolean;
fill?: boolean;
reply?: boolean;
};
type ICollaboratorPermissionsOptions = {
group?: IGroup;
permissions?: IPermissions;
};
type SerializedAdditionalActionsType = {
[key in ActionTriggerEventType | FormFieldEventTriggerType | FormFieldInputEventTriggerType | WidgetActionTriggerEventType]?: {
type: string;
[key: string]: unknown;
};
};
type IRectJSON = [left: number, top: number, width: number, height: number];
type BaseAnnotationJSON = {
v: number;
type?: 'pspdfkit/ink' | 'pspdfkit/shape/line' | 'pspdfkit/shape/rectangle' | 'pspdfkit/shape/ellipse' | 'pspdfkit/shape/polygon' | 'pspdfkit/shape/polyline' | 'pspdfkit/link' | 'pspdfkit/markup/highlight' | 'pspdfkit/markup/squiggly' | 'pspdfkit/markup/strikeout' | 'pspdfkit/markup/underline' | 'pspdfkit/markup/redaction' | 'pspdfkit/stamp' | 'pspdfkit/text' | 'pspdfkit/note' | 'pspdfkit/image' | 'pspdfkit/media' | 'pspdfkit/widget' | 'pspdfkit/comment-marker' | 'pspdfkit/unknown';
name?: string | null;
id: string;
subject?: string | null;
pdfObjectId?: number | null;
pageIndex: number;
bbox: IRectJSON;
opacity?: number;
flags?: ('noPrint' | 'noZoom' | 'noRotate' | 'noView' | 'hidden' | 'locked' | 'lockedContents' | 'readOnly')[] | null;
action?: ActionJSON | null;
note?: string | null;
createdAt?: string | Date;
updatedAt?: string | Date;
creatorName?: string | null;
customData?: Record<string, unknown> | null;
isCommentThreadRoot?: boolean;
APStreamCache?: {
cache: string;
} | {
attach: string;
};
blendMode?: IBlendMode | null;
} & ICollaboratorPermissionsOptions;
type ImageAnnotationJSON = Omit<BaseAnnotationJSON, 'type'> & {
type: 'pspdfkit/image';
description?: string | null;
fileName?: string | null;
contentType: string;
imageAttachmentId: string;
rotation: number;
isSignature?: boolean;
xfdfAppearanceStream?: string;
};
type ShapeAnnotationJSON = Omit<BaseAnnotationJSON, 'type'> & {
strokeWidth: number;
strokeColor: string | null;
fillColor: string | null;
strokeDashArray?: [number, number] | null;
measurementPrecision?: IMeasurementPrecision | null;
measurementScale?: MeasurementScaleJSON | null;
lineWidth?: number | null;
};
type EllipseAnnotationJSON = ShapeAnnotationJSON & {
type: 'pspdfkit/shape/ellipse';
cloudyBorderIntensity: number | null;
cloudyBorderInset: InsetJSON | null;
measurementBBox: IRectJSON | null;
};
type LineAnnotationJSON = ShapeAnnotationJSON & {
type: 'pspdfkit/shape/line';
startPoint: [number, number];
endPoint: [number, number];
lineCaps?: LineCapsType | null;
lines?: {
points: [number, number][][];
intensities: number[][];
};
};
type PolygonAnnotationJSON = ShapeAnnotationJSON & {
type: 'pspdfkit/shape/polygon';
points: [number, number][];
cloudyBorderIntensity: number | null;
lines?: {
points: [number, number][][];
intensities: number[][];
};
};
type PolylineAnnotationJSON = ShapeAnnotationJSON & {
type: 'pspdfkit/shape/polyline';
points: [number, number][];
lineCaps?: LineCapsType | null;
lines?: {
points: [number, number][][];
intensities: number[][];
};
};
type RectangleAnnotationJSON = ShapeAnnotationJSON & {
type: 'pspdfkit/shape/rectangle';
cloudyBorderIntensity: number | null;
cloudyBorderInset?: InsetJSON | null;
measurementBBox: IRectJSON | null;
};
type InkAnnotationJSON = BaseAnnotationJSON & {
type: 'pspdfkit/ink';
lines: {
points: [number, number][][];
intensities: number[][];
};
lineWidth: number;
strokeColor: string | null;
backgroundColor: string | null;
isDrawnNaturally: boolean;
isSignature: boolean;
};
type LinkAnnotationJSON = BaseAnnotationJSON & {
type: 'pspdfkit/link';
borderColor?: string | null;
borderWidth?: number | null;
borderStyle?: IBorderStyle | null;
};
type NoteAnnotationJSON = Omit<BaseAnnotationJSON, 'type'> & {
type: 'pspdfkit/note';
text?: {
format: 'plain';
value: string;
};
icon?: string;
color?: string;
};
type MediaAnnotationJSON = Omit<BaseAnnotationJSON, 'type'> & {
type: 'pspdfkit/media';
description: string | null;
fileName: string | null;
contentType: string | null;
mediaAttachmentId: string | null;
};
type BaseTextMarkupAnnotationJSON = Omit<BaseAnnotationJSON, 'type'> & {
rects: [number, number, number, number][];
};
type TextMarkupAnnotationJSON = BaseTextMarkupAnnotationJSON & {
type: 'pspdfkit/markup/highlight' | 'pspdfkit/markup/squiggly' | 'pspdfkit/markup/strikeout' | 'pspdfkit/markup/underline' | 'pspdfkit/markup/redaction';
color: string | null;
};
type RedactionAnnotationJSON = BaseTextMarkupAnnotationJSON & {
type: 'pspdfkit/markup/redaction';
fillColor?: string | null;
outlineColor?: string | null;
overlayText?: string | null;
repeatOverlayText?: boolean | null;
rotation?: number;
color?: string | null;
};
type StampAnnotationJSON = Omit<BaseAnnotationJSON, 'type'> & {
type: 'pspdfkit/stamp';
stampType: StampKind;
title: string | null;
color?: string | null;
subTitle?: string | null;
subtitle: string | null;
rotation: number | null;
xfdfAppearanceStream?: string;
kind?: StampKind;
};
type TextAnnotationJSON = Omit<BaseAnnotationJSON, 'type'> & {
type: 'pspdfkit/text';
text: {
format: 'xhtml' | 'plain';
value: string;
};
fontColor?: string | null;
backgroundColor?: string | null;
font?: string | null;
rotation?: number | null;
fontSize?: number | null;
fontStyle?: string[] | null;
horizontalAlign?: 'left' | 'center' | 'right';
verticalAlign?: 'top' | 'center' | 'bottom';
callout?: {
start: [number, number];
knee?: [number, number] | null;
end: [number, number];
cap?: ILineCap | null;
innerRectInset?: InsetJSON | null;
} | null;
borderStyle?: IBorderStyle | null;
borderWidth?: number | null;
borderColor?: string | null;
isFitting?: boolean;
lineHeightFactor?: number | null;
};
type UnknownAnnotationJSON = Omit<BaseAnnotationJSON, 'type'> & {
type: 'pspdfkit/unknown';
};
type WidgetAnnotationJSON = Omit<BaseAnnotationJSON, 'type'> & {
type: 'pspdfkit/widget';
formFieldName: string;
borderColor?: string | null;
borderStyle?: IBorderStyle | null;
borderDashArray?: number[] | null;
borderWidth?: number | null;
font?: string | null;
fontSize?: 'auto' | number | null;
fontColor?: string | null;
backgroundColor?: string | null;
horizontalAlign?: 'left' | 'center' | 'right' | null;
verticalAlign?: 'top' | 'center' | 'bottom' | null;
fontStyle?: string[] | null | undefined;
rotation?: number;
additionalActions?: SerializedAdditionalActionsType | null;
lineHeightFactor?: number | null;
};
type CommentMarkerAnnotationJSON = Omit<BaseAnnotationJSON, 'type'> & {
type: 'pspdfkit/comment-marker';
};
type AnnotationJSONUnion = TextMarkupAnnotationJSON | TextAnnotationJSON | WidgetAnnotationJSON | RedactionAnnotationJSON | StampAnnotationJSON | NoteAnnotationJSON | LinkAnnotationJSON | InkAnnotationJSON | RectangleAnnotationJSON | PolylineAnnotationJSON | PolygonAnnotationJSON | LineAnnotationJSON | EllipseAnnotationJSON | ImageAnnotationJSON | UnknownAnnotationJSON | MediaAnnotationJSON | CommentMarkerAnnotationJSON;
type BaseFormFieldJSON = {
v: 1;
pdfObjectId?: number | null;
annotationIds: Array<string>;
name: string;
label: string;
flags?: FormFieldFlags;
id: string;
additionalActions?: SerializedAdditionalActionsType;
group?: IGroup;
permissions?: IPermissions;
};
type ChoiceFormFieldJSON = BaseFormFieldJSON & {
type: 'pspdfkit/form-field/listbox' | 'pspdfkit/form-field/combobox';
options: Array<FormOptionJSON>;
multiSelect: boolean;
commitOnChange: boolean;
defaultValues: Array<string>;
};
type ListBoxFormFieldJSON = ChoiceFormFieldJSON & {
type: 'pspdfkit/form-field/listbox';
};
type DoNotSpellCheckPropertyPair = XOR<Record<'doNotSpellCheck', boolean>, Record<'doNotSpellcheck', boolean>>;
type ComboBoxFormFieldJSON = ChoiceFormFieldJSON & {
type: 'pspdfkit/form-field/combobox';
edit: boolean;
} & DoNotSpellCheckPropertyPair;
type CheckBoxFormFieldJSON = BaseFormFieldJSON & {
type: 'pspdfkit/form-field/checkbox';
options: Array<FormOptionJSON>;
defaultValues: Array<string>;
};
type RadioButtonFormFieldJSON = BaseFormFieldJSON & {
type: 'pspdfkit/form-field/radio';
options: Array<FormOptionJSON>;
noToggleToOff: boolean;
radiosInUnison: boolean;
defaultValue: string;
};
type TextFormFieldJSON = BaseFormFieldJSON & {
type: 'pspdfkit/form-field/text';
password: boolean;
maxLength?: number | null;
doNotScroll: boolean;
multiLine: boolean;
defaultValue: string;
comb: boolean;
} & DoNotSpellCheckPropertyPair;
type ButtonFormFieldJSON = BaseFormFieldJSON & {
type: 'pspdfkit/form-field/button';
buttonLabel: string | null;
};
type SignatureFormFieldJSON = BaseFormFieldJSON & {
type: 'pspdfkit/form-field/signature';
};
type FormFieldJSON = ListBoxFormFieldJSON | ComboBoxFormFieldJSON | RadioButtonFormFieldJSON | CheckBoxFormFieldJSON | TextFormFieldJSON | ButtonFormFieldJSON | SignatureFormFieldJSON;
type SerializedJSON = {
skippedPdfObjectIds?: number[];
annotations?: AnnotationJSONUnion[];
formFields?: FormFieldJSON[];
skippedPdfFormFieldIds?: number[];
formFieldValues?: Record<string, any>[];
attachments?: Record<string, {
binary: string;
contentType: string;
}>;
skippedPdfBookmarkIds?: string[];
bookmarks?: BookmarkJSON[];
};
type InstantJSON = SerializedJSON & {
format: 'https://pspdfkit.com/instant-json/v1';
pdfId?: {
permanent: string;
changing: string;
};
};
type Rotation$1 = 0 | 90 | 180 | 270;
type AddPageConfiguration = {
backgroundColor: Color;
pageWidth: number;
pageHeight: number;
rotateBy: Rotation$1;
insets?: Rect;
};
type OperationAttachment = string | File | Blob;
type min = number;
type max = number;
type Range = [min, max];
type ImportPageIndex = Array<number | Range>;
type DocumentMetadata = {
title?: string;
author?: string;
};
type NonSerializableDocumentOperations = {
type: 'removePages';
pageIndexes: Array<number>;
} | {
type: 'duplicatePages';
pageIndexes: Array<number>;
} | {
type: 'movePages';
pageIndexes: Array<number>;
afterPageIndex: number;
} | {
type: 'movePages';
pageIndexes: Array<number>;
beforePageIndex: number;
} | {
type: 'rotatePages';
pageIndexes: Array<number>;
rotateBy: Rotation$1;
} | {
type: 'keepPages';
pageIndexes: Array<number>;
} | {
type: 'importDocument';
afterPageIndex: number;
treatImportedDocumentAsOnePage?: boolean;
document: OperationAttachment;
importedPageIndexes?: ImportPageIndex;
} | {
type: 'importDocument';
beforePageIndex: number;
treatImportedDocumentAsOnePage?: boolean;
document: OperationAttachment;
importedPageIndexes?: ImportPageIndex;
} | {
type: 'applyInstantJson';
instantJson: Record<string, any>;
dataFilePath: OperationAttachment;
} | {
type: 'applyXfdf';
xfdf: string;
dataFilePath: OperationAttachment;
} | {
type: 'flattenAnnotations';
pageIndexes?: Array<number>;
annotationIds?: string[];
} | {
type: 'setPageLabel';
pageIndexes?: Array<number>;
pageLabel?: string;
} | {
type: 'performOcr';
pageIndexes?: Array<number> | 'all';
language: string;
} | {
type: 'applyRedactions';
} | {
type: 'updateMetadata';
metadata: DocumentMetadata;
};
type DocumentOperation = (AddPageConfiguration & {
type: 'addPage';
afterPageIndex: number;
}) | (AddPageConfiguration & {
type: 'addPage';
beforePageIndex: number;
}) | {
type: 'cropPages';
pageIndexes?: Array<number>;
cropBox: Rect;
} | NonSerializableDocumentOperations;
declare function toJSON(bookmark: Bookmark): BookmarkJSON;
type ID$1 = string;
type BookmarkProps = {
id: ID$1 | null;
pdfBookmarkId: ID$1 | null;
name: string | null;
sortKey: number | null;
action: Action | null;
};
declare const Bookmark_base: Record$1.Factory<BookmarkProps>;
declare class Bookmark extends Bookmark_base {
id: ID$1;
action: Action;
static toSerializableObject: typeof toJSON;
static fromSerializableObject: (bookmark: BookmarkJSON) => Bookmark;
}
declare const SearchPattern: {
readonly CREDIT_CARD_NUMBER: "credit_card_number";
readonly DATE: "date";
readonly TIME: "time";
readonly EMAIL_ADDRESS: "email_address";
readonly INTERNATIONAL_PHONE_NUMBER: "international_phone_number";
readonly IP_V4: "ipv4";
readonly IP_V6: "ipv6";
readonly MAC_ADDRESS: "mac_address";
readonly NORTH_AMERICAN_PHONE_NUMBER: "north_american_phone_number";
readonly SOCIAL_SECURITY_NUMBER: "social_security_number";
readonly URL: "url";
readonly US_ZIP_CODE: "us_zip_code";
readonly VIN: "vin";
};
type ISearchPattern = (typeof SearchPattern)[keyof typeof SearchPattern];
declare const SearchType: {
readonly TEXT: "text";
readonly PRESET: "preset";
readonly REGEX: "regex";
};
type ISearchType = (typeof SearchType)[keyof typeof SearchType];
declare const ProductId: {
SharePoint: string;
Salesforce: string;
Maui_Android: string;
Maui_iOS: string;
Maui_MacCatalyst: string;
Maui_Windows: string;
};
type IProductId = (typeof ProductId)[keyof typeof ProductId];
type SignatureMetadata = {
signerName?: string;
signatureReason?: string;
signatureLocation?: string;
};
declare const DocumentPermissionsProps: {
annotationsAndForms: boolean;
assemble: boolean;
extract: boolean;
extractAccessibility: boolean;
fillForms: boolean;
modification: boolean;
printHighQuality: boolean;
printing: boolean;
};
type IDocumentPermissions = keyof typeof DocumentPermissionsProps;
type SignaturePosition = {
pageIndex: number;
boundingBox: Rect;
};
declare const SignatureAppearanceMode: {
readonly signatureOnly: "signatureOnly";
readonly signatureAndDescription: "signatureAndDescription";
readonly descriptionOnly: "descriptionOnly";
};
type ISignatureAppearanceMode = (typeof SignatureAppearanceMode)[keyof typeof SignatureAppearanceMode];
type SignatureAppearance = {
mode?: ISignatureAppearanceMode;
showSigner?: boolean;
showSignDate?: boolean;
showReason?: boolean;
showLocation?: boolean;
showWatermark?: boolean;
watermarkImage?: Blob | File;
};
type Glyph = {
c: string;
rect: Rect;
};
declare const TextLineElementKind: {
P: string;
TH: string;
TD: string;
H1: string;
H2: string;
H3: string;
H4: string;
H5: string;
H6: string;
Figure: string;
Link: string;
};
type ITextLineElementKind = (typeof TextLineElementKind)[keyof typeof TextLineElementKind];
type ActionFlags = 'includeExclude' | 'includeNoValueFields' | 'exportFormat' | 'getMethod' | 'submitCoordinated' | 'xfdf' | 'includeAppendSaves' | 'includeAnnotations' | 'submitPDF' | 'canonicalFormat' | 'excludeNonUserAnnotations' | 'excludeFKey' | 'embedForm';
type ActionJSON = {
type: 'uri';
uri: string;
subactions?: Array<ActionJSON>;
} | {
type: 'goTo';
pageIndex: number;
subactions?: Array<ActionJSON>;
} | {
type: 'goToEmbedded';
newWindow: boolean;
relativePath: string;
targetType: 'parent' | 'child';
subactions?: Array<ActionJSON>;
} | {
type: 'goToRemote';
relativePath: string;
namedDestination: string;
subactions?: Array<ActionJSON>;
} | {
type: 'hide';
hide: boolean;
annotationReferences: Array<AnnotationReference>;
subactions?: Array<ActionJSON>;
} | {
type: 'resetForm';
fields: Array<string> | null;
flags: string | null;
subactions?: Array<ActionJSON>;
} | {
type: 'submitForm';
uri: string;
fields: Array<string> | null;
flags: Array<ActionFlags> | null;
subactions?: Array<ActionJSON>;
} | {
type: 'launch';
filePath: string;
subactions?: Array<ActionJSON>;
} | {
type: 'named';
action: string;
subactions?: Array<ActionJSON>;
} | {
type: 'javaScript';
script: string;
subactions?: Array<ActionJSON>;
};
type BookmarkJSON = {
v: 1;
type: 'pspdfkit/bookmark';
id: string;
name: string | null;
sortKey: number | null;
action: ActionJSON;
pdfBookmarkId: string | null;
};
type RawPdfBoxes = {
bleedBox: null | IRectJSON;
cropBox: null | IRectJSON;
mediaBox: null | IRectJSON;
trimBox: null | IRectJSON;
};
type ContentTreeElementMetadata = {
pdfua_type: ITextLineElementKind | null;
type: string | null;
alt: string | null;
};
declare const DocumentComparisonSourceType: {
readonly USE_OPEN_DOCUMENT: "USE_OPEN_DOCUMENT";
readonly USE_FILE_DIALOG: "USE_FILE_DIALOG";
};
type IDocumentComparisonSourceType = (typeof DocumentComparisonSourceType)[keyof typeof DocumentComparisonSourceType];
type DocumentComparisonSource = {
source: IDocumentComparisonSourceType | string | ArrayBuffer | Promise<string | ArrayBuffer>;
pageIndex?: number;
};
type DocumentComparisonStrokeColors = {
documentA?: Color;
documentB?: Color;
};
type DocumentComparisonConfiguration = {
documentA: DocumentComparisonSource;
documentB: DocumentComparisonSource;
strokeColors?: DocumentComparisonStrokeColors;
blendMode?: IBlendMode;
autoCompare: boolean;
};
declare const LayoutMode: {
readonly SINGLE: "SINGLE";
readonly DOUBLE: "DOUBLE";
readonly AUTO: "AUTO";
};
type ILayoutMode = (typeof LayoutMode)[keyof typeof LayoutMode];
declare const ScrollMode: {
readonly CONTINUOUS: "CONTINUOUS";
readonly PER_SPREAD: "PER_SPREAD";
readonly DISABLED: "DISABLED";
};
type IScrollMode = (typeof ScrollMode)[keyof typeof ScrollMode];
declare const ZoomMode: {
readonly AUTO: "AUTO";
readonly FIT_TO_WIDTH: "FIT_TO_WIDTH";
readonly FIT_TO_VIEWPORT: "FIT_TO_VIEWPORT";
readonly CUSTOM: "CUSTOM";
};
type IZoomMode = (typeof ZoomMode)[keyof typeof ZoomMode];
declare const SearchResult_base: Record$1.Factory<{
pageIndex: number | null;
previewText: string;
locationInPreview: number | null;
lengthInPreview: number | null;
rectsOnPage: List<Rect>;
isAnnotation: boolean | null;
annotationRect?: Rect | null | undefined;
}>;
declare class SearchResult extends SearchResult_base {
}
declare const SearchState_base: Record$1.Factory<ISearchState>;
declare class SearchState extends SearchState_base {
}
interface ISearchState {
isFocused: boolean;
isLoading: boolean;
term: string;
focusedResultIndex: number;
results: List<SearchResult>;
minSearchQueryLength: number;
}
type OnCommentCreationStartCallback = (comment: Comment) => Comment;
declare const AutoSaveMode: {
readonly IMMEDIATE: "IMMEDIATE";
readonly INTELLIGENT: "INTELLIGENT";
readonly DISABLED: "DISABLED";
};
type IAutoSaveMode = (typeof AutoSaveMode)[keyof typeof AutoSaveMode];
declare const PrintMode: {
readonly DOM: "DOM";
readonly EXPORT_PDF: "EXPORT_PDF";
};
type IPrintMode = (typeof PrintMode)[keyof typeof PrintMode];
declare const PrintQuality: {
readonly LOW: "LOW";
readonly MEDIUM: "MEDIUM";
readonly HIGH: "HIGH";
};
type IPrintQuality = (typeof PrintQuality)[keyof typeof PrintQuality];
declare const SidebarPlacement: {
readonly START: "START";
readonly END: "END";
};
type ISidebarPlacement = (typeof SidebarPlacement)[keyof typeof SidebarPlacement];
declare const ToolbarPlacement: {
readonly TOP: "TOP";
readonly BOTTOM: "BOTTOM";
};
type IToolbarPlacement = (typeof ToolbarPlacement)[keyof typeof ToolbarPlacement];
declare const ShowSignatureValidationStatusMode: {
readonly IF_SIGNED: "IF_SIGNED";
readonly HAS_WARNINGS: "HAS_WARNINGS";
readonly HAS_ERRORS: "HAS_ERRORS";
readonly NEVER: "NEVER";
};
type IShowSignatureValidationStatusMode = (typeof ShowSignatureValidationStatusMode)[keyof typeof ShowSignatureValidationStatusMode];
interface AnnotationNoteProps extends INoteAnnotation {
parentAnnotation: AnnotationsUnion | null;
position: Point;
notePosition?: Point;
}
declare class AnnotationNote<T extends AnnotationNoteProps = AnnotationNoteProps> extends NoteAnnotation<T> {
parentAnnotation?: AnnotationsUnion;
position: Point;
notePosition?: Point;
static defaultValues: IObject;
}
declare const ModificationType: {
readonly CREATED: "CREATED";
readonly UPDATED: "UPDATED";
readonly DELETED: "DELETED";
};
type IModificationType = (typeof ModificationType)[keyof typeof ModificationType];
type SaveErrorReason = {
error: any;
object: any;
modificationType: IModificationType;
};
declare function PSPDFKitSaveError(messageOrError: string | Error, reason: Array<SaveErrorReason>): Error;
declare namespace PSPDFKitSaveError {
var prototype: any;
}
type AnnotationPreset$1 = Record<string, any>;
type AnnotationPresetID$1 = string;
type ToolItemType = 'custom';
type ToolItem = {
type: ToolItemType;
node?: Node;
id?: string;
title?: string;
className?: string;
icon?: string;
onPress?: IFunction;
selected?: boolean;
disabled?: boolean;
};
type AnnotationTooltipCallback = (annotation: AnnotationsUnion) => Array<ToolItem>;
declare global {
interface SymbolConstructor {
readonly observable: symbol
}
}
type RendererConfiguration = {
node: Node;
append?: boolean | null;
noZoom?: boolean | null;
onDisappear?: ((arg0: Node | null) => void) | null;
};
type CustomRenderers = {
Annotation?: (arg0: {
annotation: AnnotationsUnion;
}) => RendererConfiguration | null | undefined;
CommentAvatar?: (arg0: {
comment: Comment;
}) => RendererConfiguration | null | undefined;
};
declare const SidebarMode: {
readonly ANNOTATIONS: "ANNOTATIONS";
readonly BOOKMARKS: "BOOKMARKS";
readonly DOCUMENT_OUTLINE: "DOCUMENT_OUTLINE";
readonly THUMBNAILS: "THUMBNAILS";
readonly CUSTOM: "CUSTOM";
};
type ISidebarMode = (typeof SidebarMode)[keyof typeof SidebarMode];
declare const UIElement: {
readonly Sidebar: "Sidebar";
};
type IUIElement = (typeof UIElement)[keyof typeof UIElement];
type RendererProps = {
containerNode: Node;
items?: List<any> | null;
};
type ItemRendererProps = {
itemContainerNode: Node;
item: any;
};
type ItemCustomRenderer = (itemRendererProps: ItemRendererProps) => void;
type UIRendererConfiguration = {
node: Node;
onRenderItem?: ItemCustomRenderer;
};
type Renderer = (rendererProps: RendererProps) => UIRendererConfiguration;
type CustomUISidebarConfiguration = Partial<{
[K in ISidebarMode]: Renderer;
}>;
type CustomUIElementConfiguration = CustomUISidebarConfiguration;
type CustomUI = Partial<Record<IUIElement, CustomUIElementConfiguration>>;
declare const FormFieldValue_base: Record$1.Factory<{
name?: string | undefined;
value?: string | number | List<string> | null | undefined;
optionIndexes?: List<number> | undefined;
isFitting?: boolean | undefined;
}>;
declare class FormFieldValue extends FormFieldValue_base {
name: string;
value: string | List<string> | null;
optionIndexes?: List<number>;
isFitting?: boolean;
static defaultValues: IObject;
constructor(args?: IObject);
}
type Change = AnnotationsUnion | Bookmark | FormField | FormFieldValue | Comment;
type IsEditableAnnotationCallback = (annotation: AnnotationsUnion) => boolean;
type RenderPageCallback = (context: CanvasRenderingContext2D, pageIndex: number, pageSize: Size) => unknown;
type CustomOverlayItemID = string;
interface ICustomOverlayItem {
disableAutoZoom?: boolean;
id: CustomOverlayItemID | null;
node: Node | null;
noRotate?: boolean;
pageIndex: number;
position: Point;
onAppear?: null | ((...args: Array<any>) => any);
onDisappear?: null | ((...args: Array<any>) => any);
}
declare const CustomOverlayItem_base: Record$1.Factory<ICustomOverlayItem>;
declare class CustomOverlayItem extends CustomOverlayItem_base {
disableAutoZoom: boolean;
id: CustomOverlayItemID;
node: Node;
noRotate: boolean;
pageIndex: number;
position: Point;
onAppear?: ((...args: Array<any>) => any) | null;
onDisappear?: ((...args: Array<any>) => any) | null;
constructor(args: ICustomOverlayItem);
}
type ColorPreset = {
color: Color | null;
localization: {
id: string;
defaultMessage?: string;
description?: string;
};
};
interface ITextLine {
id: number | null;
pageIndex: number | null;
boundingBox: Rect;
contents: string;
contentTreeElementMetadata: ContentTreeElementMetadata | null;
}
declare const TextLine_base: Record$1.Factory<ITextLine>;
declare class TextLine extends TextLine_base {
}
type FontCallback = (arg0: string) => Promise<Blob>;
interface IFont {
name: string | null;
callback: FontCallback | null;
}
declare const Font_base: Record$1.Factory<IFont>;
declare class Font extends Font_base {
constructor(args: {
name: string;
callback?: FontCallback;
});
}
interface ITextRange {
startNode: Text | null;
startOffset: number | null;
endNode: Text | null;
endOffset: number | null;
}
declare const TextRange_base: Record$1.Factory<ITextRange>;
declare class TextRange extends TextRange_base {
startNode: Text;
startOffset: number;
endNode: Text;
endOffset: number;
startAndEndIds(): {
startTextLineId: number;
endTextLineId: number;
startPageIndex: number;
endPageIndex: number;
};
}
interface ITextSelection$1 {
textRange: TextRange | null;
startTextLineId: number | null;
endTextLineId: number | null;
startPageIndex: number | null;
endPageIndex: number | null;
}
declare const TextSelection_base: Record$1.Factory<ITextSelection$1>;
declare class TextSelection extends TextSelection_base {
}
type IsEditableCommentCallback = (comment: Comment) => boolean;
declare const ElectronicSignatureCreationMode: {
readonly DRAW: "DRAW";
readonly IMAGE: "IMAGE";
readonly TYPE: "TYPE";
};
type IElectronicSignatureCreationMode = (typeof ElectronicSignatureCreationMode)[keyof typeof ElectronicSignatureCreationMode];
type BuiltInDocumentEditorFooterItem = 'cancel' | 'spacer' | 'save-as' | 'save' | 'selected-pages' | 'loading-indicator';
type DocumentEditorFooterItem = {
type: BuiltInDocumentEditorFooterItem | 'custom';
node?: Node;
className?: string;
id?: string;
onPress?: (e: MouseEvent, id?: string) => void;
};
type BuiltInDocumentEditorToolbarItem = 'add' | 'remove' | 'duplicate' | 'rotate-left' | 'rotate-right' | 'move' | 'move-left' | 'move-right' | 'import-document' | 'spacer' | 'undo' | 'redo' | 'select-all' | 'select-none';
type DocumentEditorToolbarItem = Omit<ToolItem, 'type'> & {
type: BuiltInDocumentEditorToolbarItem | 'custom';
};
type AnnotationsResizeEvent = {
annotation: AnnotationsUnion;
isShiftPressed: boolean;
resizeAnchor: ResizeAnchor;
};
type ResizeAnchor = 'TOP' | 'BOTTOM' | 'LEFT' | 'RIGHT' | 'TOP_LEFT' | 'TOP_RIGHT' | 'BOTTOM_RIGHT' | 'BOTTOM_LEFT';
type AnnotationResizeStartCallbackConfiguration = {
maintainAspectRatio?: boolean;
minWidth?: number | undefined;
minHeight?: number | undefined;
maxWidth?: number | undefined;
maxHeight?: number | undefined;
};
type AnnotationResizeStartCallback = (event: AnnotationsResizeEvent) => AnnotationResizeStartCallbackConfiguration;
declare const InteractionMode: {
readonly TEXT_HIGHLIGHTER: "TEXT_HIGHLIGHTER";
readonly INK: "INK";
readonly INK_SIGNATURE: "INK_SIGNATURE";
readonly SIGNATURE: "SIGNATURE";
readonly STAMP_PICKER: "STAMP_PICKER";
readonly STAMP_CUSTOM: "STAMP_CUSTOM";
readonly SHAPE_LINE: "SHAPE_LINE";
readonly SHAPE_RECTANGLE: "SHAPE_RECTANGLE";
readonly SHAPE_ELLIPSE: "SHAPE_ELLIPSE";
readonly SHAPE_POLYGON: "SHAPE_POLYGON";
readonly SHAPE_POLYLINE: "SHAPE_POLYLINE";
readonly INK_ERASER: "INK_ERASER";
readonly NOTE: "NOTE";
readonly COMMENT_MARKER: "COMMENT_MARKER";
readonly TEXT: "TEXT";
readonly CALLOUT: "CALLOUT";
readonly PAN: "PAN";
readonly SEARCH: "SEARCH";
readonly DOCUMENT_EDITOR: "DOCUMENT_EDITOR";
readonly MARQUEE_ZOOM: "MARQUEE_ZOOM";
readonly REDACT_TEXT_HIGHLIGHTER: "REDACT_TEXT_HIGHLIGHTER";
readonly REDACT_SHAPE_RECTANGLE: "REDACT_SHAPE_RECTANGLE";
readonly DOCUMENT_CROP: "DOCUMENT_CROP";
readonly BUTTON_WIDGET: "BUTTON_WIDGET";
readonly TEXT_WIDGET: "TEXT_WIDGET";
readonly RADIO_BUTTON_WIDGET: "RADIO_BUTTON_WIDGET";
readonly CHECKBOX_WIDGET: "CHECKBOX_WIDGET";
readonly COMBO_BOX_WIDGET: "COMBO_BOX_WIDGET";
readonly LIST_BOX_WIDGET: "LIST_BOX_WIDGET";
readonly SIGNATURE_WIDGET: "SIGNATURE_WIDGET";
readonly DATE_WIDGET: "DATE_WIDGET";
readonly FORM_CREATOR: "FORM_CREATOR";
readonly LINK: "LINK";
readonly DISTANCE: "DISTANCE";
readonly PERIMETER: "PERIMETER";
readonly RECTANGLE_AREA: "RECTANGLE_AREA";
readonly ELLIPSE_AREA: "ELLIPSE_AREA";
readonly POLYGON_AREA: "POLYGON_AREA";
readonly CONTENT_EDITOR: "CONTENT_EDITOR";
readonly MULTI_ANNOTATIONS_SELECTION: "MULTI_ANNOTATIONS_SELECTION";
readonly MEASUREMENT: "MEASUREMENT";
readonly MEASUREMENT_SETTINGS: "MEASUREMENT_SETTINGS";
};
type IInteractionMode = (typeof InteractionMode)[keyof typeof InteractionMode];
type OnOpenUriCallback = (uri: string, isUserInitiated: boolean) => boolean;
declare class PageInfo {
index: number;
label: string;
height: number;
width: number;
rotation: number;
rawPdfBoxes: RawPdfBoxes;
}
declare const ViewportPadding_base: Record$1.Factory<{
horizontal: number;
vertical: number;
}>;
declare class ViewportPadding extends ViewportPadding_base {
}
type SidebarOptions = {
[SidebarMode.ANNOTATIONS]: AnnotationsSidebarOptions;
};
type AnnotationsSidebarOptions = {
includeContent: Array<AnnotationsUnionClass | Class<Comment>>;
};
type Rotation = 0 | 90 | 180 | 270;
interface IViewState {
allowPrinting: boolean;
allowExport: boolean;
currentPageIndex: number;
instance: Instance | null;
interactionMode: IInteractionMode | null;
keepFirstSpreadAsSinglePage: boolean;
layoutMode: ILayoutMode;
pageSpacing: number;
pagesRotation: Rotation;
readOnly: boolean;
scrollMode: IScrollMode;
showAnnotations: boolean;
showComments: boolean;
showAnnotationNotes: boolean;
showToolbar: boolean;
enableAnnotationToolbar: boolean;
sidebarMode: ISidebarMode | null | undefined;
sidebarOptions: SidebarOptions;
sidebarPlacement: ISidebarPlacement;
spreadSpacing: number;
viewportPadding: ViewportPadding;
zoom: IZoomMode | number;
zoomStep: number;
formDesignMode: boolean;
showSignatureValidationStatus: IShowSignatureValidationStatusMode;
previewRedactionMode: boolean;
canScrollWhileDrawing: boolean;
keepSelectedTool: boolean;
resolvedLayoutMode: ILayoutMode;
sidebarWidth: number;
}
declare const ViewState_base: Record$1.Factory<IViewState>;
declare class ViewState extends ViewState_base {
zoomIn(): ViewState;
zoomOut(): ViewState;
rotateLeft(): ViewState;
rotateRight(): ViewState;
goToNextPage(): ViewState;
goToPreviousPage(): ViewState;
}
declare class InstantClient {
clientId: string;
userId: string | null | undefined;
}
declare const allowedToolbarTypes: ("distance" | "note" | "comment" | "text" | "zoom-in" | "zoom-out" | "link" | "search" | "ellipse" | "image" | "line" | "polygon" | "polyline" | "spacer" | "arrow" | "highlighter" | "undo" | "redo" | "callout" | "custom" | "print" | "rectangle" | "ink" | "stamp" | "cloudy-rectangle" | "dashed-rectangle" | "cloudy-ellipse" | "dashed-ellipse" | "cloudy-polygon" | "dashed-polygon" | "text-highlighter" | "perimeter" | "ellipse-area" | "rectangle-area" | "polygon-area" | "sidebar-thumbnails" | "sidebar-document-outline" | "sidebar-annotations" | "sidebar-bookmarks" | "pager" | "multi-annotations-selection" | "pan" | "zoom-mode" | "annotate" | "ink-eraser" | "signature" | "document-editor" | "document-crop" | "export-pdf" | "debug" | "layout-config" | "marquee-zoom" | "responsive-group" | "redact-text-highlighter" | "redact-rectangle" | "document-comparison" | "measure" | "form-creator" | "content-editor")[];
type ToolbarItemType = ToolItemType | (typeof allowedToolbarTypes)[number];
type ToolbarItem = Omit<ToolItem, 'type'> & {
type: ToolbarItemType;
mediaQueries?: string[];
responsiveGroup?: string;
dropdownGroup?: string;
preset?: AnnotationPresetID$1;
onKeyPress?: (...args: Array<any>) => any;
};
type OutlineElementProps = {
children: List<OutlineElement>;
title: string;
color: Color | null;
isBold: boolean;
isItalic: boolean;
isExpanded: boolean;
action: Action | null;
};
declare const OutlineElement_base: Record$1.Factory<OutlineElementProps>;
declare class OutlineElement extends OutlineElement_base {
}
type TwoStepSignatureCallback = (arg0: {
hash: string;
fileContents: ArrayBuffer | null;
dataToBeSigned: ArrayBuffer;
}) => Promise<ArrayBuffer>;
type SignatureContainerType = 'raw' | 'pkcs7';
type SigningData = {
certificates?: ArrayBuffer[] | string[];
signatureType: SignatureTypeType;
privateKey?: string;
signatureContainer?: SignatureContainerType;
};
type SignaturePreparationData = {
placeholderSize?: number;
flatten?: boolean;
formFieldName?: string;
position?: SignaturePosition;
appearance?: SignatureAppearance;
};
type SignatureCreationData = SignaturePreparationData & {
signatureMetadata?: SignatureMetadata;
} & {
signingData?: SigningData;
};
type SigningServiceData = {
signingToken: string;
};
type RedactionAnnotationPreset = {
fillColor?: Color;
overlayText?: string;
repeatOverlayText?: boolean;
color?: Color;
outlineColor?: Color;
creatorName?: string;
};
type AnnotationsPressEvent = {
annotation: AnnotationsUnion;
nativeEvent: Event;
preventDefault?: () => void;
selected: boolean;
};
declare enum AnnotationsWillChangeReason {
DRAW_START = "DRAW_START",
DRAW_END = "DRAW_END",
TEXT_EDIT_START = "TEXT_EDIT_START",
TEXT_EDIT_END = "TEXT_EDIT_END",
SELECT_START = "SELECT_START",
SELECT_END = "SELECT_END",
MOVE_START = "MOVE_START",
MOVE_END = "MOVE_END",
RESIZE_START = "RESIZE_START",
RESIZE_END = "RESIZE_END",
ROTATE_START = "ROTATE_START",
ROTATE_END = "ROTATE_END",
DELETE_START = "DELETE_START",
DELETE_END = "DELETE_END",
PROPERTY_CHANGE = "PROPERTY_CHANGE"
}
type PagePressEvent = {
pageIndex: number;
point: Point;
nativeEvent: Event;
};
type AnnotationPresetsUpdateEvent = {
preventDefault: () => boolean;
currentPreset: AnnotationPresetID;
currentPresetProperties: AnnotationPreset;
newPresetProperties: AnnotationPreset;
};
type AnnotationsFocusEvent = {
annotation: AnnotationsUnion;
nativeEvent: FocusEvent;
};
type AnnotationsBlurEvent = {
annotation: AnnotationsUnion;
nativeEvent: FocusEvent;
};
type SaveStateChangeEvent = {
hasUnsavedChanges: boolean;
};
type SearchTermChangeEvent = {
term: string;
preventDefault: () => void;
};
type TextLinePressEvent = {
textLine: TextLine;
point: Point;
nativeEvent: Event;
};
type CropAreaChangeStartEvent = {
cropBox: Rect;
pageIndex: number;
};
type CropAreaChangeStopEvent = {
cropBox: Rect;
pageIndex: number;
};
type AnnotationsTransformEvent = {
annotation: AnnotationsUnion;
};
type AnnotationsCopyEvent = {
annotation: AnnotationsUnion;
};
type AnnotationsCutEvent = {
annotation: AnnotationsUnion;
};
type AnnotationsPasteEvent = {
annotation: AnnotationsUnion;
formField?: FormField;
previousAction: 'COPY' | 'CUT';
originalAnnotation: AnnotationsUnion;
originalFormField?: FormField;
};
type AnnotationsDuplicateEvent = {
annotation: AnnotationsUnion;
formField?: FormField;
originalAnnotation: AnnotationsUnion;
originalFormField?: FormField;
};
interface ITextSelection {
startTextLineId: number | null;
startPageIndex: number | null;
startNode: Text | null;
startOffset: number | null;
endTextLineId: number | null;
endPageIndex: number | null;
endNode: Text | null;
endOffset: number | null;
getText: (() => Promise<string>) | null;
getSelectedTextLines: (() => Promise<List<TextLine>>) | null;
getBoundingClientRect: (() => Promise<Rect>) | null;
getSelectedRectsPerPage: (() => Promise<List<{
pageIndex: number;
rects: List<Rect>;
}>>) | null;
}
declare const PublicTextSelection_base: Record$1.Factory<ITextSelection>;
declare class PublicTextSelection extends PublicTextSelection_base {
startTextLineId: number;
startPageIndex: number;
startNode: Text;
startOffset: number;
endTextLineId: number;
endPageIndex: number;
endNode: Text;
endOffset: number;
getText: () => Promise<string>;
getSelectedTextLines: () => Promise<List<TextLine>>;
getBoundingClientRect: () => Promise<Rect>;
getSelectedRectsPerPage: () => Promise<List<{
pageIndex: number;
rects: List<Rect>;
}>>;
}
type AnnotationNotePressEvent = {
preventDefault: () => boolean;
annotationNote?: AnnotationNote | null;
};
type AnnotationNoteHoverEvent = {
preventDefault: () => boolean;
annotationNote?: AnnotationNote | null;
};
type DocumentComparisonUIStartEvent = DocumentComparisonConfiguration;
type CommentsMentionEvent = {
comment: Comment;
modifications: List<{
userId: string;
action: 'ADDED' | 'REMOVED';
}>;
};
type Signature = InkAnnotation | ImageAnnotation;
interface HistoryEvent<T> {
action: T;
before: AnnotationsUnion;
after: AnnotationsUnion;
}
interface EventMap {
'viewState.change': (viewState: ViewState, previousViewState: ViewState) => void;
'viewState.currentPageIndex.change': (pageIndex: number) => void;
'viewState.zoom.change': (zoom: number) => void;
'annotationPresets.update': (event: AnnotationPresetsUpdateEvent) => void;
'annotations.blur': (event: AnnotationsBlurEvent) => void;
'annotations.change': () => void;
'annotations.create': (annotations: List<AnnotationsUnion>) => void;
'annotations.delete': (annotations: List<AnnotationsUnion>) => void;
'annotations.didSave': () => void;
'annotations.focus': (event: AnnotationsFocusEvent) => void;
'annotations.load': (annotations: List<AnnotationsUnion>) => void;
'annotations.press': (event: AnnotationsPressEvent) => void;
'annotations.update': (annotations: List<AnnotationsUnion>) => void;
'annotations.willChange': (event: {
reason: AnnotationsWillChangeReason;
annotations: List<AnnotationsUnion>;
}) => void;
'annotations.willSave': () => void;
'annotationSelection.change': (annotation?: AnnotationsUnion) => void;
'annotations.transform': (event: AnnotationsTransformEvent) => void;
'annotations.copy': (event: AnnotationsCopyEvent) => void;
'annotations.cut': (event: AnnotationsCutEvent) => void;
'annotations.paste': (event: AnnotationsPasteEvent) => void;
'annotations.duplicate': (event: AnnotationsDuplicateEvent) => void;
'bookmarks.change': () => void;
'bookmarks.create': (bookmarks: List<Bookmark>) => void;
'bookmarks.update': (bookmarks: List<Bookmark>) => void;
'bookmarks.delete': (bookmarks: List<Bookmark>) => void;
'bookmarks.load': (bookmarks: List<Bookmark>) => void;
'bookmarks.didSave': () => void;
'bookmarks.willSave': () => void;
'comments.change': () => void;
'comments.create': (comments: List<Comment>) => void;
'comments.delete': (comments: List<Comment>) => void;
'comments.update': (comments: List<Comment>) => void;
'comments.load': () => void;
'comments.willSave': () => void;
'comments.didSave': () => void;
'instant.connectedClients.change': (clients: Map<string, InstantClient>) => void;
'document.change': (operations: DocumentOperation[]) => void;
'document.saveStateChange': (event: SaveStateChangeEvent) => void;
'formFieldValues.update': (formFields: List<FormField>) => void;
'formFieldValues.willSave': () => void;
'formFieldValues.didSave': (res: {
response: Response;
error: Error;
}) => void;
'forms.willSubmit': (event: {
preventDefault: () => void;
}) => void;
'forms.didSubmit': (event: {
preventDefault: () => void;
}) => void;
'formFields.change': () => void;
'formFields.create': (formFields: List<FormField>) => void;
'formFields.delete': (formFields: List<FormField>) => void;
'formFields.didSave': () => void;
'formFields.load': (formFields: List<FormField>) => void;
'formFields.update': (formFields: List<FormField>) => void;
'formFields.willSave': () => void;
'search.stateChange': (searchState: SearchState) => void;
'search.termChange': (event: SearchTermChangeEvent) => void;
'storedSignatures.change': () => void;
'storedSignatures.create': (signature: Signature) => void;
'storedSignatures.delete': (signature: Signature) => void;
'storedSignatures.update': (signatures: List<Signature>) => void;
'textLine.press': (event: TextLinePressEvent) => void;
'textSelection.change': (selection: PublicTextSelection | null) => void;
'history.change': (event: HistoryEvent<'undo' | 'redo'>) => void;
'history.willChange': (event: {
type: 'create' | 'update' | 'delete';
annotation: Annotation;
preventDefault: () => void;
}) => void;
'history.clear': () => void;
'history.redo': (event: HistoryEvent<'redo'>) => void;
'history.undo': (event: HistoryEvent<'undo'>) => void;
'page.press': (event: PagePressEvent) => void;
'inkSignatures.create': (signature: Signature) => void;
'inkSignatures.delete': (signature: Signature) => void;
'inkSignatures.update': (signatures: Signature[]) => void;
'inkSignatures.change': () => void;
'cropArea.changeStart': (opts: CropAreaChangeStartEvent) => void;
'cropArea.changeStop': (opts: CropAreaChangeStopEvent) => void;
'documentComparisonUI.start': (opts: DocumentComparisonUIStartEvent) => void;
'documentComparisonUI.end': () => void;
'annotationNote.press': (event: AnnotationNotePressEvent) => void;
'annotationNote.hover': (event: AnnotationNoteHoverEvent) => void;
'comments.mention': (event: CommentsMentionEvent) => void;
}
interface IEmbeddedFile {
id: ID;
attachmentId: string;
description: null | string;
fileName: null | string;
fileSize: null | number;
updatedAt: null | Date;
}
declare const EmbeddedFile_base: Record$1.Factory<IEmbeddedFile>;
declare class EmbeddedFile extends EmbeddedFile_base {
}
type IAnnotationToolbarType = 'stroke-color' | 'fill-color' | 'background-color' | 'opacity' | 'line-width' | 'blend-mode' | 'spacer' | 'delete' | 'annotation-note' | 'border-color' | 'border-width' | 'border-style' | 'color' | 'linecaps-dasharray' | 'line-style' | 'font' | 'overlay-text' | 'outline-color' | 'apply-redactions' | 'measurementType' | 'measurementScale' | 'back';
type BuiltInAnnotationToolbarItem = {
type: IAnnotationToolbarType;
};
type Shared = Omit<ToolItem, 'selected' | 'type'> & {
onPress?: (nativeEvent: MouseEvent, id?: string) => void;
iconClassName?: string;
onIconPress?: (nativeEvent: MouseEvent, id?: string) => void;
};
type AnnotationToolbarItem = (Omit<Shared, 'node'> & {
type: IAnnotationToolbarType;
}) | (Omit<Shared, 'icon'> & {
id: string;
type: 'custom';
icon?: string | Node;
node?: Node;
});
type AnnotationToolbarItemsCallback = (annotation: AnnotationsUnion, options: {
defaultAnnotationToolbarItems: BuiltInAnnotationToolbarItem[];
hasDesktopLayout: boolean;
}) => AnnotationToolbarItem[];
type OnWidgetAnnotationCreationStartCallback = (annotation: WidgetAnnotation, formField: FormField) => {
annotation?: WidgetAnnotation;
formField?: FormField;
};
declare const builtInItems: readonly ["highlight", "strikeout", "underline", "squiggle", "redact-text-highlighter", "comment"];
type InlineToolbarType = (typeof builtInItems)[number];
type InlineTextSelectionToolbarItem = Omit<ToolItem, 'type'> & {
type: InlineToolbarType | 'custom';
};
type InlineTextSelectionToolbarItemsCallback = (options: {
defaultItems: InlineTextSelectionToolbarItem[];
hasDesktopLayout: boolean;
}, selection: TextSelection) => InlineTextSelectionToolbarItem[];
type ViewStateSetter = (currentState: ViewState) => ViewState;
type ToolbarItemsSetter = (currentState: ToolbarItem[]) => ToolbarItem[];
type StoredSignaturesSetter = (annotations: List<InkAnnotation | ImageAnnotation>) => List<InkAnnotation | ImageAnnotation>;
type SearchStateSetter = (currentState: SearchState) => SearchState;
type AnnotationPresetsSetter = (currentState: Record<string, AnnotationPreset$1>) => Record<string, AnnotationPreset$1>;
type StampAnnotationTemplatesSetter = (currentState: Array<StampAnnotation | ImageAnnotation>) => Array<StampAnnotation | ImageAnnotation>;
type SetDocumentEditorFooterFunction = (currentState: DocumentEditorFooterItem[]) => DocumentEditorFooterItem[];
type SetDocumentEditorToolbarFunction = (currentState: DocumentEditorToolbarItem[]) => DocumentEditorToolbarItem[];
declare class Instance {
totalPageCount: number;
pageInfoForIndex: (pageIndex: number) => PageInfo | null | undefined;
textLinesForPageIndex: (pageIndex: number) => Promise<List<TextLine>>;
getMarkupAnnotationText: (annotation: TextMarkupAnnotationsUnion) => Promise<string>;
getTextFromRects: (pageIndex: number, rects: List<Rect>) => Promise<string>;
currentZoomLevel: number;
maximumZoomLevel: number;
minimumZoomLevel: number;
zoomStep: number;
connectedClients: Map<string, InstantClient>;
addEventListener: <K extends keyof EventMap>(action: K, listener: EventMap[K]) => void;
removeEventListener: <K extends keyof EventMap>(action: K, listener: EventMap[K]) => void;
jumpToRect: (pageIndex: number, rect: Rect) => void;
jumpAndZoomToRect: (pageIndex: number, rect: Rect) => void;
transformContentClientToPageSpace: (rectOrPoint: Rect | Point, pageIndex: number) => Rect | Point;
transformContentPageToClientSpace: (rectOrPoint: Rect | Point, pageIndex: number) => Rect | Point;
transformClientToPageSpace: (rectOrPoint: Rect | Point, pageIndex: number) => Rect | Point;
transformPageToClientSpace: (rectOrPoint: Rect | Point, pageIndex: number) => Rect | Point;
transformRawToPageSpace: (rawInset: InsetJSON | Inset, pageIndex: number) => Rect;
transformPageToRawSpace: (rect: Rect, pageIndex: number) => Inset;
exportPDF: (flags?: ExportPDFFlags) => Promise<ArrayBuffer>;
exportXFDF: () => Promise<string>;
exportInstantJSON: (version?: number) => Promise<InstantJSON>;
renderPageAsArrayBuffer: (options: {
width: number;
} | {
height: number;
}, pageIndex: number) => Promise<ArrayBuffer>;
renderPageAsImageURL: (options: {
width: number;
} | {
height: number;
}, pageIndex: number) => Promise<string>;
print: (printMode?: IPrintMode | {
mode?: IPrintMode;
excludeAnnotations?: boolean;
}) => void;
abortPrint: () => void;
setCustomRenderers: (customRenderers: CustomRenderers) => void;
setCustomUIConfiguration: (customUIConfigurationOrConfigurationSetter: CustomUI | ((customUI: CustomUI | null) => CustomUI)) => void;
getDocumentOutline: () => Promise<List<OutlineElement>>;
getPageGlyphs: (pageIndex: number) => Promise<List<Glyph>>;
setAnnotationCreatorName: (annotationCreatorName?: string | null) => void;
setOnWidgetAnnotationCreationStart: (callback: OnWidgetAnnotationCreationStartCallback) => void;
setOnCommentCreationStart: (callback: OnCommentCreationStartCallback) => void;
contentWindow: Window;
contentDocument: Document;
readonly viewState: ViewState;
setViewState: (stateOrFunction: ViewStateSetter | ViewState) => void;
readonly toolbarItems: ToolbarItem[];
setToolbarItems: (stateOrFunction: ToolbarItemsSetter | ToolbarItem[]) => void;
setAnnotationToolbarItems: (annotationToolbarItemsCallback: AnnotationToolbarItemsCallback) => void;
setInlineTextSelectionToolbarItems: (InlineTextSelectionToolbarItemsCallback: InlineTextSelectionToolbarItemsCallback) => void;
annotationPresets: Record<AnnotationPresetID$1, AnnotationPreset$1>;
setAnnotationPresets: (stateOrFunction: AnnotationPresetsSetter | Record<AnnotationPresetID$1, AnnotationPreset$1>) => void;
setCurrentAnnotationPreset: (annotationPresetID?: string | null) => void;
readonly currentAnnotationPreset: string | null | undefined;
readonly stampAnnotationTemplates: Array<StampAnnotation | ImageAnnotation>;
setStampAnnotationTemplates: (stateOrFunction: StampAnnotationTemplatesSetter | Array<StampAnnotation | ImageAnnotation>) => void;
getAnnotations: (pageIndex: number) => Promise<List<AnnotationsUnion>>;
createAttachment: (file: Blob) => Promise<string>;
getAttachment: (attachmentId: string) => Promise<Blob>;
calculateFittingTextAnnotationBoundingBox: (annotation: TextAnnotation) => TextAnnotation;
setOnAnnotationResizeStart: (callback: AnnotationResizeStartCallback) => void;
getBookmarks: () => Promise<List<Bookmark>>;
getFormFields: () => Promise<List<FormField>>;
getFormFieldValues: () => Record<string, null | string | Array<string>>;
setFormFieldValues: (formFieldValues: Record<string, null | string | Array<string>>) => void;
getTextSelection: () => Record<string, any> | null | undefined;
getSelectedAnnotation: () => AnnotationsUnion | null | undefined;
getSelectedAnnotations: () => List<AnnotationsUnion> | null | undefined;
getAnnotationsGroups: () => Map<string, {
groupKey: string;
annotationsIds: Set<ID>;
}> | null | undefined;
setSelectedAnnotation: (annotationOrAnnotationId?: (AnnotationsUnion | ID) | null) => void;
setSelectedAnnotations: (annotationsOrAnnotationsId?: List<AnnotationsUnion | ID> | null) => void;
groupAnnotations: (annotationsOrAnnotationsId?: List<AnnotationsUnion | ID>) => void;
deleteAnnotationsGroup: (annotationGroupId?: string) => void;
setEditingAnnotation: (annotationOrAnnotationId?: (AnnotationsUnion | ID) | null, autoSelectText?: boolean | null) => void;
setCustomOverlayItem: (item: CustomOverlayItem) => void;
removeCustomOverlayItem: (id: CustomOverlayItemID) => void;
readonly locale: string;
setLocale: (arg0: string) => Promise<void>;
getInkSignatures: () => Promise<List<InkAnnotation | ImageAnnotation>>;
getStoredSignatures: () => Promise<List<InkAnnotation | ImageAnnotation>>;
setInkSignatures: (stateOrFunction: StoredSignaturesSetter | List<InkAnnotation | ImageAnnotation>) => Promise<void>;
setStoredSignatures: (stateOrFunction: StoredSignaturesSetter | List<InkAnnotation | ImageAnnotation>) => Promise<void>;
search: (term: string, options?: {
startPageIndex?: number;
endPageIndex?: number;
searchType?: ISearchType;
searchInAnnotations?: boolean;
caseSensitive?: boolean;
}) => Promise<List<SearchResult>>;
startUISearch: (term: string) => void;
readonly searchState: SearchState;
setSearchState: (stateOrFunction: SearchStateSetter | SearchState) => void;
readonly editableAnnotationTypes: Array<Class<AnnotationsUnion>>;
setEditableAnnotationTypes: (arg0: Array<Class<AnnotationsUnion>>) => void;
setIsEditableAnnotation: (arg0: IsEditableAnnotationCallback) => void;
setIsEditableComment: (arg0: IsEditableCommentCallback) => void;
setGroup: (group: string) => void;
resetGroup: () => void;
setMentionableUsers: (users: MentionableUser[]) => void;
setMaxMentionSuggestions: (maxSuggestions: number) => void;
getComments: () => Promise<List<Comment>>;
setDocumentEditorFooterItems: (stateOrFunction: DocumentEditorFooterItem[] | SetDocumentEditorFooterFunction) => void;
setDocumentEditorToolbarItems: (stateOrFunction: DocumentEditorToolbarItem[] | SetDocumentEditorToolbarFunction) => void;
getSignaturesInfo: () => Promise<SignaturesInfo>;
signDocument: (arg0: SignatureCreationData | null | undefined, arg1: TwoStepSignatureCallback | SigningServiceData | undefined) => Promise<void>;
applyOperations: (operations: Array<DocumentOperation>) => Promise<void>;
exportPDFWithOperations: (arg0: Array<DocumentOperation>) => Promise<ArrayBuffer>;
applyRedactions: () => Promise<void>;
save: () => Promise<void>;
hasUnsavedChanges: () => boolean;
ensureChangesSaved: (changes: Change | Array<Change>) => Promise<Array<Change>>;
create: (changes: Change | Array<Change> | List<Change>) => Promise<Array<Change>>;
update: (changes: Change | Array<Change> | List<Change>) => Promise<Array<Change>>;
delete: (ids: InstantID | Change | Array<InstantID | Change> | List<InstantID | Change>) => Promise<Array<Change>>;
toggleClipboardActions: (enable: boolean) => void;
setMeasurementSnapping: (enable: boolean) => void;
setMeasurementPrecision: (precision: IMeasurementPrecision) => void;
setMeasurementScale: (scale: MeasurementScale) => void;
setMeasurementValueConfiguration: (configurationCallback: MeasurementValueConfigurationCallback) => void;
createRedactionsBySearch: (term: string | ISearchPattern, options?: {
searchType?: ISearchType;
searchInAnnotations?: boolean;
caseSensitive?: boolean;
annotationPreset?: RedactionAnnotationPreset;
}) => Promise<List<string>>;
history: {
undo: () => Promise<boolean>;
redo: () => Promise<boolean>;
clear: () => void;
enable: () => void;
disable: () => void;
canUndo: () => boolean;
canRedo: () => boolean;
};
setDocumentComparisonMode: (documentComparisonConfiguration: DocumentComparisonConfiguration | null) => void;
getEmbeddedFiles: () => Promise<List<EmbeddedFile>>;
}
declare const UIDateTimeElement: {
readonly COMMENT_THREAD: "COMMENT_THREAD";
readonly ANNOTATIONS_SIDEBAR: "ANNOTATIONS_SIDEBAR";
};
type IUIDateTimeElement = (typeof UIDateTimeElement)[keyof typeof UIDateTimeElement];
type DateTimeStringCallback = (args: {
dateTime: Date;
element: IUIDateTimeElement;
object: AnnotationsUnion | Comment;
}) => string;
declare const InkEraserMode: {
readonly POINT: "POINT";
readonly STROKE: "STROKE";
};
type IInkEraserMode = (typeof InkEraserMode)[keyof typeof InkEraserMode];
type BuiltInColorProperty = 'color' | 'stroke-color' | 'fill-color' | 'background-color' | 'font-color' | 'outline-color';
type AnnotationToolbarColorPresetConfig = {
presets: ColorPreset[];
showColorPicker?: boolean;
};
type AnnotationToolbarColorPresetsCallback = (options: {
propertyName: BuiltInColorProperty;
defaultAnnotationToolbarColorPresets: ColorPreset[];
}) => AnnotationToolbarColorPresetConfig | undefined;
type EnableRichTextCallback = (annotation: TextAnnotation) => boolean;
type TrustedCAsCallback = () => Promise<Array<ArrayBuffer | string>>;
type ElectronicSignaturesConfiguration = {
creationModes?: Readonly<IElectronicSignatureCreationMode[]>;
fonts?: Readonly<Font[]>;
unstable_colorPresets?: Readonly<ColorPreset[]>;
};
declare const Theme: {
readonly LIGHT: "LIGHT";
readonly DARK: "DARK";
readonly AUTO: "AUTO";
};
type ITheme = (typeof Theme)[keyof typeof Theme];
type SharedConfiguration = {
container: string | HTMLElement;
initialViewState?: ViewState;
baseUrl?: string;
serverUrl?: string;
styleSheets?: Array<string>;
toolbarItems?: Array<ToolbarItem>;
annotationPresets?: Record<AnnotationPresetID$1, AnnotationPreset$1>;
stampAnnotationTemplates?: Array<StampAnnotation | ImageAnnotation>;
autoSaveMode?: IAutoSaveMode;
disableHighQualityPrinting?: boolean;
printMode?: IPrintMode;
printOptions?: {
mode?: IPrintMode;
quality?: IPrintQuality;
};
disableTextSelection?: boolean;
disableForms?: boolean;
headless?: boolean;
locale?: string;
populateInkSignatures?: () => Promise<List<InkAnnotation | ImageAnnotation>>;
populateStoredSignatures?: () => Promise<List<InkAnnotation | ImageAnnotation>>;
formFieldsNotSavingSignatures?: Array<string>;
password?: string;
disableOpenParameters?: boolean;
maxPasswordRetries?: number;
enableServiceWorkerSupport?: boolean;
preventTextCopy?: boolean;
renderPageCallback?: RenderPageCallback;
annotationTooltipCallback?: AnnotationTooltipCallback;
editableAnnotationTypes?: Array<Class<AnnotationsUnion>>;
isEditableAnnotation?: IsEditableAnnotationCallback;
onAnnotationResizeStart?: AnnotationResizeStartCallback;
customRenderers?: CustomRenderers;
customUI?: CustomUI;
theme?: ITheme;
toolbarPlacement?: IToolbarPlacement;
minDefaultZoomLevel?: number;
maxDefaultZoomLevel?: number;
isEditableComment?: IsEditableCommentCallback;
restrictAnnotationToPageBounds?: boolean;
electronicSignatures?: ElectronicSignaturesConfiguration;
documentEditorFooterItems?: DocumentEditorFooterItem[];
documentEditorToolbarItems?: DocumentEditorToolbarItem[];
enableHistory?: boolean;
onOpenURI?: OnOpenUriCallback;
dateTimeString?: DateTimeStringCallback;
annotationToolbarColorPresets?: AnnotationToolbarColorPresetsCallback;
annotationToolbarItems?: AnnotationToolbarItemsCallback;
enableClipboardActions?: boolean;
renderPagePreview?: boolean;
unstable_inkEraserMode?: IInkEraserMode;
onWidgetAnnotationCreationStart?: OnWidgetAnnotationCreationStartCallback;
inlineTextSelectionToolbarItems?: InlineTextSelectionToolbarItemsCallback;
measurementSnapping?: boolean;
measurementPrecision?: IMeasurementPrecision;
measurementScale?: MeasurementScale;
measurementValueConfiguration?: MeasurementValueConfigurationCallback;
enableRichText?: EnableRichTextCallback;
disableMultiSelection?: boolean;
autoCloseThreshold?: number;
onCommentCreationStart?: OnCommentCreationStartCallback;
};
type Instant = {
public: boolean;
};
type ServerConfiguration = SharedConfiguration & {
documentId: string;
authPayload: {
jwt: string;
};
instant: Instant[keyof Instant];
anonymousComments?: boolean;
mentionableUsers?: Array<MentionableUser>;
maxMentionSuggestions?: number;
};
type StandaloneConfiguration = SharedConfiguration & {
document: string | ArrayBuffer;
baseCoreUrl?: string;
licenseKey?: string;
instantJSON?: InstantJSON;
XFDF?: string;
XFDFKeepCurrentAnnotations?: boolean;
disableWebAssemblyStreaming?: boolean;
disableIndexedDBCaching?: boolean;
enableAutomaticLinkExtraction?: boolean;
standaloneInstancesPoolSize?: number;
overrideMemoryLimit?: number;
trustedCAsCallback?: TrustedCAsCallback;
customFonts?: Array<Font>;
electronAppName?: string;
appName?: string;
isSharePoint?: boolean;
isSalesforce?: boolean;
productId?: IProductId;
};
type Configuration = ServerConfiguration | StandaloneConfiguration;
declare const Conformance: {
readonly PDFA_1A: "pdfa-1a";
readonly PDFA_1B: "pdfa-1b";
readonly PDFA_2A: "pdfa-2a";
readonly PDFA_2U: "pdfa-2u";
readonly PDFA_2B: "pdfa-2b";
readonly PDFA_3A: "pdfa-3a";
readonly PDFA_3U: "pdfa-3u";
readonly PDFA_3B: "pdfa-3b";
readonly PDFA_4: "pdfa-4";
readonly PDFA_4E: "pdfa-4e";
readonly PDFA_4F: "pdfa-4f";
};
type IConformance = (typeof Conformance)[keyof typeof Conformance];
type FormFieldFlags = Array<'readOnly' | 'required' | 'noExport'>;
type FormOptionJSON = {
label: string;
value: string;
};
type ExportPDFFlags = {
flatten?: boolean;
incremental?: boolean;
includeComments?: boolean;
saveForPrinting?: boolean;
excludeAnnotations?: boolean;
permissions?: {
userPassword: string;
ownerPassword: string;
documentPermissions: Array<IDocumentPermissions>;
};
outputFormat?: boolean | PDFAFlags;
optimize?: boolean | OptimizationFlags;
};
type PDFAFlags = {
conformance?: IConformance;
vectorization?: boolean;
rasterization?: boolean;
};
type OptimizationFlags = {
documentFormat?: 'pdf' | 'pdfa';
grayscaleText?: boolean;
grayscaleGraphics?: boolean;
grayscaleFormFields?: boolean;
grayscaleAnnotations?: boolean;
grayscaleImages?: boolean;
disableImages?: boolean;
mrcCompression?: boolean;
imageOptimizationQuality?: 1 | 2 | 3 | 4;
linearize?: boolean;
};
type FormFieldAdditionalActionsType = {
onChange?: Action;
onCalculate?: Action;
};
type FormFieldEventTriggerType = keyof FormFieldAdditionalActionsType;
type FormFieldInputAdditionalActionsType = FormFieldAdditionalActionsType & {
onInput?: Action;
onFormat?: Action;
};
type FormFieldInputEventTriggerType = keyof FormFieldInputAdditionalActionsType;
type FormFieldName = string;
interface IFormField {
id?: ID;
pdfObjectId?: number | null;
annotationIds?: List<string>;
name?: FormFieldName;
label?: string;
readOnly?: boolean;
required?: boolean;
noExport?: boolean;
additionalActions?: any;
group?: string | null;
isEditable?: boolean;
isFillable?: boolean;
isDeletable?: boolean;
canSetGroup?: boolean;
[key: string]: any;
}
declare const FormField_base: Record$1.Factory<IFormField>;
declare class FormField extends FormField_base {
id: ID;
name: FormFieldName;
pdfObjectId: number;
annotationIds: List<string>;
label: string;
readOnly: boolean;
required: boolean;
noExport: boolean;
additionalActions: any;
group?: string | null;
isEditable?: boolean;
isFillable?: boolean;
isDeletable?: boolean;
canSetGroup?: boolean;
static defaultValues: IObject;
constructor(args?: IFormField);
}
declare class ButtonFormField extends FormField {
buttonLabel: string | null;
static defaultValues: IObject;
}
declare const FormOption_base: Record$1.Factory<{
label: string;
value: string;
}>;
declare class FormOption extends FormOption_base {
}
declare class CheckBoxFormField extends FormField {
values: List<string>;
defaultValues: List<string>;
options: List<FormOption>;
optionIndexes?: List<number>;
static defaultValues: IObject;
}
declare class ChoiceFormField extends FormField {
options: List<FormOption>;
values: List<string>;
defaultValues: List<string>;
multiSelect: boolean;
commitOnChange: boolean;
static defaultValues: IObject;
}
declare class ComboBoxFormField extends ChoiceFormField {
edit: boolean;
doNotSpellCheck: boolean;
static defaultValues: IObject;
}
declare class ListBoxFormField extends ChoiceFormField {
additionalActions: FormFieldInputAdditionalActionsType | null | undefined;
}
declare class RadioButtonFormField extends FormField {
noToggleToOff: boolean;
radiosInUnison: boolean;
value: string;
defaultValue: string;
options: List<FormOption>;
optionIndexes?: List<number>;
static defaultValues: IObject;
}
declare class TextFormField extends FormField {
value: string;
defaultValue: string;
password: boolean;
maxLength?: number | null;
doNotSpellCheck: boolean;
doNotScroll: boolean;
multiLine: boolean;
comb: boolean;
additionalActions: FormFieldInputAdditionalActionsType | null | undefined;
static defaultValues: IObject;
}
declare class SignatureFormField extends FormField {
}
type AnnotationPreset = AnnotationPreset$1;
type AnnotationPresetID = AnnotationPresetID$1;
declare class __dangerousImmutableRecordFactory<TProps extends Record<string, unknown>> {
has(key: unknown): boolean;
get<K extends keyof TProps>(key: K): TProps[K];
set<K extends keyof TProps>(key: K, value: TProps[K]): this;
delete<K extends keyof TProps>(key: K): this;
clear(): this;
update<K extends keyof TProps>(key: K, updater: (value: TProps[K]) => TProps[K]): this;
merge(...collections: Array<Partial<TProps>>): this;
mergeWith(merger: (previous?: unknown, next?: unknown, key?: string) => unknown, ...collections: Array<Partial<TProps> | Iterable<[string, unknown]>>): this;
mergeDeep(...collections: Array<Partial<TProps> | Iterable<[string, unknown]>>): this;
mergeDeepWith(merger: (previous?: unknown, next?: unknown, key?: string) => unknown, ...collections: Array<Partial<TProps> | Iterable<[string, unknown]>>): this;
setIn(keyPath: Iterable<unknown>, value: unknown): this;
deleteIn(keyPath: Iterable<unknown>): this;
removeIn(keyPath: Iterable<unknown>): this;
updateIn(keyPath: Iterable<unknown>, notSetValue: unknown, updater: (value: unknown) => unknown): this;
updateIn(keyPath: Iterable<unknown>, updater: (value: unknown) => unknown): this;
mergeIn(keyPath: Iterable<unknown>, ...collections: Array<Partial<TProps> | Iterable<[string, unknown]>>): this;
mergeDeepIn(keyPath: Iterable<unknown>, ...collections: Array<Partial<TProps> | Iterable<[string, unknown]>>): this;
withMutations(mutator: (mutable: this) => unknown): this;
asMutable(): this;
asImmutable(): this;
getIn(keyPath: Iterable<unknown>, notSetValue?: unknown): unknown;
toJS(): TProps;
toJSON(): TProps;
equals(other: unknown): boolean;
toSeq(): Seq.Keyed<string, unknown>;
}
declare const InheritableImmutableRecord_base: any;
declare class InheritableImmutableRecord<T extends Record<string, unknown>> extends InheritableImmutableRecord_base {
constructor(values?: Partial<T> | Iterable<[string, unknown]>);
}
interface InheritableImmutableRecord<T extends Record<string, unknown>> extends __dangerousImmutableRecordFactory<T> {
}
type ID = string;
type AnnotationProperties = {
id: string | null;
name: string | null;
subject: string | null;
pdfObjectId: number | null;
pageIndex: number | null;
boundingBox: Rect | null;
opacity: number | null;
note: string | null;
creatorName: string | null;
createdAt: Date | null;
updatedAt: Date | null;
customData: Record<string, unknown> | null;
noView: boolean | null;
noPrint: boolean | null;
locked: boolean | null;
lockedContents: boolean | null;
readOnly: boolean | null;
hidden: boolean | null;
group: string | null | undefined;
isEditable: boolean | undefined;
isDeletable: boolean | undefined;
canSetGroup: boolean | undefined;
canReply: boolean | undefined;
rotation: number;
additionalActions: any;
noZoom: boolean;
noRotate: boolean;
isCommentThreadRoot: boolean;
APStreamCache: {
cache: string;
} | {
attach: string;
} | undefined;
blendMode: IBlendMode;
action: any;
[key: string]: unknown;
};
declare class Annotation<T extends AnnotationProperties = AnnotationProperties> extends InheritableImmutableRecord<T> {
id: ID;
name: null | string;
subject: null | string;
pdfObjectId: null | number;
pageIndex: number;
boundingBox: Rect;
opacity: number;
note: null | string;
creatorName: null | string;
createdAt: Date;
updatedAt: Date;
noView: boolean;
noPrint: boolean;
locked: boolean;
lockedContents: boolean;
readOnly: boolean;
hidden: boolean;
customData: null | Record<string, unknown>;
noZoom: boolean;
noRotate: boolean;
additionalActions: any;
rotation: number;
blendMode: IBlendMode;
isCommentThreadRoot: boolean;
group?: string | null;
isEditable?: boolean;
isDeletable?: boolean;
canSetGroup?: boolean;
canReply?: boolean;
APStreamCache?: {
cache: string;
} | {
attach: string;
};
action: any;
static defaultValues: IObject;
constructor(record?: Partial<T>);
}
type StampKind = 'Approved' | 'NotApproved' | 'Draft' | 'Final' | 'Completed' | 'Confidential' | 'ForPublicRelease' | 'NotForPublicRelease' | 'ForComment' | 'Void' | 'PreliminaryResults' | 'InformationOnly' | 'Rejected' | 'Accepted' | 'InitialHere' | 'SignHere' | 'Witness' | 'AsIs' | 'Departmental' | 'Experimental' | 'Expired' | 'Sold' | 'TopSecret' | 'Revised' | 'RejectedWithText' | 'Custom';
interface IStampAnnotation extends AnnotationProperties {
stampType: string | StampKind | null;
title: string | null;
subtitle: string | null;
color: Color | null;
xfdfAppearanceStream: string | null;
}
declare class StampAnnotation<T extends IStampAnnotation = IStampAnnotation> extends Annotation<T> {
stampType: StampKind;
title: null | string;
subtitle: null | string;
color: null | Color;
xfdfAppearanceStream: null | string;
static defaultValues: IObject;
static readableName: string;
}
declare function preloadWorker(configuration: StandaloneConfiguration): Promise<void>;
declare function load(configuration: Configuration): Promise<Instance>;
declare function convertToPDF(configuration: StandaloneConfiguration, conformance?: IConformance): Promise<ArrayBuffer>;
declare function serializeAnnotation(annotation: InkAnnotation): AnnotationBackendJSON<InkAnnotationJSON>;
declare function serializeAnnotation(annotation: LineAnnotation): AnnotationBackendJSON<LineAnnotationJSON>;
declare function serializeAnnotation(annotation: RectangleAnnotation): AnnotationBackendJSON<RectangleAnnotationJSON>;
declare function serializeAnnotation(annotation: EllipseAnnotation): AnnotationBackendJSON<EllipseAnnotationJSON>;
declare function serializeAnnotation(annotation: PolygonAnnotation): AnnotationBackendJSON<PolygonAnnotationJSON>;
declare function serializeAnnotation(annotation: PolylineAnnotation): AnnotationBackendJSON<PolylineAnnotationJSON>;
declare function serializeAnnotation(annotation: TextAnnotation): AnnotationBackendJSON<TextAnnotationJSON>;
declare function serializeAnnotation(annotation: NoteAnnotation): AnnotationBackendJSON<NoteAnnotationJSON>;
declare function serializeAnnotation(annotation: StampAnnotation): AnnotationBackendJSON<StampAnnotationJSON, 'color'>;
declare function serializeAnnotation(annotation: ImageAnnotation): AnnotationBackendJSON<ImageAnnotationJSON>;
declare function serializeAnnotation(annotation: MediaAnnotation): AnnotationBackendJSON<MediaAnnotationJSON>;
declare function serializeAnnotation(annotation: LinkAnnotation): AnnotationBackendJSON<LinkAnnotationJSON>;
declare function serializeAnnotation(annotation: WidgetAnnotation): AnnotationBackendJSON<WidgetAnnotationJSON>;
declare function serializeAnnotation(annotation: TextMarkupAnnotation): AnnotationBackendJSON<TextMarkupAnnotationJSON>;
declare function serializeAnnotation(annotation: RedactionAnnotation): AnnotationBackendJSON<RedactionAnnotationJSON>;
declare function serializeAnnotation(annotation: CommentMarkerAnnotation): AnnotationBackendJSON<CommentMarkerAnnotationJSON>;
declare function serializeAnnotation(annotation: UnknownAnnotation): AnnotationBackendJSON<UnknownAnnotationJSON>;
declare function serializeAnnotation(annotation: AnnotationsUnion): AnnotationsBackendJSONUnion;
declare function serializeFormField(formField: FormField): FormFieldJSON;
declare function serializePreset(preset: AnnotationPreset$1): Record<string, any>;
declare function unserializePreset(presetJSON: Record<string, any>): AnnotationPreset$1;
type TargetType = string | HTMLElement | Instance | null;
declare function unload(target: TargetType): boolean;
declare function viewStateFromOpenParameters(viewState: ViewState, hash?: string | null | undefined): ViewState;
type RotatableAnnotation = TextAnnotation | StampAnnotation;
declare const PSPDFKit: {
Immutable: {
List: typeof List;
};
version: string;
Geometry: {
Point: typeof Point;
DrawingPoint: typeof DrawingPoint;
Rect: typeof Rect;
Size: typeof Size;
Inset: typeof Inset;
};
Actions: {
Action: typeof Action;
GoToAction: typeof GoToAction;
GoToEmbeddedAction: typeof GoToEmbeddedAction;
GoToRemoteAction: typeof GoToRemoteAction;
HideAction: typeof HideAction;
JavaScriptAction: typeof JavaScriptAction;
LaunchAction: typeof LaunchAction;
NamedAction: typeof NamedAction;
ResetFormAction: typeof ResetFormAction;
SubmitFormAction: typeof SubmitFormAction;
URIAction: typeof URIAction;
};
Annotations: {
Annotation: typeof Annotation;
CommentMarkerAnnotation: typeof CommentMarkerAnnotation;
HighlightAnnotation: typeof HighlightAnnotation;
InkAnnotation: typeof InkAnnotation;
ShapeAnnotation: typeof ShapeAnnotation;
LineAnnotation: typeof LineAnnotation;
RectangleAnnotation: typeof RectangleAnnotation;
EllipseAnnotation: typeof EllipseAnnotation;
PolygonAnnotation: typeof PolygonAnnotation;
PolylineAnnotation: typeof PolylineAnnotation;
LinkAnnotation: typeof LinkAnnotation;
NoteAnnotation: typeof NoteAnnotation;
MarkupAnnotation: typeof TextMarkupAnnotation;
RedactionAnnotation: typeof RedactionAnnotation;
SquiggleAnnotation: typeof SquiggleAnnotation;
StampAnnotation: typeof StampAnnotation;
StrikeOutAnnotation: typeof StrikeOutAnnotation;
TextAnnotation: typeof TextAnnotation;
UnderlineAnnotation: typeof UnderlineAnnotation;
ImageAnnotation: typeof ImageAnnotation;
UnknownAnnotation: typeof UnknownAnnotation;
WidgetAnnotation: typeof WidgetAnnotation;
MediaAnnotation: typeof MediaAnnotation;
toSerializableObject: typeof serializeAnnotation;
fromSerializableObject: <K extends AnnotationJSONUnion>(annotation: K) => AnnotationJSONToAnnotation<K>;
rotate: (annotation: RotatableAnnotation, rotation: number, contentSize?: Size) => RotatableAnnotation;
};
AnnotationPresets: {
toSerializableObject: typeof serializePreset;
fromSerializableObject: typeof unserializePreset;
};
Comment: typeof Comment;
Bookmark: typeof Bookmark;
CustomOverlayItem: typeof CustomOverlayItem;
FormFields: {
FormField: typeof FormField;
ButtonFormField: typeof ButtonFormField;
CheckBoxFormField: typeof CheckBoxFormField;
ChoiceFormField: typeof ChoiceFormField;
ComboBoxFormField: typeof ComboBoxFormField;
ListBoxFormField: typeof ListBoxFormField;
RadioButtonFormField: typeof RadioButtonFormField;
TextFormField: typeof TextFormField;
SignatureFormField: typeof SignatureFormField;
toSerializableObject: typeof serializeFormField;
fromSerializableObject: (formField: FormFieldJSON) => FormField;
};
FormFieldValue: typeof FormFieldValue;
FormOption: typeof FormOption;
Color: typeof Color;
Instance: typeof Instance;
preloadWorker: typeof preloadWorker;
load: typeof load;
unload: typeof unload;
convertToPDF: typeof convertToPDF;
Error: any;
SaveError: typeof PSPDFKitSaveError;
ViewState: typeof ViewState;
PageInfo: typeof PageInfo;
TextLine: typeof TextLine;
InstantClient: typeof InstantClient;
TextSelection: typeof PublicTextSelection;
SearchResult: typeof SearchResult;
SearchState: typeof SearchState;
AutoSaveMode: {
readonly IMMEDIATE: "IMMEDIATE";
readonly INTELLIGENT: "INTELLIGENT";
readonly DISABLED: "DISABLED";
};
SignatureSaveMode: {
readonly ALWAYS: "ALWAYS";
readonly NEVER: "NEVER";
readonly USING_UI: "USING_UI";
};
LayoutMode: {
readonly SINGLE: "SINGLE";
readonly DOUBLE: "DOUBLE";
readonly AUTO: "AUTO";
};
PrintMode: {
readonly DOM: "DOM";
readonly EXPORT_PDF: "EXPORT_PDF";
};
PrintQuality: {
readonly LOW: "LOW";
readonly MEDIUM: "MEDIUM";
readonly HIGH: "HIGH";
};
ScrollMode: {
readonly CONTINUOUS: "CONTINUOUS";
readonly PER_SPREAD: "PER_SPREAD";
readonly DISABLED: "DISABLED";
};
ZoomMode: {
readonly AUTO: "AUTO";
readonly FIT_TO_WIDTH: "FIT_TO_WIDTH";
readonly FIT_TO_VIEWPORT: "FIT_TO_VIEWPORT";
readonly CUSTOM: "CUSTOM";
};
InteractionMode: {
readonly TEXT_HIGHLIGHTER: "TEXT_HIGHLIGHTER";
readonly INK: "INK";
readonly INK_SIGNATURE: "INK_SIGNATURE";
readonly SIGNATURE: "SIGNATURE";
readonly STAMP_PICKER: "STAMP_PICKER";
readonly STAMP_CUSTOM: "STAMP_CUSTOM";
readonly SHAPE_LINE: "SHAPE_LINE";
readonly SHAPE_RECTANGLE: "SHAPE_RECTANGLE";
readonly SHAPE_ELLIPSE: "SHAPE_ELLIPSE";
readonly SHAPE_POLYGON: "SHAPE_POLYGON";
readonly SHAPE_POLYLINE: "SHAPE_POLYLINE";
readonly INK_ERASER: "INK_ERASER";
readonly NOTE: "NOTE";
readonly COMMENT_MARKER: "COMMENT_MARKER";
readonly TEXT: "TEXT";
readonly CALLOUT: "CALLOUT";
readonly PAN: "PAN";
readonly SEARCH: "SEARCH";
readonly DOCUMENT_EDITOR: "DOCUMENT_EDITOR";
readonly MARQUEE_ZOOM: "MARQUEE_ZOOM";
readonly REDACT_TEXT_HIGHLIGHTER: "REDACT_TEXT_HIGHLIGHTER";
readonly REDACT_SHAPE_RECTANGLE: "REDACT_SHAPE_RECTANGLE";
readonly DOCUMENT_CROP: "DOCUMENT_CROP";
readonly BUTTON_WIDGET: "BUTTON_WIDGET";
readonly TEXT_WIDGET: "TEXT_WIDGET";
readonly RADIO_BUTTON_WIDGET: "RADIO_BUTTON_WIDGET";
readonly CHECKBOX_WIDGET: "CHECKBOX_WIDGET";
readonly COMBO_BOX_WIDGET: "COMBO_BOX_WIDGET";
readonly LIST_BOX_WIDGET: "LIST_BOX_WIDGET";
readonly SIGNATURE_WIDGET: "SIGNATURE_WIDGET";
readonly DATE_WIDGET: "DATE_WIDGET";
readonly FORM_CREATOR: "FORM_CREATOR";
readonly LINK: "LINK";
readonly DISTANCE: "DISTANCE";
readonly PERIMETER: "PERIMETER";
readonly RECTANGLE_AREA: "RECTANGLE_AREA";
readonly ELLIPSE_AREA: "ELLIPSE_AREA";
readonly POLYGON_AREA: "POLYGON_AREA";
readonly CONTENT_EDITOR: "CONTENT_EDITOR";
readonly MULTI_ANNOTATIONS_SELECTION: "MULTI_ANNOTATIONS_SELECTION";
readonly MEASUREMENT: "MEASUREMENT";
readonly MEASUREMENT_SETTINGS: "MEASUREMENT_SETTINGS";
};
unstable_InkEraserMode: {
readonly POINT: "POINT";
readonly STROKE: "STROKE";
};
SidebarMode: {
readonly ANNOTATIONS: "ANNOTATIONS";
readonly BOOKMARKS: "BOOKMARKS";
readonly DOCUMENT_OUTLINE: "DOCUMENT_OUTLINE";
readonly THUMBNAILS: "THUMBNAILS";
readonly CUSTOM: "CUSTOM";
};
UIElement: {
readonly Sidebar: "Sidebar";
};
BlendMode: {
readonly normal: "normal";
readonly multiply: "multiply";
readonly screen: "screen";
readonly overlay: "overlay";
readonly darken: "darken";
readonly lighten: "lighten";
readonly colorDodge: "colorDodge";
readonly colorBurn: "colorBurn";
readonly hardLight: "hardLight";
readonly softLight: "softLight";
readonly difference: "difference";
readonly exclusion: "exclusion";
};
BorderStyle: {
readonly solid: "solid";
readonly dashed: "dashed";
readonly beveled: "beveled";
readonly inset: "inset";
readonly underline: "underline";
};
LineCap: {
readonly square: "square";
readonly circle: "circle";
readonly diamond: "diamond";
readonly openArrow: "openArrow";
readonly closedArrow: "closedArrow";
readonly butt: "butt";
readonly reverseOpenArrow: "reverseOpenArrow";
readonly reverseClosedArrow: "reverseClosedArrow";
readonly slash: "slash";
};
SidebarPlacement: {
readonly START: "START";
readonly END: "END";
};
SignatureAppearanceMode: {
readonly signatureOnly: "signatureOnly";
readonly signatureAndDescription: "signatureAndDescription";
readonly descriptionOnly: "descriptionOnly";
};
ShowSignatureValidationStatusMode: {
readonly IF_SIGNED: "IF_SIGNED";
readonly HAS_WARNINGS: "HAS_WARNINGS";
readonly HAS_ERRORS: "HAS_ERRORS";
readonly NEVER: "NEVER";
};
NoteIcon: {
readonly COMMENT: "COMMENT";
readonly RIGHT_POINTER: "RIGHT_POINTER";
readonly RIGHT_ARROW: "RIGHT_ARROW";
readonly CHECK: "CHECK";
readonly CIRCLE: "CIRCLE";
readonly CROSS: "CROSS";
readonly INSERT: "INSERT";
readonly NEW_PARAGRAPH: "NEW_PARAGRAPH";
readonly NOTE: "NOTE";
readonly PARAGRAPH: "PARAGRAPH";
readonly HELP: "HELP";
readonly STAR: "STAR";
readonly KEY: "KEY";
};
Theme: {
readonly LIGHT: "LIGHT";
readonly DARK: "DARK";
readonly AUTO: "AUTO";
};
ToolbarPlacement: {
readonly TOP: "TOP";
readonly BOTTOM: "BOTTOM";
};
ElectronicSignatureCreationMode: {
readonly DRAW: "DRAW";
readonly IMAGE: "IMAGE";
readonly TYPE: "TYPE";
};
I18n: {
locales: any;
messages: {};
preloadLocalizationData: (locale: string, options?: {
baseUrl?: string | undefined;
}) => Promise<void>;
};
baseUrl: string | undefined;
DocumentIntegrityStatus: {
readonly ok: "ok";
readonly tampered_document: "tampered_document";
readonly failed_to_retrieve_signature_contents: "failed_to_retrieve_signature_contents";
readonly failed_to_retrieve_byterange: "failed_to_retrieve_byterange";
readonly failed_to_compute_digest: "failed_to_compute_digest";
readonly failed_retrieve_signing_certificate: "failed_retrieve_signing_certificate";
readonly failed_retrieve_public_key: "failed_retrieve_public_key";
readonly failed_encryption_padding: "failed_encryption_padding";
readonly general_failure: "general_failure";
};
SignatureValidationStatus: {
readonly valid: "valid";
readonly warning: "warning";
readonly error: "error";
};
SignatureType: {
CMS: string;
CAdES: string;
};
SignatureContainerType: {
raw: string;
pkcs7: string;
};
CertificateChainValidationStatus: {
readonly ok: "ok";
readonly ok_but_self_signed: "ok_but_self_signed";
readonly untrusted: "untrusted";
readonly expired: "expired";
readonly not_yet_valid: "not_yet_valid";
readonly invalid: "invalid";
readonly revoked: "revoked";
readonly failed_to_retrieve_signature_contents: "failed_to_retrieve_signature_contents";
readonly general_validation_problem: "general_validation_problem";
};
AnnotationsWillChangeReason: typeof AnnotationsWillChangeReason;
DocumentComparisonSourceType: {
readonly USE_OPEN_DOCUMENT: "USE_OPEN_DOCUMENT";
readonly USE_FILE_DIALOG: "USE_FILE_DIALOG";
};
MeasurementScaleUnitFrom: {
readonly INCHES: "in";
readonly MILLIMETERS: "mm";
readonly CENTIMETERS: "cm";
readonly POINTS: "pt";
};
MeasurementScaleUnitTo: {
readonly INCHES: "in";
readonly MILLIMETERS: "mm";
readonly CENTIMETERS: "cm";
readonly POINTS: "pt";
readonly FEET: "ft";
readonly METERS: "m";
readonly YARDS: "yd";
readonly KILOMETERS: "km";
readonly MILES: "mi";
};
MeasurementPrecision: {
readonly WHOLE: "whole";
readonly ONE: "oneDp";
readonly TWO: "twoDp";
readonly THREE: "threeDp";
readonly FOUR: "fourDp";
readonly HALVES: "1/2";
readonly QUARTERS: "1/4";
readonly EIGHTHS: "1/8";
readonly SIXTEENTHS: "1/16";
};
MeasurementScale: typeof MeasurementScale;
ProductId: {
SharePoint: string;
Salesforce: string;
Maui_Android: string;
Maui_iOS: string;
Maui_MacCatalyst: string;
Maui_Windows: string;
};
Conformance: {
readonly PDFA_1A: "pdfa-1a";
readonly PDFA_1B: "pdfa-1b";
readonly PDFA_2A: "pdfa-2a";
readonly PDFA_2U: "pdfa-2u";
readonly PDFA_2B: "pdfa-2b";
readonly PDFA_3A: "pdfa-3a";
readonly PDFA_3U: "pdfa-3u";
readonly PDFA_3B: "pdfa-3b";
readonly PDFA_4: "pdfa-4";
readonly PDFA_4E: "pdfa-4e";
readonly PDFA_4F: "pdfa-4f";
};
DocumentPermissions: Record<"annotationsAndForms" | "assemble" | "extract" | "extractAccessibility" | "fillForms" | "modification" | "printHighQuality" | "printing", "annotationsAndForms" | "assemble" | "extract" | "extractAccessibility" | "fillForms" | "modification" | "printHighQuality" | "printing">;
viewStateFromOpenParameters: typeof viewStateFromOpenParameters;
readonly unstable_defaultElectronicSignatureColorPresets: ColorPreset[];
readonly defaultToolbarItems: readonly [{
readonly type: "sidebar-thumbnails";
}, {
readonly type: "sidebar-document-outline";
}, {
readonly type: "sidebar-annotations";
}, {
readonly type: "sidebar-bookmarks";
}, {
readonly type: "pager";
}, {
readonly type: "multi-annotations-selection";
}, {
readonly type: "pan";
}, {
readonly type: "zoom-out";
}, {
readonly type: "zoom-in";
}, {
readonly type: "zoom-mode";
}, {
readonly type: "spacer";
}, {
readonly type: "annotate";
}, {
readonly type: "ink";
}, {
readonly type: "highlighter";
}, {
readonly type: "text-highlighter";
}, {
readonly type: "ink-eraser";
}, {
readonly type: "signature";
}, {
readonly type: "image";
}, {
readonly type: "stamp";
}, {
readonly type: "note";
}, {
readonly type: "text";
}, {
readonly type: "callout";
}, {
readonly type: "line";
}, {
readonly type: "link";
}, {
readonly type: "arrow";
}, {
readonly type: "rectangle";
}, {
readonly type: "ellipse";
}, {
readonly type: "polygon";
}, {
readonly type: "cloudy-polygon";
}, {
readonly type: "polyline";
}, {
readonly type: "print";
}, {
readonly type: "document-editor";
}, {
readonly type: "document-crop";
}, {
readonly type: "search";
}, {
readonly type: "export-pdf";
}, {
readonly type: "debug";
}];
readonly defaultDocumentEditorFooterItems: {
type: BuiltInDocumentEditorFooterItem;
}[];
readonly defaultDocumentEditorToolbarItems: {
type: BuiltInDocumentEditorToolbarItem;
}[];
readonly defaultAnnotationPresets: {
[key: string]: Record<string, unknown>;
};
readonly defaultStampAnnotationTemplates: StampAnnotation<IStampAnnotation>[];
readonly defaultAnnotationsSidebarContent: readonly [typeof EllipseAnnotation, typeof HighlightAnnotation, typeof ImageAnnotation, typeof InkAnnotation, typeof LineAnnotation, typeof NoteAnnotation, typeof PolygonAnnotation, typeof PolylineAnnotation, typeof RectangleAnnotation, typeof SquiggleAnnotation, typeof StampAnnotation, typeof StrikeOutAnnotation, typeof TextAnnotation, typeof UnderlineAnnotation, typeof WidgetAnnotation];
defaultEditableAnnotationTypes: readonly (typeof TextAnnotation | typeof CommentMarkerAnnotation)[];
defaultElectronicSignatureCreationModes: readonly ("DRAW" | "IMAGE" | "TYPE")[];
defaultSigningFonts: readonly Font[];
Options: {
MIN_TEXT_ANNOTATION_SIZE: number;
MIN_INK_ANNOTATION_SIZE: number;
MIN_SHAPE_ANNOTATION_SIZE: number;
MIN_IMAGE_ANNOTATION_SIZE: number;
MIN_STAMP_ANNOTATION_SIZE: number;
MIN_WIDGET_ANNOTATION_SIZE: number;
ENABLE_INK_SMOOTH_LINES: boolean;
INK_EPSILON_RANGE_OPTIMIZATION: number;
SIGNATURE_SAVE_MODE: ISignatureSaveMode;
INITIAL_DESKTOP_SIDEBAR_WIDTH: number;
IGNORE_DOCUMENT_PERMISSIONS: boolean;
SELECTION_OUTLINE_PADDING: (viewportSize: Size) => number;
RESIZE_ANCHOR_RADIUS: (viewportSize: Size) => number;
SELECTION_STROKE_WIDTH: number;
TEXT_ANNOTATION_AUTOFIT_TEXT_ON_EXPORT: boolean;
TEXT_ANNOTATION_AUTOFIT_BOUNDING_BOX_ON_EDIT: boolean;
DISABLE_KEYBOARD_SHORTCUTS: boolean;
DEFAULT_INK_ERASER_CURSOR_WIDTH: number;
COLOR_PRESETS: ColorPreset[];
LINE_CAP_PRESETS: string[];
LINE_WIDTH_PRESETS: number[] | null | undefined;
HIGHLIGHT_COLOR_PRESETS: ColorPreset[];
TEXT_MARKUP_COLOR_PRESETS: ColorPreset[];
NOTE_COLOR_PRESETS: ColorPreset[];
PDF_JAVASCRIPT: boolean;
BREAKPOINT_MD_TOOLBAR: number;
BREAKPOINT_SM_TOOLBAR: number;
};
SearchPattern: {
readonly CREDIT_CARD_NUMBER: "credit_card_number";
readonly DATE: "date";
readonly TIME: "time";
readonly EMAIL_ADDRESS: "email_address";
readonly INTERNATIONAL_PHONE_NUMBER: "international_phone_number";
readonly IP_V4: "ipv4";
readonly IP_V6: "ipv6";
readonly MAC_ADDRESS: "mac_address";
readonly NORTH_AMERICAN_PHONE_NUMBER: "north_american_phone_number";
readonly SOCIAL_SECURITY_NUMBER: "social_security_number";
readonly URL: "url";
readonly US_ZIP_CODE: "us_zip_code";
readonly VIN: "vin";
};
SearchType: {
readonly TEXT: "text";
readonly PRESET: "preset";
readonly REGEX: "regex";
};
UIDateTimeElement: {
readonly COMMENT_THREAD: "COMMENT_THREAD";
readonly ANNOTATIONS_SIDEBAR: "ANNOTATIONS_SIDEBAR";
};
generateInstantId: typeof generateInstantId;
Font: typeof Font;
};
export { Action, Annotation, AnnotationToolbarItem, AnnotationsUnion, AnnotationsWillChangeReason, Bookmark, ButtonFormField, CheckBoxFormField, ChoiceFormField, Color, ComboBoxFormField, Comment, CommentMarkerAnnotation, Configuration, Conformance, CustomOverlayItem, DocumentEditorFooterItem, DocumentEditorToolbarItem, DrawingPoint, EllipseAnnotation, EllipseAnnotationJSON, Font, FormField, FormFieldValue, FormOption, GoToAction, GoToEmbeddedAction, GoToRemoteAction, HideAction, HighlightAnnotation, ImageAnnotation, ImageAnnotationJSON, InkAnnotation, InkAnnotationJSON, Inset, Instance, InstantClient, JavaScriptAction, LaunchAction, LineAnnotation, LineAnnotationJSON, LinkAnnotation, List, ListBoxFormField, MentionableUser, NamedAction, NoteAnnotation, NoteAnnotationJSON, PageInfo, Point, PolygonAnnotation, PolygonAnnotationJSON, PolylineAnnotation, PolylineAnnotationJSON, RadioButtonFormField, Rect, RectangleAnnotation, RectangleAnnotationJSON, RedactionAnnotation, RedactionAnnotationJSON, ResetFormAction, SearchResult, SearchState, ServerConfiguration, ShapeAnnotation, ShapeAnnotationsUnion, SignatureFormField, Size, SquiggleAnnotation, StampAnnotation, StampAnnotationJSON, StandaloneConfiguration, StrikeOutAnnotation, SubmitFormAction, TextAnnotation, TextAnnotationJSON, TextFormField, TextLine, TextMarkupAnnotation, TextMarkupAnnotationJSON, TextMarkupAnnotationsUnion, PublicTextSelection as TextSelection, ToolbarItem, URIAction, UnderlineAnnotation, UnknownAnnotation, UnknownAnnotationJSON, ViewState, WidgetAnnotation, WidgetAnnotationJSON, PSPDFKit as default };