npm package: @iiif/presentation-3
Description: IIIF Presentation v3.0 typescript types
Author: Stephen Fraser
Latest version: 2.2.3

# IIIF Presentation 3 types

A set of types that describe the format of the IIIF Presentation 3.0 specification as accurately as possible.

Installation:

```
$ npm i @iiif/presentation-3
```

Installation (yarn):

```
$ yarn add @iiif/presentation-3
```

Usage (Typescript):

```typescript
import { Manifest } from '@iiif/presentation-3';

const manifest = getManifestFromSomewhere() as Manifest;

function doSomethingWithManifest(manifest: Manifest) {
  // ...
}
```

Usage (Javascript):

```javascript
/**
 * @typedef { import("@iiif/presentation-3").Manifest } Manifest
 */

/**
 * @type {Manifest}
 */
const manifest = {};


/**
 * @param manifest {Manifest}
 */
function doSomethingWithManifest(manifest) {
  console.log(manifest.label);
}

// You can also inline the import:

/**
 * @type {import("@iiif/presentation-3").Manifest}
 */
const manifest2 = {};
```

This will enable types completions in VSCode and IDEA, along with inline documentation from the IIIF specification:
<img width="713" alt="Screenshot 2021-03-28 at 17 11 14" src="https://user-images.githubusercontent.com/8266711/112759081-4b651600-8fe9-11eb-83c6-9739d557716d.png" />

### Support

The following types are supported:

* Manifest
* Collection
* Canvas
* Annotation
* Annotation Collection
* Annotation Page
* Content Resource
* Provider
* Range
* Service

With some other types that aim to cover common services:

* Auth service
* GeoJSON service
* Image service
* Search service

### Full List of types

#### Basic types

| Type                       | Description                                                             |
|----------------------------|-------------------------------------------------------------------------|
| **ResourceType**           | String literals for the possible values of `type`                       |
| **InternationalString**    | Common language property (`{ "none": ["..."] }`)                        |
| **Reference**              | A reference to another resources (`{id: '..', type: '..'}`)             |
| **JsonLDContext**          | A partial of `{'@context': ... }`, extended by resources with contexts  |
| **MetadataItem**           | Label value pair used in the metadata field                             |
| **SpecificationBehaviors** | String literals for supported behaviors mentioned in the specification  |
| **SpecificationTimeMode**  | String literals for supported time modes mentioned in the specification |
| **ViewingDirection**       | String literal for the 4 supported viewing directions                   |

#### Resources

| Type                        | Description                                                                               |
|-----------------------------|-------------------------------------------------------------------------------------------|
| **Service**                 | Any service that can appear in services property. Union of generic and specific services. |
| **Manifest**                | Types for a valid IIIF Manifest                                                           |
| **Canvas**                  | Types for a valid IIIF Canvas                                                             |
| **ContentResource**         | Types for a Content Resource - warning this can be many things!                           |
| **AnnotationPage**          | Types for a valid Annotation page                                                         |
| **Annotation**              | Types for a valid Annotation in the context of a IIIF manifest                            |
| **AnnotationW3C**           | Types for a valid W3C annotation (different from above)                                   |
| **Collection**              | Types for a valid IIIF Collection                                                         |
| **Range**                   | Types for a valid IIIF Range                                                              |
| **AnnotationCollection**    | Types for a valid Annotation collection                                                   |
| **IIIFExternalWebResource** | Abstract type for an external web resource                                                |
| **ContentResourceString**   | Alias for `string`                                                                        |

#### Resource items (structural)

| Type                | Description                      |
|---------------------|----------------------------------|
| **CanvasItems**     | Alias for Annotation Page        |
| **CollectionItems** | Union of Manifest or Collection  |
| **ManifestItems**   | Alias for Canvas                 |
| **RangeItems**      | Union of Range, Canvas or string |

#### Services

