{
  "version": 3,
  "sources": ["index.js", "utils/log.js", "lib/init.js", "encoders/frame-encoder.js", "encoders/tar/utils.js", "encoders/tar/header.js", "encoders/tar/tar.js", "encoders/tar/tar-builder.js", "encoders/utils/index.js", "encoders/video/png-sequence-encoder.js", "encoders/video/jpeg-sequence-encoder.js", "encoders/photo/photo-encoder.js", "encoders/photo/jpeg-encoder.js", "encoders/photo/png-encoder.js", "encoders/video/webm-encoder.js", "encoders/utils/preview-encoder.js", "encoders/video/gif-encoder.js", "animations/animation.js", "keyframes/keyframes.js", "keyframes/easings.js", "keyframes/utils.js", "keyframes/camera-keyframes.js", "keyframes/deck-layer-keyframes.js", "keyframes/kepler-layer-keyframes.js", "keyframes/kepler-filter-keyframes.js", "keyframes/kepler-trip-keyframes.js", "animations/deck-animation.js", "animations/kepler-animation.js", "animations/animation-manager.js", "capture/video-capture.js", "capture/utils.js", "adapters/deck-adapter.js"],
  "sourcesContent": ["// hubble.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// Intialize globals, check version\nexport { VERSION } from \"./lib/init.js\";\nexport { DeckAdapter } from \"./adapters/index.js\";\nexport { PNGSequenceEncoder, JPEGSequenceEncoder, JPEGEncoder, PNGEncoder, WebMEncoder, FrameEncoder, PreviewEncoder, GifEncoder } from \"./encoders/index.js\";\nexport { Keyframes, CameraKeyframes, hold, linear, DeckLayerKeyframes, KeplerFilterKeyframes, KeplerLayerKeyframes, KeplerTripKeyframes } from \"./keyframes/index.js\";\nexport { AnimationManager, Animation, DeckAnimation, KeplerAnimation } from \"./animations/index.js\";\n", "// hubble.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Log } from '@probe.gl/log';\nconst defaultLogger = new Log({ id: 'hubble' });\nexport default defaultLogger;\n", "// hubble.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport log from \"../utils/log.js\";\nfunction checkVersion() {\n    // Version detection using typescript plugin. Note: global type is already declared by deck.\n    // Fallback for tests and SSR since global variable is defined by esbuild.\n    const version = typeof \"1.4.0\" !== 'undefined'\n        ? \"1.4.0\" : globalThis.HUBBLE_VERSION || 'untranspiled source';\n    // Note: a `hubble` object not created by hubble.gl may exist in the global scope\n    const existingVersion = globalThis.hubble && globalThis.hubble.VERSION;\n    if (existingVersion && existingVersion !== version) {\n        throw new Error(`hubble.gl - multiple versions detected: ${existingVersion} vs ${version}`);\n    }\n    if (!existingVersion) {\n        log.log(1, `hubble.gl ${version}`)();\n        globalThis.hubble = {\n            ...globalThis.hubble,\n            VERSION: version,\n            version,\n            log\n        };\n    }\n    return version;\n}\nexport const VERSION = checkVersion();\n", "// hubble.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nexport default class FrameEncoder {\n    constructor(settings = {}) {\n        this.extension = '';\n        this.mimeType = '';\n        this.framerate = settings.framerate || 30;\n    }\n    start() {\n        throw new Error('Encoder: Implement a start function');\n    }\n    async add(canvas) {\n        throw new Error('Encoder: Implement an add function');\n    }\n    async save() {\n        throw new Error('Encoder: Implement a save function');\n    }\n}\n", "// hubble.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nconst lookup = [\n    'A',\n    'B',\n    'C',\n    'D',\n    'E',\n    'F',\n    'G',\n    'H',\n    'I',\n    'J',\n    'K',\n    'L',\n    'M',\n    'N',\n    'O',\n    'P',\n    'Q',\n    'R',\n    'S',\n    'T',\n    'U',\n    'V',\n    'W',\n    'X',\n    'Y',\n    'Z',\n    'a',\n    'b',\n    'c',\n    'd',\n    'e',\n    'f',\n    'g',\n    'h',\n    'i',\n    'j',\n    'k',\n    'l',\n    'm',\n    'n',\n    'o',\n    'p',\n    'q',\n    'r',\n    's',\n    't',\n    'u',\n    'v',\n    'w',\n    'x',\n    'y',\n    'z',\n    '0',\n    '1',\n    '2',\n    '3',\n    '4',\n    '5',\n    '6',\n    '7',\n    '8',\n    '9',\n    '+',\n    '/'\n];\nexport function clean(length) {\n    let i;\n    const buffer = new Uint8Array(length);\n    for (i = 0; i < length; i += 1) {\n        buffer[i] = 0;\n    }\n    return buffer;\n}\nexport function extend(orig, length, addLength, multipleOf) {\n    const newSize = length + addLength;\n    const buffer = clean((Math.floor(newSize / multipleOf) + 1) * multipleOf);\n    buffer.set(orig);\n    return buffer;\n}\nexport function pad(num, bytes, base = 8) {\n    const numStr = num.toString(base);\n    return '000000000000'.substr(numStr.length + 12 - bytes) + num;\n}\nexport function stringToUint8(input, out, offset = 0) {\n    let i;\n    let length;\n    out = out || clean(input.length);\n    for (i = 0, length = input.length; i < length; i += 1) {\n        out[offset] = input.charCodeAt(i);\n        offset += 1;\n    }\n    return out;\n}\nexport function uint8ToBase64(uint8) {\n    let i;\n    // if we have 1 byte left, pad 2 bytes\n    const extraBytes = uint8.length % 3;\n    let output = '';\n    let temp;\n    let length;\n    function tripletToBase64(num) {\n        return (lookup[(num >> 18) & 0x3f] +\n            lookup[(num >> 12) & 0x3f] +\n            lookup[(num >> 6) & 0x3f] +\n            lookup[num & 0x3f]);\n    }\n    // go through the array every three bytes, we'll deal with trailing stuff later\n    for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) {\n        temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + uint8[i + 2];\n        output += tripletToBase64(temp);\n    }\n    // this prevents an ERR_INVALID_URL in Chrome (Firefox okay)\n    switch (output.length % 4) {\n        case 1:\n            output += '=';\n            break;\n        case 2:\n            output += '==';\n            break;\n        default:\n            break;\n    }\n    return output;\n}\n", "// hubble.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport * as utils from \"./utils.js\";\n/*\nstruct posix_header {             // byte offset\n    char name[100];               //   0\n    char mode[8];                 // 100\n    char uid[8];                  // 108\n    char gid[8];                  // 116\n    char size[12];                // 124\n    char mtime[12];               // 136\n    char chksum[8];               // 148\n    char typeflag;                // 156\n    char linkname[100];           // 157\n    char magic[6];                // 257\n    char version[2];              // 263\n    char uname[32];               // 265\n    char gname[32];               // 297\n    char devmajor[8];             // 329\n    char devminor[8];             // 337\n    char prefix[155];             // 345\n                                  // 500\n};\n*/\nexport const structure = [\n    {\n        field: 'fileName',\n        length: 100\n    },\n    {\n        field: 'fileMode',\n        length: 8\n    },\n    {\n        field: 'uid',\n        length: 8\n    },\n    {\n        field: 'gid',\n        length: 8\n    },\n    {\n        field: 'fileSize',\n        length: 12\n    },\n    {\n        field: 'mtime',\n        length: 12\n    },\n    {\n        field: 'checksum',\n        length: 8\n    },\n    {\n        field: 'type',\n        length: 1\n    },\n    {\n        field: 'linkName',\n        length: 100\n    },\n    {\n        field: 'ustar',\n        length: 8\n    },\n    {\n        field: 'owner',\n        length: 32\n    },\n    {\n        field: 'group',\n        length: 32\n    },\n    {\n        field: 'majorNumber',\n        length: 8\n    },\n    {\n        field: 'minorNumber',\n        length: 8\n    },\n    {\n        field: 'filenamePrefix',\n        length: 155\n    },\n    {\n        field: 'padding',\n        length: 12\n    }\n];\nexport function format(data, cb) {\n    const buffer = utils.clean(512);\n    let offset = 0;\n    structure.forEach(value => {\n        const str = data[value.field] || '';\n        let i;\n        let length;\n        for (i = 0, length = str.length; i < length; i += 1) {\n            buffer[offset] = str.charCodeAt(i);\n            offset += 1;\n        }\n        // space it out with nulls\n        offset += value.length - i;\n    });\n    if (typeof cb === 'function') {\n        return cb(buffer, offset);\n    }\n    return buffer;\n}\n", "// hubble.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport * as utils from \"./utils.js\";\nimport * as header from \"./header.js\";\nlet blockSize;\nconst recordSize = 512;\nclass Tar {\n    constructor(recordsPerBlock) {\n        this.written = 0;\n        blockSize = (recordsPerBlock || 20) * recordSize;\n        this.out = utils.clean(blockSize);\n        this.blocks = [];\n        this.length = 0;\n        this.save = this.save.bind(this);\n        this.clear = this.clear.bind(this);\n        this.append = this.append.bind(this);\n    }\n    append(filepath, input, opts = {}) {\n        let checksum;\n        if (typeof input === 'string') {\n            input = utils.stringToUint8(input);\n        }\n        else if (input?.constructor && input.constructor !== Uint8Array.prototype.constructor) {\n            const errorInput = input.constructor\n                .toString()\n                .match(/function\\s*([$A-Za-z_][0-9A-Za-z_]*)\\s*\\(/)\n                ?.at(1);\n            const errorMessage = `Invalid input type. You gave me: ${errorInput}`;\n            throw errorMessage;\n        }\n        const mode = opts.mode || parseInt('777', 8) & 0xfff;\n        const mtime = opts.mtime || Math.floor(Number(new Date()) / 1000);\n        const uid = opts.uid || 0;\n        const gid = opts.gid || 0;\n        const data = {\n            fileName: filepath,\n            fileMode: utils.pad(mode, 7),\n            uid: utils.pad(uid, 7),\n            gid: utils.pad(gid, 7),\n            fileSize: utils.pad(input.length, 11),\n            mtime: utils.pad(mtime, 11),\n            checksum: '        ',\n            // 0 = just a file\n            type: '0',\n            ustar: 'ustar  ',\n            owner: opts.owner || '',\n            group: opts.group || ''\n        };\n        // calculate the checksum\n        checksum = 0;\n        Object.keys(data).forEach(key => {\n            let i;\n            const value = data[key];\n            let length;\n            for (i = 0, length = value.length; i < length; i += 1) {\n                checksum += value.charCodeAt(i);\n            }\n        });\n        data.checksum = `${utils.pad(checksum, 6)}\\u0000 `;\n        const headerArr = header.format(data);\n        const headerLength = Math.ceil(headerArr.length / recordSize) * recordSize;\n        const inputLength = Math.ceil(input.length / recordSize) * recordSize;\n        this.blocks.push({\n            header: headerArr,\n            input,\n            headerLength,\n            inputLength\n        });\n    }\n    save() {\n        const buffers = [];\n        const chunks = [];\n        let length = 0;\n        const max = Math.pow(2, 20);\n        let chunk = [];\n        this.blocks.forEach(b => {\n            if (length + b.headerLength + b.inputLength > max) {\n                chunks.push({ blocks: chunk, length });\n                chunk = [];\n                length = 0;\n            }\n            chunk.push(b);\n            length += b.headerLength + b.inputLength;\n        });\n        chunks.push({ blocks: chunk, length });\n        chunks.forEach(c => {\n            const buffer = new Uint8Array(c.length);\n            let written = 0;\n            c.blocks.forEach(b => {\n                buffer.set(b.header, written);\n                written += b.headerLength;\n                buffer.set(b.input, written);\n                written += b.inputLength;\n            });\n            buffers.push(buffer);\n        });\n        buffers.push(new Uint8Array(2 * recordSize));\n        return new Blob(buffers, { type: 'octet/stream' });\n    }\n    clear() {\n        this.written = 0;\n        this.out = utils.clean(blockSize);\n    }\n}\nexport default Tar;\n", "// hubble.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport Tar from \"./tar.js\";\nconst TAR_BUILDER_OPTIONS = {\n    recordsPerBlock: 20\n};\nexport default class TARBuilder {\n    static get properties() {\n        return {\n            id: 'tar',\n            name: 'TAR',\n            extensions: ['tar'],\n            mimeType: 'application/x-tar',\n            builder: TARBuilder,\n            options: TAR_BUILDER_OPTIONS\n        };\n    }\n    constructor(options) {\n        this.options = { ...TAR_BUILDER_OPTIONS, ...options };\n        this.tape = new Tar(this.options.recordsPerBlock);\n        this.count = 0;\n    }\n    addFile(buffer, filename) {\n        this.tape.append(filename, new Uint8Array(buffer));\n        this.count++;\n    }\n    async build() {\n        return new Response(this.tape.save()).arrayBuffer();\n    }\n}\n", "// hubble.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n/* global fetch */\nexport function pad(n) {\n    return String(`0000000${n}`).slice(-7);\n}\nexport async function canvasToArrayBuffer(canvas, type, quality) {\n    const base64 = canvas.toDataURL(type, quality);\n    const response = await fetch(base64);\n    return await response.arrayBuffer();\n}\nexport function checkIfBlank(b64) {\n    if (b64.length < 100000) {\n        console.warn('Possibly blank image!', b64, b64.length);\n        return true;\n    }\n    return false;\n}\n", "// hubble.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport FrameEncoder from \"../frame-encoder.js\";\nimport TARBuilder from \"../tar/tar-builder.js\";\nimport { pad, canvasToArrayBuffer } from \"../utils/index.js\";\nimport { encode } from '@loaders.gl/core';\nimport { ZipWriter } from '@loaders.gl/zip';\nconst TAR = 'tar';\nconst ZIP = 'zip';\nclass PNGSequenceEncoder extends FrameEncoder {\n    constructor(settings) {\n        super(settings);\n        this.tarBuilder = null;\n        this.filemap = {};\n        this.options = { archive: TAR };\n        if (settings.png) {\n            this.options = { ...settings.png };\n        }\n        this.options.archive = this.options.archive || TAR;\n        switch (this.options.archive) {\n            case TAR: {\n                this.mimeType = TARBuilder.properties.mimeType;\n                this.extension = `.${TARBuilder.properties.extensions[0]}`;\n                break;\n            }\n            case ZIP: {\n                this.mimeType = ZipWriter.mimeTypes?.[0] || '';\n                this.extension = `.${ZipWriter.extensions?.[0]}`;\n                break;\n            }\n            default: {\n                throw new Error(`Unsupported archive type [zip, tar]: ${this.options.archive}`);\n            }\n        }\n    }\n    start() {\n        this.tarBuilder = new TARBuilder({});\n        this.filemap = {};\n    }\n    async add(canvas) {\n        const mimeType = 'image/png';\n        const extension = '.png';\n        const buffer = await canvasToArrayBuffer(canvas, mimeType);\n        switch (this.options.archive) {\n            case TAR: {\n                if (!this.tarBuilder) {\n                    break;\n                }\n                const filename = pad(this.tarBuilder.count) + extension;\n                this.tarBuilder.addFile(buffer, filename);\n                break;\n            }\n            case ZIP: {\n                const filename = pad(Object.keys(this.filemap).length) + extension;\n                this.filemap[filename] = buffer;\n                break;\n            }\n            default: {\n                throw new Error(`Unsupported archive type [zip, tar]: ${this.options.archive}`);\n            }\n        }\n    }\n    /**\n     * @return {Promise<Blob>}\n     */\n    async save() {\n        switch (this.options.archive) {\n            case TAR: {\n                if (!this.tarBuilder) {\n                    break;\n                }\n                const arrayBuffer = await this.tarBuilder.build();\n                return new Blob([arrayBuffer], { type: TARBuilder.properties.mimeType });\n            }\n            case ZIP: {\n                const arrayBuffer = await encode(this.filemap, ZipWriter);\n                return new Blob([arrayBuffer], { type: ZipWriter.mimeTypes?.[0] });\n            }\n            default: {\n                throw new Error(`Unsupported archive type [zip, tar]: ${this.options.archive}`);\n            }\n        }\n        return null;\n    }\n}\nexport default PNGSequenceEncoder;\n", "// hubble.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport FrameEncoder from \"../frame-encoder.js\";\nimport TARBuilder from \"../tar/tar-builder.js\";\nimport { pad, canvasToArrayBuffer } from \"../utils/index.js\";\nimport { encode } from '@loaders.gl/core';\nimport { ZipWriter } from '@loaders.gl/zip';\nconst TAR = 'tar';\nconst ZIP = 'zip';\nclass JPEGSequenceEncoder extends FrameEncoder {\n    constructor(settings) {\n        super(settings);\n        this.tarBuilder = null;\n        this.filemap = {};\n        this.options = { quality: 1, archive: TAR };\n        if (settings.jpeg) {\n            this.options = { ...settings.jpeg };\n        }\n        this.options.quality = this.options.quality || 1.0;\n        this.options.archive = this.options.archive || TAR;\n        switch (this.options.archive) {\n            case TAR: {\n                this.mimeType = TARBuilder.properties.mimeType;\n                this.extension = `.${TARBuilder.properties.extensions[0]}`;\n                break;\n            }\n            case ZIP: {\n                this.mimeType = ZipWriter.mimeTypes?.[0] || '';\n                this.extension = `.${ZipWriter.extensions?.[0]}`;\n                break;\n            }\n            default: {\n                throw new Error(`Unsupported archive type [zip, tar]: ${this.options.archive}`);\n            }\n        }\n    }\n    start() {\n        this.tarBuilder = new TARBuilder({});\n        this.filemap = {};\n    }\n    async add(canvas) {\n        const mimeType = 'image/jpeg';\n        const extension = '.jpg';\n        const buffer = await canvasToArrayBuffer(canvas, mimeType, this.options.quality);\n        switch (this.options.archive) {\n            case TAR: {\n                if (!this.tarBuilder) {\n                    break;\n                }\n                const filename = pad(this.tarBuilder.count) + extension;\n                this.tarBuilder.addFile(buffer, filename);\n                break;\n            }\n            case ZIP: {\n                const filename = pad(Object.keys(this.filemap).length) + extension;\n                this.filemap[filename] = buffer;\n                break;\n            }\n            default: {\n                throw new Error(`Unsupported archive type [zip, tar]: ${this.options.archive}`);\n            }\n        }\n    }\n    async save() {\n        switch (this.options.archive) {\n            case TAR: {\n                if (!this.tarBuilder) {\n                    break;\n                }\n                const arrayBuffer = await this.tarBuilder.build();\n                return new Blob([arrayBuffer], { type: TARBuilder.properties.mimeType });\n            }\n            case ZIP: {\n                const arrayBuffer = await encode(this.filemap, ZipWriter);\n                return new Blob([arrayBuffer], { type: ZipWriter.mimeTypes?.[0] });\n            }\n            default: {\n                throw new Error(`Unsupported archive type [zip, tar]: ${this.options.archive}`);\n            }\n        }\n        return null;\n    }\n}\nexport default JPEGSequenceEncoder;\n", "// hubble.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport FrameEncoder from \"../frame-encoder.js\";\nimport { canvasToArrayBuffer } from \"../utils/index.js\";\nclass PhotoEncoder extends FrameEncoder {\n    constructor(settings) {\n        super(settings);\n        this.blob = null;\n        this.add = this.add.bind(this);\n    }\n    async add(canvas) {\n        // Adding a frame just overwrites old image\n        const buffer = await canvasToArrayBuffer(canvas, this.mimeType, this.quality);\n        this.blob = new Blob([buffer], { type: this.mimeType });\n        return Promise.resolve();\n    }\n    async save() {\n        return Promise.resolve(this.blob);\n    }\n}\nexport default PhotoEncoder;\n", "// hubble.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport PhotoEncoder from \"./photo-encoder.js\";\nclass JPEGEncoder extends PhotoEncoder {\n    constructor(settings) {\n        super(settings);\n        this.mimeType = 'image/jpeg';\n        this.extension = '.jpg';\n    }\n}\nexport default JPEGEncoder;\n", "// hubble.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport PhotoEncoder from \"./photo-encoder.js\";\nclass JPEGEncoder extends PhotoEncoder {\n    constructor(settings) {\n        super(settings);\n        this.mimeType = 'image/png';\n        this.extension = '.png';\n    }\n}\nexport default JPEGEncoder;\n", "// hubble.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n/* global document, console */\nimport WebMWriter from 'webm-writer';\nimport FrameEncoder from \"../frame-encoder.js\";\n/**\n * WebM Encoder\n */\nclass WebMEncoder extends FrameEncoder {\n    constructor(settings) {\n        super(settings);\n        this.quality = 0.8;\n        if (settings.webm && settings.webm.quality) {\n            this.quality = settings.webm.quality;\n        }\n        const canvas = document.createElement('canvas');\n        if (canvas.toDataURL('image/webp').substr(5, 10) !== 'image/webp') {\n            console.error('WebP not supported - try another export format');\n        }\n        this.extension = '.webm';\n        this.mimeType = 'video/webm';\n        this.videoWriter = null;\n        this.start = this.start.bind(this);\n        this.add = this.add.bind(this);\n        this.save = this.save.bind(this);\n    }\n    start() {\n        this.videoWriter = new WebMWriter({\n            quality: this.quality,\n            fileWriter: null,\n            fd: null,\n            frameRate: this.framerate\n        });\n    }\n    async add(canvas) {\n        this.videoWriter.addFrame(canvas);\n        await Promise.resolve();\n    }\n    async save() {\n        return this.videoWriter.complete();\n    }\n}\nexport default WebMEncoder;\n", "// hubble.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n/* global requestAnimationFrame, cancelAnimationFrame */\nimport FrameEncoder from \"../frame-encoder.js\";\nexport default class PreviewEncoder extends FrameEncoder {\n    start() {\n        if (this.af) {\n            cancelAnimationFrame(this.af);\n        }\n    }\n    async add(canvas) {\n        const animationFrame = new Promise(resolve => {\n            if (this.af) {\n                cancelAnimationFrame(this.af);\n            }\n            this.af = requestAnimationFrame(() => resolve());\n        });\n        return animationFrame;\n    }\n    async save() {\n        if (this.af) {\n            cancelAnimationFrame(this.af);\n        }\n        return await Promise.resolve(null);\n    }\n}\n", "import { GIFBuilder } from '@loaders.gl/video';\nimport FrameEncoder from \"../frame-encoder.js\";\nexport default class GifEncoder extends FrameEncoder {\n    constructor(settings) {\n        super(settings);\n        this.gifBuilder = null;\n        this.source = 'images';\n        this.mimeType = 'image/gif';\n        this.extension = '.gif';\n        let options = {\n            width: 720,\n            height: 480,\n            numWorkers: 4,\n            sampleInterval: 10,\n            jpegQuality: 1.0\n        };\n        if (settings.gif) {\n            options = { ...options, ...settings.gif };\n        }\n        this.options = options;\n        // this.source = settings.source\n        this.start = this.start.bind(this);\n        this.add = this.add.bind(this);\n        this.save = this.save.bind(this);\n    }\n    start() {\n        this.gifBuilder = new GIFBuilder({\n            source: this.source,\n            ...this.options,\n            interval: 1 / this.framerate\n        });\n    }\n    async add(canvas) {\n        if (this.source === 'images') {\n            const dataUrl = canvas.toDataURL('image/jpeg', this.options.jpegQuality);\n            await this.gifBuilder.add(dataUrl);\n        }\n    }\n    async save() {\n        return fetch(await this.gifBuilder.build()).then(res => res.blob());\n    }\n}\n", "// hubble.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nexport default class Animation {\n    constructor({ id }) {\n        this.unattachedKeyframes = [];\n        this.id = id;\n        this.unattachedKeyframes = [];\n    }\n    attachKeyframes(timeline) {\n        for (const keyframes of this.unattachedKeyframes) {\n            if (keyframes.animationHandle) {\n                timeline.detachAnimation(keyframes.animationHandle);\n            }\n            keyframes.animationHandle = timeline.attachAnimation(keyframes, undefined);\n        }\n        this.unattachedKeyframes = [];\n    }\n    getKeyframes() {\n        throw new Error('not implemented');\n    }\n    setKeyframes(props) {\n        throw new Error('not implemented');\n    }\n    animator(animation) {\n        throw new Error('not implemented');\n    }\n    draw() {\n        return this.animator(this);\n    }\n}\n", "// hubble.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { KeyFrames as LumaKeyFrames } from '@luma.gl/engine';\nimport { linear } from \"./easings.js\";\nimport { sanitizeEasings, merge, sanitizeTimings, factorInterpolator, sanitizeInterpolators } from \"./utils.js\";\nclass Keyframes extends LumaKeyFrames {\n    constructor({ features = [], timings, keyframes, easings = linear, interpolators = 'linear' }) {\n        super([]);\n        this.activeFeatures = {};\n        this._setActiveFeatures = this._setActiveFeatures.bind(this);\n        this.getFrame = this.getFrame.bind(this);\n        this.set = this.set.bind(this);\n        this.activeFeatures = features.reduce((activeFeatures, feature) => {\n            activeFeatures[feature] = false;\n            return activeFeatures;\n        }, {});\n        this.set({ timings, keyframes, easings, interpolators });\n    }\n    set({ timings, keyframes, easings = linear, interpolators = 'linear' }) {\n        if (!keyframes || keyframes.length === 0) {\n            throw new Error('There must be at least one keyframe');\n        }\n        const _interpolators = sanitizeInterpolators(keyframes, interpolators);\n        const _easings = sanitizeEasings(keyframes, easings);\n        const _timings = sanitizeTimings(keyframes, timings);\n        this._setActiveFeatures(keyframes);\n        const _keyframes = merge(_timings, keyframes, _easings, _interpolators);\n        this.keyframes = keyframes;\n        this.timings = timings;\n        this.easings = easings;\n        this.interpolators = interpolators;\n        this.setKeyFrames(_keyframes);\n    }\n    getFrame() {\n        const factor = this.factor;\n        const start = this.getStartData();\n        const end = this.getEndData();\n        const frame = {};\n        Object.keys(this.activeFeatures).forEach(key => {\n            if (this.activeFeatures[key]) {\n                frame[key] = factorInterpolator(start[key], end[key], end.ease)(factor);\n            }\n        });\n        return frame;\n    }\n    _setActiveFeatures(keyframes) {\n        const firstKeyframe = keyframes[0];\n        this.activeFeatures = Object.keys(firstKeyframe).reduce((activeFeatures, key) => {\n            // activate only keys that are expected\n            if (firstKeyframe[key] !== undefined) {\n                activeFeatures[key] = true;\n            }\n            return activeFeatures;\n        }, this.activeFeatures);\n    }\n}\nexport default Keyframes;\n", "// hubble.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nexport const hold = p => (p === 1 ? 1 : 0);\nexport const linear = p => p;\n", "// hubble.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { interpolate, linear } from 'popmotion';\nexport function sanitizeInterpolators(keyframes, interpolators) {\n    if (typeof interpolators === 'string') {\n        const _interpolators = [];\n        for (let idx = 0; idx < keyframes.length - 1; idx++) {\n            _interpolators.push(interpolators);\n        }\n        return _interpolators;\n    }\n    if (keyframes.length - 1 !== interpolators.length) {\n        throw new Error('There must be one fewer interpolator than keyframes');\n    }\n    return interpolators;\n}\nexport function sanitizeEasings(keyframes, easings) {\n    if (typeof easings === 'function') {\n        const _easings = [];\n        for (let idx = 0; idx < keyframes.length - 1; idx++) {\n            _easings.push(easings);\n        }\n        return _easings;\n    }\n    if (keyframes.length - 1 !== easings.length) {\n        throw new Error('There must be one fewer easing than keyframes');\n    }\n    return easings;\n}\nexport function sanitizeTimings(keyframes, timings) {\n    if (typeof timings === 'number') {\n        const _timings = [];\n        let time = 0;\n        for (let idx = 0; idx < keyframes.length; idx++) {\n            _timings.push(time);\n            time += timings;\n        }\n        return _timings;\n    }\n    if (keyframes.length !== timings.length) {\n        throw new Error('There must be same number of timings as keyframes');\n    }\n    return timings;\n}\nexport function merge(timings, keyframes, easings, interpolators) {\n    const _keyframes = keyframes.map((keyframe, idx) => {\n        if (idx === 0) {\n            return [timings[idx], { ...keyframe, ease: undefined, interpolate: undefined }];\n        }\n        return [\n            timings[idx],\n            { ...keyframe, ease: easings[idx - 1], interpolate: interpolators[idx - 1] }\n        ];\n    });\n    return _keyframes;\n}\nexport function factorInterpolator(start, end, ease = linear) {\n    return interpolate([0, 1], [start, end], { ease });\n}\n", "// hubble.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport Keyframes from \"./keyframes.js\";\nimport { flyToViewport } from '@math.gl/web-mercator';\nimport { lerp } from '@math.gl/core';\nconst LINEARLY_INTERPOLATED_PROPS = ['bearing', 'pitch'];\nconst DEFAULT_OPTS = {\n    speed: 1.2,\n    curve: 1.414\n    // screenSpeed and maxDuration are used only if specified\n};\nexport function flyToInterpolator(start, end, factor, options) {\n    const viewport = flyToViewport(start, \n    // @ts-ignore width/height not necessary on end\n    end, end.ease(factor), {\n        ...DEFAULT_OPTS,\n        ...options\n    });\n    // Linearly interpolate 'bearing' and 'pitch'.\n    // If pitch/bearing are not supplied, they are interpreted as zeros in viewport calculation\n    // (fallback defined in WebMercatorViewport)\n    // Because there is no guarantee that the current controller's ViewState normalizes\n    // these props, safe guard is needed to avoid generating NaNs\n    for (const key of LINEARLY_INTERPOLATED_PROPS) {\n        viewport[key] = lerp(start[key] || 0, end[key] || 0, end.ease(factor));\n    }\n    return viewport;\n}\nexport default class CameraKeyFrames extends Keyframes {\n    constructor({ timings, keyframes, easings, interpolators, width, height }) {\n        super({\n            timings,\n            keyframes,\n            easings,\n            interpolators,\n            features: ['latitude', 'longitude', 'zoom', 'pitch', 'bearing']\n        });\n        this.width = width;\n        this.height = height;\n    }\n    getFrame() {\n        const factor = this.factor;\n        const start = this.getStartData();\n        const end = this.getEndData();\n        if (end.interpolate === 'flyTo') {\n            if (!this.width || !this.height) {\n                throw new Error('width and height must be defined to use flyTo interpolator');\n            }\n            const maxDuration = this.getEndTime() - this.getStartTime();\n            return flyToInterpolator({ ...start, width: this.width, height: this.height }, end, factor, {\n                maxDuration\n            });\n        }\n        return super.getFrame();\n    }\n}\n", "// hubble.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport Keyframes from \"./keyframes.js\";\nfunction getFeatures(keyframes) {\n    return keyframes && keyframes[0] ? Object.keys(keyframes[0]) : [];\n}\nexport default class DeckLayerKeyframes extends Keyframes {\n    constructor({ id, features, timings, keyframes, easings }) {\n        super({ timings, keyframes, easings, features: features || getFeatures(keyframes) });\n        this.id = id;\n    }\n}\n", "// hubble.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport Keyframes from \"./keyframes.js\";\nfunction getFeatures(layer) {\n    return layer ? Object.keys(layer.config.visConfig) : [];\n}\nclass KeplerLayerKeyframes extends Keyframes {\n    constructor({ layer, timings, keyframes, easings }) {\n        super({ timings, keyframes, easings, features: getFeatures(layer) });\n        // TODO: will this layer reference ever become outdated? layerVisConfigChange updates from this reference rather pulling from the store.\n        this.layer = layer;\n    }\n    set({ layer = undefined, timings, keyframes, easings, interpolators }) {\n        if (layer)\n            this.layer = layer;\n        super.set({ timings, keyframes, easings, interpolators });\n    }\n}\nexport default KeplerLayerKeyframes;\n", "// hubble.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { factorInterpolator } from \"./utils.js\";\nimport Keyframes from \"./keyframes.js\";\nimport { hold, linear } from \"./easings.js\";\n/**\n * 4 Animation Window Types\n * 1. free\n *  |->  |->\n * Current time is a fixed range, animation controller calls next animation frames continuously to animation a moving window\n * The increment id based on domain / BASE_SPEED * SPEED\n *\n * 2. incremental\n * |    |->\n * Same as free, current time is a growing range, only the max value of range increment during animation.\n * The increment is also based on domain / BASE_SPEED * SPEED\n *\n * 3. point\n * o -> o\n * Current time is a point, animation controller calls next animation frame continuously to animation a moving point\n * The increment is based on domain / BASE_SPEED * SPEED\n *\n * 4. interval\n * o ~> o\n * Current time is a point. An array of sorted time steps need to be provided.\n * animation controller calls next animation at a interval when the point jumps to the next step\n */\nfunction getKeyFramesFree(filter) {\n    const delta = filter.value[1] - filter.value[0];\n    return {\n        keyframes: [\n            { value: [filter.domain[0], filter.domain[0] + delta] },\n            { value: [filter.domain[1] - delta, filter.domain[1]] }\n        ],\n        easings: linear\n    };\n}\nexport function timeRangeKeyframes({ filter, timings }) {\n    if (filter.type !== 'timeRange') {\n        throw new Error(\"filter type must be 'timeRange'.'\");\n    }\n    const duration = timings[1] - timings[0];\n    switch (filter.animationWindow) {\n        default:\n        case 'free': {\n            return getKeyFramesFree(filter);\n        }\n        case 'incremental': {\n            return {\n                keyframes: [\n                    { value: [filter.value[0], filter.value[0] + 1] },\n                    { value: [filter.value[0], filter.domain[1]] }\n                ],\n                easings: linear\n            };\n        }\n        case 'point': {\n            return {\n                keyframes: [{ value: filter.domain[0] }, { value: filter.domain[1] }],\n                easings: linear\n            };\n        }\n        case 'interval': {\n            const { bins, plotType } = filter;\n            const { interval } = plotType;\n            if (!interval ||\n                !bins ||\n                Object.keys(bins).length === 0 ||\n                !Object.values(bins)[0][interval]) {\n                // shouldn't happen return\n                return getKeyFramesFree(filter);\n            }\n            const intervalBins = Object.values(bins)[0][interval];\n            const delta = Math.round(duration / intervalBins.length);\n            // const delta = Math.round(duration / filter.steps.length);\n            return {\n                timings: intervalBins.map((_, idx) => timings[0] + delta * idx),\n                keyframes: intervalBins.map(bin => {\n                    return {\n                        value: [bin.x0, bin.x1]\n                    };\n                }),\n                easings: hold\n            };\n        }\n    }\n}\nclass KeplerFilterKeyframes extends Keyframes {\n    constructor({ filter = undefined, filterIdx, timings, keyframes = undefined, easings, interpolators, getTimeRangeFilterKeyframes = undefined }) {\n        if (filter?.type === 'input') {\n            throw new Error(\"filter type 'input' is not supported.\");\n        }\n        super(KeplerFilterKeyframes._processParams({\n            filter,\n            timings,\n            keyframes,\n            easings,\n            interpolators,\n            getTimeRangeFilterKeyframes\n        }));\n        this.id = filter?.id;\n        this.type = filter?.type;\n        this.animationWindow = filter?.animationWindow;\n        this.filterIdx = filterIdx;\n        this.getTimeRangeFilterKeyframes = getTimeRangeFilterKeyframes;\n    }\n    set({ filter = undefined, filterIdx = undefined, timings, keyframes, easings, interpolators }) {\n        if (filter && filterIdx) {\n            this.id = filter.id;\n            this.type = filter.type;\n            this.animationWindow = filter.animationWindow;\n            this.filterIdx = filterIdx;\n        }\n        super.set(KeplerFilterKeyframes._processParams({\n            filter,\n            timings,\n            keyframes,\n            easings,\n            interpolators,\n            getTimeRangeFilterKeyframes: this.getTimeRangeFilterKeyframes\n        }));\n    }\n    // @ts-expect-error TODO: wrap frame in {value: }\n    getFrame() {\n        const factor = this.factor;\n        const start = this.getStartData();\n        const end = this.getEndData();\n        if (['select', 'multiSelect', 'polygon'].includes(this.type || '')) {\n            return start.value;\n        }\n        if (this.type === 'range') {\n            return [\n                factorInterpolator(start.value[0], end.value[0], end.ease)(factor),\n                factorInterpolator(start.value[1], end.value[1], end.ease)(factor)\n            ];\n        }\n        if (this.type === 'timeRange') {\n            switch (this.animationWindow) {\n                case 'free':\n                case 'incremental': {\n                    return [\n                        factorInterpolator(start.value[0], end.value[0], end.ease)(factor),\n                        factorInterpolator(start.value[1], end.value[1], end.ease)(factor)\n                    ];\n                }\n                case 'point': {\n                    return factorInterpolator(start.value, end.value, end.ease)(factor);\n                }\n                case 'interval':\n                default: {\n                    return start.value;\n                }\n            }\n        }\n        return super.getFrame();\n    }\n    static _processParams({ filter = undefined, timings, keyframes = undefined, easings, interpolators, getTimeRangeFilterKeyframes = undefined }) {\n        let params = { features: ['value'], timings, keyframes, easings, interpolators };\n        if (filter && filter.type === 'timeRange' && keyframes === undefined) {\n            if (!Array.isArray(timings) || timings.length !== 2)\n                throw new Error('[start, end] timings required.');\n            params = {\n                ...params,\n                ...(getTimeRangeFilterKeyframes\n                    ? getTimeRangeFilterKeyframes({ filter, timings })\n                    : timeRangeKeyframes({ filter, timings }))\n            };\n        }\n        return params;\n    }\n}\nexport default KeplerFilterKeyframes;\n", "// hubble.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport Keyframes from \"./keyframes.js\";\nfunction tripKeyframes({ animationConfig }) {\n    return {\n        keyframes: [{ currentTime: animationConfig.domain[0] }, { currentTime: animationConfig.domain[1] }]\n    };\n}\nclass KeplerTripKeyframes extends Keyframes {\n    constructor({ animationConfig = undefined, timings, keyframes = undefined, easings, interpolators }) {\n        super(KeplerTripKeyframes._processParams({\n            animationConfig,\n            timings,\n            keyframes,\n            easings,\n            interpolators\n        }));\n    }\n    set({ animationConfig = undefined, timings, keyframes = undefined, easings, interpolators }) {\n        super.set(KeplerTripKeyframes._processParams({\n            animationConfig,\n            timings,\n            keyframes,\n            easings,\n            interpolators\n        }));\n    }\n    static _processParams({ animationConfig = undefined, timings, keyframes = undefined, easings, interpolators }) {\n        let params = {\n            features: ['currentTime'],\n            timings,\n            keyframes,\n            easings,\n            interpolators\n        };\n        if (animationConfig && keyframes === undefined) {\n            if (!Array.isArray(timings) || timings.length !== 2)\n                throw new Error('[start, end] timings required.');\n            params = { ...params, ...tripKeyframes({ animationConfig }) };\n        }\n        return params;\n    }\n}\nexport default KeplerTripKeyframes;\n", "// hubble.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { CameraKeyframes, DeckLayerKeyframes } from \"../keyframes/index.js\";\nimport Animation from \"./animation.js\";\nfunction noop() { }\nexport default class DeckAnimation extends Animation {\n    constructor({ id = 'deck', cameraKeyframe = undefined, getLayers = _ => [], layerKeyframes = [], onLayersUpdate = noop, onCameraUpdate = noop }) {\n        super({ id });\n        this.layerKeyframes = {};\n        this.layerKeyframes = {};\n        this.onLayersUpdate = onLayersUpdate;\n        this.onCameraUpdate = onCameraUpdate;\n        this.getLayers = getLayers;\n        this.setKeyframes({ cameraKeyframe, layerKeyframes });\n        this.draw();\n    }\n    setOnLayersUpdate(onLayersUpdate) {\n        this.onLayersUpdate = onLayersUpdate;\n    }\n    setOnCameraUpdate(onCameraUpdate) {\n        this.onCameraUpdate = onCameraUpdate;\n    }\n    setGetLayers(getLayers) {\n        this.getLayers = getLayers;\n        this.draw();\n    }\n    setKeyframes({ layerKeyframes = [], cameraKeyframe = undefined, timeline = undefined }) {\n        if (this.cameraKeyframe && cameraKeyframe) {\n            this.cameraKeyframe.set(cameraKeyframe);\n        }\n        else if (cameraKeyframe) {\n            this.cameraKeyframe = new CameraKeyframes(cameraKeyframe);\n            this.unattachedKeyframes.push(this.cameraKeyframe);\n        }\n        if (layerKeyframes && layerKeyframes.length > 0) {\n            this.layerKeyframes = layerKeyframes.reduce((acc, value) => {\n                if (acc[value.id]) {\n                    acc[value.id].set(value);\n                }\n                else {\n                    acc[value.id] = new DeckLayerKeyframes(value);\n                    this.unattachedKeyframes.push(acc[value.id]);\n                }\n                return acc;\n            }, this.layerKeyframes);\n        }\n        if (timeline) {\n            this.attachKeyframes(timeline);\n        }\n    }\n    getKeyframes() {\n        return {\n            cameraKeyframe: this.cameraKeyframe,\n            layerKeyframes: this.layerKeyframes\n        };\n    }\n    animator(animation) {\n        if (animation.cameraKeyframe) {\n            animation.onCameraUpdate(animation.cameraKeyframe.getFrame());\n        }\n        if (Object.values(animation.layerKeyframes).length > 0) {\n            animation.onLayersUpdate(this.getLayers(animation));\n        }\n    }\n    applyLayerKeyframes(layers) {\n        return layers.map(layer => {\n            if (this.layerKeyframes[layer.id]) {\n                const frame = this.layerKeyframes[layer.id].getFrame();\n                return layer.clone({\n                    ...frame,\n                    updateTriggers: frame\n                });\n            }\n            return layer;\n        });\n    }\n}\n", "// hubble.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { CameraKeyframes, KeplerFilterKeyframes, KeplerLayerKeyframes, KeplerTripKeyframes } from \"../keyframes/index.js\";\nimport Animation from \"./animation.js\";\nfunction noop() { }\nexport function findLayer({ layers, layerKeyframe }) {\n    // Either find layer using id or label.\n    return (layers.find(layer => layer.id === layerKeyframe.id) ||\n        layers.find(layer => layer.config.label === layerKeyframe.label));\n}\nexport function findFilterIdx({ filters, filterKeyframe }) {\n    // Either find filter using index or id.\n    return Number.isFinite(filterKeyframe.filterIdx)\n        ? filterKeyframe.filterIdx\n        : filters.findIndex(filter => filter.id === filterKeyframe.id);\n}\nexport default class KeplerAnimation extends Animation {\n    constructor({ id = 'kepler', layers = [], layerKeyframes = [], filters = [], filterKeyframes = [], getTimeRangeFilterKeyframes = undefined, animationConfig = undefined, tripKeyframe = undefined, cameraKeyframe = undefined, onTripFrameUpdate = noop, onFilterFrameUpdate = noop, onLayerFrameUpdate = noop, onCameraFrameUpdate = noop }) {\n        super({ id });\n        this.layerKeyframes = {};\n        this.filterKeyframes = {};\n        this.tripKeyframe = undefined;\n        this.onTripFrameUpdate = onTripFrameUpdate;\n        this.onFilterFrameUpdate = onFilterFrameUpdate;\n        this.onLayerFrameUpdate = onLayerFrameUpdate;\n        this.onCameraFrameUpdate = onCameraFrameUpdate;\n        this.layerKeyframes = {};\n        this.filterKeyframes = {};\n        this.setKeyframes({\n            layers,\n            layerKeyframes,\n            filters,\n            filterKeyframes,\n            cameraKeyframe,\n            animationConfig,\n            tripKeyframe,\n            getTimeRangeFilterKeyframes\n        });\n        this.draw();\n    }\n    setKeyframes({ layers = [], layerKeyframes = [], filters = [], filterKeyframes = [], getTimeRangeFilterKeyframes = undefined, animationConfig = undefined, tripKeyframe = undefined, cameraKeyframe = undefined, timeline = undefined }) {\n        if (this.tripKeyframe && tripKeyframe) {\n            this.tripKeyframe.set({ animationConfig, ...tripKeyframe });\n        }\n        else if (tripKeyframe) {\n            this.tripKeyframe = new KeplerTripKeyframes({ animationConfig, ...tripKeyframe });\n            this.unattachedKeyframes.push(this.tripKeyframe);\n        }\n        if (this.cameraKeyframe && cameraKeyframe) {\n            this.cameraKeyframe.set(cameraKeyframe);\n        }\n        else if (cameraKeyframe) {\n            this.cameraKeyframe = new CameraKeyframes(cameraKeyframe);\n            this.unattachedKeyframes.push(this.cameraKeyframe);\n        }\n        if (layerKeyframes.length > 0) {\n            this.layerKeyframes = layerKeyframes.reduce((acc, layerKeyframe) => {\n                // Either find layer using id or label.\n                const layer = findLayer({ layers, layerKeyframe });\n                if (layer) {\n                    if (acc[layer.id]) {\n                        acc[layer.id].set({ layer, ...layerKeyframe });\n                    }\n                    else {\n                        acc[layer.id] = new KeplerLayerKeyframes({ layer, ...layerKeyframe });\n                        this.unattachedKeyframes.push(acc[layer.id]);\n                    }\n                }\n                return acc;\n            }, this.layerKeyframes);\n        }\n        if (filterKeyframes.length > 0) {\n            this.filterKeyframes = filterKeyframes.reduce((acc, filterKeyframe) => {\n                const filterIdx = findFilterIdx({ filters, filterKeyframe });\n                const filter = Number.isFinite(filterIdx) && filters[filterIdx];\n                if (filter) {\n                    if (acc[filter.id]) {\n                        acc[filter.id].set({ filter, ...filterKeyframe });\n                    }\n                    else {\n                        acc[filter.id] = new KeplerFilterKeyframes({\n                            filter,\n                            filterIdx,\n                            getTimeRangeFilterKeyframes,\n                            ...filterKeyframe\n                        });\n                        this.unattachedKeyframes.push(acc[filter.id]);\n                    }\n                }\n                return acc;\n            }, this.filterKeyframes);\n        }\n        if (timeline) {\n            this.attachKeyframes(timeline);\n        }\n    }\n    getKeyframes() {\n        return {\n            cameraKeyframe: this.cameraKeyframe,\n            layerKeyframes: this.layerKeyframes,\n            filterKeyframes: this.filterKeyframes,\n            tripKeyframe: this.tripKeyframe\n        };\n    }\n    animator(animation) {\n        if (animation.cameraKeyframe) {\n            animation.onCameraFrameUpdate(animation.cameraKeyframe.getFrame());\n        }\n        if (animation.tripKeyframe) {\n            animation.onTripFrameUpdate(animation.tripKeyframe.getFrame().currentTime);\n        }\n        for (const filterKeyframe of Object.values(animation.filterKeyframes)) {\n            animation.onFilterFrameUpdate(filterKeyframe.filterIdx, 'value', filterKeyframe.getFrame());\n        }\n        for (const layerKeyframe of Object.values(animation.layerKeyframes)) {\n            animation.onLayerFrameUpdate(layerKeyframe.layer, layerKeyframe.getFrame());\n        }\n    }\n}\n", "// hubble.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Timeline } from '@luma.gl/engine';\nexport default class AnimationManager {\n    constructor({ timeline = undefined, animations = [] }) {\n        this.animations = {};\n        this.timeline = timeline || new Timeline();\n        for (const animation of animations) {\n            this.attachAnimation(animation);\n        }\n    }\n    attachAnimation(animation) {\n        animation.attachKeyframes(this.timeline);\n        this.animations[animation.id] = animation;\n    }\n    setKeyframes(animationId, params) {\n        this.animations[animationId].setKeyframes({\n            timeline: this.timeline,\n            ...params\n        });\n    }\n    getKeyframes(animationId) {\n        return this.animations[animationId].getKeyframes();\n    }\n    getAnimation(animationId) {\n        return this.animations[animationId];\n    }\n    draw() {\n        Object.values(this.animations).forEach(animation => animation.draw());\n    }\n}\n", "// hubble.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n/* eslint-disable no-console */\nimport download from 'downloadjs';\nimport { guid } from \"./utils.js\";\nexport class VideoCapture {\n    constructor() {\n        /** True if recording new canvas frames, false when saving, idle, etc. */\n        this.recording = false;\n        /** True when working on a image frame capture. */\n        this.capturing = false;\n        this.timeMs = 0;\n        this.onStop = null;\n        this.recording = false;\n        this.capturing = false;\n        this.timeMs = 0;\n        this.timecode = null;\n        this.encoder = null;\n        this.filename = null;\n        this._getNextTimeMs = this._getNextTimeMs.bind(this);\n        this._step = this._step.bind(this);\n        this._capture = this._capture.bind(this);\n        this.capture = this.capture.bind(this);\n        this.render = this.render.bind(this);\n        this.download = this.download.bind(this);\n        this.stop = this.stop.bind(this);\n        this._save = this._save.bind(this);\n    }\n    isRecording() {\n        return this.recording;\n    }\n    /**\n     * Start recording.\n     */\n    render({ Encoder, formatConfigs, timecode, filename = undefined, onStop = undefined }) {\n        if (!this.isRecording()) {\n            console.time('render');\n            this.filename = this._sanitizeFilename(filename);\n            this.timecode = this._sanatizeTimecode(timecode);\n            console.log(`Starting recording for ${this.timecode.duration}ms.`);\n            this.onStop = onStop;\n            this.encoder = new Encoder({ ...formatConfigs, framerate: this.timecode.framerate });\n            this.recording = true;\n            this.encoder.start();\n        }\n    }\n    /**\n     * Capture a frame of the canvas.\n     */\n    capture(canvas, proceedToNextFrame) {\n        if (!this.capturing && this.isRecording()) {\n            this.capturing = true;\n            // capture canvas\n            this._capture(canvas).then(data => {\n                this.capturing = false;\n                if (data.kind === 'next-frame') {\n                    proceedToNextFrame(data.nextTimeMs);\n                }\n                else if (data.kind === 'stop') {\n                    this.onStop?.();\n                }\n                else {\n                    console.log(data);\n                }\n            });\n        }\n    }\n    /**\n     * Stop and save recording. Execute onComplete when finished.\n     */\n    stop({ onComplete = undefined, onSave = undefined, onStopped = undefined, abort = false }) {\n        if (this.isRecording()) {\n            console.log(`Stopped recording. Recorded for ${this.timeMs}ms.`);\n            this.recording = false;\n            this.capturing = false;\n            if (onStopped) {\n                onStopped();\n            }\n            console.timeEnd('render');\n            const finish = () => {\n                if (onComplete) {\n                    // eslint-disable-next-line callback-return\n                    onComplete();\n                }\n                this.timecode = null;\n                this.onStop = undefined;\n            };\n            if (!abort) {\n                this._save(onSave).then(finish);\n            }\n            finish();\n        }\n    }\n    download(blob) {\n        if (blob) {\n            download(blob, this.filename + this.encoder.extension, this.encoder.mimeType);\n        }\n        return false;\n    }\n    async _save(callback) {\n        if (!callback) {\n            callback = this.download;\n        }\n        console.time('save');\n        await this.encoder\n            .save()\n            .then(callback)\n            .then(() => console.timeEnd('save'));\n    }\n    _sanitizeFilename(filename) {\n        if (!filename) {\n            filename = guid();\n        }\n        return filename;\n    }\n    _sanatizeTimecode(timecode) {\n        const parsedTimecode = {\n            duration: undefined,\n            ...timecode\n        };\n        if (!parsedTimecode.start) {\n            parsedTimecode.start = 0;\n        }\n        this.timeMs = parsedTimecode.start;\n        if (!parsedTimecode.duration) {\n            parsedTimecode.duration = parsedTimecode.end - parsedTimecode.start;\n        }\n        if (parsedTimecode.duration <= 0) {\n            throw new Error(`Invalid recording length (${parsedTimecode.duration}ms).  Must be greater than 0.`);\n        }\n        return parsedTimecode;\n    }\n    /**\n     * Capture the current canvas.\n     */\n    async _capture(canvas) {\n        // console.log('video-capture');\n        if (!this.isRecording()) {\n            return { kind: 'error', error: 'NOT_RECORDING' };\n        }\n        // getting blob from canvas\n        return await this.encoder\n            .add(canvas)\n            .then(this._step)\n            .catch(reason => ({ kind: 'error', error: reason }));\n    }\n    _step() {\n        // generating next frame timestamp\n        const nextTimeMs = this._getNextTimeMs();\n        if (nextTimeMs > this.timecode.end) {\n            return { kind: 'stop' };\n        }\n        this.timeMs = nextTimeMs;\n        return { kind: 'next-frame', nextTimeMs };\n    }\n    // Get next time MS based on current time MS and framerate\n    // @return time in milliseconds for next frame.\n    _getNextTimeMs() {\n        const frameLengthMs = Math.floor(1000.0 / this.timecode.framerate);\n        return this.timeMs + frameLengthMs;\n    }\n}\n", "// hubble.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nexport function guid() {\n    function s4() {\n        return Math.floor((1 + Math.random()) * 0x10000)\n            .toString(16)\n            .substring(1);\n    }\n    return `${s4() + s4()}-${s4()}-${s4()}-${s4()}-${s4()}${s4()}${s4()}`;\n}\n", "// hubble.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n/* eslint-disable no-console */\nimport { PreviewEncoder } from \"../encoders/index.js\";\nimport { AnimationManager } from \"../animations/index.js\";\nimport { VideoCapture } from \"../capture/video-capture.js\";\nexport default class DeckAdapter {\n    constructor({ animationManager = undefined, glContext = undefined }) {\n        this.animationManager = animationManager || new AnimationManager({});\n        this.glContext = glContext;\n        this.videoCapture = new VideoCapture();\n        this.shouldAnimate = false;\n        this.enabled = false;\n        this.getProps = this.getProps.bind(this);\n        this.render = this.render.bind(this);\n        this.stop = this.stop.bind(this);\n        this.seek = this.seek.bind(this);\n    }\n    setDeck(deck) {\n        this.deck = deck;\n    }\n    getProps({ deck, onNextFrame = undefined, extraProps = undefined }) {\n        if (deck) {\n            this.deck = deck;\n        }\n        const props = {\n            _animate: this.shouldAnimate\n        };\n        if (onNextFrame) {\n            props.onAfterRender = () => this.onAfterRender(onNextFrame);\n        }\n        if (this.enabled) {\n            props.controller = false;\n        }\n        else {\n            props.controller = true;\n        }\n        if (this.glContext) {\n            props.gl = this.glContext;\n        }\n        return { ...extraProps, ...props };\n    }\n    render({ Encoder = PreviewEncoder, formatConfigs = {}, filename = undefined, timecode = { start: 0, end: 0, framerate: 30 }, onStopped = undefined, onSave = undefined, onComplete = undefined }) {\n        this.shouldAnimate = true;\n        this.videoCapture.render({\n            Encoder,\n            formatConfigs,\n            timecode,\n            filename,\n            onStop: () => this.stop({ onStopped, onSave, onComplete })\n        });\n        this.enabled = true;\n        this.seek({ timeMs: timecode.start });\n    }\n    stop({ onStopped, onSave, onComplete, abort }) {\n        this.enabled = false;\n        this.shouldAnimate = false;\n        this.videoCapture.stop({ onStopped, onSave, onComplete, abort });\n    }\n    seek({ timeMs }) {\n        this.animationManager.timeline.setTime(timeMs);\n        this.animationManager.draw();\n    }\n    onAfterRender(proceedToNextFrame, readyToCapture = true) {\n        const areAllLayersLoaded = this.deck && this.deck.props.layers.every(layer => layer.isLoaded);\n        if (this.videoCapture.isRecording() && areAllLayersLoaded && readyToCapture) {\n            // @ts-expect-error TODO use getCanvas\n            const canvas = this.deck.canvas;\n            this.videoCapture.capture(canvas, nextTimeMs => {\n                this.seek({ timeMs: nextTimeMs });\n                proceedToNextFrame(nextTimeMs);\n            });\n        }\n    }\n}\n"],
  "mappings": "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",
  "names": ["pad", "pad", "import_core", "import_zip", "TAR", "ZIP", "pad", "JPEGEncoder", "WebMWriter", "LumaKeyFrames", "import_core", "getFeatures", "noop", "import_engine", "download"]
}
