{"version":3,"sources":["webpack:///./src/components/global/breadcrumb.vue","webpack:///src/components/global/breadcrumb.vue","webpack:///./src/components/global/breadcrumb.vue?78b0","webpack:///./src/components/global/breadcrumb.vue?dd0e","webpack:///./node_modules/element-ui/src/utils/popup/popup-manager.js","webpack:///./node_modules/element-ui/src/utils/popup/index.js","webpack:///./node_modules/element-ui/src/utils/scroll-into-view.js","webpack:///./node_modules/element-ui/src/utils/vue-popper.js","webpack:///./src/components/global/breadcrumb.vue?1372","webpack:///./node_modules/element-ui/src/utils/resize-event.js","webpack:///./node_modules/element-ui/src/utils/types.js","webpack:///./node_modules/element-ui/src/utils/popper.js","webpack:///./node_modules/element-ui/src/utils/dom.js","webpack:///./node_modules/element-ui/src/utils/util.js","webpack:///./node_modules/element-ui/src/utils/clickoutside.js","webpack:///./node_modules/element-ui/src/utils/merge.js","webpack:///./node_modules/element-ui/src/mixins/emitter.js","webpack:///./node_modules/element-ui/src/utils/scrollbar-width.js"],"names":["render","_vm","this","_c","_self","staticClass","attrs","path","_v","_s","firstName","_l","parent","key","index","belong","title","_e","staticRenderFns","props","computed","secondName","$route","meta","mounted","component","hasModal","hasInitZIndex","getModal","prototype","$isServer","modalDom","PopupManager","document","createElement","addEventListener","event","preventDefault","stopPropagation","doOnModalClick","instances","modalFade","getInstance","id","register","instance","deregister","nextZIndex","zIndex","modalStack","topItem","length","closeOnClickModal","close","openModal","dom","modalClass","undefined","i","j","item","classArr","trim","split","forEach","setTimeout","parentNode","nodeType","appendChild","body","style","tabIndex","display","push","closeModal","pop","splice","removeChild","Object","defineProperty","configurable","$ELEMENT","value","getTopPopup","topPopup","window","keyCode","closeOnPressEscape","handleClose","handleAction","scrollBarWidth","idSeed","Boolean","scrollIntoView","container","selected","scrollTop","offsetParents","pointer","offsetParent","contains","top","offsetTop","reduce","prev","curr","bottom","offsetHeight","viewRectTop","viewRectBottom","clientHeight","PopperJS","stop","e","transformOrigin","type","String","default","placement","boundariesPadding","Number","reference","popper","offset","visibleArrow","arrowOffset","appendToBody","popperOptions","gpuAcceleration","showPopper","currentPlacement","watch","immediate","val","$emit","disabled","updatePopper","destroyPopper","methods","test","options","popperElm","$refs","referenceElm","$slots","elm","appendArrow","popperJS","destroy","onCreate","_","resetTransformOrigin","$nextTick","onUpdate","_popper","update","createPopper","forceDestroy","placementMap","left","right","getAttribute","origin","indexOf","element","hash","appended","attributes","name","arrow","setAttribute","className","doDestroy","removeEventListener","$options","beforeDestroy","call","isServer","resizeHandler","entries","entry","listeners","target","__resizeListeners__","fn","addResizeListener","__ro__","observe","removeResizeListener","disconnect","isString","obj","toString","isObject","isHtmlElement","node","Node","ELEMENT_NODE","root","factory","DEFAULTS","boundariesElement","preventOverflowOrder","flipBehavior","arrowElement","modifiers","modifiersIgnored","forceAbsolute","Popper","_reference","jquery","state","isNotDefined","isConfig","parse","_options","assign","map","modifier","bind","position","_getPosition","setStyle","_setupEventListeners","getOuterSizes","_display","_visibility","visibility","offsetWidth","styles","getComputedStyle","x","parseFloat","marginTop","marginBottom","y","marginLeft","marginRight","result","width","height","getOppositePlacement","replace","matched","getPopperClientRect","popperOffsets","offsets","getArrayKeyIndex","arr","keyToFind","getStyleComputedProperty","property","css","getOffsetParent","documentElement","getScrollParent","scrollLeft","isFixed","is_numeric","n","isNaN","isFinite","keys","prop","unit","isFunction","functionToCheck","getType","getOffsetRect","elementRect","offsetLeft","getBoundingClientRect","rect","isIE","navigator","userAgent","rectTop","tagName","getOffsetRectRelativeToCustomParent","fixed","parentRect","scrollParent","getSupportedPropertyName","prefixes","toCheck","charAt","toUpperCase","slice","removeAttribute","_removeEventListeners","removeOnDestroy","remove","data","_originalPlacement","_getOffsets","boundaries","_getBoundaries","runModifiers","updateCallback","callback","config","defaultConfig","classNames","content","contentType","arrowTagName","arrowClassNames","arrowAttributes","d","addClassNames","addAttributes","innerHTML","textContent","querySelectorAll","console","warn","Element","classList","add","attribute","isParentFixed","referenceOffsets","popperRect","updateBound","scrollTarget","padding","html","Math","max","scrollHeight","scrollWidth","clientWidth","offsetParentRect","getScrollTopValue","getScrollLeftValue","ends","modifiersToRun","isModifierRequired","requesting","requested","filter","applyStyle","prefixedProperty","round","shift","basePlacement","shiftVariation","shiftOffsets","start","end","axis","preventOverflow","order","check","min","direction","keepTogether","f","floor","flip","flipped","placementOpposite","variation","flipOrder","step","a","_flip","querySelector","arrowStyle","isVertical","len","side","altSide","opSide","arrowSize","center","sideValue","enumerable","writable","TypeError","to","arguments","nextSource","keysArray","nextIndex","nextKey","desc","getOwnPropertyDescriptor","SPECIAL_CHARS_REGEXP","MOZ_HACK_REGEXP","ieVersion","documentMode","string","camelCase","separator","letter","on","handler","attachEvent","off","detachEvent","hasClass","el","cls","Error","addClass","curClass","classes","clsName","removeClass","getStyle","styleName","filters","opacity","currentStyle","defaultView","isScroll","vertical","determinedDirection","overflow","match","getScrollContainer","includes","isInContainer","elRect","containerRect","innerWidth","innerHeight","hasOwnProperty","hasOwn","extend","_from","toObject","res","getValueByPath","object","paths","current","valueEquals","b","Array","escapeRegexpString","arrayFindIndex","pred","isEdge","isFirefox","kebabCase","str","hyphenateRE","toLowerCase","rafThrottle","locked","args","requestAnimationFrame","apply","nodeList","ctx","startClick","seed","createDocumentHandler","binding","vnode","mouseup","mousedown","context","expression","methodName","bindingFn","documentHandler","source","broadcast","componentName","eventName","params","$children","child","concat","$parent","$root","outer","widthNoScroll","inner","widthWithScroll"],"mappings":"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","file":"js/p_applyPrescription~p_prescription~p_staffManagement.cbba3e3e.js","sourcesContent":["var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"breadcrumb is-print-hide\"},[_c('el-breadcrumb',{attrs:{\"separator-class\":\"el-icon-arrow-right\"}},[_c('el-breadcrumb-item',{attrs:{\"to\":{ path: _vm.path }}},[_vm._v(_vm._s(_vm.firstName))]),_vm._l((_vm.parent),function(key,index){return (_vm.parent)?_c('el-breadcrumb-item',{key:index,attrs:{\"to\":key.belong}},[_vm._v(\"\\n \"+_vm._s(key.title)+\"\\n \")]):_vm._e()}),_c('el-breadcrumb-item',[_vm._v(_vm._s(_vm.title))])],2)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./breadcrumb.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./breadcrumb.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./breadcrumb.vue?vue&type=template&id=34085ee6&scoped=true\"\nimport script from \"./breadcrumb.vue?vue&type=script&lang=js\"\nexport * from \"./breadcrumb.vue?vue&type=script&lang=js\"\nimport style0 from \"./breadcrumb.vue?vue&type=style&index=0&id=34085ee6&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"34085ee6\",\n null\n \n)\n\nexport default component.exports","import Vue from 'vue';\nimport { addClass, removeClass } from 'element-ui/src/utils/dom';\n\nlet hasModal = false;\nlet hasInitZIndex = false;\nlet zIndex;\n\nconst getModal = function() {\n if (Vue.prototype.$isServer) return;\n let modalDom = PopupManager.modalDom;\n if (modalDom) {\n hasModal = true;\n } else {\n hasModal = false;\n modalDom = document.createElement('div');\n PopupManager.modalDom = modalDom;\n\n modalDom.addEventListener('touchmove', function(event) {\n event.preventDefault();\n event.stopPropagation();\n });\n\n modalDom.addEventListener('click', function() {\n PopupManager.doOnModalClick && PopupManager.doOnModalClick();\n });\n }\n\n return modalDom;\n};\n\nconst instances = {};\n\nconst PopupManager = {\n modalFade: true,\n\n getInstance: function(id) {\n return instances[id];\n },\n\n register: function(id, instance) {\n if (id && instance) {\n instances[id] = instance;\n }\n },\n\n deregister: function(id) {\n if (id) {\n instances[id] = null;\n delete instances[id];\n }\n },\n\n nextZIndex: function() {\n return PopupManager.zIndex++;\n },\n\n modalStack: [],\n\n doOnModalClick: function() {\n const topItem = PopupManager.modalStack[PopupManager.modalStack.length - 1];\n if (!topItem) return;\n\n const instance = PopupManager.getInstance(topItem.id);\n if (instance && instance.closeOnClickModal) {\n instance.close();\n }\n },\n\n openModal: function(id, zIndex, dom, modalClass, modalFade) {\n if (Vue.prototype.$isServer) return;\n if (!id || zIndex === undefined) return;\n this.modalFade = modalFade;\n\n const modalStack = this.modalStack;\n\n for (let i = 0, j = modalStack.length; i < j; i++) {\n const item = modalStack[i];\n if (item.id === id) {\n return;\n }\n }\n\n const modalDom = getModal();\n\n addClass(modalDom, 'v-modal');\n if (this.modalFade && !hasModal) {\n addClass(modalDom, 'v-modal-enter');\n }\n if (modalClass) {\n let classArr = modalClass.trim().split(/\\s+/);\n classArr.forEach(item => addClass(modalDom, item));\n }\n setTimeout(() => {\n removeClass(modalDom, 'v-modal-enter');\n }, 200);\n\n if (dom && dom.parentNode && dom.parentNode.nodeType !== 11) {\n dom.parentNode.appendChild(modalDom);\n } else {\n document.body.appendChild(modalDom);\n }\n\n if (zIndex) {\n modalDom.style.zIndex = zIndex;\n }\n modalDom.tabIndex = 0;\n modalDom.style.display = '';\n\n this.modalStack.push({ id: id, zIndex: zIndex, modalClass: modalClass });\n },\n\n closeModal: function(id) {\n const modalStack = this.modalStack;\n const modalDom = getModal();\n\n if (modalStack.length > 0) {\n const topItem = modalStack[modalStack.length - 1];\n if (topItem.id === id) {\n if (topItem.modalClass) {\n let classArr = topItem.modalClass.trim().split(/\\s+/);\n classArr.forEach(item => removeClass(modalDom, item));\n }\n\n modalStack.pop();\n if (modalStack.length > 0) {\n modalDom.style.zIndex = modalStack[modalStack.length - 1].zIndex;\n }\n } else {\n for (let i = modalStack.length - 1; i >= 0; i--) {\n if (modalStack[i].id === id) {\n modalStack.splice(i, 1);\n break;\n }\n }\n }\n }\n\n if (modalStack.length === 0) {\n if (this.modalFade) {\n addClass(modalDom, 'v-modal-leave');\n }\n setTimeout(() => {\n if (modalStack.length === 0) {\n if (modalDom.parentNode) modalDom.parentNode.removeChild(modalDom);\n modalDom.style.display = 'none';\n PopupManager.modalDom = undefined;\n }\n removeClass(modalDom, 'v-modal-leave');\n }, 200);\n }\n }\n};\n\nObject.defineProperty(PopupManager, 'zIndex', {\n configurable: true,\n get() {\n if (!hasInitZIndex) {\n zIndex = zIndex || (Vue.prototype.$ELEMENT || {}).zIndex || 2000;\n hasInitZIndex = true;\n }\n return zIndex;\n },\n set(value) {\n zIndex = value;\n }\n});\n\nconst getTopPopup = function() {\n if (Vue.prototype.$isServer) return;\n if (PopupManager.modalStack.length > 0) {\n const topPopup = PopupManager.modalStack[PopupManager.modalStack.length - 1];\n if (!topPopup) return;\n const instance = PopupManager.getInstance(topPopup.id);\n\n return instance;\n }\n};\n\nif (!Vue.prototype.$isServer) {\n // handle `esc` key when the popup is shown\n window.addEventListener('keydown', function(event) {\n if (event.keyCode === 27) {\n const topPopup = getTopPopup();\n\n if (topPopup && topPopup.closeOnPressEscape) {\n topPopup.handleClose\n ? topPopup.handleClose()\n : (topPopup.handleAction ? topPopup.handleAction('cancel') : topPopup.close());\n }\n }\n });\n}\n\nexport default PopupManager;\n","import Vue from 'vue';\nimport merge from 'element-ui/src/utils/merge';\nimport PopupManager from 'element-ui/src/utils/popup/popup-manager';\nimport getScrollBarWidth from '../scrollbar-width';\nimport { getStyle, addClass, removeClass, hasClass } from '../dom';\n\nlet idSeed = 1;\n\nlet scrollBarWidth;\n\nexport default {\n props: {\n visible: {\n type: Boolean,\n default: false\n },\n openDelay: {},\n closeDelay: {},\n zIndex: {},\n modal: {\n type: Boolean,\n default: false\n },\n modalFade: {\n type: Boolean,\n default: true\n },\n modalClass: {},\n modalAppendToBody: {\n type: Boolean,\n default: false\n },\n lockScroll: {\n type: Boolean,\n default: true\n },\n closeOnPressEscape: {\n type: Boolean,\n default: false\n },\n closeOnClickModal: {\n type: Boolean,\n default: false\n }\n },\n\n beforeMount() {\n this._popupId = 'popup-' + idSeed++;\n PopupManager.register(this._popupId, this);\n },\n\n beforeDestroy() {\n PopupManager.deregister(this._popupId);\n PopupManager.closeModal(this._popupId);\n\n this.restoreBodyStyle();\n },\n\n data() {\n return {\n opened: false,\n bodyPaddingRight: null,\n computedBodyPaddingRight: 0,\n withoutHiddenClass: true,\n rendered: false\n };\n },\n\n watch: {\n visible(val) {\n if (val) {\n if (this._opening) return;\n if (!this.rendered) {\n this.rendered = true;\n Vue.nextTick(() => {\n this.open();\n });\n } else {\n this.open();\n }\n } else {\n this.close();\n }\n }\n },\n\n methods: {\n open(options) {\n if (!this.rendered) {\n this.rendered = true;\n }\n\n const props = merge({}, this.$props || this, options);\n\n if (this._closeTimer) {\n clearTimeout(this._closeTimer);\n this._closeTimer = null;\n }\n clearTimeout(this._openTimer);\n\n const openDelay = Number(props.openDelay);\n if (openDelay > 0) {\n this._openTimer = setTimeout(() => {\n this._openTimer = null;\n this.doOpen(props);\n }, openDelay);\n } else {\n this.doOpen(props);\n }\n },\n\n doOpen(props) {\n if (this.$isServer) return;\n if (this.willOpen && !this.willOpen()) return;\n if (this.opened) return;\n\n this._opening = true;\n\n const dom = this.$el;\n\n const modal = props.modal;\n\n const zIndex = props.zIndex;\n if (zIndex) {\n PopupManager.zIndex = zIndex;\n }\n\n if (modal) {\n if (this._closing) {\n PopupManager.closeModal(this._popupId);\n this._closing = false;\n }\n PopupManager.openModal(this._popupId, PopupManager.nextZIndex(), this.modalAppendToBody ? undefined : dom, props.modalClass, props.modalFade);\n if (props.lockScroll) {\n this.withoutHiddenClass = !hasClass(document.body, 'el-popup-parent--hidden');\n if (this.withoutHiddenClass) {\n this.bodyPaddingRight = document.body.style.paddingRight;\n this.computedBodyPaddingRight = parseInt(getStyle(document.body, 'paddingRight'), 10);\n }\n scrollBarWidth = getScrollBarWidth();\n let bodyHasOverflow = document.documentElement.clientHeight < document.body.scrollHeight;\n let bodyOverflowY = getStyle(document.body, 'overflowY');\n if (scrollBarWidth > 0 && (bodyHasOverflow || bodyOverflowY === 'scroll') && this.withoutHiddenClass) {\n document.body.style.paddingRight = this.computedBodyPaddingRight + scrollBarWidth + 'px';\n }\n addClass(document.body, 'el-popup-parent--hidden');\n }\n }\n\n if (getComputedStyle(dom).position === 'static') {\n dom.style.position = 'absolute';\n }\n\n dom.style.zIndex = PopupManager.nextZIndex();\n this.opened = true;\n\n this.onOpen && this.onOpen();\n\n this.doAfterOpen();\n },\n\n doAfterOpen() {\n this._opening = false;\n },\n\n close() {\n if (this.willClose && !this.willClose()) return;\n\n if (this._openTimer !== null) {\n clearTimeout(this._openTimer);\n this._openTimer = null;\n }\n clearTimeout(this._closeTimer);\n\n const closeDelay = Number(this.closeDelay);\n\n if (closeDelay > 0) {\n this._closeTimer = setTimeout(() => {\n this._closeTimer = null;\n this.doClose();\n }, closeDelay);\n } else {\n this.doClose();\n }\n },\n\n doClose() {\n this._closing = true;\n\n this.onClose && this.onClose();\n\n if (this.lockScroll) {\n setTimeout(this.restoreBodyStyle, 200);\n }\n\n this.opened = false;\n\n this.doAfterClose();\n },\n\n doAfterClose() {\n PopupManager.closeModal(this._popupId);\n this._closing = false;\n },\n\n restoreBodyStyle() {\n if (this.modal && this.withoutHiddenClass) {\n document.body.style.paddingRight = this.bodyPaddingRight;\n removeClass(document.body, 'el-popup-parent--hidden');\n }\n this.withoutHiddenClass = true;\n }\n }\n};\n\nexport {\n PopupManager\n};\n","import Vue from 'vue';\n\nexport default function scrollIntoView(container, selected) {\n if (Vue.prototype.$isServer) return;\n\n if (!selected) {\n container.scrollTop = 0;\n return;\n }\n\n const offsetParents = [];\n let pointer = selected.offsetParent;\n while (pointer && container !== pointer && container.contains(pointer)) {\n offsetParents.push(pointer);\n pointer = pointer.offsetParent;\n }\n const top = selected.offsetTop + offsetParents.reduce((prev, curr) => (prev + curr.offsetTop), 0);\n const bottom = top + selected.offsetHeight;\n const viewRectTop = container.scrollTop;\n const viewRectBottom = viewRectTop + container.clientHeight;\n\n if (top < viewRectTop) {\n container.scrollTop = top;\n } else if (bottom > viewRectBottom) {\n container.scrollTop = bottom - container.clientHeight;\n }\n}\n","import Vue from 'vue';\nimport {\n PopupManager\n} from 'element-ui/src/utils/popup';\n\nconst PopperJS = Vue.prototype.$isServer ? function() {} : require('./popper');\nconst stop = e => e.stopPropagation();\n\n/**\n * @param {HTMLElement} [reference=$refs.reference] - The reference element used to position the popper.\n * @param {HTMLElement} [popper=$refs.popper] - The HTML element used as popper, or a configuration used to generate the popper.\n * @param {String} [placement=button] - Placement of the popper accepted values: top(-start, -end), right(-start, -end), bottom(-start, -end), left(-start, -end)\n * @param {Number} [offset=0] - Amount of pixels the popper will be shifted (can be negative).\n * @param {Boolean} [visible=false] Visibility of the popup element.\n * @param {Boolean} [visible-arrow=false] Visibility of the arrow, no style.\n */\nexport default {\n props: {\n transformOrigin: {\n type: [Boolean, String],\n default: true\n },\n placement: {\n type: String,\n default: 'bottom'\n },\n boundariesPadding: {\n type: Number,\n default: 5\n },\n reference: {},\n popper: {},\n offset: {\n default: 0\n },\n value: Boolean,\n visibleArrow: Boolean,\n arrowOffset: {\n type: Number,\n default: 35\n },\n appendToBody: {\n type: Boolean,\n default: true\n },\n popperOptions: {\n type: Object,\n default() {\n return {\n gpuAcceleration: false\n };\n }\n }\n },\n\n data() {\n return {\n showPopper: false,\n currentPlacement: ''\n };\n },\n\n watch: {\n value: {\n immediate: true,\n handler(val) {\n this.showPopper = val;\n this.$emit('input', val);\n }\n },\n\n showPopper(val) {\n if (this.disabled) return;\n val ? this.updatePopper() : this.destroyPopper();\n this.$emit('input', val);\n }\n },\n\n methods: {\n createPopper() {\n if (this.$isServer) return;\n this.currentPlacement = this.currentPlacement || this.placement;\n if (!/^(top|bottom|left|right)(-start|-end)?$/g.test(this.currentPlacement)) {\n return;\n }\n\n const options = this.popperOptions;\n const popper = this.popperElm = this.popperElm || this.popper || this.$refs.popper;\n let reference = this.referenceElm = this.referenceElm || this.reference || this.$refs.reference;\n\n if (!reference &&\n this.$slots.reference &&\n this.$slots.reference[0]) {\n reference = this.referenceElm = this.$slots.reference[0].elm;\n }\n\n if (!popper || !reference) return;\n if (this.visibleArrow) this.appendArrow(popper);\n if (this.appendToBody) document.body.appendChild(this.popperElm);\n if (this.popperJS && this.popperJS.destroy) {\n this.popperJS.destroy();\n }\n\n options.placement = this.currentPlacement;\n options.offset = this.offset;\n options.arrowOffset = this.arrowOffset;\n this.popperJS = new PopperJS(reference, popper, options);\n this.popperJS.onCreate(_ => {\n this.$emit('created', this);\n this.resetTransformOrigin();\n this.$nextTick(this.updatePopper);\n });\n if (typeof options.onUpdate === 'function') {\n this.popperJS.onUpdate(options.onUpdate);\n }\n this.popperJS._popper.style.zIndex = PopupManager.nextZIndex();\n this.popperElm.addEventListener('click', stop);\n },\n\n updatePopper() {\n const popperJS = this.popperJS;\n if (popperJS) {\n popperJS.update();\n if (popperJS._popper) {\n popperJS._popper.style.zIndex = PopupManager.nextZIndex();\n }\n } else {\n this.createPopper();\n }\n },\n\n doDestroy(forceDestroy) {\n /* istanbul ignore if */\n if (!this.popperJS || (this.showPopper && !forceDestroy)) return;\n this.popperJS.destroy();\n this.popperJS = null;\n },\n\n destroyPopper() {\n if (this.popperJS) {\n this.resetTransformOrigin();\n }\n },\n\n resetTransformOrigin() {\n if (!this.transformOrigin) return;\n let placementMap = {\n top: 'bottom',\n bottom: 'top',\n left: 'right',\n right: 'left'\n };\n let placement = this.popperJS._popper.getAttribute('x-placement').split('-')[0];\n let origin = placementMap[placement];\n this.popperJS._popper.style.transformOrigin = typeof this.transformOrigin === 'string'\n ? this.transformOrigin\n : ['top', 'bottom'].indexOf(placement) > -1 ? `center ${ origin }` : `${ origin } center`;\n },\n\n appendArrow(element) {\n let hash;\n if (this.appended) {\n return;\n }\n\n this.appended = true;\n\n for (let item in element.attributes) {\n if (/^_v-/.test(element.attributes[item].name)) {\n hash = element.attributes[item].name;\n break;\n }\n }\n\n const arrow = document.createElement('div');\n\n if (hash) {\n arrow.setAttribute(hash, '');\n }\n arrow.setAttribute('x-arrow', '');\n arrow.className = 'popper__arrow';\n element.appendChild(arrow);\n }\n },\n\n beforeDestroy() {\n this.doDestroy(true);\n if (this.popperElm && this.popperElm.parentNode === document.body) {\n this.popperElm.removeEventListener('click', stop);\n document.body.removeChild(this.popperElm);\n }\n },\n\n // call destroy in keep-alive mode\n deactivated() {\n this.$options.beforeDestroy[0].call(this);\n }\n};\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./breadcrumb.vue?vue&type=style&index=0&id=34085ee6&prod&lang=scss&scoped=true\"","import ResizeObserver from 'resize-observer-polyfill';\n\nconst isServer = typeof window === 'undefined';\n\n/* istanbul ignore next */\nconst resizeHandler = function(entries) {\n for (let entry of entries) {\n const listeners = entry.target.__resizeListeners__ || [];\n if (listeners.length) {\n listeners.forEach(fn => {\n fn();\n });\n }\n }\n};\n\n/* istanbul ignore next */\nexport const addResizeListener = function(element, fn) {\n if (isServer) return;\n if (!element.__resizeListeners__) {\n element.__resizeListeners__ = [];\n element.__ro__ = new ResizeObserver(resizeHandler);\n element.__ro__.observe(element);\n }\n element.__resizeListeners__.push(fn);\n};\n\n/* istanbul ignore next */\nexport const removeResizeListener = function(element, fn) {\n if (!element || !element.__resizeListeners__) return;\n element.__resizeListeners__.splice(element.__resizeListeners__.indexOf(fn), 1);\n if (!element.__resizeListeners__.length) {\n element.__ro__.disconnect();\n }\n};\n","export function isString(obj) {\n return Object.prototype.toString.call(obj) === '[object String]';\n}\n\nexport function isObject(obj) {\n return Object.prototype.toString.call(obj) === '[object Object]';\n}\n\nexport function isHtmlElement(node) {\n return node && node.nodeType === Node.ELEMENT_NODE;\n}\n\nexport const isFunction = (functionToCheck) => {\n var getType = {};\n return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n};\n\nexport const isUndefined = (val)=> {\n return val === void 0;\n};\n\nexport const isDefined = (val) => {\n return val !== undefined && val !== null;\n};\n","/**\n * @fileOverview Kickass library to create and place poppers near their reference elements.\n * @version {{version}}\n * @license\n * Copyright (c) 2016 Federico Zivolo and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n//\n// Cross module loader\n// Supported: Node, AMD, Browser globals\n//\n;(function (root, factory) {\n if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define(factory);\n } else if (typeof module === 'object' && module.exports) {\n // Node. Does not work with strict CommonJS, but\n // only CommonJS-like environments that support module.exports,\n // like Node.\n module.exports = factory();\n } else {\n // Browser globals (root is window)\n root.Popper = factory();\n }\n}(this, function () {\n\n 'use strict';\n\n var root = window;\n\n // default options\n var DEFAULTS = {\n // placement of the popper\n placement: 'bottom',\n\n gpuAcceleration: true,\n\n // shift popper from its origin by the given amount of pixels (can be negative)\n offset: 0,\n\n // the element which will act as boundary of the popper\n boundariesElement: 'viewport',\n\n // amount of pixel used to define a minimum distance between the boundaries and the popper\n boundariesPadding: 5,\n\n // popper will try to prevent overflow following this order,\n // by default, then, it could overflow on the left and on top of the boundariesElement\n preventOverflowOrder: ['left', 'right', 'top', 'bottom'],\n\n // the behavior used by flip to change the placement of the popper\n flipBehavior: 'flip',\n\n arrowElement: '[x-arrow]',\n\n arrowOffset: 0,\n\n // list of functions used to modify the offsets before they are applied to the popper\n modifiers: [ 'shift', 'offset', 'preventOverflow', 'keepTogether', 'arrow', 'flip', 'applyStyle'],\n\n modifiersIgnored: [],\n\n forceAbsolute: false\n };\n\n /**\n * Create a new Popper.js instance\n * @constructor Popper\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement|Object} popper\n * The HTML element used as popper, or a configuration used to generate the popper.\n * @param {String} [popper.tagName='div'] The tag name of the generated popper.\n * @param {Array} [popper.classNames=['popper']] Array of classes to apply to the generated popper.\n * @param {Array} [popper.attributes] Array of attributes to apply, specify `attr:value` to assign a value to it.\n * @param {HTMLElement|String} [popper.parent=window.document.body] The parent element, given as HTMLElement or as query string.\n * @param {String} [popper.content=''] The content of the popper, it can be text, html, or node; if it is not text, set `contentType` to `html` or `node`.\n * @param {String} [popper.contentType='text'] If `html`, the `content` will be parsed as HTML. If `node`, it will be appended as-is.\n * @param {String} [popper.arrowTagName='div'] Same as `popper.tagName` but for the arrow element.\n * @param {Array} [popper.arrowClassNames='popper__arrow'] Same as `popper.classNames` but for the arrow element.\n * @param {String} [popper.arrowAttributes=['x-arrow']] Same as `popper.attributes` but for the arrow element.\n * @param {Object} options\n * @param {String} [options.placement=bottom]\n * Placement of the popper accepted values: `top(-start, -end), right(-start, -end), bottom(-start, -right),\n * left(-start, -end)`\n *\n * @param {HTMLElement|String} [options.arrowElement='[x-arrow]']\n * The DOM Node used as arrow for the popper, or a CSS selector used to get the DOM node. It must be child of\n * its parent Popper. Popper.js will apply to the given element the style required to align the arrow with its\n * reference element.\n * By default, it will look for a child node of the popper with the `x-arrow` attribute.\n *\n * @param {Boolean} [options.gpuAcceleration=true]\n * When this property is set to true, the popper position will be applied using CSS3 translate3d, allowing the\n * browser to use the GPU to accelerate the rendering.\n * If set to false, the popper will be placed using `top` and `left` properties, not using the GPU.\n *\n * @param {Number} [options.offset=0]\n * Amount of pixels the popper will be shifted (can be negative).\n *\n * @param {String|Element} [options.boundariesElement='viewport']\n * The element which will define the boundaries of the popper position, the popper will never be placed outside\n * of the defined boundaries (except if `keepTogether` is enabled)\n *\n * @param {Number} [options.boundariesPadding=5]\n * Additional padding for the boundaries\n *\n * @param {Array} [options.preventOverflowOrder=['left', 'right', 'top', 'bottom']]\n * Order used when Popper.js tries to avoid overflows from the boundaries, they will be checked in order,\n * this means that the last ones will never overflow\n *\n * @param {String|Array} [options.flipBehavior='flip']\n * The behavior used by the `flip` modifier to change the placement of the popper when the latter is trying to\n * overlap its reference element. Defining `flip` as value, the placement will be flipped on\n * its axis (`right - left`, `top - bottom`).\n * You can even pass an array of placements (eg: `['right', 'left', 'top']` ) to manually specify\n * how alter the placement when a flip is needed. (eg. in the above example, it would first flip from right to left,\n * then, if even in its new placement, the popper is overlapping its reference element, it will be moved to top)\n *\n * @param {Array} [options.modifiers=[ 'shift', 'offset', 'preventOverflow', 'keepTogether', 'arrow', 'flip', 'applyStyle']]\n * List of functions used to modify the data before they are applied to the popper, add your custom functions\n * to this array to edit the offsets and placement.\n * The function should reflect the @params and @returns of preventOverflow\n *\n * @param {Array} [options.modifiersIgnored=[]]\n * Put here any built-in modifier name you want to exclude from the modifiers list\n * The function should reflect the @params and @returns of preventOverflow\n *\n * @param {Boolean} [options.removeOnDestroy=false]\n * Set to true if you want to automatically remove the popper when you call the `destroy` method.\n */\n function Popper(reference, popper, options) {\n this._reference = reference.jquery ? reference[0] : reference;\n this.state = {};\n\n // if the popper variable is a configuration object, parse it to generate an HTMLElement\n // generate a default popper if is not defined\n var isNotDefined = typeof popper === 'undefined' || popper === null;\n var isConfig = popper && Object.prototype.toString.call(popper) === '[object Object]';\n if (isNotDefined || isConfig) {\n this._popper = this.parse(isConfig ? popper : {});\n }\n // otherwise, use the given HTMLElement as popper\n else {\n this._popper = popper.jquery ? popper[0] : popper;\n }\n\n // with {} we create a new object with the options inside it\n this._options = Object.assign({}, DEFAULTS, options);\n\n // refactoring modifiers' list\n this._options.modifiers = this._options.modifiers.map(function(modifier){\n // remove ignored modifiers\n if (this._options.modifiersIgnored.indexOf(modifier) !== -1) return;\n\n // set the x-placement attribute before everything else because it could be used to add margins to the popper\n // margins needs to be calculated to get the correct popper offsets\n if (modifier === 'applyStyle') {\n this._popper.setAttribute('x-placement', this._options.placement);\n }\n\n // return predefined modifier identified by string or keep the custom one\n return this.modifiers[modifier] || modifier;\n }.bind(this));\n\n // make sure to apply the popper position before any computation\n this.state.position = this._getPosition(this._popper, this._reference);\n setStyle(this._popper, { position: this.state.position, top: 0 });\n\n // fire the first update to position the popper in the right place\n this.update();\n\n // setup event listeners, they will take care of update the position in specific situations\n this._setupEventListeners();\n return this;\n }\n\n\n //\n // Methods\n //\n /**\n * Destroy the popper\n * @method\n * @memberof Popper\n */\n Popper.prototype.destroy = function() {\n this._popper.removeAttribute('x-placement');\n this._popper.style.left = '';\n this._popper.style.position = '';\n this._popper.style.top = '';\n this._popper.style[getSupportedPropertyName('transform')] = '';\n this._removeEventListeners();\n\n // remove the popper if user explicity asked for the deletion on destroy\n if (this._options.removeOnDestroy) {\n this._popper.remove();\n }\n return this;\n };\n\n /**\n * Updates the position of the popper, computing the new offsets and applying the new style\n * @method\n * @memberof Popper\n */\n Popper.prototype.update = function() {\n var data = { instance: this, styles: {} };\n\n // store placement inside the data object, modifiers will be able to edit `placement` if needed\n // and refer to _originalPlacement to know the original value\n data.placement = this._options.placement;\n data._originalPlacement = this._options.placement;\n\n // compute the popper and reference offsets and put them inside data.offsets\n data.offsets = this._getOffsets(this._popper, this._reference, data.placement);\n\n // get boundaries\n data.boundaries = this._getBoundaries(data, this._options.boundariesPadding, this._options.boundariesElement);\n\n data = this.runModifiers(data, this._options.modifiers);\n\n if (typeof this.state.updateCallback === 'function') {\n this.state.updateCallback(data);\n }\n };\n\n /**\n * If a function is passed, it will be executed after the initialization of popper with as first argument the Popper instance.\n * @method\n * @memberof Popper\n * @param {Function} callback\n */\n Popper.prototype.onCreate = function(callback) {\n // the createCallbacks return as first argument the popper instance\n callback(this);\n return this;\n };\n\n /**\n * If a function is passed, it will be executed after each update of popper with as first argument the set of coordinates and informations\n * used to style popper and its arrow.\n * NOTE: it doesn't get fired on the first call of the `Popper.update()` method inside the `Popper` constructor!\n * @method\n * @memberof Popper\n * @param {Function} callback\n */\n Popper.prototype.onUpdate = function(callback) {\n this.state.updateCallback = callback;\n return this;\n };\n\n /**\n * Helper used to generate poppers from a configuration file\n * @method\n * @memberof Popper\n * @param config {Object} configuration\n * @returns {HTMLElement} popper\n */\n Popper.prototype.parse = function(config) {\n var defaultConfig = {\n tagName: 'div',\n classNames: [ 'popper' ],\n attributes: [],\n parent: root.document.body,\n content: '',\n contentType: 'text',\n arrowTagName: 'div',\n arrowClassNames: [ 'popper__arrow' ],\n arrowAttributes: [ 'x-arrow']\n };\n config = Object.assign({}, defaultConfig, config);\n\n var d = root.document;\n\n var popper = d.createElement(config.tagName);\n addClassNames(popper, config.classNames);\n addAttributes(popper, config.attributes);\n if (config.contentType === 'node') {\n popper.appendChild(config.content.jquery ? config.content[0] : config.content);\n }else if (config.contentType === 'html') {\n popper.innerHTML = config.content;\n } else {\n popper.textContent = config.content;\n }\n\n if (config.arrowTagName) {\n var arrow = d.createElement(config.arrowTagName);\n addClassNames(arrow, config.arrowClassNames);\n addAttributes(arrow, config.arrowAttributes);\n popper.appendChild(arrow);\n }\n\n var parent = config.parent.jquery ? config.parent[0] : config.parent;\n\n // if the given parent is a string, use it to match an element\n // if more than one element is matched, the first one will be used as parent\n // if no elements are matched, the script will throw an error\n if (typeof parent === 'string') {\n parent = d.querySelectorAll(config.parent);\n if (parent.length > 1) {\n console.warn('WARNING: the given `parent` query(' + config.parent + ') matched more than one element, the first one will be used');\n }\n if (parent.length === 0) {\n throw 'ERROR: the given `parent` doesn\\'t exists!';\n }\n parent = parent[0];\n }\n // if the given parent is a DOM nodes list or an array of nodes with more than one element,\n // the first one will be used as parent\n if (parent.length > 1 && parent instanceof Element === false) {\n console.warn('WARNING: you have passed as parent a list of elements, the first one will be used');\n parent = parent[0];\n }\n\n // append the generated popper to its parent\n parent.appendChild(popper);\n\n return popper;\n\n /**\n * Adds class names to the given element\n * @function\n * @ignore\n * @param {HTMLElement} target\n * @param {Array} classes\n */\n function addClassNames(element, classNames) {\n classNames.forEach(function(className) {\n element.classList.add(className);\n });\n }\n\n /**\n * Adds attributes to the given element\n * @function\n * @ignore\n * @param {HTMLElement} target\n * @param {Array} attributes\n * @example\n * addAttributes(element, [ 'data-info:foobar' ]);\n */\n function addAttributes(element, attributes) {\n attributes.forEach(function(attribute) {\n element.setAttribute(attribute.split(':')[0], attribute.split(':')[1] || '');\n });\n }\n\n };\n\n /**\n * Helper used to get the position which will be applied to the popper\n * @method\n * @memberof Popper\n * @param config {HTMLElement} popper element\n * @param reference {HTMLElement} reference element\n * @returns {String} position\n */\n Popper.prototype._getPosition = function(popper, reference) {\n var container = getOffsetParent(reference);\n\n if (this._options.forceAbsolute) {\n return 'absolute';\n }\n\n // Decide if the popper will be fixed\n // If the reference element is inside a fixed context, the popper will be fixed as well to allow them to scroll together\n var isParentFixed = isFixed(reference, container);\n return isParentFixed ? 'fixed' : 'absolute';\n };\n\n /**\n * Get offsets to the popper\n * @method\n * @memberof Popper\n * @access private\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\n Popper.prototype._getOffsets = function(popper, reference, placement) {\n placement = placement.split('-')[0];\n var popperOffsets = {};\n\n popperOffsets.position = this.state.position;\n var isParentFixed = popperOffsets.position === 'fixed';\n\n //\n // Get reference element position\n //\n var referenceOffsets = getOffsetRectRelativeToCustomParent(reference, getOffsetParent(popper), isParentFixed);\n\n //\n // Get popper sizes\n //\n var popperRect = getOuterSizes(popper);\n\n //\n // Compute offsets of popper\n //\n\n // depending by the popper placement we have to compute its offsets slightly differently\n if (['right', 'left'].indexOf(placement) !== -1) {\n popperOffsets.top = referenceOffsets.top + referenceOffsets.height / 2 - popperRect.height / 2;\n if (placement === 'left') {\n popperOffsets.left = referenceOffsets.left - popperRect.width;\n } else {\n popperOffsets.left = referenceOffsets.right;\n }\n } else {\n popperOffsets.left = referenceOffsets.left + referenceOffsets.width / 2 - popperRect.width / 2;\n if (placement === 'top') {\n popperOffsets.top = referenceOffsets.top - popperRect.height;\n } else {\n popperOffsets.top = referenceOffsets.bottom;\n }\n }\n\n // Add width and height to our offsets object\n popperOffsets.width = popperRect.width;\n popperOffsets.height = popperRect.height;\n\n return {\n popper: popperOffsets,\n reference: referenceOffsets\n };\n };\n\n\n /**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper\n * @access private\n */\n Popper.prototype._setupEventListeners = function() {\n // NOTE: 1 DOM access here\n this.state.updateBound = this.update.bind(this);\n root.addEventListener('resize', this.state.updateBound);\n // if the boundariesElement is window we don't need to listen for the scroll event\n if (this._options.boundariesElement !== 'window') {\n var target = getScrollParent(this._reference);\n // here it could be both `body` or `documentElement` thanks to Firefox, we then check both\n if (target === root.document.body || target === root.document.documentElement) {\n target = root;\n }\n target.addEventListener('scroll', this.state.updateBound);\n this.state.scrollTarget = target;\n }\n };\n\n /**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper\n * @access private\n */\n Popper.prototype._removeEventListeners = function() {\n // NOTE: 1 DOM access here\n root.removeEventListener('resize', this.state.updateBound);\n if (this._options.boundariesElement !== 'window' && this.state.scrollTarget) {\n this.state.scrollTarget.removeEventListener('scroll', this.state.updateBound);\n this.state.scrollTarget = null;\n }\n this.state.updateBound = null;\n };\n\n /**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper\n * @access private\n * @param {Object} data - Object containing the property \"offsets\" generated by `_getOffsets`\n * @param {Number} padding - Boundaries padding\n * @param {Element} boundariesElement - Element used to define the boundaries\n * @returns {Object} Coordinates of the boundaries\n */\n Popper.prototype._getBoundaries = function(data, padding, boundariesElement) {\n // NOTE: 1 DOM access here\n var boundaries = {};\n var width, height;\n if (boundariesElement === 'window') {\n var body = root.document.body,\n html = root.document.documentElement;\n\n height = Math.max( body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight );\n width = Math.max( body.scrollWidth, body.offsetWidth, html.clientWidth, html.scrollWidth, html.offsetWidth );\n\n boundaries = {\n top: 0,\n right: width,\n bottom: height,\n left: 0\n };\n } else if (boundariesElement === 'viewport') {\n var offsetParent = getOffsetParent(this._popper);\n var scrollParent = getScrollParent(this._popper);\n var offsetParentRect = getOffsetRect(offsetParent);\n\n // Thanks the fucking native API, `document.body.scrollTop` & `document.documentElement.scrollTop`\n var getScrollTopValue = function (element) {\n return element == document.body ? Math.max(document.documentElement.scrollTop, document.body.scrollTop) : element.scrollTop;\n }\n var getScrollLeftValue = function (element) {\n return element == document.body ? Math.max(document.documentElement.scrollLeft, document.body.scrollLeft) : element.scrollLeft;\n }\n\n // if the popper is fixed we don't have to substract scrolling from the boundaries\n var scrollTop = data.offsets.popper.position === 'fixed' ? 0 : getScrollTopValue(scrollParent);\n var scrollLeft = data.offsets.popper.position === 'fixed' ? 0 : getScrollLeftValue(scrollParent);\n\n boundaries = {\n top: 0 - (offsetParentRect.top - scrollTop),\n right: root.document.documentElement.clientWidth - (offsetParentRect.left - scrollLeft),\n bottom: root.document.documentElement.clientHeight - (offsetParentRect.top - scrollTop),\n left: 0 - (offsetParentRect.left - scrollLeft)\n };\n } else {\n if (getOffsetParent(this._popper) === boundariesElement) {\n boundaries = {\n top: 0,\n left: 0,\n right: boundariesElement.clientWidth,\n bottom: boundariesElement.clientHeight\n };\n } else {\n boundaries = getOffsetRect(boundariesElement);\n }\n }\n boundaries.left += padding;\n boundaries.right -= padding;\n boundaries.top = boundaries.top + padding;\n boundaries.bottom = boundaries.bottom - padding;\n return boundaries;\n };\n\n\n /**\n * Loop trough the list of modifiers and run them in order, each of them will then edit the data object\n * @method\n * @memberof Popper\n * @access public\n * @param {Object} data\n * @param {Array} modifiers\n * @param {Function} ends\n */\n Popper.prototype.runModifiers = function(data, modifiers, ends) {\n var modifiersToRun = modifiers.slice();\n if (ends !== undefined) {\n modifiersToRun = this._options.modifiers.slice(0, getArrayKeyIndex(this._options.modifiers, ends));\n }\n\n modifiersToRun.forEach(function(modifier) {\n if (isFunction(modifier)) {\n data = modifier.call(this, data);\n }\n }.bind(this));\n\n return data;\n };\n\n /**\n * Helper used to know if the given modifier depends from another one.\n * @method\n * @memberof Popper\n * @param {String} requesting - name of requesting modifier\n * @param {String} requested - name of requested modifier\n * @returns {Boolean}\n */\n Popper.prototype.isModifierRequired = function(requesting, requested) {\n var index = getArrayKeyIndex(this._options.modifiers, requesting);\n return !!this._options.modifiers.slice(0, index).filter(function(modifier) {\n return modifier === requested;\n }).length;\n };\n\n //\n // Modifiers\n //\n\n /**\n * Modifiers list\n * @namespace Popper.modifiers\n * @memberof Popper\n * @type {Object}\n */\n Popper.prototype.modifiers = {};\n\n /**\n * Apply the computed styles to the popper element\n * @method\n * @memberof Popper.modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @returns {Object} The same data object\n */\n Popper.prototype.modifiers.applyStyle = function(data) {\n // apply the final offsets to the popper\n // NOTE: 1 DOM access here\n var styles = {\n position: data.offsets.popper.position\n };\n\n // round top and left to avoid blurry text\n var left = Math.round(data.offsets.popper.left);\n var top = Math.round(data.offsets.popper.top);\n\n // if gpuAcceleration is set to true and transform is supported, we use `translate3d` to apply the position to the popper\n // we automatically use the supported prefixed version if needed\n var prefixedProperty;\n if (this._options.gpuAcceleration && (prefixedProperty = getSupportedPropertyName('transform'))) {\n styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';\n styles.top = 0;\n styles.left = 0;\n }\n // othwerise, we use the standard `left` and `top` properties\n else {\n styles.left =left;\n styles.top = top;\n }\n\n // any property present in `data.styles` will be applied to the popper,\n // in this way we can make the 3rd party modifiers add custom styles to it\n // Be aware, modifiers could override the properties defined in the previous\n // lines of this modifier!\n Object.assign(styles, data.styles);\n\n setStyle(this._popper, styles);\n\n // set an attribute which will be useful to style the tooltip (use it to properly position its arrow)\n // NOTE: 1 DOM access here\n this._popper.setAttribute('x-placement', data.placement);\n\n // if the arrow modifier is required and the arrow style has been computed, apply the arrow style\n if (this.isModifierRequired(this.modifiers.applyStyle, this.modifiers.arrow) && data.offsets.arrow) {\n setStyle(data.arrowElement, data.offsets.arrow);\n }\n\n return data;\n };\n\n /**\n * Modifier used to shift the popper on the start or end of its reference element side\n * @method\n * @memberof Popper.modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @returns {Object} The data object, properly modified\n */\n Popper.prototype.modifiers.shift = function(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var shiftVariation = placement.split('-')[1];\n\n // if shift shiftVariation is specified, run the modifier\n if (shiftVariation) {\n var reference = data.offsets.reference;\n var popper = getPopperClientRect(data.offsets.popper);\n\n var shiftOffsets = {\n y: {\n start: { top: reference.top },\n end: { top: reference.top + reference.height - popper.height }\n },\n x: {\n start: { left: reference.left },\n end: { left: reference.left + reference.width - popper.width }\n }\n };\n\n var axis = ['bottom', 'top'].indexOf(basePlacement) !== -1 ? 'x' : 'y';\n\n data.offsets.popper = Object.assign(popper, shiftOffsets[axis][shiftVariation]);\n }\n\n return data;\n };\n\n\n /**\n * Modifier used to make sure the popper does not overflows from it's boundaries\n * @method\n * @memberof Popper.modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @returns {Object} The data object, properly modified\n */\n Popper.prototype.modifiers.preventOverflow = function(data) {\n var order = this._options.preventOverflowOrder;\n var popper = getPopperClientRect(data.offsets.popper);\n\n var check = {\n left: function() {\n var left = popper.left;\n if (popper.left < data.boundaries.left) {\n left = Math.max(popper.left, data.boundaries.left);\n }\n return { left: left };\n },\n right: function() {\n var left = popper.left;\n if (popper.right > data.boundaries.right) {\n left = Math.min(popper.left, data.boundaries.right - popper.width);\n }\n return { left: left };\n },\n top: function() {\n var top = popper.top;\n if (popper.top < data.boundaries.top) {\n top = Math.max(popper.top, data.boundaries.top);\n }\n return { top: top };\n },\n bottom: function() {\n var top = popper.top;\n if (popper.bottom > data.boundaries.bottom) {\n top = Math.min(popper.top, data.boundaries.bottom - popper.height);\n }\n return { top: top };\n }\n };\n\n order.forEach(function(direction) {\n data.offsets.popper = Object.assign(popper, check[direction]());\n });\n\n return data;\n };\n\n /**\n * Modifier used to make sure the popper is always near its reference\n * @method\n * @memberof Popper.modifiers\n * @argument {Object} data - The data object generated by _update method\n * @returns {Object} The data object, properly modified\n */\n Popper.prototype.modifiers.keepTogether = function(data) {\n var popper = getPopperClientRect(data.offsets.popper);\n var reference = data.offsets.reference;\n var f = Math.floor;\n\n if (popper.right < f(reference.left)) {\n data.offsets.popper.left = f(reference.left) - popper.width;\n }\n if (popper.left > f(reference.right)) {\n data.offsets.popper.left = f(reference.right);\n }\n if (popper.bottom < f(reference.top)) {\n data.offsets.popper.top = f(reference.top) - popper.height;\n }\n if (popper.top > f(reference.bottom)) {\n data.offsets.popper.top = f(reference.bottom);\n }\n\n return data;\n };\n\n /**\n * Modifier used to flip the placement of the popper when the latter is starting overlapping its reference element.\n * Requires the `preventOverflow` modifier before it in order to work.\n * **NOTE:** This modifier will run all its previous modifiers everytime it tries to flip the popper!\n * @method\n * @memberof Popper.modifiers\n * @argument {Object} data - The data object generated by _update method\n * @returns {Object} The data object, properly modified\n */\n Popper.prototype.modifiers.flip = function(data) {\n // check if preventOverflow is in the list of modifiers before the flip modifier.\n // otherwise flip would not work as expected.\n if (!this.isModifierRequired(this.modifiers.flip, this.modifiers.preventOverflow)) {\n console.warn('WARNING: preventOverflow modifier is required by flip modifier in order to work, be sure to include it before flip!');\n return data;\n }\n\n if (data.flipped && data.placement === data._originalPlacement) {\n // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n return data;\n }\n\n var placement = data.placement.split('-')[0];\n var placementOpposite = getOppositePlacement(placement);\n var variation = data.placement.split('-')[1] || '';\n\n var flipOrder = [];\n if(this._options.flipBehavior === 'flip') {\n flipOrder = [\n placement,\n placementOpposite\n ];\n } else {\n flipOrder = this._options.flipBehavior;\n }\n\n flipOrder.forEach(function(step, index) {\n if (placement !== step || flipOrder.length === index + 1) {\n return;\n }\n\n placement = data.placement.split('-')[0];\n placementOpposite = getOppositePlacement(placement);\n\n var popperOffsets = getPopperClientRect(data.offsets.popper);\n\n // this boolean is used to distinguish right and bottom from top and left\n // they need different computations to get flipped\n var a = ['right', 'bottom'].indexOf(placement) !== -1;\n\n // using Math.floor because the reference offsets may contain decimals we are not going to consider here\n if (\n a && Math.floor(data.offsets.reference[placement]) > Math.floor(popperOffsets[placementOpposite]) ||\n !a && Math.floor(data.offsets.reference[placement]) < Math.floor(popperOffsets[placementOpposite])\n ) {\n // we'll use this boolean to detect any flip loop\n data.flipped = true;\n data.placement = flipOrder[index + 1];\n if (variation) {\n data.placement += '-' + variation;\n }\n data.offsets.popper = this._getOffsets(this._popper, this._reference, data.placement).popper;\n\n data = this.runModifiers(data, this._options.modifiers, this._flip);\n }\n }.bind(this));\n return data;\n };\n\n /**\n * Modifier used to add an offset to the popper, useful if you more granularity positioning your popper.\n * The offsets will shift the popper on the side of its reference element.\n * @method\n * @memberof Popper.modifiers\n * @argument {Object} data - The data object generated by _update method\n * @returns {Object} The data object, properly modified\n */\n Popper.prototype.modifiers.offset = function(data) {\n var offset = this._options.offset;\n var popper = data.offsets.popper;\n\n if (data.placement.indexOf('left') !== -1) {\n popper.top -= offset;\n }\n else if (data.placement.indexOf('right') !== -1) {\n popper.top += offset;\n }\n else if (data.placement.indexOf('top') !== -1) {\n popper.left -= offset;\n }\n else if (data.placement.indexOf('bottom') !== -1) {\n popper.left += offset;\n }\n return data;\n };\n\n /**\n * Modifier used to move the arrows on the edge of the popper to make sure them are always between the popper and the reference element\n * It will use the CSS outer size of the arrow element to know how many pixels of conjuction are needed\n * @method\n * @memberof Popper.modifiers\n * @argument {Object} data - The data object generated by _update method\n * @returns {Object} The data object, properly modified\n */\n Popper.prototype.modifiers.arrow = function(data) {\n var arrow = this._options.arrowElement;\n var arrowOffset = this._options.arrowOffset;\n\n // if the arrowElement is a string, suppose it's a CSS selector\n if (typeof arrow === 'string') {\n arrow = this._popper.querySelector(arrow);\n }\n\n // if arrow element is not found, don't run the modifier\n if (!arrow) {\n return data;\n }\n\n // the arrow element must be child of its popper\n if (!this._popper.contains(arrow)) {\n console.warn('WARNING: `arrowElement` must be child of its popper element!');\n return data;\n }\n\n // arrow depends on keepTogether in order to work\n if (!this.isModifierRequired(this.modifiers.arrow, this.modifiers.keepTogether)) {\n console.warn('WARNING: keepTogether modifier is required by arrow modifier in order to work, be sure to include it before arrow!');\n return data;\n }\n\n var arrowStyle = {};\n var placement = data.placement.split('-')[0];\n var popper = getPopperClientRect(data.offsets.popper);\n var reference = data.offsets.reference;\n var isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n var len = isVertical ? 'height' : 'width';\n var side = isVertical ? 'top' : 'left';\n var translate = isVertical ? 'translateY' : 'translateX';\n var altSide = isVertical ? 'left' : 'top';\n var opSide = isVertical ? 'bottom' : 'right';\n var arrowSize = getOuterSizes(arrow)[len];\n\n //\n // extends keepTogether behavior making sure the popper and its reference have enough pixels in conjuction\n //\n\n // top/left side\n if (reference[opSide] - arrowSize < popper[side]) {\n data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowSize);\n }\n // bottom/right side\n if (reference[side] + arrowSize > popper[opSide]) {\n data.offsets.popper[side] += (reference[side] + arrowSize) - popper[opSide];\n }\n\n // compute center of the popper\n var center = reference[side] + (arrowOffset || (reference[len] / 2) - (arrowSize / 2));\n\n var sideValue = center - popper[side];\n\n // prevent arrow from being placed not contiguously to its popper\n sideValue = Math.max(Math.min(popper[len] - arrowSize - 8, sideValue), 8);\n arrowStyle[side] = sideValue;\n arrowStyle[altSide] = ''; // make sure to remove any old style from the arrow\n\n data.offsets.arrow = arrowStyle;\n data.arrowElement = arrow;\n\n return data;\n };\n\n\n //\n // Helpers\n //\n\n /**\n * Get the outer sizes of the given element (offset size + margins)\n * @function\n * @ignore\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\n function getOuterSizes(element) {\n // NOTE: 1 DOM access here\n var _display = element.style.display, _visibility = element.style.visibility;\n element.style.display = 'block'; element.style.visibility = 'hidden';\n var calcWidthToForceRepaint = element.offsetWidth;\n\n // original method\n var styles = root.getComputedStyle(element);\n var x = parseFloat(styles.marginTop) + parseFloat(styles.marginBottom);\n var y = parseFloat(styles.marginLeft) + parseFloat(styles.marginRight);\n var result = { width: element.offsetWidth + y, height: element.offsetHeight + x };\n\n // reset element styles\n element.style.display = _display; element.style.visibility = _visibility;\n return result;\n }\n\n /**\n * Get the opposite placement of the given one/\n * @function\n * @ignore\n * @argument {String} placement\n * @returns {String} flipped placement\n */\n function getOppositePlacement(placement) {\n var hash = {left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, function(matched){\n return hash[matched];\n });\n }\n\n /**\n * Given the popper offsets, generate an output similar to getBoundingClientRect\n * @function\n * @ignore\n * @argument {Object} popperOffsets\n * @returns {Object} ClientRect like output\n */\n function getPopperClientRect(popperOffsets) {\n var offsets = Object.assign({}, popperOffsets);\n offsets.right = offsets.left + offsets.width;\n offsets.bottom = offsets.top + offsets.height;\n return offsets;\n }\n\n /**\n * Given an array and the key to find, returns its index\n * @function\n * @ignore\n * @argument {Array} arr\n * @argument keyToFind\n * @returns index or null\n */\n function getArrayKeyIndex(arr, keyToFind) {\n var i = 0, key;\n for (key in arr) {\n if (arr[key] === keyToFind) {\n return i;\n }\n i++;\n }\n return null;\n }\n\n /**\n * Get CSS computed property of the given element\n * @function\n * @ignore\n * @argument {Eement} element\n * @argument {String} property\n */\n function getStyleComputedProperty(element, property) {\n // NOTE: 1 DOM access here\n var css = root.getComputedStyle(element, null);\n return css[property];\n }\n\n /**\n * Returns the offset parent of the given element\n * @function\n * @ignore\n * @argument {Element} element\n * @returns {Element} offset parent\n */\n function getOffsetParent(element) {\n // NOTE: 1 DOM access here\n var offsetParent = element.offsetParent;\n return offsetParent === root.document.body || !offsetParent ? root.document.documentElement : offsetParent;\n }\n\n /**\n * Returns the scrolling parent of the given element\n * @function\n * @ignore\n * @argument {Element} element\n * @returns {Element} offset parent\n */\n function getScrollParent(element) {\n var parent = element.parentNode;\n\n if (!parent) {\n return element;\n }\n\n if (parent === root.document) {\n // Firefox puts the scrollTOp value on `documentElement` instead of `body`, we then check which of them is\n // greater than 0 and return the proper element\n if (root.document.body.scrollTop || root.document.body.scrollLeft) {\n return root.document.body;\n } else {\n return root.document.documentElement;\n }\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n if (\n ['scroll', 'auto'].indexOf(getStyleComputedProperty(parent, 'overflow')) !== -1 ||\n ['scroll', 'auto'].indexOf(getStyleComputedProperty(parent, 'overflow-x')) !== -1 ||\n ['scroll', 'auto'].indexOf(getStyleComputedProperty(parent, 'overflow-y')) !== -1\n ) {\n // If the detected scrollParent is body, we perform an additional check on its parentNode\n // in this way we'll get body if the browser is Chrome-ish, or documentElement otherwise\n // fixes issue #65\n return parent;\n }\n return getScrollParent(element.parentNode);\n }\n\n /**\n * Check if the given element is fixed or is inside a fixed parent\n * @function\n * @ignore\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\n function isFixed(element) {\n if (element === root.document.body) {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n return element.parentNode ? isFixed(element.parentNode) : element;\n }\n\n /**\n * Set the style to the given popper\n * @function\n * @ignore\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles - Object with a list of properties and values which will be applied to the element\n */\n function setStyle(element, styles) {\n function is_numeric(n) {\n return (n !== '' && !isNaN(parseFloat(n)) && isFinite(n));\n }\n Object.keys(styles).forEach(function(prop) {\n var unit = '';\n // add unit if the value is numeric and is one of the following\n if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && is_numeric(styles[prop])) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n }\n\n /**\n * Check if the given variable is a function\n * @function\n * @ignore\n * @argument {*} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\n function isFunction(functionToCheck) {\n var getType = {};\n return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n }\n\n /**\n * Get the position of the given element, relative to its offset parent\n * @function\n * @ignore\n * @param {Element} element\n * @return {Object} position - Coordinates of the element and its `scrollTop`\n */\n function getOffsetRect(element) {\n var elementRect = {\n width: element.offsetWidth,\n height: element.offsetHeight,\n left: element.offsetLeft,\n top: element.offsetTop\n };\n\n elementRect.right = elementRect.left + elementRect.width;\n elementRect.bottom = elementRect.top + elementRect.height;\n\n // position\n return elementRect;\n }\n\n /**\n * Get bounding client rect of given element\n * @function\n * @ignore\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\n function getBoundingClientRect(element) {\n var rect = element.getBoundingClientRect();\n\n // whether the IE version is lower than 11\n var isIE = navigator.userAgent.indexOf(\"MSIE\") != -1;\n\n // fix ie document bounding top always 0 bug\n var rectTop = isIE && element.tagName === 'HTML'\n ? -element.scrollTop\n : rect.top;\n\n return {\n left: rect.left,\n top: rectTop,\n right: rect.right,\n bottom: rect.bottom,\n width: rect.right - rect.left,\n height: rect.bottom - rectTop\n };\n }\n\n /**\n * Given an element and one of its parents, return the offset\n * @function\n * @ignore\n * @param {HTMLElement} element\n * @param {HTMLElement} parent\n * @return {Object} rect\n */\n function getOffsetRectRelativeToCustomParent(element, parent, fixed) {\n var elementRect = getBoundingClientRect(element);\n var parentRect = getBoundingClientRect(parent);\n\n if (fixed) {\n var scrollParent = getScrollParent(parent);\n parentRect.top += scrollParent.scrollTop;\n parentRect.bottom += scrollParent.scrollTop;\n parentRect.left += scrollParent.scrollLeft;\n parentRect.right += scrollParent.scrollLeft;\n }\n\n var rect = {\n top: elementRect.top - parentRect.top ,\n left: elementRect.left - parentRect.left ,\n bottom: (elementRect.top - parentRect.top) + elementRect.height,\n right: (elementRect.left - parentRect.left) + elementRect.width,\n width: elementRect.width,\n height: elementRect.height\n };\n return rect;\n }\n\n /**\n * Get the prefixed supported property name\n * @function\n * @ignore\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase)\n */\n function getSupportedPropertyName(property) {\n var prefixes = ['', 'ms', 'webkit', 'moz', 'o'];\n\n for (var i = 0; i < prefixes.length; i++) {\n var toCheck = prefixes[i] ? prefixes[i] + property.charAt(0).toUpperCase() + property.slice(1) : property;\n if (typeof root.document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n }\n\n /**\n * The Object.assign() method is used to copy the values of all enumerable own properties from one or more source\n * objects to a target object. It will return the target object.\n * This polyfill doesn't support symbol properties, since ES5 doesn't have symbols anyway\n * Source: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\n * @function\n * @ignore\n */\n if (!Object.assign) {\n Object.defineProperty(Object, 'assign', {\n enumerable: false,\n configurable: true,\n writable: true,\n value: function(target) {\n if (target === undefined || target === null) {\n throw new TypeError('Cannot convert first argument to object');\n }\n\n var to = Object(target);\n for (var i = 1; i < arguments.length; i++) {\n var nextSource = arguments[i];\n if (nextSource === undefined || nextSource === null) {\n continue;\n }\n nextSource = Object(nextSource);\n\n var keysArray = Object.keys(nextSource);\n for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex++) {\n var nextKey = keysArray[nextIndex];\n var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n if (desc !== undefined && desc.enumerable) {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n return to;\n }\n });\n }\n\n return Popper;\n}));\n","/* istanbul ignore next */\n\nimport Vue from 'vue';\n\nconst isServer = Vue.prototype.$isServer;\nconst SPECIAL_CHARS_REGEXP = /([\\:\\-\\_]+(.))/g;\nconst MOZ_HACK_REGEXP = /^moz([A-Z])/;\nconst ieVersion = isServer ? 0 : Number(document.documentMode);\n\n/* istanbul ignore next */\nconst trim = function(string) {\n return (string || '').replace(/^[\\s\\uFEFF]+|[\\s\\uFEFF]+$/g, '');\n};\n/* istanbul ignore next */\nconst camelCase = function(name) {\n return name.replace(SPECIAL_CHARS_REGEXP, function(_, separator, letter, offset) {\n return offset ? letter.toUpperCase() : letter;\n }).replace(MOZ_HACK_REGEXP, 'Moz$1');\n};\n\n/* istanbul ignore next */\nexport const on = (function() {\n if (!isServer && document.addEventListener) {\n return function(element, event, handler) {\n if (element && event && handler) {\n element.addEventListener(event, handler, false);\n }\n };\n } else {\n return function(element, event, handler) {\n if (element && event && handler) {\n element.attachEvent('on' + event, handler);\n }\n };\n }\n})();\n\n/* istanbul ignore next */\nexport const off = (function() {\n if (!isServer && document.removeEventListener) {\n return function(element, event, handler) {\n if (element && event) {\n element.removeEventListener(event, handler, false);\n }\n };\n } else {\n return function(element, event, handler) {\n if (element && event) {\n element.detachEvent('on' + event, handler);\n }\n };\n }\n})();\n\n/* istanbul ignore next */\nexport const once = function(el, event, fn) {\n var listener = function() {\n if (fn) {\n fn.apply(this, arguments);\n }\n off(el, event, listener);\n };\n on(el, event, listener);\n};\n\n/* istanbul ignore next */\nexport function hasClass(el, cls) {\n if (!el || !cls) return false;\n if (cls.indexOf(' ') !== -1) throw new Error('className should not contain space.');\n if (el.classList) {\n return el.classList.contains(cls);\n } else {\n return (' ' + el.className + ' ').indexOf(' ' + cls + ' ') > -1;\n }\n};\n\n/* istanbul ignore next */\nexport function addClass(el, cls) {\n if (!el) return;\n var curClass = el.className;\n var classes = (cls || '').split(' ');\n\n for (var i = 0, j = classes.length; i < j; i++) {\n var clsName = classes[i];\n if (!clsName) continue;\n\n if (el.classList) {\n el.classList.add(clsName);\n } else if (!hasClass(el, clsName)) {\n curClass += ' ' + clsName;\n }\n }\n if (!el.classList) {\n el.className = curClass;\n }\n};\n\n/* istanbul ignore next */\nexport function removeClass(el, cls) {\n if (!el || !cls) return;\n var classes = cls.split(' ');\n var curClass = ' ' + el.className + ' ';\n\n for (var i = 0, j = classes.length; i < j; i++) {\n var clsName = classes[i];\n if (!clsName) continue;\n\n if (el.classList) {\n el.classList.remove(clsName);\n } else if (hasClass(el, clsName)) {\n curClass = curClass.replace(' ' + clsName + ' ', ' ');\n }\n }\n if (!el.classList) {\n el.className = trim(curClass);\n }\n};\n\n/* istanbul ignore next */\nexport const getStyle = ieVersion < 9 ? function(element, styleName) {\n if (isServer) return;\n if (!element || !styleName) return null;\n styleName = camelCase(styleName);\n if (styleName === 'float') {\n styleName = 'styleFloat';\n }\n try {\n switch (styleName) {\n case 'opacity':\n try {\n return element.filters.item('alpha').opacity / 100;\n } catch (e) {\n return 1.0;\n }\n default:\n return (element.style[styleName] || element.currentStyle ? element.currentStyle[styleName] : null);\n }\n } catch (e) {\n return element.style[styleName];\n }\n} : function(element, styleName) {\n if (isServer) return;\n if (!element || !styleName) return null;\n styleName = camelCase(styleName);\n if (styleName === 'float') {\n styleName = 'cssFloat';\n }\n try {\n var computed = document.defaultView.getComputedStyle(element, '');\n return element.style[styleName] || computed ? computed[styleName] : null;\n } catch (e) {\n return element.style[styleName];\n }\n};\n\n/* istanbul ignore next */\nexport function setStyle(element, styleName, value) {\n if (!element || !styleName) return;\n\n if (typeof styleName === 'object') {\n for (var prop in styleName) {\n if (styleName.hasOwnProperty(prop)) {\n setStyle(element, prop, styleName[prop]);\n }\n }\n } else {\n styleName = camelCase(styleName);\n if (styleName === 'opacity' && ieVersion < 9) {\n element.style.filter = isNaN(value) ? '' : 'alpha(opacity=' + value * 100 + ')';\n } else {\n element.style[styleName] = value;\n }\n }\n};\n\nexport const isScroll = (el, vertical) => {\n if (isServer) return;\n\n const determinedDirection = vertical !== null || vertical !== undefined;\n const overflow = determinedDirection\n ? vertical\n ? getStyle(el, 'overflow-y')\n : getStyle(el, 'overflow-x')\n : getStyle(el, 'overflow');\n\n return overflow.match(/(scroll|auto)/);\n};\n\nexport const getScrollContainer = (el, vertical) => {\n if (isServer) return;\n\n let parent = el;\n while (parent) {\n if ([window, document, document.documentElement].includes(parent)) {\n return window;\n }\n if (isScroll(parent, vertical)) {\n return parent;\n }\n parent = parent.parentNode;\n }\n\n return parent;\n};\n\nexport const isInContainer = (el, container) => {\n if (isServer || !el || !container) return false;\n\n const elRect = el.getBoundingClientRect();\n let containerRect;\n\n if ([window, document, document.documentElement, null, undefined].includes(container)) {\n containerRect = {\n top: 0,\n right: window.innerWidth,\n bottom: window.innerHeight,\n left: 0\n };\n } else {\n containerRect = container.getBoundingClientRect();\n }\n\n return elRect.top < containerRect.bottom &&\n elRect.bottom > containerRect.top &&\n elRect.right > containerRect.left &&\n elRect.left < containerRect.right;\n};\n","import Vue from 'vue';\nimport { isString, isObject } from 'element-ui/src/utils/types';\n\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\n\nexport function noop() {};\n\nexport function hasOwn(obj, key) {\n return hasOwnProperty.call(obj, key);\n};\n\nfunction extend(to, _from) {\n for (let key in _from) {\n to[key] = _from[key];\n }\n return to;\n};\n\nexport function toObject(arr) {\n var res = {};\n for (let i = 0; i < arr.length; i++) {\n if (arr[i]) {\n extend(res, arr[i]);\n }\n }\n return res;\n};\n\nexport const getValueByPath = function(object, prop) {\n prop = prop || '';\n const paths = prop.split('.');\n let current = object;\n let result = null;\n for (let i = 0, j = paths.length; i < j; i++) {\n const path = paths[i];\n if (!current) break;\n\n if (i === j - 1) {\n result = current[path];\n break;\n }\n current = current[path];\n }\n return result;\n};\n\nexport function getPropByPath(obj, path, strict) {\n let tempObj = obj;\n path = path.replace(/\\[(\\w+)\\]/g, '.$1');\n path = path.replace(/^\\./, '');\n\n let keyArr = path.split('.');\n let i = 0;\n for (let len = keyArr.length; i < len - 1; ++i) {\n if (!tempObj && !strict) break;\n let key = keyArr[i];\n if (key in tempObj) {\n tempObj = tempObj[key];\n } else {\n if (strict) {\n throw new Error('please transfer a valid prop path to form item!');\n }\n break;\n }\n }\n return {\n o: tempObj,\n k: keyArr[i],\n v: tempObj ? tempObj[keyArr[i]] : null\n };\n};\n\nexport const generateId = function() {\n return Math.floor(Math.random() * 10000);\n};\n\nexport const valueEquals = (a, b) => {\n // see: https://stackoverflow.com/questions/3115982/how-to-check-if-two-arrays-are-equal-with-javascript\n if (a === b) return true;\n if (!(a instanceof Array)) return false;\n if (!(b instanceof Array)) return false;\n if (a.length !== b.length) return false;\n for (let i = 0; i !== a.length; ++i) {\n if (a[i] !== b[i]) return false;\n }\n return true;\n};\n\nexport const escapeRegexpString = (value = '') => String(value).replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&');\n\n// TODO: use native Array.find, Array.findIndex when IE support is dropped\nexport const arrayFindIndex = function(arr, pred) {\n for (let i = 0; i !== arr.length; ++i) {\n if (pred(arr[i])) {\n return i;\n }\n }\n return -1;\n};\n\nexport const arrayFind = function(arr, pred) {\n const idx = arrayFindIndex(arr, pred);\n return idx !== -1 ? arr[idx] : undefined;\n};\n\n// coerce truthy value to array\nexport const coerceTruthyValueToArray = function(val) {\n if (Array.isArray(val)) {\n return val;\n } else if (val) {\n return [val];\n } else {\n return [];\n }\n};\n\nexport const isIE = function() {\n return !Vue.prototype.$isServer && !isNaN(Number(document.documentMode));\n};\n\nexport const isEdge = function() {\n return !Vue.prototype.$isServer && navigator.userAgent.indexOf('Edge') > -1;\n};\n\nexport const isFirefox = function() {\n return !Vue.prototype.$isServer && !!window.navigator.userAgent.match(/firefox/i);\n};\n\nexport const autoprefixer = function(style) {\n if (typeof style !== 'object') return style;\n const rules = ['transform', 'transition', 'animation'];\n const prefixes = ['ms-', 'webkit-'];\n rules.forEach(rule => {\n const value = style[rule];\n if (rule && value) {\n prefixes.forEach(prefix => {\n style[prefix + rule] = value;\n });\n }\n });\n return style;\n};\n\nexport const kebabCase = function(str) {\n const hyphenateRE = /([^-])([A-Z])/g;\n return str\n .replace(hyphenateRE, '$1-$2')\n .replace(hyphenateRE, '$1-$2')\n .toLowerCase();\n};\n\nexport const capitalize = function(str) {\n if (!isString(str)) return str;\n return str.charAt(0).toUpperCase() + str.slice(1);\n};\n\nexport const looseEqual = function(a, b) {\n const isObjectA = isObject(a);\n const isObjectB = isObject(b);\n if (isObjectA && isObjectB) {\n return JSON.stringify(a) === JSON.stringify(b);\n } else if (!isObjectA && !isObjectB) {\n return String(a) === String(b);\n } else {\n return false;\n }\n};\n\nexport const arrayEquals = function(arrayA, arrayB) {\n arrayA = arrayA || [];\n arrayB = arrayB || [];\n\n if (arrayA.length !== arrayB.length) {\n return false;\n }\n\n for (let i = 0; i < arrayA.length; i++) {\n if (!looseEqual(arrayA[i], arrayB[i])) {\n return false;\n }\n }\n\n return true;\n};\n\nexport const isEqual = function(value1, value2) {\n if (Array.isArray(value1) && Array.isArray(value2)) {\n return arrayEquals(value1, value2);\n }\n return looseEqual(value1, value2);\n};\n\nexport const isEmpty = function(val) {\n // null or undefined\n if (val == null) return true;\n\n if (typeof val === 'boolean') return false;\n\n if (typeof val === 'number') return !val;\n\n if (val instanceof Error) return val.message === '';\n\n switch (Object.prototype.toString.call(val)) {\n // String or Array\n case '[object String]':\n case '[object Array]':\n return !val.length;\n\n // Map or Set or File\n case '[object File]':\n case '[object Map]':\n case '[object Set]': {\n return !val.size;\n }\n // Plain Object\n case '[object Object]': {\n return !Object.keys(val).length;\n }\n }\n\n return false;\n};\n\nexport function rafThrottle(fn) {\n let locked = false;\n return function(...args) {\n if (locked) return;\n locked = true;\n window.requestAnimationFrame(_ => {\n fn.apply(this, args);\n locked = false;\n });\n };\n}\n\nexport function objToArray(obj) {\n if (Array.isArray(obj)) {\n return obj;\n }\n return isEmpty(obj) ? [] : [obj];\n}\n","import Vue from 'vue';\nimport { on } from 'element-ui/src/utils/dom';\n\nconst nodeList = [];\nconst ctx = '@@clickoutsideContext';\n\nlet startClick;\nlet seed = 0;\n\n!Vue.prototype.$isServer && on(document, 'mousedown', e => (startClick = e));\n\n!Vue.prototype.$isServer && on(document, 'mouseup', e => {\n nodeList.forEach(node => node[ctx].documentHandler(e, startClick));\n});\n\nfunction createDocumentHandler(el, binding, vnode) {\n return function(mouseup = {}, mousedown = {}) {\n if (!vnode ||\n !vnode.context ||\n !mouseup.target ||\n !mousedown.target ||\n el.contains(mouseup.target) ||\n el.contains(mousedown.target) ||\n el === mouseup.target ||\n (vnode.context.popperElm &&\n (vnode.context.popperElm.contains(mouseup.target) ||\n vnode.context.popperElm.contains(mousedown.target)))) return;\n\n if (binding.expression &&\n el[ctx].methodName &&\n vnode.context[el[ctx].methodName]) {\n vnode.context[el[ctx].methodName]();\n } else {\n el[ctx].bindingFn && el[ctx].bindingFn();\n }\n };\n}\n\n/**\n * v-clickoutside\n * @desc 点击元素外面才会触发的事件\n * @example\n * ```vue\n *
\n * ```\n */\nexport default {\n bind(el, binding, vnode) {\n nodeList.push(el);\n const id = seed++;\n el[ctx] = {\n id,\n documentHandler: createDocumentHandler(el, binding, vnode),\n methodName: binding.expression,\n bindingFn: binding.value\n };\n },\n\n update(el, binding, vnode) {\n el[ctx].documentHandler = createDocumentHandler(el, binding, vnode);\n el[ctx].methodName = binding.expression;\n el[ctx].bindingFn = binding.value;\n },\n\n unbind(el) {\n let len = nodeList.length;\n\n for (let i = 0; i < len; i++) {\n if (nodeList[i][ctx].id === el[ctx].id) {\n nodeList.splice(i, 1);\n break;\n }\n }\n delete el[ctx];\n }\n};\n","export default function(target) {\n for (let i = 1, j = arguments.length; i < j; i++) {\n let source = arguments[i] || {};\n for (let prop in source) {\n if (source.hasOwnProperty(prop)) {\n let value = source[prop];\n if (value !== undefined) {\n target[prop] = value;\n }\n }\n }\n }\n\n return target;\n};\n","function broadcast(componentName, eventName, params) {\n this.$children.forEach(child => {\n var name = child.$options.componentName;\n\n if (name === componentName) {\n child.$emit.apply(child, [eventName].concat(params));\n } else {\n broadcast.apply(child, [componentName, eventName].concat([params]));\n }\n });\n}\nexport default {\n methods: {\n dispatch(componentName, eventName, params) {\n var parent = this.$parent || this.$root;\n var name = parent.$options.componentName;\n\n while (parent && (!name || name !== componentName)) {\n parent = parent.$parent;\n\n if (parent) {\n name = parent.$options.componentName;\n }\n }\n if (parent) {\n parent.$emit.apply(parent, [eventName].concat(params));\n }\n },\n broadcast(componentName, eventName, params) {\n broadcast.call(this, componentName, eventName, params);\n }\n }\n};\n","import Vue from 'vue';\n\nlet scrollBarWidth;\n\nexport default function() {\n if (Vue.prototype.$isServer) return 0;\n if (scrollBarWidth !== undefined) return scrollBarWidth;\n\n const outer = document.createElement('div');\n outer.className = 'el-scrollbar__wrap';\n outer.style.visibility = 'hidden';\n outer.style.width = '100px';\n outer.style.position = 'absolute';\n outer.style.top = '-9999px';\n document.body.appendChild(outer);\n\n const widthNoScroll = outer.offsetWidth;\n outer.style.overflow = 'scroll';\n\n const inner = document.createElement('div');\n inner.style.width = '100%';\n outer.appendChild(inner);\n\n const widthWithScroll = inner.offsetWidth;\n outer.parentNode.removeChild(outer);\n scrollBarWidth = widthNoScroll - widthWithScroll;\n\n return scrollBarWidth;\n};\n"],"sourceRoot":""}