| Type                                     | Description |
|------------------------------------------|-------------|
| **AuthAccessTokenServiceError**          | [todo]      |
| **AuthAccessTokenServiceResponse**       | [todo]      |
| **AuthAbstractService**                  | [todo]      |
| **AuthAccessTokenService**               | [todo]      |
| **AuthExternalService**                  | [todo]      |
| **AuthClickThroughService**              | [todo]      |
| **AuthKioskService**                     | [todo]      |
| **AuthLoginService**                     | [todo]      |
| **AuthLogoutService**                    | [todo]      |
| **AuthService**                          | [todo]      |
| **GeoJsonService**                       | [todo]      |
| **ImageService**                         | [todo]      |
| **ImageService2**                        | [todo]      |
| **ImageServiceProfile**                  | [todo]      |
| **ImageProfile**                         | [todo]      |
| **ImageService3**                        | [todo]      |
| **ImageSize**                            | [todo]      |
| **ImageTile**                            | [todo]      |
| **SearchService**                        | [todo]      |
| **SearchServiceAutocomplete**            | [todo]      |
| **SearchServiceAutocompleteQueryParams** | [todo]      |
| **SearchServiceAutocompleteResponse**    | [todo]      |
| **SearchServiceCommonHitSelectors**      | [todo]      |
| **SearchServiceCommonResources**         | [todo]      |
| **SearchServiceQueryParams**             | [todo]      |
| **SearchServiceSearchCommonSelectors**   | [todo]      |
| **SearchServiceSearchResponse**          | [todo]      |

#### W3C Annotations

Most of these types are not exported, but internally follows the full W3C specification.

[W3C Model Specification](https://www.w3.org/TR/annotation-model)

| Type                        | Description |
|-----------------------------|-------------|
| **Agent**                   | [todo]      |
| **AnnotationBody**          | [todo]      |
| **AnnotationTarget**        | [todo]      |
| **AnyMotivation**           | [todo]      |
| **Audience**                | [todo]      |
| **Body**                    | [todo]      |
| **ChoiceBody**              | [todo]      |
| **ChoiceTarget**            | [todo]      |
| **Creator**                 | [todo]      |
| **BasicState**              | [todo]      |
| **CssSelector**             | [todo]      |
| **DataPositionSelector**    | [todo]      |
| **FragmentSelector**        | [todo]      |
| **Selector**                | [todo]      |
| **RefinedBy**               | [todo]      |
| **RefinedByState**          | [todo]      |
| **EmbeddedResource**        | [todo]      |
| **ExternalResourceTypes**   | [todo]      |
| **ExternalWebResource**     | [todo]      |
| **RangeSelector**           | [todo]      |
| **RequestHeaderState**      | [todo]      |
| **SpecificResource**        | [todo]      |
| **State**                   | [todo]      |
| **SvgSelector**             | [todo]      |
| **TextPositionSelector**    | [todo]      |
| **TextQuoteSelector**       | [todo]      |
| **TimeState**               | [todo]      |
| **XPathSelector**           | [todo]      |
| **Stylesheet**              | [todo]      |
| **Target**                  | [todo]      |
| **TargetComposite**         | [todo]      |
| **TargetList**              | [todo]      |
| **TargetIndependents**      | [todo]      |
| **W3CAnnotationBody**       | [todo]      |
| **W3CAnnotationCollection** | [todo]      |
| **W3CAnnotationPage**       | [todo]      |
| **W3CAnnotationTarget**     | [todo]      |
| **W3CMotivation**           | [todo]      |
| **LinkedResource**          | [todo]      |
| **ResourceBaseProperties**  | [todo]      |
| **OtherProperties**         | [todo]      |

#### Normalized resources

The normalized types have moved
to [@iiif/presentation-3-normalized](https://github.com/IIIF-Commons/presentation-3-normalized).

#### Partial / Abstract types

These types are building blocks of other types.

| Type                      | Description                                                                       |
|---------------------------|-----------------------------------------------------------------------------------|
| **LinkingProperties**     | The linking properties of IIIF in a map `LinkingProperties['seeAlso']`            |
| **DescriptiveProperties** | The descriptive properties of IIIF in a map `DescriptiveProperties['label']`      |
| **TechnicalProperties**   | The technical properties of IIIF in a map `DescriptiveProperties['id']`           |
| **StructuralProperties**  | The structural properties of IIIF in a map `DescriptiveProperties['annotations']` |

#### Helpers

| Type               | Description                                             |
|--------------------|---------------------------------------------------------|
| **OmitProperties** | Helper for removing properties from another type        |
| **IdOrAtId**       | Helper for resources that can have either `id` or `@id` |
| **SomeRequired**   | Helper for requiring some properties from another type  |
| **Required**       | Helper for requiring all properties from another type   |