/**
 * A layer
 *
 * @typedef {object} Layer
 * @property {string} id The id of the layer
 * @property {string} key A identifier for the layer
 * @property {string} name The display name of the layer
 * @property {BoundingBox} bb The current bounding box of the layer, in layer coordinates
 * @property {Size} resolution The resolution of the layer (canvas)
 * @property {boolean} full If the layer is a full layer (occupies the full collection)
 * @property {number} x The x coordinate of the layer
 * @property {number} y The y coordinate of the layer
 * @property {number} width The width of the layer
 * @property {number} w The width of the layer
 * @property {number} height The height of the layer
 * @property {number} h The height of the layer
 * @property {Point} origin The location of the origin ((0, 0) point) of the layer (If canvas goes from -64, -32 to 128, 512, it's (64, 32))
 * @property {HTMLCanvasElement} canvas The canvas element of the layers
 * @property {CanvasRenderingContext2D} ctx The context of the canvas of the layer
 * @property {function} clear Clears the layer contents
 * @property {function} moveAfter Moves this layer to another level (after given layer)
 * @property {function} moveBefore Moves this layer to another level (before given layer)
 * @property {function} moveTo Moves this layer to another location
 * @property {function} resize Resizes the layer in place
 * @property {function} hide Hides the layer
 * @property {function} unhide Unhides the layer
 */

/**
 * A layer collection
 *
 * @typedef {object} LayerCollection
 * @property {string} id The id of the collection
 * @property {string} key A identifier for the collection
 * @property {string} name The display name of the collection
 * @property {HTMLDivElement} element The base element of the collection
 * @property {HTMLDivElement} inputElement The element used for input handling for the collection
 * @property {Point} inputOffset The offset for calculating layer coordinates from input element input information
 * @property {Point} origin The location of the origin ((0, 0) point) of the collection (If canvas goes from -64, -32 to 128, 512, it's (64, 32))
 * @property {BoundingBox} bb The current bounding box of the collection, in layer coordinates
 * @property {{[key: string]: Layer}} layers An object for quick access to layers of the collection
 * @property {Size} size The size of the collection (CSS)
 * @property {Size} resolution The resolution of the collection (canvas)
 * @property {function} expand Expands the collection and its full layers by the specified amounts
 * @property {function} registerLayer Registers a new layer
 * @property {function} deleteLayer Deletes a layer from the collection
 */