{"version":3,"sources":["../src/util.js","../src/index.js"],"names":["$","NAME","DATA_KEY","EVENT_KEY","JQUERY_NO_CONFLICT","Default","Event","MetisMenu","Util","TRANSITION_END","triggerTransitionEnd","element","trigger","supportsTransitionEnd","Boolean","transitionEndEmulator","duration","_this","this","called","one","setTimeout","fn","mmEmulateTransitionEnd","event","special","bindType","delegateType","handle","target","is","handleObj","handler","apply","arguments","toggle","preventDefault","activeClass","collapseClass","collapseInClass","collapsingClass","triggerElement","parentTrigger","subMenu","SHOW","SHOWN","HIDE","HIDDEN","CLICK_DATA_API","config","_objectSpread","transitioning","init","_proto","prototype","self","conf","find","has","children","addClass","not","on","e","eTar","paRent","parent","sibLings","siblings","List","attr","hasClass","hide","show","onTransitionStart","elem","startEvent","isDefaultPrevented","removeClass","height","setTransitioning","scrollHeight","_this2","offsetHeight","complete","onTransitionEnd","css","isTransitioning","dispose","removeData","off","jQueryInterface","each","$this","data","test","undefined","Error","Constructor","noConflict"],"mappings":"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","sourcesContent":["import $ from 'jquery';\n\nconst Util = (($) => { // eslint-disable-line no-shadow\n const TRANSITION_END = 'transitionend';\n\n const Util = { // eslint-disable-line no-shadow\n TRANSITION_END: 'mmTransitionEnd',\n\n triggerTransitionEnd(element) {\n $(element).trigger(TRANSITION_END);\n },\n\n supportsTransitionEnd() {\n return Boolean(TRANSITION_END);\n },\n };\n\n function getSpecialTransitionEndEvent() {\n return {\n bindType: TRANSITION_END,\n delegateType: TRANSITION_END,\n handle(event) {\n if ($(event.target).is(this)) {\n return event\n .handleObj\n .handler\n .apply(this, arguments); // eslint-disable-line prefer-rest-params\n }\n return undefined;\n },\n };\n }\n\n function transitionEndEmulator(duration) {\n let called = false;\n\n $(this).one(Util.TRANSITION_END, () => {\n called = true;\n });\n\n setTimeout(() => {\n if (!called) {\n Util.triggerTransitionEnd(this);\n }\n }, duration);\n\n return this;\n }\n\n function setTransitionEndSupport() {\n $.fn.mmEmulateTransitionEnd = transitionEndEmulator; // eslint-disable-line no-param-reassign\n // eslint-disable-next-line no-param-reassign\n $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();\n }\n\n setTransitionEndSupport();\n\n return Util;\n})($);\n\nexport default Util;\n","import $ from 'jquery';\nimport Util from './util';\n\nconst MetisMenu = (($) => { // eslint-disable-line no-shadow\n const NAME = 'metisMenu';\n const DATA_KEY = 'metisMenu';\n const EVENT_KEY = `.${DATA_KEY}`;\n const DATA_API_KEY = '.data-api';\n const JQUERY_NO_CONFLICT = $.fn[NAME];\n const TRANSITION_DURATION = 350;\n\n const Default = {\n toggle: true,\n preventDefault: true,\n activeClass: 'active',\n collapseClass: 'collapse',\n collapseInClass: 'in',\n collapsingClass: 'collapsing',\n triggerElement: 'a',\n parentTrigger: 'li',\n subMenu: 'ul',\n };\n\n const Event = {\n SHOW: `show${EVENT_KEY}`,\n SHOWN: `shown${EVENT_KEY}`,\n HIDE: `hide${EVENT_KEY}`,\n HIDDEN: `hidden${EVENT_KEY}`,\n CLICK_DATA_API: `click${EVENT_KEY}${DATA_API_KEY}`,\n };\n\n class MetisMenu { // eslint-disable-line no-shadow\n constructor(element, config) {\n this.element = element;\n this.config = { ...Default, ...config };\n this.transitioning = null;\n\n this.init();\n }\n init() {\n const self = this;\n const conf = this.config;\n $(this.element)\n .find(`${conf.parentTrigger}.${conf.activeClass}`)\n .has(conf.subMenu)\n .children(conf.subMenu)\n .addClass(`${conf.collapseClass} ${conf.collapseInClass}`);\n\n $(this.element)\n .find(conf.parentTrigger)\n .not(`.${conf.activeClass}`)\n .has(conf.subMenu)\n .children(conf.subMenu)\n .addClass(conf.collapseClass);\n\n $(this.element)\n .find(conf.parentTrigger)\n .has(conf.subMenu)\n .children(conf.triggerElement)\n .on(Event.CLICK_DATA_API, function (e) { // eslint-disable-line func-names\n const eTar = $(this);\n const paRent = eTar.parent(conf.parentTrigger);\n const sibLings = paRent\n .siblings(conf.parentTrigger)\n .children(conf.triggerElement);\n const List = paRent.children(conf.subMenu);\n if (conf.preventDefault) {\n e.preventDefault();\n }\n if (eTar.attr('aria-disabled') === 'true') {\n return;\n }\n if (paRent.hasClass(conf.activeClass)) {\n eTar.attr('aria-expanded', false);\n self.hide(List);\n } else {\n self.show(List);\n eTar.attr('aria-expanded', true);\n if (conf.toggle) {\n sibLings.attr('aria-expanded', false);\n }\n }\n\n if (conf.onTransitionStart) {\n conf.onTransitionStart(e);\n }\n });\n }\n\n show(element) {\n if (this.transitioning ||\n $(element).hasClass(this.config.collapsingClass)) {\n return;\n }\n const elem = $(element);\n\n const startEvent = $.Event(Event.SHOW);\n elem.trigger(startEvent);\n\n if (startEvent.isDefaultPrevented()) {\n return;\n }\n\n elem\n .parent(this.config.parentTrigger)\n .addClass(this.config.activeClass);\n\n\n if (this.config.toggle) {\n this\n .hide(elem\n .parent(this.config.parentTrigger)\n .siblings()\n .children(`${this.config.subMenu}.${this.config.collapseInClass}`));\n }\n\n elem\n .removeClass(this.config.collapseClass)\n .addClass(this.config.collapsingClass)\n .height(0);\n\n this.setTransitioning(true);\n\n const complete = () => {\n // check if disposed\n if (!this.config || !this.element) {\n return;\n }\n elem\n .removeClass(this.config.collapsingClass)\n .addClass(`${this.config.collapseClass} ${this.config.collapseInClass}`)\n .height('');\n\n this.setTransitioning(false);\n\n elem.trigger(Event.SHOWN);\n };\n\n elem\n .height(element[0].scrollHeight)\n .one(Util.TRANSITION_END, complete)\n .mmEmulateTransitionEnd(TRANSITION_DURATION);\n }\n\n hide(element) {\n if (this.transitioning || !$(element).hasClass(this.config.collapseInClass)) {\n return;\n }\n\n const elem = $(element);\n\n const startEvent = $.Event(Event.HIDE);\n elem.trigger(startEvent);\n\n if (startEvent.isDefaultPrevented()) {\n return;\n }\n\n elem.parent(this.config.parentTrigger).removeClass(this.config.activeClass);\n // eslint-disable-next-line no-unused-expressions\n elem.height(elem.height())[0].offsetHeight;\n\n elem\n .addClass(this.config.collapsingClass)\n .removeClass(this.config.collapseClass)\n .removeClass(this.config.collapseInClass);\n\n this.setTransitioning(true);\n\n const complete = () => {\n // check if disposed\n if (!this.config || !this.element) {\n return;\n }\n if (this.transitioning && this.config.onTransitionEnd) {\n this.config.onTransitionEnd();\n }\n\n this.setTransitioning(false);\n elem.trigger(Event.HIDDEN);\n\n elem\n .removeClass(this.config.collapsingClass)\n .addClass(this.config.collapseClass);\n };\n\n if (elem.height() === 0 || elem.css('display') === 'none') {\n complete();\n } else {\n elem\n .height(0)\n .one(Util.TRANSITION_END, complete)\n .mmEmulateTransitionEnd(TRANSITION_DURATION);\n }\n }\n\n setTransitioning(isTransitioning) {\n this.transitioning = isTransitioning;\n }\n\n dispose() {\n $.removeData(this.element, DATA_KEY);\n\n $(this.element)\n .find(this.config.parentTrigger)\n .has(this.config.subMenu)\n .children(this.config.triggerElement)\n .off('click');\n\n this.transitioning = null;\n this.config = null;\n this.element = null;\n }\n\n\n static jQueryInterface(config) {\n // eslint-disable-next-line func-names\n return this.each(function () {\n const $this = $(this);\n let data = $this.data(DATA_KEY);\n const conf = {\n ...Default,\n ...$this.data(),\n ...typeof config === 'object' && config ? config : {},\n };\n\n if (!data && /dispose/.test(config)) {\n this.dispose();\n }\n\n if (!data) {\n data = new MetisMenu(this, conf);\n $this.data(DATA_KEY, data);\n }\n\n if (typeof config === 'string') {\n if (data[config] === undefined) {\n throw new Error(`No method named \"${config}\"`);\n }\n data[config]();\n }\n });\n }\n }\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = MetisMenu.jQueryInterface; // eslint-disable-line no-param-reassign\n $.fn[NAME].Constructor = MetisMenu; // eslint-disable-line no-param-reassign\n $.fn[NAME].noConflict = () => { // eslint-disable-line no-param-reassign\n $.fn[NAME] = JQUERY_NO_CONFLICT; // eslint-disable-line no-param-reassign\n return MetisMenu.jQueryInterface;\n };\n return MetisMenu;\n})($);\n\nexport default MetisMenu;\n"]}