{"version":3,"sources":["jsdelivr-header.js","/npm/dynamic-marquee@1.3.2/dist/dynamic-marquee.js"],"names":[],"mappings":"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","file":"/npm/dynamic-marquee@1.3.2/dist/dynamic-marquee.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/dynamic-marquee@1.3.2/dist/dynamic-marquee.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'\n    ? factory(exports)\n    : typeof define === 'function' && define.amd\n    ? define(['exports'], factory)\n    : ((global =\n        typeof globalThis !== 'undefined' ? globalThis : global || self),\n      factory((global.dynamicMarquee = {})));\n})(this, function (exports) {\n  'use strict';\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n\n  function _defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if ('value' in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  function _createClass(Constructor, protoProps, staticProps) {\n    if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) _defineProperties(Constructor, staticProps);\n    return Constructor;\n  }\n\n  var DIRECTION = {\n    RIGHT: 'right',\n    DOWN: 'down',\n  };\n\n  function size($el, direction) {\n    return $el[direction === DIRECTION.RIGHT ? 'offsetWidth' : 'offsetHeight'];\n  }\n  function defer(fn) {\n    window.setTimeout(function () {\n      return fn();\n    }, 0);\n  }\n  function deferException(cb) {\n    try {\n      return cb();\n    } catch (e) {\n      defer(function () {\n        throw e;\n      });\n    }\n  }\n  function toDomEl($el) {\n    if (typeof $el === 'string' || typeof $el === 'number') {\n      // helper. convert string to div\n      var $div = document.createElement('div');\n      $div.textContent = $el + '';\n      return $div;\n    }\n\n    return $el;\n  }\n\n  var transitionDuration = 60000;\n  var Item = /*#__PURE__*/ (function () {\n    function Item($el, direction) {\n      _classCallCheck(this, Item);\n\n      var $container = document.createElement('div');\n      $container.style.display = 'block';\n      $container.style.position = 'absolute';\n      $container.style.margin = '0';\n      $container.style.padding = '0';\n      $container.style.whiteSpace = 'nowrap';\n      $container.style.willChange = 'auto';\n      $container.appendChild($el);\n      this._$container = $container;\n      this._$el = $el;\n      this._direction = direction;\n      this._transitionState = null;\n    }\n\n    _createClass(Item, [\n      {\n        key: 'getSize',\n        value: function getSize() {\n          var _ref =\n              arguments.length > 0 && arguments[0] !== undefined\n                ? arguments[0]\n                : {},\n            _ref$inverse = _ref.inverse,\n            inverse = _ref$inverse === void 0 ? false : _ref$inverse;\n\n          var dir = this._direction;\n\n          if (inverse) {\n            dir = dir === DIRECTION.RIGHT ? DIRECTION.DOWN : DIRECTION.RIGHT;\n          }\n\n          return size(this._$container, dir);\n        },\n      },\n      {\n        key: 'setOffset',\n        value: function setOffset(offset, rate, force) {\n          var transitionState = this._transitionState;\n          var rateChanged = !transitionState || transitionState.rate !== rate;\n\n          if (transitionState && !force) {\n            var timePassed = performance.now() - transitionState.time;\n\n            if (timePassed < transitionDuration - 10000 && !rateChanged) {\n              return;\n            }\n          }\n\n          if (force || rateChanged) {\n            if (this._direction === DIRECTION.RIGHT) {\n              this._$container.style.transform = 'translateX('.concat(\n                offset,\n                'px)'\n              );\n            } else {\n              this._$container.style.transform = 'translateY('.concat(\n                offset,\n                'px)'\n              );\n            }\n\n            this._$container.style.transition = '';\n            this._$container.offsetLeft;\n          }\n\n          var futureOffset = offset + (rate / 1000) * transitionDuration;\n\n          if (this._direction === DIRECTION.RIGHT) {\n            this._$container.style.transform = 'translateX('.concat(\n              futureOffset,\n              'px)'\n            );\n          } else {\n            this._$container.style.transform = 'translateY('.concat(\n              futureOffset,\n              'px)'\n            );\n          }\n\n          if (rate) {\n            this._$container.style.transition = 'transform '.concat(\n              transitionDuration,\n              'ms linear'\n            );\n          }\n\n          this._transitionState = {\n            time: performance.now(),\n            rate: rate,\n          };\n        },\n      },\n      {\n        key: 'enableAnimationHint',\n        value: function enableAnimationHint(enable) {\n          this._$container.style.willChange = enable ? 'transform' : 'auto';\n        },\n      },\n      {\n        key: 'remove',\n        value: function remove() {\n          this._$container.remove();\n        },\n      },\n      {\n        key: 'getContainer',\n        value: function getContainer() {\n          return this._$container;\n        },\n      },\n      {\n        key: 'getOriginalEl',\n        value: function getOriginalEl() {\n          return this._$el;\n        },\n      },\n    ]);\n\n    return Item;\n  })();\n  var VirtualItem = /*#__PURE__*/ (function () {\n    function VirtualItem(size) {\n      _classCallCheck(this, VirtualItem);\n\n      this._size = size;\n    }\n\n    _createClass(VirtualItem, [\n      {\n        key: 'getSize',\n        value: function getSize() {\n          var _ref2 =\n              arguments.length > 0 && arguments[0] !== undefined\n                ? arguments[0]\n                : {},\n            _ref2$inverse = _ref2.inverse,\n            inverse = _ref2$inverse === void 0 ? false : _ref2$inverse;\n\n          if (inverse) {\n            throw new Error('Inverse not supported on virtual item.');\n          }\n\n          return this._size;\n        },\n      },\n      {\n        key: 'setOffset',\n        value: function setOffset() {},\n      },\n      {\n        key: 'enableAnimationHint',\n        value: function enableAnimationHint() {},\n      },\n      {\n        key: 'remove',\n        value: function remove() {},\n      },\n    ]);\n\n    return VirtualItem;\n  })();\n\n  var Marquee = /*#__PURE__*/ (function () {\n    function Marquee($container) {\n      var _ref =\n          arguments.length > 1 && arguments[1] !== undefined\n            ? arguments[1]\n            : {},\n        _ref$rate = _ref.rate,\n        rate = _ref$rate === void 0 ? -25 : _ref$rate,\n        _ref$upDown = _ref.upDown,\n        upDown = _ref$upDown === void 0 ? false : _ref$upDown;\n\n      _classCallCheck(this, Marquee);\n\n      this._rendering = false;\n      this._waitingForItem = true;\n      this._nextItemImmediatelyFollowsPrevious = false;\n      this._rate = rate;\n      this._lastEffectiveRate = rate;\n      this._justReversedRate = false;\n      this._windowWidth = window.innerWidth;\n      this._windowHeight = window.innerHeight;\n      this._direction = upDown ? DIRECTION.DOWN : DIRECTION.RIGHT;\n      this._onItemRequired = [];\n      this._onItemRemoved = [];\n      this._onAllItemsRemoved = [];\n      this._leftItemOffset = 0;\n      this._containerSize = 0;\n      this._items = [];\n      this._pendingItem = null;\n      var $innerContainer = document.createElement('div');\n      $innerContainer.style.position = 'relative';\n      $innerContainer.style.display = 'inline-block';\n      this._$container = $innerContainer;\n      this._containerSizeInverse = null;\n\n      if (this._direction === DIRECTION.RIGHT) {\n        $innerContainer.style.width = '100%';\n      } else {\n        $innerContainer.style.height = '100%';\n      }\n\n      this._updateContainerSize();\n\n      $container.appendChild($innerContainer);\n\n      this._scheduleRender();\n    } // called when there's room for a new item.\n    // You can return the item to append next\n\n    _createClass(Marquee, [\n      {\n        key: 'onItemRequired',\n        value: function onItemRequired(cb) {\n          this._onItemRequired.push(cb);\n        }, // Called when an item is removed\n      },\n      {\n        key: 'onItemRemoved',\n        value: function onItemRemoved(cb) {\n          this._onItemRemoved.push(cb);\n        }, // Called when the last item is removed\n      },\n      {\n        key: 'onAllItemsRemoved',\n        value: function onAllItemsRemoved(cb) {\n          this._onAllItemsRemoved.push(cb);\n        },\n      },\n      {\n        key: 'getNumItems',\n        value: function getNumItems() {\n          return this._items.filter(function (_ref2) {\n            var item = _ref2.item;\n            return item instanceof Item;\n          }).length;\n        },\n      },\n      {\n        key: 'setRate',\n        value: function setRate(rate) {\n          if (!rate !== !this._rate) {\n            this._enableAnimationHint(!!rate);\n\n            if (rate) {\n              this._scheduleRender();\n            }\n          }\n\n          if (rate * this._lastEffectiveRate < 0) {\n            this._justReversedRate = true;\n            this._waitingForItem = false;\n          }\n\n          this._rate = rate;\n\n          if (rate) {\n            this._lastEffectiveRate = rate;\n          }\n        },\n      },\n      {\n        key: 'getRate',\n        value: function getRate() {\n          return this._rate;\n        },\n      },\n      {\n        key: 'clear',\n        value: function clear() {\n          var _this = this;\n\n          this._items.forEach(function (_ref3) {\n            var item = _ref3.item;\n            return _this._removeItem(item);\n          });\n\n          this._items = [];\n          this._waitingForItem = true;\n\n          this._updateContainerSize();\n        },\n      },\n      {\n        key: 'isWaitingForItem',\n        value: function isWaitingForItem() {\n          return this._waitingForItem;\n        },\n      },\n      {\n        key: 'appendItem',\n        value: function appendItem($el) {\n          if (!this._waitingForItem) {\n            throw new Error('No room for item.');\n          } // convert to div if $el is a string\n\n          $el = toDomEl($el);\n\n          var itemAlreadyExists = this._items.some(function (_ref4) {\n            var item = _ref4.item;\n            return item instanceof Item && item.getOriginalEl() === $el;\n          });\n\n          if (itemAlreadyExists) {\n            throw new Error('Item already exists.');\n          }\n\n          this._waitingForItem = false;\n          this._pendingItem = new Item($el, this._direction);\n\n          this._pendingItem.enableAnimationHint(!!this._rate);\n\n          if (this._rendering) {\n            this._render(0);\n          } else {\n            this._scheduleRender();\n          }\n        },\n      },\n      {\n        key: '_removeItem',\n        value: function _removeItem(_ref5) {\n          var _this2 = this;\n\n          var item = _ref5.item;\n          defer(function () {\n            item.remove();\n\n            if (item instanceof Item) {\n              _this2._onItemRemoved.forEach(function (cb) {\n                deferException(function () {\n                  return cb(item.getOriginalEl());\n                });\n              });\n            }\n          });\n        }, // update size of container so that the marquee items fit inside it.\n        // This is needed because the items are posisitioned absolutely, so not in normal flow.\n        // Without this, the height of the container would always be 0px, which is not useful\n      },\n      {\n        key: '_updateContainerSize',\n        value: function _updateContainerSize() {\n          var maxSize = this._items.reduce(function (size, _ref6) {\n            var item = _ref6.item;\n\n            if (item instanceof VirtualItem) {\n              return size;\n            }\n\n            var a = item.getSize({\n              inverse: true,\n            });\n\n            if (a > size) {\n              return a;\n            }\n\n            return size;\n          }, 0);\n\n          if (this._containerSizeInverse !== maxSize) {\n            this._containerSizeInverse = maxSize;\n\n            if (this._direction === DIRECTION.RIGHT) {\n              this._$container.style.height = ''.concat(maxSize, 'px');\n            } else {\n              this._$container.style.width = ''.concat(maxSize, 'px');\n            }\n          }\n        },\n      },\n      {\n        key: '_enableAnimationHint',\n        value: function _enableAnimationHint(enable) {\n          this._items.forEach(function (_ref7) {\n            var item = _ref7.item;\n            return item.enableAnimationHint(enable);\n          });\n        },\n      },\n      {\n        key: '_scheduleRender',\n        value: function _scheduleRender() {\n          var _this3 = this;\n\n          if (!this._requestAnimationID) {\n            this._lastUpdateTime = performance.now();\n            this._requestAnimationID = window.requestAnimationFrame(\n              function () {\n                return _this3._onRequestAnimationFrame();\n              }\n            );\n          }\n        },\n      },\n      {\n        key: '_onRequestAnimationFrame',\n        value: function _onRequestAnimationFrame() {\n          var _this4 = this;\n\n          this._requestAnimationID = null;\n\n          if (!this._items.length && !this._pendingItem) {\n            return;\n          }\n\n          var now = performance.now();\n          var timePassed = now - this._lastUpdateTime;\n\n          if (this._rate) {\n            this._scheduleRender();\n          }\n\n          this._rendering = true;\n          var shiftAmount = this._rate * (timePassed / 1000);\n          this._containerSize = size(this._$container, this._direction);\n          deferException(function () {\n            return _this4._render(shiftAmount);\n          });\n          this._rendering = false;\n        },\n      },\n      {\n        key: '_render',\n        value: function _render(shiftAmount) {\n          var _this5 = this;\n\n          this._leftItemOffset += shiftAmount;\n          var containerSize = this._containerSize;\n\n          if (this._rate < 0) {\n            while (this._items.length) {\n              var item = this._items[0].item;\n\n              var _size = item.getSize();\n\n              if (this._leftItemOffset + _size > 0) {\n                break;\n              }\n\n              this._removeItem(this._items[0]);\n\n              this._items.shift();\n\n              this._leftItemOffset += _size;\n            }\n          }\n\n          var offsets = [];\n          var nextOffset = this._leftItemOffset;\n\n          this._items.some(function (_ref8, i) {\n            var item = _ref8.item;\n\n            if (nextOffset >= containerSize) {\n              if (_this5._rate > 0) {\n                _this5._items.splice(i).forEach(function (a) {\n                  return _this5._removeItem(a);\n                });\n\n                return true;\n              }\n            }\n\n            offsets.push(nextOffset);\n            nextOffset += item.getSize();\n            return false;\n          });\n\n          if (this._pendingItem) {\n            this._$container.appendChild(this._pendingItem.getContainer());\n\n            if (this._rate <= 0) {\n              if (!this._nextItemImmediatelyFollowsPrevious) {\n                // insert virtual item so that it starts off screen\n                this._items.push({\n                  item: new VirtualItem(\n                    Math.max(0, containerSize - nextOffset)\n                  ),\n                  offset: nextOffset,\n                });\n\n                offsets.push(nextOffset);\n                nextOffset = containerSize;\n              }\n\n              this._items.push({\n                item: this._pendingItem,\n                offset: nextOffset,\n              });\n\n              offsets.push(nextOffset);\n              nextOffset += this._pendingItem.getSize();\n            } else {\n              if (\n                !this._nextItemImmediatelyFollowsPrevious &&\n                this._items.length &&\n                this._leftItemOffset > 0\n              ) {\n                this._items.unshift({\n                  item: new VirtualItem(this._leftItemOffset),\n                  offset: 0,\n                });\n\n                offsets.unshift(0);\n                this._leftItemOffset = 0;\n              }\n\n              this._leftItemOffset -= this._pendingItem.getSize();\n              offsets.unshift(this._leftItemOffset);\n\n              this._items.unshift({\n                item: this._pendingItem,\n                offset: this._leftItemOffset,\n              });\n            }\n\n            this._pendingItem = null;\n          } // trim virtual items\n\n          while (\n            this._items.length &&\n            this._items[0].item instanceof VirtualItem\n          ) {\n            offsets.shift();\n\n            this._items.shift();\n\n            this._leftItemOffset = offsets[0] || 0;\n          }\n\n          while (\n            this._items.length &&\n            this._items[this._items.length - 1].item instanceof VirtualItem\n          ) {\n            offsets.pop();\n\n            this._items.pop();\n          }\n\n          var windowWidth = window.innerWidth;\n          var windowHeight = window.innerHeight;\n          var windowResized =\n            windowWidth !== this._windowWidth ||\n            windowHeight !== this._windowHeight;\n          this._windowWidth = windowWidth;\n          this._windowHeight = windowHeight;\n          offsets.forEach(function (offset, i) {\n            var item = _this5._items[i];\n            var hasJumped = Math.abs(item.offset + shiftAmount - offset) >= 1;\n            item.item.setOffset(\n              offset,\n              _this5._rate,\n              windowResized || hasJumped\n            );\n            item.offset = offset;\n          });\n\n          this._updateContainerSize();\n\n          if (!this._items.length) {\n            this._leftItemOffset = 0;\n            defer(function () {\n              _this5._onAllItemsRemoved.forEach(function (cb) {\n                deferException(function () {\n                  return cb();\n                });\n              });\n            });\n          }\n\n          this._nextItemImmediatelyFollowsPrevious = false;\n          var justReversedRate = this._justReversedRate;\n          this._justReversedRate = false;\n\n          if (\n            !this._waitingForItem &&\n            ((this._rate <= 0 && nextOffset <= containerSize) ||\n              (this._rate > 0 && this._leftItemOffset >= 0))\n          ) {\n            this._waitingForItem = true; // if an item is appended immediately below, it would be considered immediately following\n            // the previous if we haven't just changed direction.\n            // This is useful when deciding whether to add a separator on the side that enters the\n            // screen first or not\n\n            this._nextItemImmediatelyFollowsPrevious = !justReversedRate;\n            var nextItem;\n\n            this._onItemRequired.some(function (cb) {\n              return deferException(function () {\n                nextItem = cb({\n                  immediatelyFollowsPrevious:\n                    _this5._nextItemImmediatelyFollowsPrevious,\n                });\n                return !!nextItem;\n              });\n            });\n\n            if (nextItem) {\n              // Note appendItem() will call _render() synchronously again\n              this.appendItem(nextItem);\n            }\n\n            this._nextItemImmediatelyFollowsPrevious = false;\n          }\n        },\n      },\n    ]);\n\n    return Marquee;\n  })();\n\n  var indexMap = function (list) {\n    var map = {};\n    list.forEach(function (each, i) {\n      map[each] = map[each] || [];\n      map[each].push(i);\n    });\n    return map;\n  };\n\n  var longestCommonSubstring = function (seq1, seq2) {\n    var result = { startString1: 0, startString2: 0, length: 0 };\n    var indexMapBefore = indexMap(seq1);\n    var previousOverlap = [];\n    seq2.forEach(function (eachAfter, indexAfter) {\n      var overlapLength;\n      var overlap = [];\n      var indexesBefore = indexMapBefore[eachAfter] || [];\n      indexesBefore.forEach(function (indexBefore) {\n        overlapLength =\n          ((indexBefore && previousOverlap[indexBefore - 1]) || 0) + 1;\n        if (overlapLength > result.length) {\n          result.length = overlapLength;\n          result.startString1 = indexBefore - overlapLength + 1;\n          result.startString2 = indexAfter - overlapLength + 1;\n        }\n        overlap[indexBefore] = overlapLength;\n      });\n      previousOverlap = overlap;\n    });\n    return result;\n  };\n\n  var longestCommonSubstring_1 = longestCommonSubstring;\n\n  function loop(marquee) {\n    var buildersIn =\n      arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n    var seperatorBuilder =\n      arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n    var lastIndex = -1;\n    var builders = buildersIn.slice();\n\n    var getNextBuilder = function getNextBuilder() {\n      var offset =\n        arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n      var nextIndex = (lastIndex + offset) % builders.length;\n      return {\n        builder: builders[nextIndex],\n        index: nextIndex,\n      };\n    };\n\n    var appendItem = function appendItem(immediatelyFollowsPrevious) {\n      if (!builders.length || !marquee.isWaitingForItem()) {\n        return;\n      }\n\n      var _getNextBuilder = getNextBuilder(),\n        builder = _getNextBuilder.builder,\n        index = _getNextBuilder.index;\n\n      lastIndex = index;\n      var $item = toDomEl(builder());\n\n      if (immediatelyFollowsPrevious && seperatorBuilder) {\n        var $seperator = toDomEl(seperatorBuilder());\n        var $container = document.createElement('div');\n        $seperator.style.display = 'inline';\n        $item.style.display = 'inline';\n\n        if (marquee.getRate() <= 0) {\n          $container.appendChild($seperator);\n          $container.appendChild($item);\n        } else {\n          $container.appendChild($item);\n          $container.appendChild($seperator);\n        }\n\n        $item = $container;\n      }\n\n      marquee.appendItem($item);\n    };\n\n    marquee.onItemRequired(function (_ref) {\n      var immediatelyFollowsPrevious = _ref.immediatelyFollowsPrevious;\n      return appendItem(immediatelyFollowsPrevious);\n    });\n    appendItem();\n    return {\n      update: function update(newBuilders) {\n        // try and start from somewhere that makes sense\n        var calculateNewIndex = function calculateNewIndex() {\n          // convert array of function references to array of ids\n          var buildersStructure = builders.map(function (b, i) {\n            var prevIndex = builders.indexOf(b); // if already seen builder, give it the same number\n\n            return prevIndex < i ? prevIndex : i;\n          });\n          var newBuildersStructure = newBuilders.map(function (b, i) {\n            // matching indexes where they exist, and -1 for all unknown\n            return builders.indexOf(b);\n          });\n\n          var _longestSubstring = longestCommonSubstring_1(\n              buildersStructure,\n              newBuildersStructure\n            ),\n            startString1 = _longestSubstring.startString1,\n            startString2 = _longestSubstring.startString2,\n            length = _longestSubstring.length;\n\n          if (lastIndex >= startString1 && lastIndex < startString1 + length) {\n            // we are in the overlapping region\n            return lastIndex + (startString2 - startString1);\n          }\n\n          return -1;\n        };\n\n        lastIndex = calculateNewIndex();\n        builders = newBuilders.slice();\n        appendItem(false);\n      },\n    };\n  }\n\n  exports.Marquee = Marquee;\n  exports.loop = loop;\n\n  Object.defineProperty(exports, '__esModule', { value: true });\n});\n"]}