{"version":3,"sources":["jsdelivr-header.js","/npm/timingsrc@1.4.1/build/es5/bundle.js"],"names":[],"mappings":"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","file":"/npm/timingsrc@1.4.1/build/es5/bundle.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/timingsrc@1.4.1/build/es5/bundle.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('subscribable-things'), require('timing-object'), require('@babel/runtime/helpers/defineProperty'), require('@babel/runtime/helpers/slicedToArray')) :\n    typeof define === 'function' && define.amd ? define(['exports', 'subscribable-things', 'timing-object', '@babel/runtime/helpers/defineProperty', '@babel/runtime/helpers/slicedToArray'], factory) :\n    (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.timingsrc = {}, global.subscribableThings, global.timingObject, global._defineProperty, global._slicedToArray));\n})(this, (function (exports, subscribableThings, timingObject, _defineProperty, _slicedToArray) { 'use strict';\n\n    var createComputeVelocity = function createComputeVelocity(timeConstant) {\n      return function (delta, minValue, maxValue, velocity) {\n        var factor = (Math.abs(delta) + timeConstant) / timeConstant;\n        return Math.max(minValue, Math.min(maxValue, delta > 0 ? velocity / factor : factor * velocity));\n      };\n    };\n\n    var DEFAULT_THRESHOLD = 1;\n    var DEFAULT_TIME_CONSTANT = 0.5;\n    var DEFAULT_TOLERANCE = 0.025;\n    var createDefaultSetTimingsrc = function createDefaultSetTimingsrc(createComputeVelocity, createSetTimingsrc, createUpdateGradually, createUpdateStepwise, determineSupportedPlaybackRateValues, setTimingsrcWithCustomUpdateFunction, window) {\n      var update = window !== null && window.navigator.userAgent.includes('Safari') && !window.navigator.userAgent.includes('Chrome') ? createUpdateStepwise(DEFAULT_TOLERANCE) : createUpdateGradually(createComputeVelocity(DEFAULT_TIME_CONSTANT), determineSupportedPlaybackRateValues(window), DEFAULT_THRESHOLD, DEFAULT_TOLERANCE);\n      return createSetTimingsrc(setTimingsrcWithCustomUpdateFunction, update);\n    };\n\n    var createSetCurrentTime = function createSetCurrentTime(currentTimeAssignments) {\n      return function (mediaElement, previousValue, nextValue) {\n        var currentTimeAssignment = currentTimeAssignments.get(mediaElement);\n        if (currentTimeAssignment === undefined ||\n        // Bug #5: Safari limits the precision of the value after a while.\n        Math.abs(currentTimeAssignment[0] - previousValue) > 0.0001 || currentTimeAssignment[1] !== nextValue) {\n          mediaElement.currentTime = nextValue;\n          currentTimeAssignments.set(mediaElement, [mediaElement.currentTime, nextValue]);\n        }\n      };\n    };\n\n    var createSetPlaybackRate = function createSetPlaybackRate(negativeMaximum, playbackRateAssignments, positiveMinimum) {\n      return function (mediaElement, previousValue, nextValue) {\n        var playbackRateAssignment = playbackRateAssignments.get(mediaElement);\n        if (playbackRateAssignment === undefined || playbackRateAssignment[0] !== previousValue || playbackRateAssignment[1] !== nextValue) {\n          // Bug #6: Chrome does not adjust the tempo when the playbackRate is very close to 1.\n          mediaElement.playbackRate = nextValue > 1 ? Math.max(positiveMinimum, nextValue) : Math.min(negativeMaximum, nextValue);\n          playbackRateAssignments.set(mediaElement, [mediaElement.playbackRate, nextValue]);\n        }\n      };\n    };\n\n    var createSetTimingsrc = function createSetTimingsrc(setTimingsrcWithCustomUpdateFunction, update) {\n      return function (mediaElement, timingObject) {\n        var prepareTimingStateVector = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n        var prepareUpdateVector = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n        return setTimingsrcWithCustomUpdateFunction(mediaElement, timingObject, update, prepareTimingStateVector, prepareUpdateVector);\n      };\n    };\n\n    function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n    function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n    var createSetTimingsrcWithCustomUpdateFunction = function createSetTimingsrcWithCustomUpdateFunction(animationFrame, clearInterval, document, on, setInterval, updateMediaElement) {\n      return function (mediaElement, timingObject, updateFunction) {\n        var prepareTimingStateVector = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n        var prepareUpdateVector = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : null;\n        var previousUpdateVectorWithCustomState = null;\n        var update = function update() {\n          var currentTime = mediaElement.currentTime,\n            duration = mediaElement.duration,\n            playbackRate = mediaElement.playbackRate;\n          var timingStateVector = timingObject.query();\n          previousUpdateVectorWithCustomState = updateFunction(prepareTimingStateVector === null ? timingStateVector : prepareTimingStateVector(timingStateVector), currentTime, previousUpdateVectorWithCustomState);\n          var sanitizedDuration = typeof duration === 'number' && !isNaN(duration) ? duration : 0;\n          var _ref = prepareUpdateVector === null ? previousUpdateVectorWithCustomState : prepareUpdateVector(previousUpdateVectorWithCustomState),\n            position = _ref.position,\n            velocity = _ref.velocity;\n          previousUpdateVectorWithCustomState = _objectSpread(_objectSpread({}, previousUpdateVectorWithCustomState), {}, {\n            position: position,\n            velocity: velocity\n          });\n          updateMediaElement(currentTime, sanitizedDuration, mediaElement, playbackRate, position, velocity);\n          return velocity !== 0;\n        };\n        var unsubscribe;\n        var updateOnce = function updateOnce() {\n          if (!update()) {\n            unsubscribe();\n            unsubscribe = updateReactively();\n          }\n        };\n        var updateConsistently = function updateConsistently() {\n          var intervalId = setInterval(function () {\n            return updateOnce();\n          }, 100);\n          var restartInterval = function restartInterval() {\n            clearInterval(intervalId);\n            intervalId = setInterval(function () {\n              return updateOnce();\n            }, 100);\n          };\n          var unsubscribeFunctions = [function () {\n            return clearInterval(intervalId);\n          }, animationFrame()(function () {\n            restartInterval();\n            updateOnce();\n          }), on(timingObject, 'change')(function () {\n            if (document.visibilityState === 'hidden') {\n              restartInterval();\n              updateOnce();\n            }\n          })];\n          return function () {\n            return unsubscribeFunctions.forEach(function (unsubscribeFunction) {\n              return unsubscribeFunction();\n            });\n          };\n        };\n        var updateReactively = function updateReactively() {\n          return on(timingObject, 'change')(function () {\n            if (update()) {\n              unsubscribe();\n              unsubscribe = updateConsistently();\n            }\n          });\n        };\n        unsubscribe = update() ? updateConsistently() : updateReactively();\n        return function () {\n          return unsubscribe();\n        };\n      };\n    };\n\n    var createUpdateGradually = function createUpdateGradually(computeVelocity, _ref, threshold, tolerance) {\n      var _ref2 = _slicedToArray(_ref, 2),\n        minValue = _ref2[0],\n        maxValue = _ref2[1];\n      return function (_ref3, currentTime, previousUpdateVectorWithCustomState) {\n        var position = _ref3.position,\n          velocity = _ref3.velocity;\n        var _ref4 = previousUpdateVectorWithCustomState !== null && previousUpdateVectorWithCustomState !== void 0 ? previousUpdateVectorWithCustomState : {\n            mediaElementDelay: 0\n          },\n          mediaElementDelay = _ref4.mediaElementDelay;\n        if (velocity < minValue || velocity > maxValue) {\n          return {\n            mediaElementDelay: mediaElementDelay,\n            position: position,\n            velocity: 0\n          };\n        }\n        if (position < 0 || velocity === 0) {\n          return {\n            mediaElementDelay: mediaElementDelay,\n            position: position,\n            velocity: velocity\n          };\n        }\n        var positionDifference = currentTime - position;\n        var absolutePositionDifference = Math.abs(positionDifference);\n        if (absolutePositionDifference > threshold) {\n          var _ref5 = previousUpdateVectorWithCustomState !== null && previousUpdateVectorWithCustomState !== void 0 ? previousUpdateVectorWithCustomState : {\n              position: null\n            },\n            lastPosition = _ref5.position;\n          if (positionDifference < 0 || positionDifference > mediaElementDelay) {\n            if (lastPosition === currentTime) {\n              mediaElementDelay += absolutePositionDifference;\n            }\n            return {\n              mediaElementDelay: mediaElementDelay,\n              position: position + mediaElementDelay,\n              velocity: velocity\n            };\n          }\n          if (lastPosition !== currentTime) {\n            mediaElementDelay -= absolutePositionDifference;\n            return {\n              mediaElementDelay: mediaElementDelay,\n              position: position + mediaElementDelay,\n              velocity: velocity\n            };\n          }\n        }\n        if (absolutePositionDifference > tolerance) {\n          return {\n            mediaElementDelay: mediaElementDelay,\n            position: currentTime,\n            velocity: computeVelocity(positionDifference, minValue, maxValue, velocity)\n          };\n        }\n        return {\n          mediaElementDelay: mediaElementDelay,\n          position: currentTime,\n          velocity: velocity\n        };\n      };\n    };\n\n    var createUpdateMediaElement = function createUpdateMediaElement(pause, play, setCurrentTime, setPlaybackRate) {\n      return function (currentTime, duration, mediaElement, playbackRate, position, velocity) {\n        if (position < 0) {\n          if (currentTime > 0) {\n            setCurrentTime(mediaElement, currentTime, 0);\n          }\n          pause(mediaElement);\n        } else if (position >= duration) {\n          if (currentTime !== duration) {\n            setCurrentTime(mediaElement, currentTime, duration);\n          }\n          pause(mediaElement);\n        } else if (currentTime !== position) {\n          setCurrentTime(mediaElement, currentTime, position);\n          if (velocity !== 0) {\n            if (playbackRate !== velocity) {\n              setPlaybackRate(mediaElement, playbackRate, velocity);\n            }\n            play(mediaElement);\n          } else {\n            pause(mediaElement);\n          }\n        } else if (playbackRate !== velocity) {\n          if (velocity !== 0) {\n            setPlaybackRate(mediaElement, playbackRate, velocity);\n            play(mediaElement);\n          } else {\n            pause(mediaElement);\n          }\n        }\n      };\n    };\n\n    var MAXIMUM_PLAYHEAD_DIFFERENCE = 0.5;\n    var createUpdateStepwiseFactory = function createUpdateStepwiseFactory(translateTimingStateVector) {\n      return function (tolerance) {\n        return function (timingStateVector, currentTime, previousUpdateVectorWithCustomState) {\n          var _ref = previousUpdateVectorWithCustomState !== null && previousUpdateVectorWithCustomState !== void 0 ? previousUpdateVectorWithCustomState : {\n              lastAppliedPostion: 0,\n              lastAppliedTimestamp: 0,\n              lastAppliedVelocity: 0,\n              lastPlayheadDifference: 0,\n              mediaElementDelay: 0,\n              numberOfDetectedResets: 0,\n              numberOfExpectedResets: 1\n            },\n            lastAppliedPostion = _ref.lastAppliedPostion,\n            lastAppliedTimestamp = _ref.lastAppliedTimestamp,\n            lastAppliedVelocity = _ref.lastAppliedVelocity,\n            lastPlayheadDifference = _ref.lastPlayheadDifference,\n            mediaElementDelay = _ref.mediaElementDelay,\n            numberOfDetectedResets = _ref.numberOfDetectedResets,\n            numberOfExpectedResets = _ref.numberOfExpectedResets;\n          if (timingStateVector.position < 0 || timingStateVector.velocity === 0) {\n            lastAppliedPostion = timingStateVector.position;\n            lastAppliedVelocity = timingStateVector.velocity;\n            return {\n              lastAppliedPostion: lastAppliedPostion,\n              lastAppliedTimestamp: 0,\n              lastAppliedVelocity: lastAppliedVelocity,\n              lastPlayheadDifference: lastPlayheadDifference,\n              mediaElementDelay: mediaElementDelay,\n              numberOfDetectedResets: numberOfDetectedResets,\n              numberOfExpectedResets: numberOfExpectedResets,\n              position: lastAppliedPostion,\n              velocity: lastAppliedVelocity\n            };\n          }\n          // Bug #4: Safari decreases currentTime after playing for about 200 milliseconds.\n          if (lastAppliedVelocity === timingStateVector.velocity && lastPlayheadDifference < MAXIMUM_PLAYHEAD_DIFFERENCE) {\n            var playheadDifference = Math.abs(currentTime - lastAppliedPostion) * lastAppliedVelocity;\n            if (playheadDifference < MAXIMUM_PLAYHEAD_DIFFERENCE) {\n              if (playheadDifference + 0.001 > lastPlayheadDifference) {\n                lastPlayheadDifference = playheadDifference;\n                if (numberOfDetectedResets < numberOfExpectedResets) {\n                  return {\n                    lastAppliedPostion: lastAppliedPostion,\n                    lastAppliedTimestamp: lastAppliedTimestamp,\n                    lastAppliedVelocity: lastAppliedVelocity,\n                    lastPlayheadDifference: lastPlayheadDifference,\n                    mediaElementDelay: mediaElementDelay,\n                    numberOfDetectedResets: numberOfDetectedResets,\n                    numberOfExpectedResets: numberOfExpectedResets,\n                    position: currentTime,\n                    velocity: lastAppliedVelocity\n                  };\n                }\n              } else {\n                lastPlayheadDifference = playheadDifference;\n                numberOfDetectedResets += 1;\n                if (numberOfDetectedResets <= numberOfExpectedResets) {\n                  return {\n                    lastAppliedPostion: lastAppliedPostion,\n                    lastAppliedTimestamp: lastAppliedTimestamp,\n                    lastAppliedVelocity: lastAppliedVelocity,\n                    lastPlayheadDifference: lastPlayheadDifference,\n                    mediaElementDelay: mediaElementDelay,\n                    numberOfDetectedResets: numberOfDetectedResets,\n                    numberOfExpectedResets: numberOfExpectedResets,\n                    position: currentTime,\n                    velocity: lastAppliedVelocity\n                  };\n                }\n                numberOfExpectedResets += 1;\n              }\n            } else {\n              lastPlayheadDifference = playheadDifference;\n              numberOfExpectedResets = Math.max(numberOfDetectedResets, 1);\n            }\n          } else {\n            lastAppliedTimestamp = 0;\n          }\n          var positionDifference = Math.abs(currentTime - timingStateVector.position);\n          var velocityHasChanged = lastAppliedVelocity === 0 || lastAppliedVelocity < 0 && timingStateVector.velocity > 0 || lastAppliedVelocity > 0 && timingStateVector.velocity < 0;\n          if (positionDifference > tolerance || velocityHasChanged) {\n            if (lastAppliedTimestamp > 0) {\n              var elapsedTime = timingStateVector.timestamp - lastAppliedTimestamp;\n              var _translateTimingState = translateTimingStateVector({\n                  acceleration: 0,\n                  position: lastAppliedPostion,\n                  timestamp: lastAppliedTimestamp,\n                  velocity: lastAppliedVelocity\n                }, elapsedTime),\n                position = _translateTimingState.position;\n              mediaElementDelay = position - currentTime;\n            }\n            lastAppliedPostion = timingStateVector.position + mediaElementDelay;\n            lastAppliedVelocity = timingStateVector.velocity;\n            return {\n              lastAppliedPostion: lastAppliedPostion,\n              lastAppliedTimestamp: timingStateVector.timestamp,\n              lastAppliedVelocity: lastAppliedVelocity,\n              lastPlayheadDifference: 0,\n              mediaElementDelay: mediaElementDelay,\n              numberOfDetectedResets: 0,\n              numberOfExpectedResets: numberOfExpectedResets,\n              position: lastAppliedPostion,\n              velocity: lastAppliedVelocity\n            };\n          }\n          return {\n            lastAppliedPostion: lastAppliedPostion,\n            lastAppliedTimestamp: lastAppliedTimestamp,\n            lastAppliedVelocity: lastAppliedVelocity,\n            lastPlayheadDifference: lastPlayheadDifference,\n            mediaElementDelay: mediaElementDelay,\n            numberOfDetectedResets: numberOfDetectedResets,\n            numberOfExpectedResets: numberOfExpectedResets,\n            position: currentTime,\n            velocity: timingStateVector.velocity\n          };\n        };\n      };\n    };\n\n    var createWindow = function createWindow() {\n      return typeof window === 'undefined' ? null : window;\n    };\n\n    var DEFAULT_VALUES = [Number.MIN_VALUE, Number.MAX_VALUE];\n    var determineSupportedPlaybackRateValues = function determineSupportedPlaybackRateValues(window) {\n      if (window === null) {\n        return DEFAULT_VALUES;\n      }\n      var audio = new window.Audio();\n      try {\n        // Bug #2: Chrome does not support values above 16.\n        audio.playbackRate = 17;\n      } catch (_unused) {\n        // Bug #1: Chrome does not support values below 0.0625.\n        return [0.0625, 16];\n      }\n      try {\n        // Bug #3: Firefox does not support negative values.\n        audio.playbackRate = -1;\n      } catch (_unused2) {\n        return [0, DEFAULT_VALUES[1]];\n      }\n      return DEFAULT_VALUES;\n    };\n\n    var pause = function pause(mediaElement) {\n      if (!mediaElement.paused) {\n        mediaElement.pause();\n      }\n    };\n\n    var play = function play(mediaElement) {\n      if (mediaElement.paused) {\n        mediaElement.play()[\"catch\"](function (err) {\n          return console.error(err);\n        }); // tslint:disable-line no-console\n      }\n    };\n\n    var createUpdateStepwise = createUpdateStepwiseFactory(timingObject.translateTimingStateVector);\n    var updateMediaElement = createUpdateMediaElement(pause, play, createSetCurrentTime(new WeakMap()), createSetPlaybackRate(881 / 882, new WeakMap(), 882 / 881));\n    var setTimingsrcWithCustomUpdateFunction = createSetTimingsrcWithCustomUpdateFunction(subscribableThings.animationFrame, clearInterval, document, subscribableThings.on, setInterval, updateMediaElement);\n    var setTimingsrc = createDefaultSetTimingsrc(createComputeVelocity, createSetTimingsrc, createUpdateGradually, createUpdateStepwise, determineSupportedPlaybackRateValues, setTimingsrcWithCustomUpdateFunction, createWindow());\n\n    exports.createSetTimingsrc = createSetTimingsrc;\n    exports.createUpdateGradually = createUpdateGradually;\n    exports.createUpdateStepwise = createUpdateStepwise;\n    exports.setTimingsrc = setTimingsrc;\n    exports.setTimingsrcWithCustomUpdateFunction = setTimingsrcWithCustomUpdateFunction;\n\n}));\n"]}