{"version":3,"sources":["webpack:///./node_modules/bootstrap-vue/esm/directives/toggle/toggle.js","webpack:///./node_modules/vue-ripple-directive/src/ripple.js"],"names":["CLASS_BV_TOGGLE_COLLAPSED","CLASS_BV_TOGGLE_NOT_COLLAPSED","BV_BASE","BV_TOGGLE_ROOT_HANDLER","concat","BV_TOGGLE_CLICK_HANDLER","BV_TOGGLE_STATE","BV_TOGGLE_TARGETS","STRING_FALSE","STRING_TRUE","ATTR_ARIA_CONTROLS","ATTR_ARIA_EXPANDED","ATTR_ROLE","ATTR_TABINDEX","STYLE_OVERFLOW_ANCHOR","ROOT_ACTION_EVENT_NAME_TOGGLE","ROOT_EVENT_NAME_STATE","ROOT_EVENT_NAME_SYNC_STATE","ROOT_ACTION_EVENT_NAME_REQUEST_STATE","KEYDOWN_KEY_CODES","isNonStandardTag","el","tagName","toLowerCase","getTargets","_ref","modifiers","arg","value","targets","split","href","test","push","replace","forEach","t","filter","index","arr","indexOf","removeClickListener","handler","addClickListener","vnode","context","event","type","keyCode","target","$root","$emit","removeRootListeners","$off","addRootListeners","id","state","setToggleState","$on","resetProp","prop","handleUpdate","binding","length","join","VBToggle","bind","componentUpdated","updated","unbind","Ripple","props","transition","setProps","Object","keys","addEventListener","rippler","bg","color","zIndex","targetBorder","parseInt","getComputedStyle","rect","getBoundingClientRect","left","top","width","offsetWidth","height","offsetHeight","dx","clientX","dy","clientY","maxX","Math","max","maxY","style","window","radius","sqrt","border","ripple","document","createElement","rippleContainer","className","marginTop","marginLeft","borderRadius","pointerEvents","position","backgroundColor","overflow","storedTargetPosition","clearRipple","setTimeout","parentNode","removeChild","removeEventListener","clearPosition","i","childNodes","appendChild","borderTopLeftRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius","direction","item","isNaN","Number"],"mappings":"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","file":"js/chunk-33efc358.18a2d9fb.js","sourcesContent":["import { NAME_COLLAPSE } from '../../constants/components';\nimport { IS_BROWSER } from '../../constants/env';\nimport { EVENT_OPTIONS_PASSIVE } from '../../constants/events';\nimport { CODE_ENTER, CODE_SPACE } from '../../constants/key-codes';\nimport { RX_HASH, RX_HASH_ID, RX_SPACE_SPLIT } from '../../constants/regex';\nimport { arrayIncludes, concat } from '../../utils/array';\nimport { addClass, getAttr, hasAttr, isDisabled, isTag, removeAttr, removeClass, removeStyle, requestAF, setAttr, setStyle } from '../../utils/dom';\nimport { getRootActionEventName, getRootEventName, eventOn, eventOff } from '../../utils/events';\nimport { isString } from '../../utils/inspect';\nimport { looseEqual } from '../../utils/loose-equal';\nimport { keys } from '../../utils/object'; // --- Constants ---\n// Classes to apply to trigger element\n\nvar CLASS_BV_TOGGLE_COLLAPSED = 'collapsed';\nvar CLASS_BV_TOGGLE_NOT_COLLAPSED = 'not-collapsed'; // Property key for handler storage\n\nvar BV_BASE = '__BV_toggle'; // Root event listener property (Function)\n\nvar BV_TOGGLE_ROOT_HANDLER = \"\".concat(BV_BASE, \"_HANDLER__\"); // Trigger element click handler property (Function)\n\nvar BV_TOGGLE_CLICK_HANDLER = \"\".concat(BV_BASE, \"_CLICK__\"); // Target visibility state property (Boolean)\n\nvar BV_TOGGLE_STATE = \"\".concat(BV_BASE, \"_STATE__\"); // Target ID list property (Array)\n\nvar BV_TOGGLE_TARGETS = \"\".concat(BV_BASE, \"_TARGETS__\"); // Commonly used strings\n\nvar STRING_FALSE = 'false';\nvar STRING_TRUE = 'true'; // Commonly used attribute names\n\nvar ATTR_ARIA_CONTROLS = 'aria-controls';\nvar ATTR_ARIA_EXPANDED = 'aria-expanded';\nvar ATTR_ROLE = 'role';\nvar ATTR_TABINDEX = 'tabindex'; // Commonly used style properties\n\nvar STYLE_OVERFLOW_ANCHOR = 'overflow-anchor'; // Emitted control event for collapse (emitted to collapse)\n\nvar ROOT_ACTION_EVENT_NAME_TOGGLE = getRootActionEventName(NAME_COLLAPSE, 'toggle'); // Listen to event for toggle state update (emitted by collapse)\n\nvar ROOT_EVENT_NAME_STATE = getRootEventName(NAME_COLLAPSE, 'state'); // Private event emitted on `$root` to ensure the toggle state is always synced\n// Gets emitted even if the state of b-collapse has not changed\n// This event is NOT to be documented as people should not be using it\n\nvar ROOT_EVENT_NAME_SYNC_STATE = getRootEventName(NAME_COLLAPSE, 'sync-state'); // Private event we send to collapse to request state update sync event\n\nvar ROOT_ACTION_EVENT_NAME_REQUEST_STATE = getRootActionEventName(NAME_COLLAPSE, 'request-state');\nvar KEYDOWN_KEY_CODES = [CODE_ENTER, CODE_SPACE]; // --- Helper methods ---\n\nvar isNonStandardTag = function isNonStandardTag(el) {\n return !arrayIncludes(['button', 'a'], el.tagName.toLowerCase());\n};\n\nvar getTargets = function getTargets(_ref, el) {\n var modifiers = _ref.modifiers,\n arg = _ref.arg,\n value = _ref.value;\n // Any modifiers are considered target IDs\n var targets = keys(modifiers || {}); // If value is a string, split out individual targets (if space delimited)\n\n value = isString(value) ? value.split(RX_SPACE_SPLIT) : value; // Support target ID as link href (`href=\"#id\"`)\n\n if (isTag(el.tagName, 'a')) {\n var href = getAttr(el, 'href') || '';\n\n if (RX_HASH_ID.test(href)) {\n targets.push(href.replace(RX_HASH, ''));\n }\n } // Add ID from `arg` (if provided), and support value\n // as a single string ID or an array of string IDs\n // If `value` is not an array or string, then it gets filtered out\n\n\n concat(arg, value).forEach(function (t) {\n return isString(t) && targets.push(t);\n }); // Return only unique and truthy target IDs\n\n return targets.filter(function (t, index, arr) {\n return t && arr.indexOf(t) === index;\n });\n};\n\nvar removeClickListener = function removeClickListener(el) {\n var handler = el[BV_TOGGLE_CLICK_HANDLER];\n\n if (handler) {\n eventOff(el, 'click', handler, EVENT_OPTIONS_PASSIVE);\n eventOff(el, 'keydown', handler, EVENT_OPTIONS_PASSIVE);\n }\n\n el[BV_TOGGLE_CLICK_HANDLER] = null;\n};\n\nvar addClickListener = function addClickListener(el, vnode) {\n removeClickListener(el);\n\n if (vnode.context) {\n var handler = function handler(event) {\n if (!(event.type === 'keydown' && !arrayIncludes(KEYDOWN_KEY_CODES, event.keyCode)) && !isDisabled(el)) {\n var targets = el[BV_TOGGLE_TARGETS] || [];\n targets.forEach(function (target) {\n vnode.context.$root.$emit(ROOT_ACTION_EVENT_NAME_TOGGLE, target);\n });\n }\n };\n\n el[BV_TOGGLE_CLICK_HANDLER] = handler;\n eventOn(el, 'click', handler, EVENT_OPTIONS_PASSIVE);\n\n if (isNonStandardTag(el)) {\n eventOn(el, 'keydown', handler, EVENT_OPTIONS_PASSIVE);\n }\n }\n};\n\nvar removeRootListeners = function removeRootListeners(el, vnode) {\n if (el[BV_TOGGLE_ROOT_HANDLER] && vnode.context) {\n vnode.context.$root.$off([ROOT_EVENT_NAME_STATE, ROOT_EVENT_NAME_SYNC_STATE], el[BV_TOGGLE_ROOT_HANDLER]);\n }\n\n el[BV_TOGGLE_ROOT_HANDLER] = null;\n};\n\nvar addRootListeners = function addRootListeners(el, vnode) {\n removeRootListeners(el, vnode);\n\n if (vnode.context) {\n var handler = function handler(id, state) {\n // `state` will be `true` if target is expanded\n if (arrayIncludes(el[BV_TOGGLE_TARGETS] || [], id)) {\n // Set/Clear 'collapsed' visibility class state\n el[BV_TOGGLE_STATE] = state; // Set `aria-expanded` and class state on trigger element\n\n setToggleState(el, state);\n }\n };\n\n el[BV_TOGGLE_ROOT_HANDLER] = handler; // Listen for toggle state changes (public) and sync (private)\n\n vnode.context.$root.$on([ROOT_EVENT_NAME_STATE, ROOT_EVENT_NAME_SYNC_STATE], handler);\n }\n};\n\nvar setToggleState = function setToggleState(el, state) {\n // State refers to the visibility of the collapse/sidebar\n if (state) {\n removeClass(el, CLASS_BV_TOGGLE_COLLAPSED);\n addClass(el, CLASS_BV_TOGGLE_NOT_COLLAPSED);\n setAttr(el, ATTR_ARIA_EXPANDED, STRING_TRUE);\n } else {\n removeClass(el, CLASS_BV_TOGGLE_NOT_COLLAPSED);\n addClass(el, CLASS_BV_TOGGLE_COLLAPSED);\n setAttr(el, ATTR_ARIA_EXPANDED, STRING_FALSE);\n }\n}; // Reset and remove a property from the provided element\n\n\nvar resetProp = function resetProp(el, prop) {\n el[prop] = null;\n delete el[prop];\n}; // Handle directive updates\n\n\nvar handleUpdate = function handleUpdate(el, binding, vnode) {\n /* istanbul ignore next: should never happen */\n if (!IS_BROWSER || !vnode.context) {\n return;\n } // If element is not a button or link, we add `role=\"button\"`\n // and `tabindex=\"0\"` for accessibility reasons\n\n\n if (isNonStandardTag(el)) {\n if (!hasAttr(el, ATTR_ROLE)) {\n setAttr(el, ATTR_ROLE, 'button');\n }\n\n if (!hasAttr(el, ATTR_TABINDEX)) {\n setAttr(el, ATTR_TABINDEX, '0');\n }\n } // Ensure the collapse class and `aria-*` attributes persist\n // after element is updated (either by parent re-rendering\n // or changes to this element or its contents)\n\n\n setToggleState(el, el[BV_TOGGLE_STATE]); // Parse list of target IDs\n\n var targets = getTargets(binding, el); // Ensure the `aria-controls` hasn't been overwritten\n // or removed when vnode updates\n // Also ensure to set `overflow-anchor` to `none` to prevent\n // the browser's scroll anchoring behavior\n\n /* istanbul ignore else */\n\n if (targets.length > 0) {\n setAttr(el, ATTR_ARIA_CONTROLS, targets.join(' '));\n setStyle(el, STYLE_OVERFLOW_ANCHOR, 'none');\n } else {\n removeAttr(el, ATTR_ARIA_CONTROLS);\n removeStyle(el, STYLE_OVERFLOW_ANCHOR);\n } // Add/Update our click listener(s)\n // Wrap in a `requestAF()` to allow any previous\n // click handling to occur first\n\n\n requestAF(function () {\n addClickListener(el, vnode);\n }); // If targets array has changed, update\n\n if (!looseEqual(targets, el[BV_TOGGLE_TARGETS])) {\n // Update targets array to element storage\n el[BV_TOGGLE_TARGETS] = targets; // Ensure `aria-controls` is up to date\n // Request a state update from targets so that we can\n // ensure expanded state is correct (in most cases)\n\n targets.forEach(function (target) {\n vnode.context.$root.$emit(ROOT_ACTION_EVENT_NAME_REQUEST_STATE, target);\n });\n }\n};\n/*\n * Export our directive\n */\n\n\nexport var VBToggle = {\n bind: function bind(el, binding, vnode) {\n // State is initially collapsed until we receive a state event\n el[BV_TOGGLE_STATE] = false; // Assume no targets initially\n\n el[BV_TOGGLE_TARGETS] = []; // Add our root listeners\n\n addRootListeners(el, vnode); // Initial update of trigger\n\n handleUpdate(el, binding, vnode);\n },\n componentUpdated: handleUpdate,\n updated: handleUpdate,\n unbind: function unbind(el, binding, vnode) {\n removeClickListener(el); // Remove our $root listener\n\n removeRootListeners(el, vnode); // Reset custom props\n\n resetProp(el, BV_TOGGLE_ROOT_HANDLER);\n resetProp(el, BV_TOGGLE_CLICK_HANDLER);\n resetProp(el, BV_TOGGLE_STATE);\n resetProp(el, BV_TOGGLE_TARGETS); // Reset classes/attrs/styles\n\n removeClass(el, CLASS_BV_TOGGLE_COLLAPSED);\n removeClass(el, CLASS_BV_TOGGLE_NOT_COLLAPSED);\n removeAttr(el, ATTR_ARIA_EXPANDED);\n removeAttr(el, ATTR_ARIA_CONTROLS);\n removeAttr(el, ATTR_ROLE);\n removeStyle(el, STYLE_OVERFLOW_ANCHOR);\n }\n};","var Ripple = {\n bind: function(el, binding){\n\n // Default values.\n var props = {\n event: 'mousedown',\n transition: 600\n };\n\n setProps(Object.keys(binding.modifiers),props);\n\n el.addEventListener(props.event, function(event) {\n rippler(event, el, binding.value);\n });\n\n var bg = binding.value || Ripple.color || 'rgba(0, 0, 0, 0.35)';\n var zIndex = Ripple.zIndex || '9999';\n\n function rippler(event, el) {\n var target = el;\n // Get border to avoid offsetting on ripple container position\n var targetBorder = parseInt((getComputedStyle(target).borderWidth).replace('px', ''));\n\n // Get necessary variables\n var rect = target.getBoundingClientRect(),\n left = rect.left,\n top = rect.top,\n width = target.offsetWidth,\n height = target.offsetHeight,\n dx = event.clientX - left,\n dy = event.clientY - top,\n maxX = Math.max(dx, width - dx),\n maxY = Math.max(dy, height - dy),\n style = window.getComputedStyle(target),\n radius = Math.sqrt((maxX * maxX) + (maxY * maxY)),\n border = (targetBorder > 0 ) ? targetBorder : 0;\n\n // Create the ripple and its container\n var ripple = document.createElement(\"div\"),\n rippleContainer = document.createElement(\"div\");\n rippleContainer.className = 'ripple-container';\n ripple.className = 'ripple';\n\n //Styles for ripple\n ripple.style.marginTop= '0px';\n ripple.style.marginLeft= '0px';\n ripple.style.width= '1px';\n ripple.style.height= '1px';\n ripple.style.transition= 'all ' + props.transition + 'ms cubic-bezier(0.4, 0, 0.2, 1)';\n ripple.style.borderRadius= '50%';\n ripple.style.pointerEvents= 'none';\n ripple.style.position= 'relative';\n ripple.style.zIndex= zIndex;\n ripple.style.backgroundColor = bg;\n\n //Styles for rippleContainer\n rippleContainer.style.position= 'absolute';\n rippleContainer.style.left = 0 - border + 'px';\n rippleContainer.style.top = 0 - border + 'px';\n rippleContainer.style.height = '0';\n rippleContainer.style.width = '0';\n rippleContainer.style.pointerEvents = 'none';\n rippleContainer.style.overflow = 'hidden';\n\n // Store target position to change it after\n var storedTargetPosition = ((target.style.position).length > 0) ? target.style.position : getComputedStyle(target).position;\n // Change target position to relative to guarantee ripples correct positioning\n if (storedTargetPosition !== 'relative') {\n target.style.position = 'relative';\n }\n\n rippleContainer.appendChild(ripple);\n target.appendChild(rippleContainer);\n\n ripple.style.marginLeft = dx + \"px\";\n ripple.style.marginTop = dy + \"px\";\n\n // No need to set positioning because ripple should be child of target and to it's relative position.\n // rippleContainer.style.left = left + (((window.pageXOffset || document.scrollLeft) - (document.clientLeft || 0)) || 0) + \"px\";\n // rippleContainer.style.top = top + (((window.pageYOffset || document.scrollTop) - (document.clientTop || 0)) || 0) + \"px\";\n rippleContainer.style.width = width + \"px\";\n rippleContainer.style.height = height + \"px\";\n rippleContainer.style.borderTopLeftRadius = style.borderTopLeftRadius;\n rippleContainer.style.borderTopRightRadius = style.borderTopRightRadius;\n rippleContainer.style.borderBottomLeftRadius = style.borderBottomLeftRadius;\n rippleContainer.style.borderBottomRightRadius = style.borderBottomRightRadius;\n\n rippleContainer.style.direction = 'ltr';\n\n setTimeout(function() {\n ripple.style.width = radius * 2 + \"px\";\n ripple.style.height = radius * 2 + \"px\";\n ripple.style.marginLeft = dx - radius + \"px\";\n ripple.style.marginTop = dy - radius + \"px\";\n }, 0);\n\n function clearRipple() {\n setTimeout(function() {\n ripple.style.backgroundColor = \"rgba(0, 0, 0, 0)\";\n }, 250);\n\n // Timeout set to get a smooth removal of the ripple\n setTimeout(function() {\n rippleContainer.parentNode.removeChild(rippleContainer);\n }, 850);\n\n el.removeEventListener('mouseup', clearRipple, false);\n\n // After removing event set position to target to it's original one\n // Timeout it's needed to avoid jerky effect of ripple jumping out parent target\n setTimeout(function () {\n\n var clearPosition = true;\n for(var i = 0; i < target.childNodes.length; i++) {\n if(target.childNodes[i].className === 'ripple-container') {\n clearPosition = false;\n }\n }\n\n if(clearPosition) {\n if(storedTargetPosition !== 'static') {\n target.style.position = storedTargetPosition;\n } else {\n target.style.position = '';\n }\n }\n\n }, props.transition + 250)\n }\n\n if(event.type === 'mousedown') {\n el.addEventListener('mouseup', clearRipple, false);\n } else {\n clearRipple();\n }\n }\n }\n};\n\nfunction setProps(modifiers,props) {\n modifiers.forEach(function(item) {\n if(isNaN(Number(item)))\n props.event = item;\n else\n props.transition = item;\n });\n}\n\nexport default Ripple;"],"sourceRoot":""}