{"version":3,"file":"ripple-h5h7MK6F.js","sources":["../../../app/frontend/entrypoints/marketing/free/ripple.js"],"sourcesContent":["import { element, getjQuery, typeCheckConfig, onDOMContentLoaded } from '../mdb/util/index';\nimport Data from '../mdb/dom/data';\nimport EventHandler from '../mdb/dom/event-handler';\nimport Manipulator from '../mdb/dom/manipulator';\nimport SelectorEngine from '../mdb/dom/selector-engine';\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'ripple';\nconst DATA_KEY = 'mdb.ripple';\nconst CLASSNAME_RIPPLE = 'ripple-surface';\nconst CLASSNAME_RIPPLE_WAVE = 'ripple-wave';\nconst SELECTOR_COMPONENT = ['.btn', '.ripple'];\n\nconst CLASSNAME_UNBOUND = 'ripple-surface-unbound';\nconst GRADIENT =\n 'rgba({{color}}, 0.2) 0, rgba({{color}}, 0.3) 40%, rgba({{color}}, 0.4) 50%, rgba({{color}}, 0.5) 60%, rgba({{color}}, 0) 70%';\nconst DEFAULT_RIPPLE_COLOR = [0, 0, 0];\nconst BOOTSTRAP_COLORS = [\n 'primary',\n 'secondary',\n 'success',\n 'danger',\n 'warning',\n 'info',\n 'light',\n 'dark',\n];\n\n// Sets value when run opacity transition\n// Hide element after 50% (0.5) time of animation and finish on 100%\nconst TRANSITION_BREAK_OPACITY = 0.5;\n\nconst Default = {\n rippleCentered: false,\n rippleColor: '',\n rippleDuration: '500ms',\n rippleRadius: 0,\n rippleUnbound: false,\n};\n\nconst DefaultType = {\n rippleCentered: 'boolean',\n rippleColor: 'string',\n rippleDuration: 'string',\n rippleRadius: 'number',\n rippleUnbound: 'boolean',\n};\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Ripple {\n constructor(element, options) {\n this._element = element;\n this._options = this._getConfig(options);\n\n if (this._element) {\n Data.setData(element, DATA_KEY, this);\n Manipulator.addClass(this._element, CLASSNAME_RIPPLE);\n }\n\n this._clickHandler = this._createRipple.bind(this);\n this._rippleTimer = null;\n this._isMinWidthSet = false;\n\n this.init();\n }\n\n // Getters\n\n static get NAME() {\n return NAME;\n }\n\n // Public\n\n init() {\n this._addClickEvent(this._element);\n }\n\n dispose() {\n Data.removeData(this._element, DATA_KEY);\n EventHandler.off(this._element, 'click', this._clickHandler);\n this._element = null;\n this._options = null;\n }\n\n // Private\n\n _autoInit(event) {\n SELECTOR_COMPONENT.forEach((selector) => {\n const target = SelectorEngine.closest(event.target, selector);\n if (target) {\n this._element = SelectorEngine.closest(event.target, selector);\n }\n });\n\n if (!this._element.style.minWidth) {\n Manipulator.style(this._element, { 'min-width': `${this._element.offsetWidth}px` });\n this._isMinWidthSet = true;\n }\n\n Manipulator.addClass(this._element, CLASSNAME_RIPPLE);\n this._options = this._getConfig();\n this._createRipple(event);\n }\n\n _addClickEvent(target) {\n EventHandler.on(target, 'mousedown', this._clickHandler);\n }\n\n _createRipple(event) {\n if (!Manipulator.hasClass(this._element, CLASSNAME_RIPPLE)) {\n Manipulator.addClass(this._element, CLASSNAME_RIPPLE);\n }\n\n const { layerX, layerY } = event;\n const offsetX = layerX;\n const offsetY = layerY;\n const height = this._element.offsetHeight;\n const width = this._element.offsetWidth;\n const duration = this._durationToMsNumber(this._options.rippleDuration);\n const diameterOptions = {\n offsetX: this._options.rippleCentered ? height / 2 : offsetX,\n offsetY: this._options.rippleCentered ? width / 2 : offsetY,\n height,\n width,\n };\n const diameter = this._getDiameter(diameterOptions);\n const radiusValue = this._options.rippleRadius || diameter / 2;\n\n const opacity = {\n delay: duration * TRANSITION_BREAK_OPACITY,\n duration: duration - duration * TRANSITION_BREAK_OPACITY,\n };\n\n const styles = {\n left: this._options.rippleCentered\n ? `${width / 2 - radiusValue}px`\n : `${offsetX - radiusValue}px`,\n top: this._options.rippleCentered\n ? `${height / 2 - radiusValue}px`\n : `${offsetY - radiusValue}px`,\n height: `${this._options.rippleRadius * 2 || diameter}px`,\n width: `${this._options.rippleRadius * 2 || diameter}px`,\n transitionDelay: `0s, ${opacity.delay}ms`,\n transitionDuration: `${duration}ms, ${opacity.duration}ms`,\n };\n\n const rippleHTML = element('div');\n\n this._createHTMLRipple({ wrapper: this._element, ripple: rippleHTML, styles });\n this._removeHTMLRipple({ ripple: rippleHTML, duration });\n }\n\n _createHTMLRipple({ wrapper, ripple, styles }) {\n Object.keys(styles).forEach((property) => (ripple.style[property] = styles[property]));\n ripple.classList.add(CLASSNAME_RIPPLE_WAVE);\n if (this._options.rippleColor !== '') {\n this._removeOldColorClasses(wrapper);\n this._addColor(ripple, wrapper);\n }\n\n this._toggleUnbound(wrapper);\n this._appendRipple(ripple, wrapper);\n }\n\n _removeHTMLRipple({ ripple, duration }) {\n if (this._rippleTimer) {\n clearTimeout(this._rippleTimer);\n this._rippleTimer = null;\n }\n this._rippleTimer = setTimeout(() => {\n if (ripple) {\n ripple.remove();\n if (this._element) {\n SelectorEngine.find(`.${CLASSNAME_RIPPLE_WAVE}`, this._element).forEach((rippleEl) => {\n rippleEl.remove();\n });\n if (this._isMinWidthSet) {\n Manipulator.style(this._element, { 'min-width': '' });\n this._isMinWidthSet = false;\n }\n Manipulator.removeClass(this._element, CLASSNAME_RIPPLE);\n }\n }\n }, duration);\n }\n\n _durationToMsNumber(time) {\n return Number(time.replace('ms', '').replace('s', '000'));\n }\n\n _getConfig(config = {}) {\n const dataAttributes = Manipulator.getDataAttributes(this._element);\n\n config = {\n ...Default,\n ...dataAttributes,\n ...config,\n };\n\n typeCheckConfig(NAME, config, DefaultType);\n return config;\n }\n\n _getDiameter({ offsetX, offsetY, height, width }) {\n const top = offsetY <= height / 2;\n const left = offsetX <= width / 2;\n const pythagorean = (sideA, sideB) => Math.sqrt(sideA ** 2 + sideB ** 2);\n\n const positionCenter = offsetY === height / 2 && offsetX === width / 2;\n // mouse position on the quadrants of the coordinate system\n const quadrant = {\n first: top === true && left === false,\n second: top === true && left === true,\n third: top === false && left === true,\n fourth: top === false && left === false,\n };\n\n const getCorner = {\n topLeft: pythagorean(offsetX, offsetY),\n topRight: pythagorean(width - offsetX, offsetY),\n bottomLeft: pythagorean(offsetX, height - offsetY),\n bottomRight: pythagorean(width - offsetX, height - offsetY),\n };\n\n let diameter = 0;\n\n if (positionCenter || quadrant.fourth) {\n diameter = getCorner.topLeft;\n } else if (quadrant.third) {\n diameter = getCorner.topRight;\n } else if (quadrant.second) {\n diameter = getCorner.bottomRight;\n } else if (quadrant.first) {\n diameter = getCorner.bottomLeft;\n }\n return diameter * 2;\n }\n\n _appendRipple(target, parent) {\n const FIX_ADD_RIPPLE_EFFECT = 50; // delay for active animations\n parent.appendChild(target);\n setTimeout(() => {\n Manipulator.addClass(target, 'active');\n }, FIX_ADD_RIPPLE_EFFECT);\n }\n\n _toggleUnbound(target) {\n if (this._options.rippleUnbound === true) {\n Manipulator.addClass(target, CLASSNAME_UNBOUND);\n } else {\n target.classList.remove(CLASSNAME_UNBOUND);\n }\n }\n\n _addColor(target, parent) {\n const IS_BOOTSTRAP_COLOR = BOOTSTRAP_COLORS.find(\n (color) => color === this._options.rippleColor.toLowerCase()\n );\n\n if (IS_BOOTSTRAP_COLOR) {\n Manipulator.addClass(\n parent,\n `${CLASSNAME_RIPPLE}-${this._options.rippleColor.toLowerCase()}`\n );\n } else {\n const rgbValue = this._colorToRGB(this._options.rippleColor).join(',');\n const gradientImage = GRADIENT.split('{{color}}').join(`${rgbValue}`);\n target.style.backgroundImage = `radial-gradient(circle, ${gradientImage})`;\n }\n }\n\n _removeOldColorClasses(target) {\n const REGEXP_CLASS_COLOR = new RegExp(`${CLASSNAME_RIPPLE}-[a-z]+`, 'gi');\n const PARENT_CLASSS_COLOR = target.classList.value.match(REGEXP_CLASS_COLOR) || [];\n PARENT_CLASSS_COLOR.forEach((className) => {\n target.classList.remove(className);\n });\n }\n\n _colorToRGB(color) {\n function hexToRgb(color) {\n const HEX_COLOR_LENGTH = 7;\n const IS_SHORT_HEX = color.length < HEX_COLOR_LENGTH;\n if (IS_SHORT_HEX) {\n color = `#${color[1]}${color[1]}${color[2]}${color[2]}${color[3]}${color[3]}`;\n }\n return [\n parseInt(color.substr(1, 2), 16),\n parseInt(color.substr(3, 2), 16),\n parseInt(color.substr(5, 2), 16),\n ];\n }\n\n function namedColorsToRgba(color) {\n const tempElem = document.body.appendChild(document.createElement('fictum'));\n const flag = 'rgb(1, 2, 3)';\n tempElem.style.color = flag;\n if (tempElem.style.color !== flag) {\n return DEFAULT_RIPPLE_COLOR;\n }\n tempElem.style.color = color;\n if (tempElem.style.color === flag || tempElem.style.color === '') {\n return DEFAULT_RIPPLE_COLOR;\n } // color parse failed\n color = getComputedStyle(tempElem).color;\n document.body.removeChild(tempElem);\n return color;\n }\n\n function rgbaToRgb(color) {\n color = color.match(/[.\\d]+/g).map((a) => +Number(a));\n color.length = 3;\n return color;\n }\n\n if (color.toLowerCase() === 'transparent') {\n return DEFAULT_RIPPLE_COLOR;\n }\n if (color[0] === '#') {\n return hexToRgb(color);\n }\n if (color.indexOf('rgb') === -1) {\n color = namedColorsToRgba(color);\n }\n if (color.indexOf('rgb') === 0) {\n return rgbaToRgb(color);\n }\n\n return DEFAULT_RIPPLE_COLOR;\n }\n\n // Static\n static autoInitial(instance) {\n return function (event) {\n instance._autoInit(event);\n };\n }\n\n static jQueryInterface(options) {\n return this.each(function () {\n const data = Data.getData(this, DATA_KEY);\n if (!data) {\n return new Ripple(this, options);\n }\n\n return null;\n });\n }\n\n static getInstance(element) {\n return Data.getData(element, DATA_KEY);\n }\n\n static getOrCreateInstance(element, config = {}) {\n return (\n this.getInstance(element) || new this(element, typeof config === 'object' ? config : null)\n );\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation - auto initialization\n * ------------------------------------------------------------------------\n */\n\nSELECTOR_COMPONENT.forEach((selector) => {\n EventHandler.one(document, 'mousedown', selector, Ripple.autoInitial(new Ripple()));\n});\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .ripple to jQuery only if jQuery is present\n */\n\nonDOMContentLoaded(() => {\n const $ = getjQuery();\n\n if ($) {\n const JQUERY_NO_CONFLICT = $.fn[NAME];\n $.fn[NAME] = Ripple.jQueryInterface;\n $.fn[NAME].Constructor = Ripple;\n $.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return Ripple.jQueryInterface;\n };\n }\n});\n\nexport default Ripple;\n"],"names":["NAME","DATA_KEY","CLASSNAME_RIPPLE","CLASSNAME_RIPPLE_WAVE","SELECTOR_COMPONENT","CLASSNAME_UNBOUND","GRADIENT","DEFAULT_RIPPLE_COLOR","BOOTSTRAP_COLORS","TRANSITION_BREAK_OPACITY","Default","DefaultType","Ripple","element","options","Data","Manipulator","EventHandler","event","selector","SelectorEngine","target","layerX","layerY","offsetX","offsetY","height","width","duration","diameterOptions","diameter","radiusValue","opacity","styles","rippleHTML","wrapper","ripple","property","rippleEl","time","config","dataAttributes","typeCheckConfig","top","left","pythagorean","sideA","sideB","positionCenter","quadrant","getCorner","parent","color","rgbValue","gradientImage","REGEXP_CLASS_COLOR","className","hexToRgb","namedColorsToRgba","tempElem","flag","rgbaToRgb","a","instance","onDOMContentLoaded","$","getjQuery","JQUERY_NO_CONFLICT"],"mappings":"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"}