npm package: 3d-manifesto-dev-test
Description: IIIF Presentation API utility library for client and server with 3D extension
Author: @edsilv
Latest version: 0.9.0

# manifesto-3D

Client and server utility library to support draft 3D extensions to to the IIIF Presentation API client and server utility library.

Forked from [IIIF-Commons/manifesto](https://github.com/IIIF-Commons/manifesto).

Goal of implementing the [Draft API](https://github.com/IIIF/3d/blob/main/temp-draft-4.md) under development by the [IIIF 3D Technical Study Group](https://github.com/IIIF/3d/).


### Documentation

[Manifesto-3D.js](https://iiif-commons.github.io/manifesto-3d/)

### Loading through package manager

    npm install manifesto-3d.js --save

### Demonstration Projects
[Example manifests](https://github.com/IIIF/3d/tree/main/manifests) conforming to the [Draft API](https://github.com/IIIF/3d/blob/main/temp-draft-4.md) .

[Prototype Viewers](https://github.com/IIIF/3d/issues/28) rendering the example manifests.
- [Three-JS based viewer](https://codesandbox.io/p/github/JulieWinchester/iiif-threejs-demo)
- [X3D/X3DOM based viewer](https://codesandbox.io/p/github/vincentmarchetti/iiif-x3dom-demo/main)
- [Smithsonian Voyager](https://codesandbox.io/p/sandbox/voyager-annotations-demo-forked-l83l6w)

### ChangeLog

From start point of the version distributed  from  [JulieWinchester/manifesto](https://github.com/JulieWinchester/manifesto/tree/3dtsg-dev-dist)

#### To package.json version 4.3.0-draft3dapi.0.1.0  
distributed from [vincentmarchetti/manifesto#3dtsg-main]() there were these changes:

1. This test is no longer useful for the Target of an Annotation:

        if ( typeof(target) === "string" ){
            // handle case where target is a Scene
        }
    
    Draft manifest [ 3_lights/direction_light_transform ]( https://github.com/IIIF/3d/blob/main/manifests/3_lights/direction_light_transform_rotate.json ) uses two ways of encoding the value of a target property for an Annotation: with a json string value of the IRI, or with an object with `id` property of the IRI for the  Scene. To avoid exponential expansion of if-else code when combined with target property which can also  be `SpecificResource` resources, the parsing code was changed so tha the value returned from `getTarget()` is always an object.
    
    Since the Target property will always be an object referencing a `Scene`, or a `SpecificResource` whose `source` property is a `Scene`, the code for handling either would be
    
        if (target.isSpecificResource){
            // handle a SpecificResource, with  selector property
            // and whose source property is the Scene
        }
        else{
            // handle a Scene directly
        }
        
2. Annotation.getBody3D() is deprecated.

    The `Annotation.getBody()` from the Presentation 3 code has been extended to support the resources that can be included in a 3d Annotation body property. An important difference is that the `getBody()` function  returns an array of objects, while the `getBody3D()` returns a single object. The deprecated function `getBody3D()` should be replaced with `getBody()[0]`

#### To package.json version 4.3.0-draft3dapi.0.2.0

1. Fixed a bug that occurred in determining the 'source' property of a SpecificResource resource that is the "target" property of an Annotation. This bug escaped detection previously because in the 3D case this 'source' property has always been a Scene resource, and the value is not needed for visualization. 

#### To package.json version 4.3.0-draft3dapi.0.3.0

1. Added isSpecificResource and isAnnotationBody properties to the SpecificResource and AnnotationBody classes, in response to developer suggestion. (Slack, Apr 24 2024)

#### To package.json version 4.3.0-draft3dapi.0.4.0

1. Implemented Perspective Camera properties in the Camera class.

#### To package.json version 4.3.0-draft3dapi.0.5.0

1. Implement lookAt property of Camera class and of Light class.