From 5cfcac89424031ce344f21cad8fd5abecb4836bb Mon Sep 17 00:00:00 2001
From: Asif Jalil <62372647+asif-jalil@users.noreply.github.com>
Date: Wed, 23 Aug 2023 21:57:18 +0600
Subject: [PATCH] optimize
---
CONTRIBUTING.md | 3 +-
README.md | 6 +-
dist/scroll.carousel.css | 28 -
dist/scroll.carousel.css.map | 1 -
dist/scroll.carousel.js | 706 ----------------------
dist/scroll.carousel.js.map | 1 -
dist/scroll.carousel.min.css | 3 +-
dist/scroll.carousel.min.css.map | 1 -
dist/scroll.carousel.min.js | 3 +-
dist/scroll.carousel.min.js.map | 1 -
example/css/style.css | 89 ---
example/images/binoculars-sketch.png | Bin 56401 -> 0 bytes
example/images/blue-flask.png | Bin 35361 -> 0 bytes
example/images/flask.png | Bin 92474 -> 0 bytes
example/images/magnetic-field.png | Bin 438951 -> 0 bytes
example/index.html | 151 -----
example/js/scroll-carousel.js | 57 --
package-lock.json | 869 ++++++++++++++++++++++++---
package.json | 9 +-
src/js/EvEmitter.js | 69 +--
src/js/scroll.carousel.d.ts | 2 +-
webpack.config.js | 2 +-
22 files changed, 833 insertions(+), 1168 deletions(-)
delete mode 100644 dist/scroll.carousel.css
delete mode 100644 dist/scroll.carousel.css.map
delete mode 100644 dist/scroll.carousel.js
delete mode 100644 dist/scroll.carousel.js.map
delete mode 100644 dist/scroll.carousel.min.css.map
delete mode 100644 dist/scroll.carousel.min.js.map
delete mode 100644 example/css/style.css
delete mode 100644 example/images/binoculars-sketch.png
delete mode 100644 example/images/blue-flask.png
delete mode 100644 example/images/flask.png
delete mode 100644 example/images/magnetic-field.png
delete mode 100644 example/index.html
delete mode 100644 example/js/scroll-carousel.js
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index ba227b9..b2e48ec 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -15,7 +15,8 @@
- For feature create branch `feature/your-feature` and for bug fixing branch `fix/your-branch`
- Your change should only be in the `src` folder.
- Follow the code style. Spaces in brackets, semicolons, trailing commas.
-- For development, use `npm start`. This will start the development server and you can see your change what you did in the `example` & `src` folder.
+- For development, use `npm start`. This will start the development server and you can see your change what you did in the `src` folder.
+- Run `npm run build` to build the project.
- Make commits of logical units.
- Check for unnecessary whitespace before committing.
- Use descriptive commit messages and reference the #issue number.
diff --git a/README.md b/README.md
index 494567a..67b0ffb 100644
--- a/README.md
+++ b/README.md
@@ -24,7 +24,7 @@
Simple content slider, works on scroll. Absolutely free for use. Thriving for precision & community growth.
-[Documentation](https://asif-jalil.github.io/scroll-carousel-website) | [Demos](https://asif-jalil.github.io/scroll-carousel-website/#demos)
+[NPM](https://www.npmjs.com/package/scroll-carousel) | [Documentation](https://asif-jalil.github.io/scroll-carousel-website) | [Demos](https://asif-jalil.github.io/scroll-carousel-website/#demos)
**Note:** This carousel only operates in browser.
@@ -69,13 +69,13 @@ To get started with **Scroll Carousel** right away, there are a few CDN availabl
Add a link to the css file in your `
`:
```
-
+
```
Then, before your closing `` tag, add:
```
-
+
```
### Package managers
diff --git a/dist/scroll.carousel.css b/dist/scroll.carousel.css
deleted file mode 100644
index 7627734..0000000
--- a/dist/scroll.carousel.css
+++ /dev/null
@@ -1,28 +0,0 @@
-/*!
- *
- * scroll-carousel - 1.2.1
- * Responsive scroll slider
- *
- * https://asif-jalil.github.io/scroll-carousel-website
- *
- */
-/*!*********************************************************************************************************************************************************************!*\
- !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[2]!./src/scss/main.scss ***!
- \*********************************************************************************************************************************************************************/
-.scroll-carousel-viewport {
- overflow: hidden;
- position: relative;
-}
-
-.scroll-carousel-slider {
- position: relative;
- display: inline-flex;
-}
-
-.sc-slide {
- position: relative;
- display: inline-block;
-}
-.sc-slide img, .sc-slide video {
- max-width: fit-content !important;
-}
diff --git a/dist/scroll.carousel.css.map b/dist/scroll.carousel.css.map
deleted file mode 100644
index e57c590..0000000
--- a/dist/scroll.carousel.css.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"scroll.carousel.css","mappings":";;;;;;;;;;;AAAA;EACE;ACCF","sources":["webpack://scroll-carousel/./src/scss/_body.scss","webpack://scroll-carousel/./src/scss/main.scss"],"sourcesContent":[".scroll-carousel {\n position: relative;\n}",".scroll-carousel {\n position: relative;\n}"],"names":[],"sourceRoot":""}
\ No newline at end of file
diff --git a/dist/scroll.carousel.js b/dist/scroll.carousel.js
deleted file mode 100644
index 04d50b3..0000000
--- a/dist/scroll.carousel.js
+++ /dev/null
@@ -1,706 +0,0 @@
-/*!
- *
- * scroll-carousel - 1.2.1
- * Responsive scroll slider
- *
- * https://asif-jalil.github.io/scroll-carousel-website
- *
- */
-(function webpackUniversalModuleDefinition(root, factory) {
- if(typeof exports === 'object' && typeof module === 'object')
- module.exports = factory();
- else if(typeof define === 'function' && define.amd)
- define("ScrollCarousel", [], factory);
- else if(typeof exports === 'object')
- exports["ScrollCarousel"] = factory();
- else
- root["ScrollCarousel"] = factory();
-})(this, function() {
-return /******/ (function() { // webpackBootstrap
-/******/ "use strict";
-/******/ var __webpack_modules__ = ({
-
-/***/ "./src/js/EvEmitter.js":
-/*!*****************************!*\
- !*** ./src/js/EvEmitter.js ***!
- \*****************************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": function() { return /* binding */ EvEmitter; }
-/* harmony export */ });
-function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
-function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
-function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
-function EvEmitter() {}
-var proto = EvEmitter.prototype;
-proto.on = function (eventName, listener) {
- if (!eventName || !listener) return this;
-
- // set events hash
- var events = this._events = this._events || {};
- // set listeners array
- var listeners = events[eventName] = events[eventName] || [];
- // only add once
- if (!listeners.includes(listener)) {
- listeners.push(listener);
- }
- return this;
-};
-proto.once = function (eventName, listener) {
- if (!eventName || !listener) return this;
-
- // add event
- this.on(eventName, listener);
- // set once flag
- // set onceEvents hash
- var onceEvents = this._onceEvents = this._onceEvents || {};
- // set onceListeners object
- var onceListeners = onceEvents[eventName] = onceEvents[eventName] || {};
- // set flag
- onceListeners[listener] = true;
- return this;
-};
-proto.off = function (eventName, listener) {
- var listeners = this._events && this._events[eventName];
- if (!listeners || !listeners.length) return this;
- var index = listeners.indexOf(listener);
- if (index != -1) {
- listeners.splice(index, 1);
- }
- return this;
-};
-proto.emitEvent = function (eventName, args) {
- var listeners = this._events && this._events[eventName];
- if (!listeners || !listeners.length) return this;
-
- // copy over to avoid interference if .off() in listener
- listeners = listeners.slice(0);
- args = args || [];
- // once stuff
- var onceListeners = this._onceEvents && this._onceEvents[eventName];
- var _iterator = _createForOfIteratorHelper(listeners),
- _step;
- try {
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
- var listener = _step.value;
- var isOnce = onceListeners && onceListeners[listener];
- if (isOnce) {
- // remove listener
- // remove before trigger to prevent recursion
- this.off(eventName, listener);
- // unset once flag
- delete onceListeners[listener];
- }
- // trigger listener
- listener.apply(this, args);
- }
- } catch (err) {
- _iterator.e(err);
- } finally {
- _iterator.f();
- }
- return this;
-};
-proto.allOff = function () {
- delete this._events;
- delete this._onceEvents;
- return this;
-};
-
-/***/ }),
-
-/***/ "./src/js/scroll.carousel.const.js":
-/*!*****************************************!*\
- !*** ./src/js/scroll.carousel.const.js ***!
- \*****************************************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "LTR": function() { return /* binding */ LTR; },
-/* harmony export */ "RTL": function() { return /* binding */ RTL; }
-/* harmony export */ });
-var RTL = 'rtl';
-var LTR = 'ltr';
-
-/***/ }),
-
-/***/ "./src/js/util.js":
-/*!************************!*\
- !*** ./src/js/util.js ***!
- \************************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "docReady": function() { return /* binding */ docReady; },
-/* harmony export */ "duplicateElems": function() { return /* binding */ duplicateElems; },
-/* harmony export */ "filterFindElements": function() { return /* binding */ filterFindElements; },
-/* harmony export */ "getQueryElement": function() { return /* binding */ getQueryElement; },
-/* harmony export */ "htmlInit": function() { return /* binding */ htmlInit; },
-/* harmony export */ "isScrolledIntoView": function() { return /* binding */ isScrolledIntoView; },
-/* harmony export */ "makeArray": function() { return /* binding */ makeArray; },
-/* harmony export */ "sanitizer": function() { return /* binding */ sanitizer; },
-/* harmony export */ "toDashed": function() { return /* binding */ toDashed; }
-/* harmony export */ });
-/* harmony import */ var _scroll_carousel_const__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./scroll.carousel.const */ "./src/js/scroll.carousel.const.js");
-function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
-function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
-function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
-function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
-function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
-function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
-function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
-
-
-/**
- * check an element, node, array, object is into view or not
- *
- * @param {[Node, Element]} el
- * - single element, selected node, an array or a object
- *
- * @return {Boolean} - Boolean
- */
-function isScrolledIntoView(el) {
- if (!el) {
- return false;
- }
- var rect = el.getBoundingClientRect();
- var windowHeight = window.innerHeight || document.documentElement.clientHeight;
- var windowWidth = window.innerWidth || document.documentElement.clientWidth;
- var vertInView = rect.top <= windowHeight && rect.top + rect.height >= 0;
- var horInView = rect.left <= windowWidth && rect.left + rect.width >= 0;
- return vertInView && horInView;
-}
-
-// ----- getQueryElement ----- //
-
-// use element as selector string
-function getQueryElement(elem) {
- if (typeof elem == 'string') {
- return document.querySelector(elem);
- }
- return elem;
-}
-
-// ----- filterFindElements ----- //
-function filterFindElements(elems, selector) {
- // make array of elems
- elems = makeArray(elems);
- return elems
- // check that elem is an actual element
- .filter(function (elem) {
- return elem instanceof HTMLElement;
- }).reduce(function (scElems, elem) {
- var _scElems;
- // add elem of no selector
- if (!selector) {
- scElems.push(elem);
- return scElems;
- }
- // filter & find items if we have a selector
- // filter
- if (elem.matches(selector)) {
- scElems.push(elem);
- }
- // find children
- var childElems = elem.querySelectorAll(selector);
- // concat childElems to filterFound array
- scElems = (_scElems = scElems).concat.apply(_scElems, _toConsumableArray(childElems));
- return scElems;
- }, []);
-}
-
-// ----- makeArray ----- //
-
-// turn element or NodeList into an array
-function makeArray(obj) {
- // use object if already an array
- if (Array.isArray(obj)) return obj;
-
- // return empty array if undefined or null
- if (obj === null || obj === undefined) return [];
- var isArrayLike = _typeof(obj) == 'object' && typeof obj.length == 'number';
- // convert nodeList to array
- if (isArrayLike) return _toConsumableArray(obj);
-
- // array of single index
- return [obj];
-}
-
-// ----- docReady ----- //
-
-function docReady(onDocReady) {
- var readyState = document.readyState;
- if (readyState == 'complete' || readyState == 'interactive') {
- // do async to allow for other scripts to run.
- setTimeout(onDocReady);
- } else {
- document.addEventListener('DOMContentLoaded', onDocReady);
- }
-}
-
-// ----- htmlInit ----- //
-
-// source: http://bit.ly/3oYLusc
-function toDashed(str) {
- return str.replace(/(.)([A-Z])/g, function (match, $1, $2) {
- return $1 + '-' + $2;
- }).toLowerCase();
-}
-
-// allow user to initialize classes via [data-namespace] or .js-namespace class
-// htmlInit( Widget, 'widgetName' )
-// options are parsed from data-namespace-options
-function htmlInit(WidgetClass, namespace) {
- docReady(function () {
- var dashedNamespace = toDashed(namespace);
- var dataAttr = 'data-' + dashedNamespace;
- var dataAttrElems = document.querySelectorAll("[".concat(dataAttr, "]"));
- _toConsumableArray(dataAttrElems).forEach(function (elem) {
- var attr = elem.getAttribute(dataAttr);
- var options;
- try {
- options = attr && JSON.parse(attr);
- } catch (error) {
- // log error, do not initialize
- if (console) {
- console.error("Error parsing ".concat(dataAttr, " on ").concat(elem.className, ": ").concat(error));
- }
- return;
- }
- // initialize
- new WidgetClass(elem, options);
- });
- });
-}
-
-/**
- * Duplicate a node
- *
- * @param {Array} elems
- * @return {Array} array of element
- *
- */
-function duplicateElems(elems) {
- return elems.map(function (node) {
- return node.cloneNode(true);
- });
-}
-
-// option validation
-/**
- *
- * @param {Object} options
- * @returns {Object} Same object of param with sanitization
- */
-function sanitizer(options) {
- if (Object.keys(options).includes('speed') && !Number(options.speed)) options.speed = 7;
- if (Number(options.speed) <= 0) options.speed = 1;
- if (Object.keys(options).includes('margin') && !Number(options.margin) && Number(options.margin) !== 0) options.margin = 10;
- if (Object.keys(options).includes('direction')) options.direction = options.direction.toLowerCase();
- if (Object.keys(options).includes('direction') && options.direction !== _scroll_carousel_const__WEBPACK_IMPORTED_MODULE_0__.RTL && options.direction !== _scroll_carousel_const__WEBPACK_IMPORTED_MODULE_0__.LTR) options.direction = _scroll_carousel_const__WEBPACK_IMPORTED_MODULE_0__.RTL;
- if (Object.keys(options).includes('autoplaySpeed') && !Number(options.autoplaySpeed)) options.autoplaySpeed = 5;
- if (Number(options.autoplaySpeed) <= 0) options.autoplaySpeed = 1;
- return options;
-}
-
-/***/ }),
-
-/***/ "./src/scss/main.scss":
-/*!****************************!*\
- !*** ./src/scss/main.scss ***!
- \****************************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-__webpack_require__.r(__webpack_exports__);
-// extracted by mini-css-extract-plugin
-
-
-/***/ })
-
-/******/ });
-/************************************************************************/
-/******/ // The module cache
-/******/ var __webpack_module_cache__ = {};
-/******/
-/******/ // The require function
-/******/ function __webpack_require__(moduleId) {
-/******/ // Check if module is in cache
-/******/ var cachedModule = __webpack_module_cache__[moduleId];
-/******/ if (cachedModule !== undefined) {
-/******/ return cachedModule.exports;
-/******/ }
-/******/ // Create a new module (and put it into the cache)
-/******/ var module = __webpack_module_cache__[moduleId] = {
-/******/ // no module.id needed
-/******/ // no module.loaded needed
-/******/ exports: {}
-/******/ };
-/******/
-/******/ // Execute the module function
-/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
-/******/
-/******/ // Return the exports of the module
-/******/ return module.exports;
-/******/ }
-/******/
-/************************************************************************/
-/******/ /* webpack/runtime/define property getters */
-/******/ !function() {
-/******/ // define getter functions for harmony exports
-/******/ __webpack_require__.d = function(exports, definition) {
-/******/ for(var key in definition) {
-/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
-/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
-/******/ }
-/******/ }
-/******/ };
-/******/ }();
-/******/
-/******/ /* webpack/runtime/hasOwnProperty shorthand */
-/******/ !function() {
-/******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }
-/******/ }();
-/******/
-/******/ /* webpack/runtime/make namespace object */
-/******/ !function() {
-/******/ // define __esModule on exports
-/******/ __webpack_require__.r = function(exports) {
-/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
-/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
-/******/ }
-/******/ Object.defineProperty(exports, '__esModule', { value: true });
-/******/ };
-/******/ }();
-/******/
-/************************************************************************/
-var __webpack_exports__ = {};
-// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.
-!function() {
-/*!***********************************!*\
- !*** ./src/js/scroll.carousel.js ***!
- \***********************************/
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _scss_main_scss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../scss/main.scss */ "./src/scss/main.scss");
-/* harmony import */ var _scroll_carousel_const__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./scroll.carousel.const */ "./src/js/scroll.carousel.const.js");
-/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ "./src/js/util.js");
-/* harmony import */ var _EvEmitter__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./EvEmitter */ "./src/js/EvEmitter.js");
-function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
-function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
-function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
-function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
-function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
-function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
-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; }
-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; }
-function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
-
-
-
-
-
-// globally unique identifiers
-var GUID = 0;
-// internal store of all ScrollCarousel instances
-var instances = {};
-
-/**
- * Representing the Scroll Carousel
- * @constructor
- * @param {[Node, Element, string]} element - Target element where
- * @param {ScrollCarousel.defaults} options - Configuration options of the carousel
- */
-function ScrollCarousel(element) {
- var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
- var queryElement = (0,_util__WEBPACK_IMPORTED_MODULE_2__.getQueryElement)(element);
- if (!queryElement) {
- if (console) console.error("Bad element for Scroll Carousel: ".concat(queryElement || element));
- return;
- }
- this.element = queryElement;
-
- // do not initialize twice on same element
- if (this.element.scrollCarouselGUID) {
- var instance = instances[this.element.scrollCarouselGUID];
- if (instance) instance.option(options);
- return instance;
- }
-
- // baseOption will be used for destroy method and reinit method
- this.baseOption = options;
- // options
- this.options = _objectSpread({}, this.constructor.defaults);
- // validated options
- var sanitizedOptions = (0,_util__WEBPACK_IMPORTED_MODULE_2__.sanitizer)(options);
- // merge options with prototype
- this.option(sanitizedOptions);
-
- // kick things off
- this._create();
-}
-
-// default options
-ScrollCarousel.defaults = {
- // movement speed of the carousel
- speed: 7,
- // handle the speed according to acceleration
- smartSpeed: false,
- // margin between two slides
- margin: 10,
- // slide will play auto
- autoplay: false,
- // speed control for autoplay
- autoplaySpeed: 5,
- // select slide with class name which you want to select for carousel.
- // other element will behave as simple
- slideSelector: null,
- // moving direction of the slides
- direction: _scroll_carousel_const__WEBPACK_IMPORTED_MODULE_1__.RTL
-};
-var proto = ScrollCarousel.prototype;
-// inherit EventEmitter
-Object.assign(proto, _EvEmitter__WEBPACK_IMPORTED_MODULE_3__["default"].prototype);
-
-// start creating the carousel
-proto._create = function () {
- // add id for ScrollCarousel.data
- var id = this.guid = ++GUID;
- this.element.scrollCarouselGUID = id; // expando
- instances[id] = this; // associate via id
-
- // create viewport
- this._createViewport();
-
- // create slider
- this._createSlider();
-
- // add listeners from on option
- for (var eventName in this.options.on) {
- var listener = this.options.on[eventName];
- this.on(eventName, listener);
- }
-
- // add listeners from on option
- this.activate();
-};
-
-// assign default option with user input option
-proto.option = function (opts) {
- Object.assign(this.options, opts);
-};
-
-// main mechanism of Scroll Carousel
-proto.activate = function () {
- var _this$slider,
- _this = this;
- if (this.isActive) return;
- this.isActive = true;
- this.translate = 0;
- this.displacement = 0;
- this.isScrolling = true;
- this.prevPosition = document.body.scrollTop || document.documentElement.scrollTop;
-
- // baseElems will be used for destroy method
- this.baseElems = (0,_util__WEBPACK_IMPORTED_MODULE_2__.makeArray)(this.element.children);
-
- // move initial slide elements so they can be loaded as slides
- var slideElems = this._filterFindSlideElements(this.element.children);
- this.slideElems = this._makeSlides(slideElems);
-
- // for ltr direction reverse the elements like rtl mode
- if (this.options.direction === _scroll_carousel_const__WEBPACK_IMPORTED_MODULE_1__.LTR) {
- this.slideElems = this.slideElems.reverse();
- }
-
- // duplicate the slide array
- var duplicateSlideElems = (0,_util__WEBPACK_IMPORTED_MODULE_2__.duplicateElems)(this.slideElems);
- (_this$slider = this.slider).append.apply(_this$slider, _toConsumableArray(this.slideElems).concat(_toConsumableArray(duplicateSlideElems)));
- this.viewport.append(this.slider);
- this.element.append(this.viewport);
-
- // kick for ltr support
- if (this.options.direction === _scroll_carousel_const__WEBPACK_IMPORTED_MODULE_1__.LTR) {
- this._supportLtr();
- }
- if (this.options.autoplay) {
- this._autoplay();
- }
- this.emitEvent('ready');
-
- // transform function call on scroll
- window.addEventListener('scroll', function () {
- return _this._transform();
- });
-};
-
-// run interval for autoplay
-proto._autoplay = function () {
- var _this2 = this;
- // autoplay will set an interval. in every interval,
- // we transform the slider. the interval
- // will be removed when destroy method fired
- this.interval = setInterval(function () {
- _this2._transform();
- }, 10);
-};
-
-// transform the slider
-proto._transform = function () {
- if (!(0,_util__WEBPACK_IMPORTED_MODULE_2__.isScrolledIntoView)(this.element)) return;
- if (this.options.autoplay) {
- this._setIsScrolling();
- }
- if (!this.options.smartSpeed) {
- this._calcRegularSpeed();
- } else {
- this._calcSmartSpeed();
- }
- this.emitEvent('move', [this.progress]);
-};
-
-// calculate speed without smart speed
-proto._calcRegularSpeed = function () {
- var rect = this.slider.getBoundingClientRect();
- this.slider.style.transform = "translateX(".concat(this.translate, "px)");
- var speed = this.isScrolling ? this.options.speed : 1.2;
- if (this.options.direction === _scroll_carousel_const__WEBPACK_IMPORTED_MODULE_1__.RTL) this.translate -= speed;
- if (this.options.direction === _scroll_carousel_const__WEBPACK_IMPORTED_MODULE_1__.LTR) this.translate += speed;
- if (this.options.direction === _scroll_carousel_const__WEBPACK_IMPORTED_MODULE_1__.RTL && this.translate <= -rect.width / 2) this.translate = 0;
- if (this.options.direction === _scroll_carousel_const__WEBPACK_IMPORTED_MODULE_1__.LTR && this.translate >= 0) this.translate = -rect.width / 2;
-
- // progress is in percent. used to scroll event emit
- this.progress = 100 * -this.translate / rect.width * 2;
-};
-
-// calculate smart speed
-proto._calcSmartSpeed = function () {
- var documentScrollTop = document.body.scrollTop || document.documentElement.scrollTop;
- this.displacement -= this.isScrolling ? Math.abs(this.prevPosition - documentScrollTop) : 1.2;
- if (this.options.direction === _scroll_carousel_const__WEBPACK_IMPORTED_MODULE_1__.LTR && this.displacement < 0) {
- this.displacement = 50 / (this.options.speed * 10 / 5.5e3 % 50);
- }
- var translateBasic = this.displacement / 5.5e3 * (this.options.speed * 10) % 50;
- // progress is in percent. used to scroll event emit
- this.progress = -translateBasic * 2;
- var translate;
- if (this.options.direction === _scroll_carousel_const__WEBPACK_IMPORTED_MODULE_1__.RTL) translate = translateBasic;
- if (this.options.direction === _scroll_carousel_const__WEBPACK_IMPORTED_MODULE_1__.LTR) translate = -translateBasic;
- this.slider.style.transform = "translateX(".concat(translate, "%)");
- this.prevPosition = documentScrollTop;
-};
-
-// initial kick for ltr direction
-proto._supportLtr = function () {
- var rect = this.slider.getBoundingClientRect();
-
- // calculate initial translate for regular speed
- this.translate = -rect.width + Math.min(document.documentElement.clientWidth, window.innerWidth);
-
- // calculate initial displacement for smartSpeed
- var translateInPercent = 100 * this.translate / rect.width;
- this.displacement = -translateInPercent / (this.options.speed * 10 / 5.5e3 % 50);
- if (this.options.smartSpeed) {
- this.slider.style.transform = "translateX(".concat(translateInPercent, "%)");
- } else {
- this.slider.style.transform = "translateX(".concat(this.translate, "px)");
- }
-};
-
-// check if the document is scrolling or not
-proto._setIsScrolling = function () {
- var top = document.body.scrollTop || document.documentElement.scrollTop;
- this.isScrolling = true;
- if (this.prevPosition === top) {
- this.isScrolling = false;
- return;
- }
-
- // for smartSpeed the prevPosition will be set from _calcSmartSpeed function
- if (!this.options.smartSpeed) this.prevPosition = top;
-};
-
-// every node will be in sc-slide
-proto._makeSlide = function (elem) {
- var slideElem = document.createElement('div');
- slideElem.style.marginRight = this.options.margin + 'px';
- slideElem.className = 'sc-slide';
- this.slideElem = slideElem;
- this.slideElem.append(elem);
- return this.slideElem;
-};
-
-// full array of node
-proto._makeSlides = function (elems) {
- var _this3 = this;
- return elems.map(function (elem) {
- return _this3._makeSlide(elem);
- });
-};
-
-// slider positions the slide
-proto._createSlider = function () {
- // slider element does all the positioning
- var slider = document.createElement('div');
- slider.className = 'scroll-carousel-slider';
- this.slider = slider;
-};
-
-// slider will be in a viewport and it will transform
-proto._createViewport = function () {
- this.viewport = document.createElement('div');
- this.viewport.className = 'scroll-carousel-viewport';
-};
-
-// filtering elements if the element child structure is too much complex (specially for slideSelector option)
-proto._filterFindSlideElements = function (elems) {
- return (0,_util__WEBPACK_IMPORTED_MODULE_2__.filterFindElements)(elems, this.options.slideSelector);
-};
-
-// ============================== METHOD ==============================
-
-proto.destroy = function () {
- var _this$element;
- if (!this.isActive) return;
- this.viewport.remove();
- (_this$element = this.element).append.apply(_this$element, _toConsumableArray(this.baseElems));
-
- // set flags
- this.isActive = false;
- // clear the interval
- clearInterval(this.interval);
- window.removeEventListener('scroll', this);
- this.emitEvent('destroy');
- this.allOff();
- delete this.element.scrollCarouselGUID;
- delete instances[this.guid];
-};
-
-// Re initialize the carousel after destroy
-proto.reinit = function () {
- return new ScrollCarousel(this.element, this.baseOption);
-};
-
-// ============================== DATA ATTRIBUTE ==============================
-
-/**
- * get Scroll Carousel instance from element
- * @param {[Node, Element, String]} elem - element or selector string
- * @returns {ScrollCarousel} - Scroll Carousel instance
- */
-ScrollCarousel.data = function (elem) {
- elem = (0,_util__WEBPACK_IMPORTED_MODULE_2__.getQueryElement)(elem);
- if (elem) return instances[elem.scrollCarouselGUID];
-};
-
-// initialize with data attribute from here
-(0,_util__WEBPACK_IMPORTED_MODULE_2__.htmlInit)(ScrollCarousel, 'carousel');
-/* harmony default export */ __webpack_exports__["default"] = (ScrollCarousel);
-}();
-__webpack_exports__ = __webpack_exports__["default"];
-/******/ return __webpack_exports__;
-/******/ })()
-;
-});
\ No newline at end of file
diff --git a/dist/scroll.carousel.js.map b/dist/scroll.carousel.js.map
deleted file mode 100644
index 443fa86..0000000
--- a/dist/scroll.carousel.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"scroll.carousel.js","mappings":";;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;UCVA;UACA;;;;;WCDA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA;;;;;WCPA,8CAA8C;;;;;WCA9C;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D;;;;;;;;;;;;;;;ACNO,IAAMA,OAAO,GAAG,SAAVA,OAAO,GAAS;EAC3BC,OAAO,CAACC,GAAG,CAAC,eAAe,CAAC;AAC9B,CAAC;AAEDF,OAAO,EAAE;;;;;;;;ACJT","sources":["webpack://scroll-carousel/webpack/universalModuleDefinition","webpack://scroll-carousel/webpack/bootstrap","webpack://scroll-carousel/webpack/runtime/define property getters","webpack://scroll-carousel/webpack/runtime/hasOwnProperty shorthand","webpack://scroll-carousel/webpack/runtime/make namespace object","webpack://scroll-carousel/./src/js/index.js","webpack://scroll-carousel/./src/scss/main.scss?fadb"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"scroll-carousel\"] = factory();\n\telse\n\t\troot[\"scroll-carousel\"] = factory();\n})(this, function() {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","export const printMe = () => {\n console.log('Print enabled');\n};\n\nprintMe();\n\n","// extracted by mini-css-extract-plugin\nexport {};"],"names":["printMe","console","log"],"sourceRoot":""}
\ No newline at end of file
diff --git a/dist/scroll.carousel.min.css b/dist/scroll.carousel.min.css
index 6f85cc5..646f5ca 100644
--- a/dist/scroll.carousel.min.css
+++ b/dist/scroll.carousel.min.css
@@ -1,2 +1 @@
-.scroll-carousel-viewport{overflow:hidden;position:relative}.scroll-carousel-slider{display:inline-flex;position:relative}.sc-slide{display:inline-block;position:relative}.sc-slide img,.sc-slide video{max-width:fit-content!important}
-/*# sourceMappingURL=scroll.carousel.min.css.map*/
\ No newline at end of file
+.scroll-carousel-viewport{overflow:hidden;position:relative}.scroll-carousel-slider{display:inline-flex;position:relative}.sc-slide{display:inline-block;position:relative}.sc-slide img,.sc-slide video{max-width:fit-content!important}
\ No newline at end of file
diff --git a/dist/scroll.carousel.min.css.map b/dist/scroll.carousel.min.css.map
deleted file mode 100644
index da75021..0000000
--- a/dist/scroll.carousel.min.css.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"scroll.carousel.min.css","mappings":"AAAA,0BAA0B,eAAe,CAAC,iBAAiB,CAAC,wBAA0C,mBAAkB,CAApC,iBAAqC,CAAC,UAA4B,oBAAmB,CAArC,iBAAsC,CAAC,8BAA8B,+BAAgC","sources":["webpack://ScrollCarousel/./src/scss/main.scss"],"sourcesContent":[".scroll-carousel-viewport{overflow:hidden;position:relative}.scroll-carousel-slider{position:relative;display:inline-flex}.sc-slide{position:relative;display:inline-block}.sc-slide img,.sc-slide video{max-width:fit-content !important}"],"names":[],"sourceRoot":""}
\ No newline at end of file
diff --git a/dist/scroll.carousel.min.js b/dist/scroll.carousel.min.js
index 5a05206..5bb986f 100644
--- a/dist/scroll.carousel.min.js
+++ b/dist/scroll.carousel.min.js
@@ -1,2 +1 @@
-!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define("ScrollCarousel",[],e):"object"==typeof exports?exports.ScrollCarousel=e():t.ScrollCarousel=e()}(this,(function(){return function(){"use strict";var t={d:function(e,n){for(var r in n)t.o(n,r)&&!t.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:n[r]})},o:function(t,e){return Object.prototype.hasOwnProperty.call(t,e)}},e={};t.d(e,{default:function(){return C}});var n="rtl",r="ltr";function i(t){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i(t)}function o(t){return function(t){if(Array.isArray(t))return s(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(!t)return;if("string"==typeof t)return s(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return s(t,e)}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function s(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,s=!0,l=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return s=t.done,t},e:function(t){l=!0,o=t},f:function(){try{s||null==n.return||n.return()}finally{if(l)throw o}}}}function d(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);nt.length)&&(e=t.length);for(var n=0,r=new Array(e);n1&&void 0!==arguments[1]?arguments[1]:{},n=l(t);if(n){if(this.element=n,this.element.scrollCarouselGUID){var r=S[this.element.scrollCarouselGUID];return r&&r.option(e),r}this.baseOption=e,this.options=v({},this.constructor.defaults);var i=c(e);this.option(i),this._create()}else console&&console.error("Bad element for Scroll Carousel: ".concat(n||t))}w.defaults={speed:7,smartSpeed:!1,margin:10,autoplay:!1,autoplaySpeed:5,slideSelector:null,direction:n};var E,O,_,j,A=w.prototype;Object.assign(A,h.prototype),A._create=function(){var t=this.guid=++g;for(var e in this.element.scrollCarouselGUID=t,S[t]=this,this._createViewport(),this._createSlider(),this.options.on){var n=this.options.on[e];this.on(e,n)}this.activate()},A.option=function(t){Object.assign(this.options,t)},A.activate=function(){var t,e=this;if(!this.isActive){this.isActive=!0,this.translate=0,this.displacement=0,this.isScrolling=!0,this.prevPosition=document.body.scrollTop||document.documentElement.scrollTop,this.baseElems=a(this.element.children);var n=this._filterFindSlideElements(this.element.children);this.slideElems=this._makeSlides(n),this.options.direction===r&&(this.slideElems=this.slideElems.reverse());var i=this.slideElems.map((function(t){return t.cloneNode(!0)}));(t=this.slider).append.apply(t,f(this.slideElems).concat(f(i))),this.viewport.append(this.slider),this.element.append(this.viewport),this.options.direction===r&&this._supportLtr(),this.options.autoplay&&this._autoplay(),this.emitEvent("ready"),window.addEventListener("scroll",(function(){return e._transform()}))}},A._autoplay=function(){var t=this;this.interval=setInterval((function(){t._transform()}),10)},A._transform=function(){(function(t){if(!t)return!1;var e=t.getBoundingClientRect(),n=window.innerHeight||document.documentElement.clientHeight,r=window.innerWidth||document.documentElement.clientWidth,i=e.top<=n&&e.top+e.height>=0,o=e.left<=r&&e.left+e.width>=0;return i&&o})(this.element)&&(this.options.autoplay&&this._setIsScrolling(),this.options.smartSpeed?this._calcSmartSpeed():this._calcRegularSpeed(),this.emitEvent("move",[this.progress]))},A._calcRegularSpeed=function(){var t=this.slider.getBoundingClientRect();this.slider.style.transform="translateX(".concat(this.translate,"px)");var e=this.isScrolling?this.options.speed:1.2;this.options.direction===n&&(this.translate-=e),this.options.direction===r&&(this.translate+=e),this.options.direction===n&&this.translate<=-t.width/2&&(this.translate=0),this.options.direction===r&&this.translate>=0&&(this.translate=-t.width/2),this.progress=100*-this.translate/t.width*2},A._calcSmartSpeed=function(){var t=document.body.scrollTop||document.documentElement.scrollTop;this.displacement-=this.isScrolling?Math.abs(this.prevPosition-t):1.2,this.options.direction===r&&this.displacement<0&&(this.displacement=50/(10*this.options.speed/5500%50));var e,i=this.displacement/5500*(10*this.options.speed)%50;this.progress=2*-i,this.options.direction===n&&(e=i),this.options.direction===r&&(e=-i),this.slider.style.transform="translateX(".concat(e,"%)"),this.prevPosition=t},A._supportLtr=function(){var t=this.slider.getBoundingClientRect();this.translate=-t.width+Math.min(document.documentElement.clientWidth,window.innerWidth);var e=100*this.translate/t.width;this.displacement=-e/(10*this.options.speed/5500%50),this.options.smartSpeed?this.slider.style.transform="translateX(".concat(e,"%)"):this.slider.style.transform="translateX(".concat(this.translate,"px)")},A._setIsScrolling=function(){var t=document.body.scrollTop||document.documentElement.scrollTop;this.isScrolling=!0,this.prevPosition!==t?this.options.smartSpeed||(this.prevPosition=t):this.isScrolling=!1},A._makeSlide=function(t){var e=document.createElement("div");return e.style.marginRight=this.options.margin+"px",e.className="sc-slide",this.slideElem=e,this.slideElem.append(t),this.slideElem},A._makeSlides=function(t){var e=this;return t.map((function(t){return e._makeSlide(t)}))},A._createSlider=function(){var t=document.createElement("div");t.className="scroll-carousel-slider",this.slider=t},A._createViewport=function(){this.viewport=document.createElement("div"),this.viewport.className="scroll-carousel-viewport"},A._filterFindSlideElements=function(t){return function(t,e){return(t=a(t)).filter((function(t){return t instanceof HTMLElement})).reduce((function(t,n){var r;if(!e)return t.push(n),t;n.matches(e)&&t.push(n);var i=n.querySelectorAll(e);return(r=t).concat.apply(r,o(i))}),[])}(t,this.options.slideSelector)},A.destroy=function(){var t;this.isActive&&(this.viewport.remove(),(t=this.element).append.apply(t,f(this.baseElems)),this.isActive=!1,clearInterval(this.interval),window.removeEventListener("scroll",this),this.emitEvent("destroy"),this.allOff(),delete this.element.scrollCarouselGUID,delete S[this.guid])},A.reinit=function(){return new w(this.element,this.baseOption)},w.data=function(t){if(t=l(t))return S[t.scrollCarouselGUID]},E=w,O="carousel",_=function(){var t="data-"+O.replace(/(.)([A-Z])/g,(function(t,e,n){return e+"-"+n})).toLowerCase();o(document.querySelectorAll("[".concat(t,"]"))).forEach((function(e){var n,r=e.getAttribute(t);try{n=r&&JSON.parse(r)}catch(n){return void(console&&console.error("Error parsing ".concat(t," on ").concat(e.className,": ").concat(n)))}new E(e,n)}))},"complete"==(j=document.readyState)||"interactive"==j?setTimeout(_):document.addEventListener("DOMContentLoaded",_);var C=w;return e=e.default}()}));
-//# sourceMappingURL=scroll.carousel.min.js.map
\ No newline at end of file
+!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define("ScrollCarousel",[],e):"object"==typeof exports?exports.ScrollCarousel=e():t.ScrollCarousel=e()}(this,(function(){return function(){"use strict";var t={d:function(e,r){for(var n in r)t.o(r,n)&&!t.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:r[n]})},o:function(t,e){return Object.prototype.hasOwnProperty.call(t,e)}},e={};t.d(e,{default:function(){return C}});var r="rtl",n="ltr";function i(t){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i(t)}function o(t){return function(t){if(Array.isArray(t))return s(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(!t)return;if("string"==typeof t)return s(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);"Object"===r&&t.constructor&&(r=t.constructor.name);if("Map"===r||"Set"===r)return Array.from(t);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return s(t,e)}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function s(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,s=!0,l=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return s=t.done,t},e:function(t){l=!0,o=t},f:function(){try{s||null==r.return||r.return()}finally{if(l)throw o}}}}function d(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);rt.length)&&(e=t.length);for(var r=0,n=new Array(e);r1&&void 0!==arguments[1]?arguments[1]:{},r=l(t);if(r){if(this.element=r,this.element.scrollCarouselGUID){var n=S[this.element.scrollCarouselGUID];return n&&n.option(e),n}this.baseOption=e,this.options=v({},this.constructor.defaults);var i=c(e);this.option(i),this._create()}else console&&console.error("Bad element for Scroll Carousel: ".concat(r||t))}w.defaults={speed:7,smartSpeed:!1,margin:10,autoplay:!1,autoplaySpeed:5,slideSelector:null,direction:r};var O,E,j,A,_=w.prototype;Object.assign(_,p.prototype),_._create=function(){var t=this.guid=++g;for(var e in this.element.scrollCarouselGUID=t,S[t]=this,this._createViewport(),this._createSlider(),this.options.on){var r=this.options.on[e];this.on(e,r)}this.activate()},_.option=function(t){Object.assign(this.options,t)},_.activate=function(){var t,e=this;if(!this.isActive){this.isActive=!0,this.translate=0,this.displacement=0,this.isScrolling=!0,this.prevPosition=document.body.scrollTop||document.documentElement.scrollTop,this.baseElems=a(this.element.children);var r=this._filterFindSlideElements(this.element.children);this.slideElems=this._makeSlides(r),this.options.direction===n&&(this.slideElems=this.slideElems.reverse());var i=this.slideElems.map((function(t){return t.cloneNode(!0)}));(t=this.slider).append.apply(t,f(this.slideElems).concat(f(i))),this.viewport.append(this.slider),this.element.append(this.viewport),this.options.direction===n&&this._supportLtr(),this.options.autoplay&&this._autoplay(),this.emitEvent("ready"),window.addEventListener("scroll",(function(){return e._transform()}))}},_._autoplay=function(){var t=this;this.interval=setInterval((function(){t._transform()}),10)},_._transform=function(){(function(t){if(!t)return!1;var e=t.getBoundingClientRect(),r=window.innerHeight||document.documentElement.clientHeight,n=window.innerWidth||document.documentElement.clientWidth,i=e.top<=r&&e.top+e.height>=0,o=e.left<=n&&e.left+e.width>=0;return i&&o})(this.element)&&(this.options.autoplay&&this._setIsScrolling(),this.options.smartSpeed?this._calcSmartSpeed():this._calcRegularSpeed(),this.emitEvent("move",[this.progress]))},_._calcRegularSpeed=function(){var t=this.slider.getBoundingClientRect();this.slider.style.transform="translateX(".concat(this.translate,"px)");var e=this.isScrolling?this.options.speed:1.2;this.options.direction===r&&(this.translate-=e),this.options.direction===n&&(this.translate+=e),this.options.direction===r&&this.translate<=-t.width/2&&(this.translate=0),this.options.direction===n&&this.translate>=0&&(this.translate=-t.width/2),this.progress=100*-this.translate/t.width*2},_._calcSmartSpeed=function(){var t=document.body.scrollTop||document.documentElement.scrollTop;this.displacement-=this.isScrolling?Math.abs(this.prevPosition-t):1.2,this.options.direction===n&&this.displacement<0&&(this.displacement=50/(10*this.options.speed/5500%50));var e,i=this.displacement/5500*(10*this.options.speed)%50;this.progress=2*-i,this.options.direction===r&&(e=i),this.options.direction===n&&(e=-i),this.slider.style.transform="translateX(".concat(e,"%)"),this.prevPosition=t},_._supportLtr=function(){var t=this.slider.getBoundingClientRect();this.translate=-t.width+Math.min(document.documentElement.clientWidth,window.innerWidth);var e=100*this.translate/t.width;this.displacement=-e/(10*this.options.speed/5500%50),this.options.smartSpeed?this.slider.style.transform="translateX(".concat(e,"%)"):this.slider.style.transform="translateX(".concat(this.translate,"px)")},_._setIsScrolling=function(){var t=document.body.scrollTop||document.documentElement.scrollTop;this.isScrolling=!0,this.prevPosition!==t?this.options.smartSpeed||(this.prevPosition=t):this.isScrolling=!1},_._makeSlide=function(t){var e=document.createElement("div");return e.style.marginRight=this.options.margin+"px",e.className="sc-slide",this.slideElem=e,this.slideElem.append(t),this.slideElem},_._makeSlides=function(t){var e=this;return t.map((function(t){return e._makeSlide(t)}))},_._createSlider=function(){var t=document.createElement("div");t.className="scroll-carousel-slider",this.slider=t},_._createViewport=function(){this.viewport=document.createElement("div"),this.viewport.className="scroll-carousel-viewport"},_._filterFindSlideElements=function(t){return function(t,e){return(t=a(t)).filter((function(t){return t instanceof HTMLElement})).reduce((function(t,r){var n;if(!e)return t.push(r),t;r.matches(e)&&t.push(r);var i=r.querySelectorAll(e);return(n=t).concat.apply(n,o(i))}),[])}(t,this.options.slideSelector)},_.destroy=function(){var t;this.isActive&&(this.viewport.remove(),(t=this.element).append.apply(t,f(this.baseElems)),this.isActive=!1,clearInterval(this.interval),window.removeEventListener("scroll",this),this.emitEvent("destroy"),this.allOff(),delete this.element.scrollCarouselGUID,delete S[this.guid])},_.reinit=function(){return new w(this.element,this.baseOption)},w.data=function(t){if(t=l(t))return S[t.scrollCarouselGUID]},O=w,E="carousel",j=function(){var t="data-"+E.replace(/(.)([A-Z])/g,(function(t,e,r){return e+"-"+r})).toLowerCase();o(document.querySelectorAll("[".concat(t,"]"))).forEach((function(e){var r,n=e.getAttribute(t);try{r=n&&JSON.parse(n)}catch(r){return void(console&&console.error("Error parsing ".concat(t," on ").concat(e.className,": ").concat(r)))}new O(e,r)}))},"complete"==(A=document.readyState)||"interactive"==A?setTimeout(j):document.addEventListener("DOMContentLoaded",j);var C=w;return e=e.default}()}));
\ No newline at end of file
diff --git a/dist/scroll.carousel.min.js.map b/dist/scroll.carousel.min.js.map
deleted file mode 100644
index 78ba22a..0000000
--- a/dist/scroll.carousel.min.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"scroll.carousel.min.js","mappings":"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","sources":["webpack://ScrollCarousel/webpack/universalModuleDefinition","webpack://ScrollCarousel/webpack/bootstrap","webpack://ScrollCarousel/webpack/runtime/define property getters","webpack://ScrollCarousel/webpack/runtime/hasOwnProperty shorthand","webpack://ScrollCarousel/./src/js/scroll.carousel.const.js","webpack://ScrollCarousel/./src/js/util.js","webpack://ScrollCarousel/./src/js/EvEmitter.js","webpack://ScrollCarousel/./src/js/scroll.carousel.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"ScrollCarousel\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ScrollCarousel\"] = factory();\n\telse\n\t\troot[\"ScrollCarousel\"] = factory();\n})(this, function() {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","export const RTL = 'rtl';\nexport const LTR = 'ltr';\n","import { LTR, RTL } from './scroll.carousel.const';\n\n/**\n * check an element, node, array, object is into view or not\n *\n * @param {[Node, Element]} el\n * - single element, selected node, an array or a object\n *\n * @return {Boolean} - Boolean\n */\nexport function isScrolledIntoView(el) {\n if (!el) {\n return false;\n }\n const rect = el.getBoundingClientRect();\n const windowHeight = window.innerHeight || document.documentElement.clientHeight;\n const windowWidth = window.innerWidth || document.documentElement.clientWidth;\n const vertInView = rect.top <= windowHeight && rect.top + rect.height >= 0;\n const horInView = rect.left <= windowWidth && rect.left + rect.width >= 0;\n return vertInView && horInView;\n}\n\n// ----- getQueryElement ----- //\n\n// use element as selector string\nexport function getQueryElement(elem) {\n if (typeof elem == 'string') {\n return document.querySelector(elem);\n }\n return elem;\n}\n\n// ----- filterFindElements ----- //\nexport function filterFindElements(elems, selector) {\n // make array of elems\n elems = makeArray(elems);\n\n return (\n elems\n // check that elem is an actual element\n .filter(elem => elem instanceof HTMLElement)\n .reduce((scElems, elem) => {\n // add elem of no selector\n if (!selector) {\n scElems.push(elem);\n return scElems;\n }\n // filter & find items if we have a selector\n // filter\n if (elem.matches(selector)) {\n scElems.push(elem);\n }\n // find children\n let childElems = elem.querySelectorAll(selector);\n // concat childElems to filterFound array\n scElems = scElems.concat(...childElems);\n return scElems;\n }, [])\n );\n}\n\n// ----- makeArray ----- //\n\n// turn element or NodeList into an array\nexport function makeArray(obj) {\n // use object if already an array\n if (Array.isArray(obj)) return obj;\n\n // return empty array if undefined or null\n if (obj === null || obj === undefined) return [];\n\n let isArrayLike = typeof obj == 'object' && typeof obj.length == 'number';\n // convert nodeList to array\n if (isArrayLike) return [...obj];\n\n // array of single index\n return [obj];\n}\n\n// ----- docReady ----- //\n\nexport function docReady(onDocReady) {\n let readyState = document.readyState;\n if (readyState == 'complete' || readyState == 'interactive') {\n // do async to allow for other scripts to run.\n setTimeout(onDocReady);\n } else {\n document.addEventListener('DOMContentLoaded', onDocReady);\n }\n}\n\n// ----- htmlInit ----- //\n\n// source: http://bit.ly/3oYLusc\nexport function toDashed(str) {\n return str\n .replace(/(.)([A-Z])/g, function (match, $1, $2) {\n return $1 + '-' + $2;\n })\n .toLowerCase();\n}\n\n// allow user to initialize classes via [data-namespace] or .js-namespace class\n// htmlInit( Widget, 'widgetName' )\n// options are parsed from data-namespace-options\nexport function htmlInit(WidgetClass, namespace) {\n docReady(function () {\n let dashedNamespace = toDashed(namespace);\n let dataAttr = 'data-' + dashedNamespace;\n let dataAttrElems = document.querySelectorAll(`[${dataAttr}]`);\n\n [...dataAttrElems].forEach(elem => {\n let attr = elem.getAttribute(dataAttr);\n let options;\n try {\n options = attr && JSON.parse(attr);\n } catch (error) {\n // log error, do not initialize\n if (console) {\n console.error(`Error parsing ${dataAttr} on ${elem.className}: ${error}`);\n }\n return;\n }\n // initialize\n new WidgetClass(elem, options);\n });\n });\n}\n\n/**\n * Duplicate a node\n *\n * @param {Array} elems\n * @return {Array} array of element\n *\n */\nexport function duplicateElems(elems) {\n return elems.map(node => node.cloneNode(true));\n}\n\n// option validation\n/**\n *\n * @param {Object} options\n * @returns {Object} Same object of param with sanitization\n */\nexport function sanitizer(options) {\n if (Object.keys(options).includes('speed') && !Number(options.speed)) options.speed = 7;\n if (Number(options.speed) <= 0) options.speed = 1;\n\n if (Object.keys(options).includes('margin') && !Number(options.margin) && Number(options.margin) !== 0)\n options.margin = 10;\n if (Object.keys(options).includes('direction')) options.direction = options.direction.toLowerCase();\n if (Object.keys(options).includes('direction') && options.direction !== RTL && options.direction !== LTR)\n options.direction = RTL;\n\n if (Object.keys(options).includes('autoplaySpeed') && !Number(options.autoplaySpeed))\n options.autoplaySpeed = 5;\n if (Number(options.autoplaySpeed) <= 0) options.autoplaySpeed = 1;\n\n return options;\n}\n\n","export default function EvEmitter() { }\n\nlet proto = EvEmitter.prototype;\n\n\nproto.on = function( eventName, listener ) {\n if ( !eventName || !listener ) return this;\n\n // set events hash\n let events = this._events = this._events || {};\n // set listeners array\n let listeners = events[ eventName ] = events[ eventName ] || [];\n // only add once\n if ( !listeners.includes( listener ) ) {\n listeners.push( listener );\n }\n\n return this;\n};\n\nproto.once = function( eventName, listener ) {\n if ( !eventName || !listener ) return this;\n\n // add event\n this.on( eventName, listener );\n // set once flag\n // set onceEvents hash\n let onceEvents = this._onceEvents = this._onceEvents || {};\n // set onceListeners object\n let onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || {};\n // set flag\n onceListeners[ listener ] = true;\n\n return this;\n};\n\nproto.off = function( eventName, listener ) {\n let listeners = this._events && this._events[ eventName ];\n if ( !listeners || !listeners.length ) return this;\n\n let index = listeners.indexOf( listener );\n if ( index != -1 ) {\n listeners.splice( index, 1 );\n }\n\n return this;\n};\n\nproto.emitEvent = function( eventName, args ) {\n let listeners = this._events && this._events[eventName];\n if ( !listeners || !listeners.length ) return this;\n\n // copy over to avoid interference if .off() in listener\n listeners = listeners.slice( 0 );\n args = args || [];\n // once stuff\n let onceListeners = this._onceEvents && this._onceEvents[ eventName ];\n\n for ( let listener of listeners ) {\n let isOnce = onceListeners && onceListeners[ listener ];\n if ( isOnce ) {\n // remove listener\n // remove before trigger to prevent recursion\n this.off( eventName, listener );\n // unset once flag\n delete onceListeners[ listener ];\n }\n // trigger listener\n listener.apply( this, args );\n }\n\n return this;\n};\n\nproto.allOff = function() {\n delete this._events;\n delete this._onceEvents;\n return this;\n};","import '../scss/main.scss';\nimport { LTR, RTL } from './scroll.carousel.const';\nimport {\n duplicateElems,\n filterFindElements,\n getQueryElement,\n htmlInit,\n isScrolledIntoView,\n makeArray,\n sanitizer\n} from './util';\nimport EvEmitter from './EvEmitter';\n\n// globally unique identifiers\nlet GUID = 0;\n// internal store of all ScrollCarousel instances\nlet instances = {};\n\n/**\n * Representing the Scroll Carousel\n * @constructor\n * @param {[Node, Element, string]} element - Target element where\n * @param {ScrollCarousel.defaults} options - Configuration options of the carousel\n */\nfunction ScrollCarousel(element, options = {}) {\n let queryElement = getQueryElement(element);\n if (!queryElement) {\n if (console) console.error(`Bad element for Scroll Carousel: ${queryElement || element}`);\n return;\n }\n this.element = queryElement;\n\n // do not initialize twice on same element\n if (this.element.scrollCarouselGUID) {\n let instance = instances[this.element.scrollCarouselGUID];\n if (instance) instance.option(options);\n return instance;\n }\n\n // baseOption will be used for destroy method and reinit method\n this.baseOption = options;\n // options\n this.options = { ...this.constructor.defaults };\n // validated options\n const sanitizedOptions = sanitizer(options);\n // merge options with prototype\n this.option(sanitizedOptions);\n\n // kick things off\n this._create();\n}\n\n// default options\nScrollCarousel.defaults = {\n // movement speed of the carousel\n speed: 7,\n // handle the speed according to acceleration\n smartSpeed: false,\n // margin between two slides\n margin: 10,\n // slide will play auto\n autoplay: false,\n // speed control for autoplay\n autoplaySpeed: 5,\n // select slide with class name which you want to select for carousel.\n // other element will behave as simple\n slideSelector: null,\n // moving direction of the slides\n direction: RTL\n};\n\nlet proto = ScrollCarousel.prototype;\n// inherit EventEmitter\nObject.assign(proto, EvEmitter.prototype);\n\n// start creating the carousel\nproto._create = function () {\n // add id for ScrollCarousel.data\n let id = (this.guid = ++GUID);\n this.element.scrollCarouselGUID = id; // expando\n instances[id] = this; // associate via id\n\n // create viewport\n this._createViewport();\n\n // create slider\n this._createSlider();\n\n // add listeners from on option\n for (let eventName in this.options.on) {\n let listener = this.options.on[eventName];\n this.on(eventName, listener);\n }\n\n // add listeners from on option\n this.activate();\n};\n\n// assign default option with user input option\nproto.option = function (opts) {\n Object.assign(this.options, opts);\n};\n\n// main mechanism of Scroll Carousel\nproto.activate = function () {\n if (this.isActive) return;\n\n this.isActive = true;\n this.translate = 0;\n this.displacement = 0;\n this.isScrolling = true;\n this.prevPosition = document.body.scrollTop || document.documentElement.scrollTop;\n\n // baseElems will be used for destroy method\n this.baseElems = makeArray(this.element.children);\n\n // move initial slide elements so they can be loaded as slides\n let slideElems = this._filterFindSlideElements(this.element.children);\n this.slideElems = this._makeSlides(slideElems);\n\n // for ltr direction reverse the elements like rtl mode\n if (this.options.direction === LTR) {\n this.slideElems = this.slideElems.reverse();\n }\n\n // duplicate the slide array\n let duplicateSlideElems = duplicateElems(this.slideElems);\n\n this.slider.append(...this.slideElems, ...duplicateSlideElems);\n this.viewport.append(this.slider);\n this.element.append(this.viewport);\n\n // kick for ltr support\n if (this.options.direction === LTR) {\n this._supportLtr();\n }\n\n if (this.options.autoplay) {\n this._autoplay();\n }\n\n this.emitEvent('ready');\n\n // transform function call on scroll\n window.addEventListener('scroll', () => this._transform());\n};\n\n// run interval for autoplay\nproto._autoplay = function () {\n // autoplay will set an interval. in every interval,\n // we transform the slider. the interval\n // will be removed when destroy method fired\n this.interval = setInterval(() => {\n this._transform();\n }, 10);\n};\n\n// transform the slider\nproto._transform = function () {\n if (!isScrolledIntoView(this.element)) return;\n\n if (this.options.autoplay) {\n this._setIsScrolling();\n }\n\n if (!this.options.smartSpeed) {\n this._calcRegularSpeed();\n } else {\n this._calcSmartSpeed();\n }\n\n this.emitEvent('move', [this.progress]);\n};\n\n// calculate speed without smart speed\nproto._calcRegularSpeed = function () {\n const rect = this.slider.getBoundingClientRect();\n this.slider.style.transform = `translateX(${this.translate}px)`;\n const speed = this.isScrolling ? this.options.speed : 1.2;\n\n if (this.options.direction === RTL) this.translate -= speed;\n if (this.options.direction === LTR) this.translate += speed;\n\n if (this.options.direction === RTL && this.translate <= -rect.width / 2) this.translate = 0;\n if (this.options.direction === LTR && this.translate >= 0) this.translate = -rect.width / 2;\n\n // progress is in percent. used to scroll event emit\n this.progress = ((100 * -this.translate) / rect.width) * 2;\n};\n\n// calculate smart speed\nproto._calcSmartSpeed = function () {\n const documentScrollTop = document.body.scrollTop || document.documentElement.scrollTop;\n this.displacement -= this.isScrolling ? Math.abs(this.prevPosition - documentScrollTop) : 1.2;\n\n if (this.options.direction === LTR && this.displacement < 0) {\n this.displacement = 50 / (((this.options.speed * 10) / 5.5e3) % 50);\n }\n\n const translateBasic = ((this.displacement / 5.5e3) * (this.options.speed * 10)) % 50;\n // progress is in percent. used to scroll event emit\n this.progress = -translateBasic * 2;\n let translate;\n if (this.options.direction === RTL) translate = translateBasic;\n if (this.options.direction === LTR) translate = -translateBasic;\n\n this.slider.style.transform = `translateX(${translate}%)`;\n this.prevPosition = documentScrollTop;\n};\n\n// initial kick for ltr direction\nproto._supportLtr = function () {\n const rect = this.slider.getBoundingClientRect();\n\n // calculate initial translate for regular speed\n this.translate = -rect.width + Math.min(document.documentElement.clientWidth, window.innerWidth);\n\n // calculate initial displacement for smartSpeed\n let translateInPercent = (100 * this.translate) / rect.width;\n this.displacement = -translateInPercent / (((this.options.speed * 10) / 5.5e3) % 50);\n\n if (this.options.smartSpeed) {\n this.slider.style.transform = `translateX(${translateInPercent}%)`;\n } else {\n this.slider.style.transform = `translateX(${this.translate}px)`;\n }\n};\n\n// check if the document is scrolling or not\nproto._setIsScrolling = function () {\n const top = document.body.scrollTop || document.documentElement.scrollTop;\n\n this.isScrolling = true;\n if (this.prevPosition === top) {\n this.isScrolling = false;\n return;\n }\n\n // for smartSpeed the prevPosition will be set from _calcSmartSpeed function\n if (!this.options.smartSpeed) this.prevPosition = top;\n};\n\n// every node will be in sc-slide\nproto._makeSlide = function (elem) {\n let slideElem = document.createElement('div');\n slideElem.style.marginRight = this.options.margin + 'px';\n slideElem.className = 'sc-slide';\n this.slideElem = slideElem;\n this.slideElem.append(elem);\n return this.slideElem;\n};\n\n// full array of node\nproto._makeSlides = function (elems) {\n return elems.map(elem => this._makeSlide(elem));\n};\n\n// slider positions the slide\nproto._createSlider = function () {\n // slider element does all the positioning\n let slider = document.createElement('div');\n slider.className = 'scroll-carousel-slider';\n this.slider = slider;\n};\n\n// slider will be in a viewport and it will transform\nproto._createViewport = function () {\n this.viewport = document.createElement('div');\n this.viewport.className = 'scroll-carousel-viewport';\n};\n\n// filtering elements if the element child structure is too much complex (specially for slideSelector option)\nproto._filterFindSlideElements = function (elems) {\n return filterFindElements(elems, this.options.slideSelector);\n};\n\n// ============================== METHOD ==============================\n\nproto.destroy = function () {\n if (!this.isActive) return;\n\n this.viewport.remove();\n this.element.append(...this.baseElems);\n\n // set flags\n this.isActive = false;\n // clear the interval\n clearInterval(this.interval);\n\n window.removeEventListener('scroll', this);\n this.emitEvent('destroy');\n this.allOff();\n delete this.element.scrollCarouselGUID;\n delete instances[this.guid];\n};\n\n// Re initialize the carousel after destroy\nproto.reinit = function () {\n return new ScrollCarousel(this.element, this.baseOption);\n};\n\n// ============================== DATA ATTRIBUTE ==============================\n\n/**\n * get Scroll Carousel instance from element\n * @param {[Node, Element, String]} elem - element or selector string\n * @returns {ScrollCarousel} - Scroll Carousel instance\n */\nScrollCarousel.data = function (elem) {\n elem = getQueryElement(elem);\n if (elem) return instances[elem.scrollCarouselGUID];\n};\n\n// initialize with data attribute from here\nhtmlInit(ScrollCarousel, 'carousel');\n\nexport default ScrollCarousel;\n\n"],"names":["root","factory","exports","module","define","amd","this","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","RTL","LTR","getQueryElement","elem","document","querySelector","makeArray","Array","isArray","length","sanitizer","options","keys","includes","Number","speed","margin","direction","toLowerCase","autoplaySpeed","EvEmitter","proto","on","eventName","listener","events","_events","listeners","push","once","onceEvents","_onceEvents","off","index","indexOf","splice","emitEvent","args","slice","onceListeners","apply","allOff","GUID","instances","ScrollCarousel","element","queryElement","scrollCarouselGUID","instance","option","baseOption","constructor","defaults","sanitizedOptions","_create","console","error","smartSpeed","autoplay","slideSelector","WidgetClass","namespace","onDocReady","readyState","assign","id","guid","_createViewport","_createSlider","activate","opts","isActive","translate","displacement","isScrolling","prevPosition","body","scrollTop","documentElement","baseElems","children","slideElems","_filterFindSlideElements","_makeSlides","reverse","duplicateSlideElems","map","node","cloneNode","slider","append","viewport","_supportLtr","_autoplay","window","addEventListener","_transform","interval","setInterval","el","rect","getBoundingClientRect","windowHeight","innerHeight","clientHeight","windowWidth","innerWidth","clientWidth","vertInView","top","height","horInView","left","width","isScrolledIntoView","_setIsScrolling","_calcSmartSpeed","_calcRegularSpeed","progress","style","transform","documentScrollTop","Math","abs","translateBasic","min","translateInPercent","_makeSlide","slideElem","createElement","marginRight","className","elems","selector","filter","HTMLElement","reduce","scElems","matches","childElems","querySelectorAll","concat","filterFindElements","destroy","remove","clearInterval","removeEventListener","reinit","data","dataAttr","replace","match","$1","$2","forEach","attr","getAttribute","JSON","parse","setTimeout"],"sourceRoot":""}
\ No newline at end of file
diff --git a/example/css/style.css b/example/css/style.css
deleted file mode 100644
index ac4e1e0..0000000
--- a/example/css/style.css
+++ /dev/null
@@ -1,89 +0,0 @@
-@import url('https://fonts.googleapis.com/css2?family=Source+Sans+Pro:wght@200;300;400;600;700;900&display=swap');
-
-body {
- font-family: 'Source Sans Pro', sans-serif;
-}
-
-.mt-5 {
- margin-top: 3rem;
-}
-
-.mx-auto {
- margin-left: auto;
- margin-right: auto;
-}
-
-.text-center {
- text-align: center;
-}
-
-.fs-1 {
- font-size: 2.5rem;
-}
-
-.intro-peragraph {
- font-size: 40px;
- line-height: 1.1;
- font-weight: 600;
-}
-
-.item {
- width: 200px;
- height: 150px;
- background-color: #10505b;
- border: 2px solid gray;
- margin: 5px;
- overflow: hidden;
- text-align: center;
- color: white;
-}
-
-#demo1 .scroll-carousel-slider {
- align-items: center;
-}
-
-img {
- height: 150px;
- margin: 5px;
-}
-
-.item img {
- margin: 0;
-}
-
-.text-green {
- color: #10505b;
-}
-
-.text-yellow {
- color: #d48207;
-}
-
-.text-orange {
- color: #e36942;
-}
-
-.text-pink {
- color: #b72c31;
-}
-
-.text-purple {
- color: #353a71;
-}
-
-.text-blue {
- color: #25476d;
-}
-
-.transparent-box {
- position: absolute;
- right: 0;
- bottom: 0;
- background-color: #f54242;
- font-size: 20px;
- color: #fff;
- width: 150px;
- height: 40px;
- z-index: 1;
-}
-
diff --git a/example/images/binoculars-sketch.png b/example/images/binoculars-sketch.png
deleted file mode 100644
index 690730cc9c22293e2029b29ff884c2a666cb9144..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 56401
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