1 line
1.5 MiB
1 line
1.5 MiB
{"version":3,"file":"bootstrap-vue.min.js","sources":["../src/bootstrap-vue.js"],"sourcesContent":["/* eslint-disable */\n/*!\n * BootstrapVue 2.16.0\n *\n * @link https://bootstrap-vue.org\n * @source https://github.com/bootstrap-vue/bootstrap-vue\n * @copyright (c) 2016-2020 BootstrapVue\n * @license MIT\n * https://github.com/bootstrap-vue/bootstrap-vue/blob/master/LICENSE\n */\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./vue')) :\n typeof define === 'function' && define.amd ? define(['./vue'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.bootstrapVue = factory(global.Vue));\n }(this, (function (Vue) { 'use strict';\n \n Vue = Vue && Object.prototype.hasOwnProperty.call(Vue, 'default') ? Vue['default'] : Vue;\n \n function _typeof(obj) {\n \"@babel/helpers - typeof\";\n \n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n \n return _typeof(obj);\n }\n \n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n \n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n \n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n }\n \n function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n \n return obj;\n }\n \n function ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n \n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n \n return keys;\n }\n \n function _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n \n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n \n return target;\n }\n \n function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n \n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n }\n \n function _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n }\n \n function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n \n return _setPrototypeOf(o, p);\n }\n \n function _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n \n try {\n Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n }\n \n function _construct(Parent, args, Class) {\n if (_isNativeReflectConstruct()) {\n _construct = Reflect.construct;\n } else {\n _construct = function _construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) _setPrototypeOf(instance, Class.prototype);\n return instance;\n };\n }\n \n return _construct.apply(null, arguments);\n }\n \n function _isNativeFunction(fn) {\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n }\n \n function _wrapNativeSuper(Class) {\n var _cache = typeof Map === \"function\" ? new Map() : undefined;\n \n _wrapNativeSuper = function _wrapNativeSuper(Class) {\n if (Class === null || !_isNativeFunction(Class)) return Class;\n \n if (typeof Class !== \"function\") {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n \n if (typeof _cache !== \"undefined\") {\n if (_cache.has(Class)) return _cache.get(Class);\n \n _cache.set(Class, Wrapper);\n }\n \n function Wrapper() {\n return _construct(Class, arguments, _getPrototypeOf(this).constructor);\n }\n \n Wrapper.prototype = Object.create(Class.prototype, {\n constructor: {\n value: Wrapper,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n return _setPrototypeOf(Wrapper, Class);\n };\n \n return _wrapNativeSuper(Class);\n }\n \n function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n \n return self;\n }\n \n function _possibleConstructorReturn(self, call) {\n if (call && (typeof call === \"object\" || typeof call === \"function\")) {\n return call;\n }\n \n return _assertThisInitialized(self);\n }\n \n function _createSuper(Derived) {\n var hasNativeReflectConstruct = _isNativeReflectConstruct();\n \n return function _createSuperInternal() {\n var Super = _getPrototypeOf(Derived),\n result;\n \n if (hasNativeReflectConstruct) {\n var NewTarget = _getPrototypeOf(this).constructor;\n \n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n \n return _possibleConstructorReturn(this, result);\n };\n }\n \n function _superPropBase(object, property) {\n while (!Object.prototype.hasOwnProperty.call(object, property)) {\n object = _getPrototypeOf(object);\n if (object === null) break;\n }\n \n return object;\n }\n \n function _get(target, property, receiver) {\n if (typeof Reflect !== \"undefined\" && Reflect.get) {\n _get = Reflect.get;\n } else {\n _get = function _get(target, property, receiver) {\n var base = _superPropBase(target, property);\n \n if (!base) return;\n var desc = Object.getOwnPropertyDescriptor(base, property);\n \n if (desc.get) {\n return desc.get.call(receiver);\n }\n \n return desc.value;\n };\n }\n \n return _get(target, property, receiver || target);\n }\n \n function _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n }\n \n function _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n }\n \n function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n }\n \n function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n }\n \n function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter);\n }\n \n function _iterableToArrayLimit(arr, i) {\n if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n \n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n \n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n \n return _arr;\n }\n \n function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n }\n \n function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n \n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n \n return arr2;\n }\n \n function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n \n function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n \n // --- Static ---\n var from = function from() {\n return Array.from.apply(Array, arguments);\n };\n var isArray = function isArray(val) {\n return Array.isArray(val);\n }; // --- Instance ---\n \n var arrayIncludes = function arrayIncludes(array, value) {\n return array.indexOf(value) !== -1;\n };\n var concat = function concat() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n \n return Array.prototype.concat.apply([], args);\n };\n \n var assign = function assign() {\n return Object.assign.apply(Object, arguments);\n };\n var create = function create(proto, optionalProps) {\n return Object.create(proto, optionalProps);\n };\n var defineProperties = function defineProperties(obj, props) {\n return Object.defineProperties(obj, props);\n };\n var defineProperty = function defineProperty(obj, prop, descriptor) {\n return Object.defineProperty(obj, prop, descriptor);\n };\n var freeze = function freeze(obj) {\n return Object.freeze(obj);\n };\n var getOwnPropertyNames = function getOwnPropertyNames(obj) {\n return Object.getOwnPropertyNames(obj);\n };\n var keys = function keys(obj) {\n return Object.keys(obj);\n }; // --- \"Instance\" ---\n \n var hasOwnProperty = function hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n };\n var toString = function toString(obj) {\n return Object.prototype.toString.call(obj);\n }; // --- Utilities ---\n \n /**\n * Quick object check - this is primarily used to tell\n * Objects from primitive values when we know the value\n * is a JSON-compliant type.\n * Note object could be a complex type like array, date, etc.\n */\n \n var isObject = function isObject(obj) {\n return obj !== null && _typeof(obj) === 'object';\n };\n /**\n * Strict object type check. Only returns true\n * for plain JavaScript objects.\n */\n \n var isPlainObject = function isPlainObject(obj) {\n return Object.prototype.toString.call(obj) === '[object Object]';\n };\n /**\n * Shallow copy an object. If the passed in object\n * is null or undefined, returns an empty object\n */\n \n var clone = function clone(obj) {\n return _objectSpread2({}, obj);\n };\n /**\n * Return a shallow copy of object with the specified properties only\n * @link https://gist.github.com/bisubus/2da8af7e801ffd813fab7ac221aa7afc\n */\n \n var pick = function pick(obj, props) {\n return keys(obj).filter(function (key) {\n return props.indexOf(key) !== -1;\n }).reduce(function (result, key) {\n return _objectSpread2(_objectSpread2({}, result), {}, _defineProperty({}, key, obj[key]));\n }, {});\n };\n /**\n * Return a shallow copy of object with the specified properties omitted\n * @link https://gist.github.com/bisubus/2da8af7e801ffd813fab7ac221aa7afc\n */\n \n var omit = function omit(obj, props) {\n return keys(obj).filter(function (key) {\n return props.indexOf(key) === -1;\n }).reduce(function (result, key) {\n return _objectSpread2(_objectSpread2({}, result), {}, _defineProperty({}, key, obj[key]));\n }, {});\n };\n /**\n * Convenience method to create a read-only descriptor\n */\n \n var readonlyDescriptor = function readonlyDescriptor() {\n return {\n enumerable: true,\n configurable: false,\n writable: false\n };\n };\n /**\n * Deep-freezes and object, making it immutable / read-only.\n * Returns the same object passed-in, but frozen.\n * Freezes inner object/array/values first.\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze\n * Note: this method will not work for property values using Symbol() as a key\n */\n \n var deepFreeze = function deepFreeze(obj) {\n // Retrieve the property names defined on object/array\n // Note: `keys` will ignore properties that are keyed by a `Symbol()`\n var props = keys(obj); // Iterate over each prop and recursively freeze it\n \n props.forEach(function (prop) {\n var value = obj[prop]; // If value is a plain object or array, we deepFreeze it\n \n obj[prop] = value && (isPlainObject(value) || isArray(value)) ? deepFreeze(value) : value;\n });\n return freeze(obj);\n };\n \n /**\n * Utilities to get information about the current environment\n */\n // --- Constants ---\n var hasWindowSupport = typeof window !== 'undefined';\n var hasDocumentSupport = typeof document !== 'undefined';\n var hasNavigatorSupport = typeof navigator !== 'undefined';\n var hasPromiseSupport = typeof Promise !== 'undefined';\n /* istanbul ignore next: JSDOM always returns false */\n \n var hasMutationObserverSupport = typeof MutationObserver !== 'undefined' || typeof WebKitMutationObserver !== 'undefined' || typeof MozMutationObserver !== 'undefined';\n var isBrowser = hasWindowSupport && hasDocumentSupport && hasNavigatorSupport; // Browser type sniffing\n \n var userAgent = isBrowser ? window.navigator.userAgent.toLowerCase() : '';\n var isJSDOM = userAgent.indexOf('jsdom') > 0;\n var isIE = /msie|trident/.test(userAgent); // Determine if the browser supports the option passive for events\n \n var hasPassiveEventSupport = function () {\n var passiveEventSupported = false;\n \n if (isBrowser) {\n try {\n var options = {\n get passive() {\n // This function will be called when the browser\n // attempts to access the passive property.\n \n /* istanbul ignore next: will never be called in JSDOM */\n passiveEventSupported = true;\n }\n \n };\n window.addEventListener('test', options, options);\n window.removeEventListener('test', options, options);\n } catch (err) {\n /* istanbul ignore next: will never be called in JSDOM */\n passiveEventSupported = false;\n }\n }\n \n return passiveEventSupported;\n }();\n var hasTouchSupport = isBrowser && ('ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0);\n var hasPointerEventSupport = isBrowser && Boolean(window.PointerEvent || window.MSPointerEvent);\n /* istanbul ignore next: JSDOM only checks for 'IntersectionObserver' */\n \n var hasIntersectionObserverSupport = isBrowser && 'IntersectionObserver' in window && 'IntersectionObserverEntry' in window && // Edge 15 and UC Browser lack support for `isIntersecting`\n // but we an use intersectionRatio > 0 instead\n // 'isIntersecting' in window.IntersectionObserverEntry.prototype &&\n 'intersectionRatio' in window.IntersectionObserverEntry.prototype; // --- Getters ---\n \n var getEnv = function getEnv(key) {\n var fallback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var env = typeof process !== 'undefined' && process ? process.env || {} : {};\n \n if (!key) {\n /* istanbul ignore next */\n return env;\n }\n \n return env[key] || fallback;\n };\n var getNoWarn = function getNoWarn() {\n return getEnv('BOOTSTRAP_VUE_NO_WARN');\n };\n \n var w = hasWindowSupport ? window : {};\n var Element$1 = hasWindowSupport ? w.Element : /*#__PURE__*/function (_Object) {\n _inherits(Element, _Object);\n \n var _super = _createSuper(Element);\n \n function Element() {\n _classCallCheck(this, Element);\n \n return _super.apply(this, arguments);\n }\n \n return Element;\n }( /*#__PURE__*/_wrapNativeSuper(Object));\n var HTMLElement = hasWindowSupport ? w.HTMLElement : /*#__PURE__*/function (_Element) {\n _inherits(HTMLElement, _Element);\n \n var _super2 = _createSuper(HTMLElement);\n \n function HTMLElement() {\n _classCallCheck(this, HTMLElement);\n \n return _super2.apply(this, arguments);\n }\n \n return HTMLElement;\n }(Element$1);\n var SVGElement = hasWindowSupport ? w.SVGElement : /*#__PURE__*/function (_Element2) {\n _inherits(SVGElement, _Element2);\n \n var _super3 = _createSuper(SVGElement);\n \n function SVGElement() {\n _classCallCheck(this, SVGElement);\n \n return _super3.apply(this, arguments);\n }\n \n return SVGElement;\n }(Element$1);\n var File = hasWindowSupport ? w.File : /*#__PURE__*/function (_Object2) {\n _inherits(File, _Object2);\n \n var _super4 = _createSuper(File);\n \n function File() {\n _classCallCheck(this, File);\n \n return _super4.apply(this, arguments);\n }\n \n return File;\n }( /*#__PURE__*/_wrapNativeSuper(Object));\n \n var toType = function toType(val) {\n return _typeof(val);\n };\n var toRawType = function toRawType(val) {\n return Object.prototype.toString.call(val).slice(8, -1);\n };\n var isUndefined = function isUndefined(val) {\n return val === undefined;\n };\n var isNull = function isNull(val) {\n return val === null;\n };\n var isUndefinedOrNull = function isUndefinedOrNull(val) {\n return isUndefined(val) || isNull(val);\n };\n var isFunction = function isFunction(val) {\n return toType(val) === 'function';\n };\n var isBoolean = function isBoolean(val) {\n return toType(val) === 'boolean';\n };\n var isString = function isString(val) {\n return toType(val) === 'string';\n };\n var isNumber = function isNumber(val) {\n return toType(val) === 'number';\n };\n var isDate = function isDate(val) {\n return val instanceof Date;\n };\n var isEvent = function isEvent(val) {\n return val instanceof Event;\n };\n var isFile = function isFile(val) {\n return val instanceof File;\n };\n var isRegExp = function isRegExp(val) {\n return toRawType(val) === 'RegExp';\n };\n var isPromise = function isPromise(val) {\n return !isUndefinedOrNull(val) && isFunction(val.then) && isFunction(val.catch);\n }; // Extra convenience named re-exports\n \n var cloneDeep = function cloneDeep(obj) {\n var defaultValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : obj;\n \n if (isArray(obj)) {\n return obj.reduce(function (result, val) {\n return [].concat(_toConsumableArray(result), [cloneDeep(val, val)]);\n }, []);\n }\n \n if (isPlainObject(obj)) {\n return keys(obj).reduce(function (result, key) {\n return _objectSpread2(_objectSpread2({}, result), {}, _defineProperty({}, key, cloneDeep(obj[key], obj[key])));\n }, {});\n }\n \n return defaultValue;\n };\n \n var identity = function identity(x) {\n return x;\n };\n \n var RX_ARRAY_NOTATION = /\\[(\\d+)]/g;\n /**\n * Get property defined by dot/array notation in string, returns undefined if not found\n *\n * @link https://gist.github.com/jeneg/9767afdcca45601ea44930ea03e0febf#gistcomment-1935901\n *\n * @param {Object} obj\n * @param {string|Array} path\n * @return {*}\n */\n \n var getRaw = function getRaw(obj, path) {\n var defaultValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;\n // Handle array of path values\n path = isArray(path) ? path.join('.') : path; // If no path or no object passed\n \n if (!path || !isObject(obj)) {\n return defaultValue;\n } // Handle edge case where user has dot(s) in top-level item field key\n // See https://github.com/bootstrap-vue/bootstrap-vue/issues/2762\n // Switched to `in` operator vs `hasOwnProperty` to handle obj.prototype getters\n // https://github.com/bootstrap-vue/bootstrap-vue/issues/3463\n \n \n if (path in obj) {\n return obj[path];\n } // Handle string array notation (numeric indices only)\n \n \n path = String(path).replace(RX_ARRAY_NOTATION, '.$1');\n var steps = path.split('.').filter(identity); // Handle case where someone passes a string of only dots\n \n if (steps.length === 0) {\n return defaultValue;\n } // Traverse path in object to find result\n // Switched to `in` operator vs `hasOwnProperty` to handle obj.prototype getters\n // https://github.com/bootstrap-vue/bootstrap-vue/issues/3463\n \n \n return steps.every(function (step) {\n return isObject(obj) && step in obj && !isUndefinedOrNull(obj = obj[step]);\n }) ? obj : isNull(obj) ? null : defaultValue;\n };\n /**\n * Get property defined by dot/array notation in string.\n *\n * @link https://gist.github.com/jeneg/9767afdcca45601ea44930ea03e0febf#gistcomment-1935901\n *\n * @param {Object} obj\n * @param {string|Array} path\n * @param {*} defaultValue (optional)\n * @return {*}\n */\n \n var get = function get(obj, path) {\n var defaultValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var val = getRaw(obj, path);\n return isUndefinedOrNull(val) ? defaultValue : val;\n };\n \n /**\n * Log a warning message to the console with BootstrapVue formatting\n * @param {string} message\n */\n \n var warn = function warn(message)\n /* istanbul ignore next */\n {\n var source = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n \n if (!getNoWarn()) {\n console.warn(\"[BootstrapVue warn]: \".concat(source ? \"\".concat(source, \" - \") : '').concat(message));\n }\n };\n /**\n * Warn when no Promise support is given\n * @param {string} source\n * @returns {boolean} warned\n */\n \n var warnNotClient = function warnNotClient(source) {\n /* istanbul ignore else */\n if (isBrowser) {\n return false;\n } else {\n warn(\"\".concat(source, \": Can not be called during SSR.\"));\n return true;\n }\n };\n /**\n * Warn when no Promise support is given\n * @param {string} source\n * @returns {boolean} warned\n */\n \n var warnNoPromiseSupport = function warnNoPromiseSupport(source) {\n /* istanbul ignore else */\n if (hasPromiseSupport) {\n return false;\n } else {\n warn(\"\".concat(source, \": Requires Promise support.\"));\n return true;\n }\n };\n /**\n * Warn when no MutationObserver support is given\n * @param {string} source\n * @returns {boolean} warned\n */\n \n var warnNoMutationObserverSupport = function warnNoMutationObserverSupport(source) {\n /* istanbul ignore else */\n if (hasMutationObserverSupport) {\n return false;\n } else {\n warn(\"\".concat(source, \": Requires MutationObserver support.\"));\n return true;\n }\n };\n \n // NOTES\n //\n // The global config SHALL NOT be used to set defaults for Boolean props, as the props\n // would loose their semantic meaning, and force people writing 3rd party components to\n // explicitly set a true or false value using the v-bind syntax on boolean props\n //\n // Supported config values (depending on the prop's supported type(s)):\n // `String`, `Array`, `Object`, `null` or `undefined`\n // BREAKPOINT DEFINITIONS\n //\n // Some components (`<b-col>` and `<b-form-group>`) generate props based on breakpoints,\n // and this occurs when the component is first loaded (evaluated), which may happen\n // before the config is created/modified\n //\n // To get around this we make these components' props async (lazy evaluation)\n // The component definition is only called/executed when the first access to the\n // component is used (and cached on subsequent uses)\n // PROP DEFAULTS\n //\n // For default values on props, we use the default value factory function approach so\n // that the default values are pulled in at each component instantiation\n //\n // props: {\n // variant: {\n // type: String,\n // default: () => getConfigComponent('BAlert', 'variant')\n // }\n // }\n //\n // We also provide a cached getter for breakpoints, which are \"frozen\" on first access\n // prettier-ignore\n \n var DEFAULTS = deepFreeze({\n // Breakpoints\n breakpoints: ['xs', 'sm', 'md', 'lg', 'xl'],\n // Form controls\n formControls: {\n size: undefined\n },\n // Component specific defaults are keyed by the component\n // name (PascalCase) and prop name (camelCase)\n BAlert: {\n dismissLabel: 'Close',\n variant: 'info'\n },\n BAvatar: {\n variant: 'secondary',\n badgeVariant: 'primary'\n },\n BBadge: {\n variant: 'secondary'\n },\n BButton: {\n size: undefined,\n variant: 'secondary'\n },\n BButtonClose: {\n content: '×',\n // `textVariant` is `null` to inherit the current text color\n textVariant: undefined,\n ariaLabel: 'Close'\n },\n BCalendar: {\n // BFormDate will choose these first if not provided in BFormDate section\n labelPrevDecade: 'Previous decade',\n labelPrevYear: 'Previous year',\n labelPrevMonth: 'Previous month',\n labelCurrentMonth: 'Current month',\n labelNextMonth: 'Next month',\n labelNextYear: 'Next year',\n labelNextDecade: 'Next decade',\n labelToday: 'Today',\n labelSelected: 'Selected date',\n labelNoDateSelected: 'No date selected',\n labelCalendar: 'Calendar',\n labelNav: 'Calendar navigation',\n labelHelp: 'Use cursor keys to navigate calendar dates'\n },\n BCardSubTitle: {\n // `<b-card>` and `<b-card-body>` also inherit this prop\n subTitleTextVariant: 'muted'\n },\n BCarousel: {\n labelPrev: 'Previous Slide',\n labelNext: 'Next Slide',\n labelGotoSlide: 'Goto Slide',\n labelIndicators: 'Select a slide to display'\n },\n BDropdown: {\n toggleText: 'Toggle Dropdown',\n size: undefined,\n variant: 'secondary',\n splitVariant: undefined\n },\n BFormDatepicker: {\n // BFormDatepicker will choose from BCalendar first if not provided here\n labelPrevDecade: undefined,\n labelPrevYear: undefined,\n labelPrevMonth: undefined,\n labelCurrentMonth: undefined,\n labelNextMonth: undefined,\n labelNextYear: undefined,\n labelNextDecade: undefined,\n labelToday: undefined,\n labelSelected: undefined,\n labelNoDateSelected: undefined,\n labelCalendar: undefined,\n labelNav: undefined,\n labelHelp: undefined,\n // These props are specific to BFormDatepicker\n labelTodayButton: 'Select today',\n labelResetButton: 'Reset',\n labelCloseButton: 'Close'\n },\n BFormFile: {\n browseText: 'Browse',\n // Chrome default file prompt\n placeholder: 'No file chosen',\n dropPlaceholder: 'Drop files here'\n },\n BFormRating: {\n variant: null,\n color: null\n },\n BFormTag: {\n removeLabel: 'Remove tag',\n variant: 'secondary'\n },\n BFormTags: {\n addButtonText: 'Add',\n addButtonVariant: 'outline-secondary',\n duplicateTagText: 'Duplicate tag(s)',\n invalidTagText: 'Invalid tag(s)',\n placeholder: 'Add tag...',\n tagRemoveLabel: 'Remove tag',\n tagRemovedLabel: 'Tag removed',\n tagVariant: 'secondary'\n },\n BFormText: {\n textVariant: 'muted'\n },\n BFormTimepicker: {\n // Fallback to BTime\n labelNoTimeSelected: undefined,\n labelSelected: undefined,\n labelHours: undefined,\n labelMinutes: undefined,\n labelSeconds: undefined,\n labelAmpm: undefined,\n labelAm: undefined,\n labelPm: undefined,\n // Fallback to BTime then BFormSpinbutton\n labelDecrement: undefined,\n labelIncrement: undefined,\n // These props are specific to BFormTimepicker\n labelNowButton: 'Select now',\n labelResetButton: 'Reset',\n labelCloseButton: 'Close'\n },\n BFormSpinbutton: {\n labelDecrement: 'Decrement',\n labelIncrement: 'Increment'\n },\n BImg: {\n blankColor: 'transparent'\n },\n BImgLazy: {\n blankColor: 'transparent'\n },\n BInputGroup: {\n size: undefined\n },\n BJumbotron: {\n bgVariant: undefined,\n borderVariant: undefined,\n textVariant: undefined\n },\n BLink: {\n routerComponentName: undefined\n },\n BListGroupItem: {\n variant: undefined\n },\n BModal: {\n titleTag: 'h5',\n size: 'md',\n headerBgVariant: undefined,\n headerBorderVariant: undefined,\n headerTextVariant: undefined,\n headerCloseVariant: undefined,\n bodyBgVariant: undefined,\n bodyTextVariant: undefined,\n footerBgVariant: undefined,\n footerBorderVariant: undefined,\n footerTextVariant: undefined,\n cancelTitle: 'Cancel',\n cancelVariant: 'secondary',\n okTitle: 'OK',\n okVariant: 'primary',\n headerCloseContent: '×',\n headerCloseLabel: 'Close'\n },\n BNavbar: {\n variant: null\n },\n BNavbarToggle: {\n label: 'Toggle navigation'\n },\n BPagination: {\n size: undefined\n },\n BPaginationNav: {\n size: undefined\n },\n BPopover: {\n boundary: 'scrollParent',\n boundaryPadding: 5,\n customClass: undefined,\n delay: 50,\n variant: undefined\n },\n BProgress: {\n variant: undefined\n },\n BProgressBar: {\n variant: undefined\n },\n BSpinner: {\n variant: undefined\n },\n BSidebar: {\n bgVariant: 'light',\n textVariant: 'dark',\n shadow: false,\n width: undefined,\n tag: 'div',\n backdropVariant: 'dark'\n },\n BTable: {\n selectedVariant: 'active',\n headVariant: undefined,\n footVariant: undefined\n },\n BTime: {\n labelNoTimeSelected: 'No time selected',\n labelSelected: 'Selected time',\n labelHours: 'Hours',\n labelMinutes: 'Minutes',\n labelSeconds: 'Seconds',\n labelAmpm: 'AM/PM',\n // It would be nice to be able to get these from Intl.DateTimeFormat somehow\n labelAm: 'AM',\n labelPm: 'PM',\n // The following inherit from BFormSpinbutton if not provided\n labelIncrement: undefined,\n labelDecrement: undefined\n },\n BToast: {\n toaster: 'b-toaster-top-right',\n autoHideDelay: 5000,\n variant: undefined,\n toastClass: undefined,\n headerClass: undefined,\n bodyClass: undefined\n },\n BToaster: {\n ariaLive: undefined,\n ariaAtomic: undefined,\n role: undefined\n },\n BTooltip: {\n boundary: 'scrollParent',\n boundaryPadding: 5,\n customClass: undefined,\n delay: 50,\n variant: undefined\n }\n });\n \n var NAME = 'BvConfig';\n var PROP_NAME = '$bvConfig'; // Config manager class\n \n var BvConfig = /*#__PURE__*/function () {\n function BvConfig() {\n _classCallCheck(this, BvConfig);\n \n // TODO: pre-populate with default config values (needs updated tests)\n // this.$_config = cloneDeep(DEFAULTS)\n this.$_config = {};\n this.$_cachedBreakpoints = null;\n }\n /* istanbul ignore next */\n \n \n _createClass(BvConfig, [{\n key: \"getDefaults\",\n // Returns the defaults\n \n /* istanbul ignore next */\n value: function getDefaults()\n /* istanbul ignore next */\n {\n return this.defaults;\n } // Method to merge in user config parameters\n \n }, {\n key: \"setConfig\",\n value: function setConfig() {\n var _this = this;\n \n var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n \n if (!isPlainObject(config)) {\n /* istanbul ignore next */\n return;\n }\n \n var configKeys = getOwnPropertyNames(config);\n configKeys.forEach(function (cmpName) {\n /* istanbul ignore next */\n if (!hasOwnProperty(DEFAULTS, cmpName)) {\n warn(\"Unknown config property \\\"\".concat(cmpName, \"\\\"\"), NAME);\n return;\n }\n \n var cmpConfig = config[cmpName];\n \n if (cmpName === 'breakpoints') {\n // Special case for breakpoints\n var breakpoints = config.breakpoints;\n /* istanbul ignore if */\n \n if (!isArray(breakpoints) || breakpoints.length < 2 || breakpoints.some(function (b) {\n return !isString(b) || b.length === 0;\n })) {\n warn('\"breakpoints\" must be an array of at least 2 breakpoint names', NAME);\n } else {\n _this.$_config.breakpoints = cloneDeep(breakpoints);\n }\n } else if (isPlainObject(cmpConfig)) {\n // Component prop defaults\n var props = getOwnPropertyNames(cmpConfig);\n props.forEach(function (prop) {\n /* istanbul ignore if */\n if (!hasOwnProperty(DEFAULTS[cmpName], prop)) {\n warn(\"Unknown config property \\\"\".concat(cmpName, \".\").concat(prop, \"\\\"\"), NAME);\n } else {\n // TODO: If we pre-populate the config with defaults, we can skip this line\n _this.$_config[cmpName] = _this.$_config[cmpName] || {};\n \n if (!isUndefined(cmpConfig[prop])) {\n _this.$_config[cmpName][prop] = cloneDeep(cmpConfig[prop]);\n }\n }\n });\n }\n });\n } // Clear the config. For testing purposes only\n \n }, {\n key: \"resetConfig\",\n value: function resetConfig() {\n this.$_config = {};\n } // Returns a deep copy of the user config\n \n }, {\n key: \"getConfig\",\n value: function getConfig() {\n return cloneDeep(this.$_config);\n }\n }, {\n key: \"getConfigValue\",\n value: function getConfigValue(key) {\n // First we try the user config, and if key not found we fall back to default value\n // NOTE: If we deep clone DEFAULTS into config, then we can skip the fallback for get\n return cloneDeep(getRaw(this.$_config, key, getRaw(DEFAULTS, key)));\n }\n }, {\n key: \"defaults\",\n \n /* istanbul ignore next */\n get: function get()\n /* istanbul ignore next */\n {\n return DEFAULTS;\n }\n }], [{\n key: \"Defaults\",\n get: function get()\n /* istanbul ignore next */\n {\n return DEFAULTS;\n }\n }]);\n \n return BvConfig;\n }(); // Method for applying a global config\n \n \n var setConfig = function setConfig() {\n var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var Vue$1 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Vue;\n // Ensure we have a $bvConfig Object on the Vue prototype.\n // We set on Vue and OurVue just in case consumer has not set an alias of `vue`.\n Vue$1.prototype[PROP_NAME] = Vue.prototype[PROP_NAME] = Vue$1.prototype[PROP_NAME] || Vue.prototype[PROP_NAME] || new BvConfig(); // Apply the config values\n \n Vue$1.prototype[PROP_NAME].setConfig(config);\n }; // Method for resetting the user config. Exported for testing purposes only.\n \n /**\n * Checks if there are multiple instances of Vue, and warns (once) about possible issues.\n * @param {object} Vue\n */\n \n var checkMultipleVue = function () {\n var checkMultipleVueWarned = false;\n var MULTIPLE_VUE_WARNING = ['Multiple instances of Vue detected!', 'You may need to set up an alias for Vue in your bundler config.', 'See: https://bootstrap-vue.org/docs#using-module-bundlers'].join('\\n');\n return function (Vue$1) {\n /* istanbul ignore next */\n if (!checkMultipleVueWarned && Vue !== Vue$1 && !isJSDOM) {\n warn(MULTIPLE_VUE_WARNING);\n }\n \n checkMultipleVueWarned = true;\n };\n }();\n /**\n * Plugin install factory function.\n * @param {object} { components, directives }\n * @returns {function} plugin install function\n */\n \n var installFactory = function installFactory() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n components = _ref.components,\n directives = _ref.directives,\n plugins = _ref.plugins;\n \n var install = function install(Vue) {\n var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n \n if (install.installed) {\n /* istanbul ignore next */\n return;\n }\n \n install.installed = true;\n checkMultipleVue(Vue);\n setConfig(config, Vue);\n registerComponents(Vue, components);\n registerDirectives(Vue, directives);\n registerPlugins(Vue, plugins);\n };\n \n install.installed = false;\n return install;\n };\n /**\n * Plugin object factory function.\n * @param {object} { components, directives, plugins }\n * @returns {object} plugin install object\n */\n \n var pluginFactory = function pluginFactory() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var extend = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return _objectSpread2(_objectSpread2({}, extend), {}, {\n install: installFactory(options)\n });\n };\n /**\n * Load a group of plugins.\n * @param {object} Vue\n * @param {object} Plugin definitions\n */\n \n var registerPlugins = function registerPlugins(Vue) {\n var plugins = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n \n for (var plugin in plugins) {\n if (plugin && plugins[plugin]) {\n Vue.use(plugins[plugin]);\n }\n }\n };\n /**\n * Load a component.\n * @param {object} Vue\n * @param {string} Component name\n * @param {object} Component definition\n */\n \n var registerComponent = function registerComponent(Vue, name, def) {\n if (Vue && name && def) {\n Vue.component(name, def);\n }\n };\n /**\n * Load a group of components.\n * @param {object} Vue\n * @param {object} Object of component definitions\n */\n \n var registerComponents = function registerComponents(Vue) {\n var components = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n \n for (var component in components) {\n registerComponent(Vue, component, components[component]);\n }\n };\n /**\n * Load a directive.\n * @param {object} Vue\n * @param {string} Directive name\n * @param {object} Directive definition\n */\n \n var registerDirective = function registerDirective(Vue, name, def) {\n if (Vue && name && def) {\n // Ensure that any leading V is removed from the\n // name, as Vue adds it automatically\n Vue.directive(name.replace(/^VB/, 'B'), def);\n }\n };\n /**\n * Load a group of directives.\n * @param {object} Vue\n * @param {object} Object of directive definitions\n */\n \n var registerDirectives = function registerDirectives(Vue) {\n var directives = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n \n for (var directive in directives) {\n registerDirective(Vue, directive, directives[directive]);\n }\n };\n /**\n * Install plugin if window.Vue available\n * @param {object} Plugin definition\n */\n \n var vueUse = function vueUse(VuePlugin) {\n /* istanbul ignore next */\n if (hasWindowSupport && window.Vue) {\n window.Vue.use(VuePlugin);\n }\n /* istanbul ignore next */\n \n \n if (hasWindowSupport && VuePlugin.NAME) {\n window[VuePlugin.NAME] = VuePlugin;\n }\n };\n \n var memoize = function memoize(fn) {\n var cache = create(null);\n return function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n \n var argsKey = JSON.stringify(args);\n return cache[argsKey] = cache[argsKey] || fn.apply(null, args);\n };\n };\n \n var PROP_NAME$1 = '$bvConfig';\n var VueProto = Vue.prototype; // --- Getter methods ---\n \n var getConfigValue = function getConfigValue(key) {\n return VueProto[PROP_NAME$1] ? VueProto[PROP_NAME$1].getConfigValue(key) : cloneDeep(getRaw(DEFAULTS, key));\n }; // Method to grab a config value for a particular component\n \n var getComponentConfig = function getComponentConfig(cmpName) {\n var key = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n // Return the particular config value for key for if specified,\n // otherwise we return the full config (or an empty object if not found)\n return key ? getConfigValue(\"\".concat(cmpName, \".\").concat(key)) : getConfigValue(cmpName) || {};\n }; // Convenience method for getting all breakpoint names\n \n var getBreakpoints = function getBreakpoints() {\n return getConfigValue('breakpoints');\n }; // Private function for caching / locking-in breakpoint names\n \n var _getBreakpointsCached = memoize(function () {\n return getBreakpoints();\n }); // Convenience method for getting all breakpoint names.\n // Caches the results after first access.\n \n \n var getBreakpointsCached = function getBreakpointsCached() {\n return cloneDeep(_getBreakpointsCached());\n }; // Convenience method for getting breakpoints with\n // the smallest breakpoint set as ''.\n // Useful for components that create breakpoint specific props.\n // Caches the results after first access.\n \n var getBreakpointsUpCached = memoize(function () {\n var breakpoints = getBreakpointsCached();\n breakpoints[0] = '';\n return breakpoints;\n }); // Convenience method for getting breakpoints with\n \n // Number utilities\n // Converts a value (string, number, etc) to an integer number\n // Assumes radix base 10\n var toInteger = function toInteger(value) {\n var defaultValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : NaN;\n var integer = parseInt(value, 10);\n return isNaN(integer) ? defaultValue : integer;\n }; // Converts a value (string, number, etc) to a number\n \n var toFloat = function toFloat(value) {\n var defaultValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : NaN;\n var float = parseFloat(value);\n return isNaN(float) ? defaultValue : float;\n }; // Converts a value (string, number, etc) to a string\n // representation with `precision` digits after the decimal\n // Returns the string 'NaN' if the value cannot be converted\n \n var toFixed = function toFixed(val, precision) {\n return toFloat(val).toFixed(toInteger(precision, 0));\n };\n \n // String utilities\n \n var RX_TRIM_LEFT = /^\\s+/;\n var RX_REGEXP_REPLACE = /[-/\\\\^$*+?.()|[\\]{}]/g;\n var RX_UN_KEBAB = /-(\\w)/g;\n var RX_HYPHENATE = /\\B([A-Z])/g; // --- Utilities ---\n // Converts PascalCase or camelCase to kebab-case\n \n var kebabCase = function kebabCase(str) {\n return str.replace(RX_HYPHENATE, '-$1').toLowerCase();\n }; // Converts a kebab-case or camelCase string to PascalCase\n \n var pascalCase = function pascalCase(str) {\n str = kebabCase(str).replace(RX_UN_KEBAB, function (_, c) {\n return c ? c.toUpperCase() : '';\n });\n return str.charAt(0).toUpperCase() + str.slice(1);\n }; // Lowercases the first letter of a string and returns a new string\n \n var lowerFirst = function lowerFirst(str) {\n str = isString(str) ? str.trim() : String(str);\n return str.charAt(0).toLowerCase() + str.slice(1);\n }; // Uppercases the first letter of a string and returns a new string\n \n var upperFirst = function upperFirst(str) {\n str = isString(str) ? str.trim() : String(str);\n return str.charAt(0).toUpperCase() + str.slice(1);\n }; // Escape characters to be used in building a regular expression\n \n var escapeRegExp = function escapeRegExp(str) {\n return str.replace(RX_REGEXP_REPLACE, '\\\\$&');\n }; // Convert a value to a string that can be rendered\n // `undefined`/`null` will be converted to `''`\n // Plain objects and arrays will be JSON stringified\n \n var toString$1 = function toString(val) {\n var spaces = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2;\n return isUndefinedOrNull(val) ? '' : isArray(val) || isPlainObject(val) && val.toString === Object.prototype.toString ? JSON.stringify(val, null, spaces) : String(val);\n }; // Remove leading white space from a string\n \n var trimLeft = function trimLeft(str) {\n return toString$1(str).replace(RX_TRIM_LEFT, '');\n }; // Remove Trailing white space from a string\n \n var trim = function trim(str) {\n return toString$1(str).trim();\n }; // Lower case a string\n \n var lowerCase = function lowerCase(str) {\n return toString$1(str).toLowerCase();\n }; // Upper case a string\n \n var TABABLE_SELECTOR = ['button', '[href]:not(.disabled)', 'input', 'select', 'textarea', '[tabindex]', '[contenteditable]'].map(function (s) {\n return \"\".concat(s, \":not(:disabled):not([disabled])\");\n }).join(', ');\n var w$1 = hasWindowSupport ? window : {};\n var d = hasDocumentSupport ? document : {};\n var elProto = typeof Element !== 'undefined' ? Element.prototype : {}; // --- Normalization utils ---\n // See: https://developer.mozilla.org/en-US/docs/Web/API/Element/matches#Polyfill\n \n /* istanbul ignore next */\n \n var matchesEl = elProto.matches || elProto.msMatchesSelector || elProto.webkitMatchesSelector; // See: https://developer.mozilla.org/en-US/docs/Web/API/Element/closest\n \n /* istanbul ignore next */\n \n var closestEl = elProto.closest || function (sel)\n /* istanbul ignore next */\n {\n var el = this;\n \n do {\n // Use our \"patched\" matches function\n if (matches(el, sel)) {\n return el;\n }\n \n el = el.parentElement || el.parentNode;\n } while (!isNull(el) && el.nodeType === Node.ELEMENT_NODE);\n \n return null;\n }; // `requestAnimationFrame()` convenience method\n \n /* istanbul ignore next: JSDOM always returns the first option */\n \n var requestAF = w$1.requestAnimationFrame || w$1.webkitRequestAnimationFrame || w$1.mozRequestAnimationFrame || w$1.msRequestAnimationFrame || w$1.oRequestAnimationFrame || // Fallback, but not a true polyfill\n // Only needed for Opera Mini\n \n /* istanbul ignore next */\n function (cb) {\n return setTimeout(cb, 16);\n };\n var MutationObs = w$1.MutationObserver || w$1.WebKitMutationObserver || w$1.MozMutationObserver || null; // --- Utils ---\n // Remove a node from DOM\n \n var removeNode = function removeNode(el) {\n return el && el.parentNode && el.parentNode.removeChild(el);\n }; // Determine if an element is an HTML element\n \n var isElement = function isElement(el) {\n return !!(el && el.nodeType === Node.ELEMENT_NODE);\n }; // Get the currently active HTML element\n \n var getActiveElement = function getActiveElement() {\n var excludes = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var activeElement = d.activeElement;\n return activeElement && !excludes.some(function (el) {\n return el === activeElement;\n }) ? activeElement : null;\n }; // Returns `true` if a tag's name equals `name`\n \n var isTag = function isTag(tag, name) {\n return toString$1(tag).toLowerCase() === toString$1(name).toLowerCase();\n }; // Determine if an HTML element is the currently active element\n \n var isActiveElement = function isActiveElement(el) {\n return isElement(el) && el === getActiveElement();\n }; // Determine if an HTML element is visible - Faster than CSS check\n \n var isVisible = function isVisible(el) {\n if (!isElement(el) || !el.parentNode || !contains(d.body, el)) {\n // Note this can fail for shadow dom elements since they\n // are not a direct descendant of document.body\n return false;\n }\n \n if (el.style.display === 'none') {\n // We do this check to help with vue-test-utils when using v-show\n \n /* istanbul ignore next */\n return false;\n } // All browsers support getBoundingClientRect(), except JSDOM as it returns all 0's for values :(\n // So any tests that need isVisible will fail in JSDOM\n // Except when we override the getBCR prototype in some tests\n \n \n var bcr = getBCR(el);\n return !!(bcr && bcr.height > 0 && bcr.width > 0);\n }; // Determine if an element is disabled\n \n var isDisabled = function isDisabled(el) {\n return !isElement(el) || el.disabled || hasAttr(el, 'disabled') || hasClass(el, 'disabled');\n }; // Cause/wait-for an element to reflow its content (adjusting its height/width)\n \n var reflow = function reflow(el) {\n // Requesting an elements offsetHight will trigger a reflow of the element content\n \n /* istanbul ignore next: reflow doesn't happen in JSDOM */\n return isElement(el) && el.offsetHeight;\n }; // Select all elements matching selector. Returns `[]` if none found\n \n var selectAll = function selectAll(selector, root) {\n return from((isElement(root) ? root : d).querySelectorAll(selector));\n }; // Select a single element, returns `null` if not found\n \n var select = function select(selector, root) {\n return (isElement(root) ? root : d).querySelector(selector) || null;\n }; // Determine if an element matches a selector\n \n var matches = function matches(el, selector) {\n return isElement(el) ? matchesEl.call(el, selector) : false;\n }; // Finds closest element matching selector. Returns `null` if not found\n \n var closest = function closest(selector, root) {\n var includeRoot = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n \n if (!isElement(root)) {\n return null;\n }\n \n var el = closestEl.call(root, selector); // Native closest behaviour when `includeRoot` is truthy,\n // else emulate jQuery closest and return `null` if match is\n // the passed in root element when `includeRoot` is falsey\n \n return includeRoot ? el : el === root ? null : el;\n }; // Returns true if the parent element contains the child element\n \n var contains = function contains(parent, child) {\n return parent && isFunction(parent.contains) ? parent.contains(child) : false;\n }; // Get an element given an ID\n \n var getById = function getById(id) {\n return d.getElementById(/^#/.test(id) ? id.slice(1) : id) || null;\n }; // Add a class to an element\n \n var addClass = function addClass(el, className) {\n // We are checking for `el.classList` existence here since IE 11\n // returns `undefined` for some elements (e.g. SVG elements)\n // See https://github.com/bootstrap-vue/bootstrap-vue/issues/2713\n if (className && isElement(el) && el.classList) {\n el.classList.add(className);\n }\n }; // Remove a class from an element\n \n var removeClass = function removeClass(el, className) {\n // We are checking for `el.classList` existence here since IE 11\n // returns `undefined` for some elements (e.g. SVG elements)\n // See https://github.com/bootstrap-vue/bootstrap-vue/issues/2713\n if (className && isElement(el) && el.classList) {\n el.classList.remove(className);\n }\n }; // Test if an element has a class\n \n var hasClass = function hasClass(el, className) {\n // We are checking for `el.classList` existence here since IE 11\n // returns `undefined` for some elements (e.g. SVG elements)\n // See https://github.com/bootstrap-vue/bootstrap-vue/issues/2713\n if (className && isElement(el) && el.classList) {\n return el.classList.contains(className);\n }\n \n return false;\n }; // Set an attribute on an element\n \n var setAttr = function setAttr(el, attr, val) {\n if (attr && isElement(el)) {\n el.setAttribute(attr, val);\n }\n }; // Remove an attribute from an element\n \n var removeAttr = function removeAttr(el, attr) {\n if (attr && isElement(el)) {\n el.removeAttribute(attr);\n }\n }; // Get an attribute value from an element\n // Returns `null` if not found\n \n var getAttr = function getAttr(el, attr) {\n return attr && isElement(el) ? el.getAttribute(attr) : null;\n }; // Determine if an attribute exists on an element\n // Returns `true` or `false`, or `null` if element not found\n \n var hasAttr = function hasAttr(el, attr) {\n return attr && isElement(el) ? el.hasAttribute(attr) : null;\n }; // Return the Bounding Client Rect of an element\n // Returns `null` if not an element\n \n /* istanbul ignore next: getBoundingClientRect() doesn't work in JSDOM */\n \n var getBCR = function getBCR(el) {\n return isElement(el) ? el.getBoundingClientRect() : null;\n }; // Get computed style object for an element\n \n /* istanbul ignore next: getComputedStyle() doesn't work in JSDOM */\n \n var getCS = function getCS(el) {\n return hasWindowSupport && isElement(el) ? w$1.getComputedStyle(el) : {};\n }; // Returns a `Selection` object representing the range of text selected\n // Returns `null` if no window support is given\n \n /* istanbul ignore next: getSelection() doesn't work in JSDOM */\n \n var getSel = function getSel() {\n return hasWindowSupport && w$1.getSelection ? w$1.getSelection() : null;\n }; // Return an element's offset with respect to document element\n // https://j11y.io/jquery/#v=git&fn=jQuery.fn.offset\n \n var offset = function offset(el)\n /* istanbul ignore next: getBoundingClientRect(), getClientRects() doesn't work in JSDOM */\n {\n var _offset = {\n top: 0,\n left: 0\n };\n \n if (!isElement(el) || el.getClientRects().length === 0) {\n return _offset;\n }\n \n var bcr = getBCR(el);\n \n if (bcr) {\n var win = el.ownerDocument.defaultView;\n _offset.top = bcr.top + win.pageYOffset;\n _offset.left = bcr.left + win.pageXOffset;\n }\n \n return _offset;\n }; // Return an element's offset with respect to to its offsetParent\n // https://j11y.io/jquery/#v=git&fn=jQuery.fn.position\n \n var position = function position(el)\n /* istanbul ignore next: getBoundingClientRect() doesn't work in JSDOM */\n {\n var _offset = {\n top: 0,\n left: 0\n };\n \n if (!isElement(el)) {\n return _offset;\n }\n \n var parentOffset = {\n top: 0,\n left: 0\n };\n var elStyles = getCS(el);\n \n if (elStyles.position === 'fixed') {\n _offset = getBCR(el) || _offset;\n } else {\n _offset = offset(el);\n var doc = el.ownerDocument;\n var offsetParent = el.offsetParent || doc.documentElement;\n \n while (offsetParent && (offsetParent === doc.body || offsetParent === doc.documentElement) && getCS(offsetParent).position === 'static') {\n offsetParent = offsetParent.parentNode;\n }\n \n if (offsetParent && offsetParent !== el && offsetParent.nodeType === Node.ELEMENT_NODE) {\n parentOffset = offset(offsetParent);\n var offsetParentStyles = getCS(offsetParent);\n parentOffset.top += toFloat(offsetParentStyles.borderTopWidth, 0);\n parentOffset.left += toFloat(offsetParentStyles.borderLeftWidth, 0);\n }\n }\n \n return {\n top: _offset.top - parentOffset.top - toFloat(elStyles.marginTop, 0),\n left: _offset.left - parentOffset.left - toFloat(elStyles.marginLeft, 0)\n };\n }; // Find all tabable elements in the given element\n // Assumes users have not used `tabindex` > `0` on elements\n \n var getTabables = function getTabables() {\n var rootEl = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : document;\n return selectAll(TABABLE_SELECTOR, rootEl).filter(isVisible).filter(function (el) {\n return el.tabIndex > -1 && !el.disabled;\n });\n }; // Attempt to focus an element, and return `true` if successful\n \n var attemptFocus = function attemptFocus(el) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n \n try {\n el.focus(options);\n } catch (_unused) {}\n \n return isActiveElement(el);\n }; // Attempt to blur an element, and return `true` if successful\n \n var attemptBlur = function attemptBlur(el) {\n try {\n el.blur();\n } catch (_unused2) {}\n \n return !isActiveElement(el);\n };\n \n var e=function(){return (e=Object.assign||function(e){for(var t,r=1,s=arguments.length;r<s;r++)for(var a in t=arguments[r])Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e}).apply(this,arguments)},t={kebab:/-(\\w)/g,styleProp:/:(.*)/,styleList:/;(?![^(]*\\))/g};function r(e,t){return t?t.toUpperCase():\"\"}function s(e){for(var s,a={},c=0,o=e.split(t.styleList);c<o.length;c++){var n=o[c].split(t.styleProp),i=n[0],l=n[1];(i=i.trim())&&(\"string\"==typeof l&&(l=l.trim()),a[(s=i,s.replace(t.kebab,r))]=l);}return a}function a(){for(var t,r,a={},c=arguments.length;c--;)for(var o=0,n=Object.keys(arguments[c]);o<n.length;o++)switch(t=n[o]){case\"class\":case\"style\":case\"directives\":if(Array.isArray(a[t])||(a[t]=[]),\"style\"===t){var i=void 0;i=Array.isArray(arguments[c].style)?arguments[c].style:[arguments[c].style];for(var l=0;l<i.length;l++){var y=i[l];\"string\"==typeof y&&(i[l]=s(y));}arguments[c].style=i;}a[t]=a[t].concat(arguments[c][t]);break;case\"staticClass\":if(!arguments[c][t])break;void 0===a[t]&&(a[t]=\"\"),a[t]&&(a[t]+=\" \"),a[t]+=arguments[c][t].trim();break;case\"on\":case\"nativeOn\":a[t]||(a[t]={});for(var p=0,f=Object.keys(arguments[c][t]||{});p<f.length;p++)r=f[p],a[t][r]?a[t][r]=[].concat(a[t][r],arguments[c][t][r]):a[t][r]=arguments[c][t][r];break;case\"attrs\":case\"props\":case\"domProps\":case\"scopedSlots\":case\"staticStyle\":case\"hook\":case\"transition\":a[t]||(a[t]={}),a[t]=e({},arguments[c][t],a[t]);break;case\"slot\":case\"key\":case\"ref\":case\"tag\":case\"show\":case\"keepAlive\":default:a[t]||(a[t]=arguments[c][t]);}return a}\n \n var NO_FADE_PROPS = {\n name: '',\n enterClass: '',\n enterActiveClass: '',\n enterToClass: 'show',\n leaveClass: 'show',\n leaveActiveClass: '',\n leaveToClass: ''\n };\n \n var FADE_PROPS = _objectSpread2(_objectSpread2({}, NO_FADE_PROPS), {}, {\n enterActiveClass: 'fade',\n leaveActiveClass: 'fade'\n }); // @vue/component\n \n \n var BVTransition = /*#__PURE__*/Vue.extend({\n name: 'BVTransition',\n functional: true,\n props: {\n noFade: {\n // Only applicable to the built in transition\n // Has no effect if `trans-props` provided\n type: Boolean,\n default: false\n },\n appear: {\n // Has no effect if `trans-props` provided\n type: Boolean,\n default: false\n },\n mode: {\n // Can be overridden by user supplied trans-props\n type: String // default: undefined\n \n },\n // For user supplied transitions (if needed)\n transProps: {\n type: Object,\n default: null\n }\n },\n render: function render(h, _ref) {\n var children = _ref.children,\n data = _ref.data,\n props = _ref.props;\n var transProps = props.transProps;\n \n if (!isPlainObject(transProps)) {\n transProps = props.noFade ? NO_FADE_PROPS : FADE_PROPS;\n \n if (props.appear) {\n // Default the appear classes to equal the enter classes\n transProps = _objectSpread2(_objectSpread2({}, transProps), {}, {\n appear: true,\n appearClass: transProps.enterClass,\n appearActiveClass: transProps.enterActiveClass,\n appearToClass: transProps.enterToClass\n });\n }\n }\n \n transProps = _objectSpread2(_objectSpread2({\n mode: props.mode\n }, transProps), {}, {\n // We always need `css` true\n css: true\n });\n return h('transition', // Any transition event listeners will get merged here\n a(data, {\n props: transProps\n }), children);\n }\n });\n \n // In functional components, `slots` is a function so it must be called\n // first before passing to the below methods. `scopedSlots` is always an\n // object and may be undefined (for Vue < 2.6.x)\n \n /**\n * Returns true if either scoped or unscoped named slot exists\n *\n * @param {String, Array} name or name[]\n * @param {Object} scopedSlots\n * @param {Object} slots\n * @returns {Array|undefined} VNodes\n */\n \n var hasNormalizedSlot = function hasNormalizedSlot(names) {\n var $scopedSlots = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var $slots = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n // Ensure names is an array\n names = concat(names).filter(identity); // Returns true if the either a $scopedSlot or $slot exists with the specified name\n \n return names.some(function (name) {\n return $scopedSlots[name] || $slots[name];\n });\n };\n /**\n * Returns VNodes for named slot either scoped or unscoped\n *\n * @param {String, Array} name or name[]\n * @param {String} scope\n * @param {Object} scopedSlots\n * @param {Object} slots\n * @returns {Array|undefined} VNodes\n */\n \n \n var normalizeSlot = function normalizeSlot(names) {\n var scope = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var $scopedSlots = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var $slots = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n // Ensure names is an array\n names = concat(names).filter(identity);\n var slot;\n \n for (var i = 0; i < names.length && !slot; i++) {\n var name = names[i];\n slot = $scopedSlots[name] || $slots[name];\n } // Note: in Vue 2.6.x, all named slots are also scoped slots\n \n \n return isFunction(slot) ? slot(scope) : slot;\n }; // Named exports\n \n var normalizeSlotMixin = {\n methods: {\n hasNormalizedSlot: function hasNormalizedSlot$1(names) {\n // Returns true if the either a $scopedSlot or $slot exists with the specified name\n // `names` can be a string name or an array of names\n return hasNormalizedSlot(names, this.$scopedSlots, this.$slots);\n },\n normalizeSlot: function normalizeSlot$1(names) {\n var scope = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n \n // Returns an array of rendered VNodes if slot found.\n // Returns undefined if not found.\n // `names` can be a string name or an array of names\n var vNodes = normalizeSlot(names, scope, this.$scopedSlots, this.$slots);\n \n return vNodes ? concat(vNodes) : vNodes;\n }\n }\n };\n \n var NAME$1 = 'BButtonClose';\n var props = {\n content: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$1, 'content');\n }\n },\n disabled: {\n type: Boolean,\n default: false\n },\n ariaLabel: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$1, 'ariaLabel');\n }\n },\n textVariant: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$1, 'textVariant');\n }\n }\n }; // @vue/component\n \n var BButtonClose = /*#__PURE__*/Vue.extend({\n name: NAME$1,\n functional: true,\n props: props,\n render: function render(h, _ref) {\n var props = _ref.props,\n data = _ref.data,\n slots = _ref.slots,\n scopedSlots = _ref.scopedSlots;\n var $slots = slots();\n var $scopedSlots = scopedSlots || {};\n var componentData = {\n staticClass: 'close',\n class: _defineProperty({}, \"text-\".concat(props.textVariant), props.textVariant),\n attrs: {\n type: 'button',\n disabled: props.disabled,\n 'aria-label': props.ariaLabel ? String(props.ariaLabel) : null\n },\n on: {\n click: function click(evt) {\n // Ensure click on button HTML content is also disabled\n \n /* istanbul ignore if: bug in JSDOM still emits click on inner element */\n if (props.disabled && isEvent(evt)) {\n evt.stopPropagation();\n evt.preventDefault();\n }\n }\n }\n }; // Careful not to override the default slot with innerHTML\n \n if (!hasNormalizedSlot('default', $scopedSlots, $slots)) {\n componentData.domProps = {\n innerHTML: props.content\n };\n }\n \n return h('button', a(data, componentData), normalizeSlot('default', {}, $scopedSlots, $slots));\n }\n });\n \n var NAME$2 = 'BAlert'; // Convert `show` value to a number\n \n var parseCountDown = function parseCountDown(show) {\n if (show === '' || isBoolean(show)) {\n return 0;\n }\n \n show = toInteger(show, 0);\n return show > 0 ? show : 0;\n }; // Convert `show` value to a boolean\n \n \n var parseShow = function parseShow(show) {\n if (show === '' || show === true) {\n return true;\n }\n \n if (toInteger(show, 0) < 1) {\n // Boolean will always return false for the above comparison\n return false;\n }\n \n return !!show;\n }; // Is a value number like (i.e. a number or a number as string)\n \n \n var isNumericLike = function isNumericLike(value) {\n return !isNaN(toInteger(value));\n }; // @vue/component\n \n \n var BAlert = /*#__PURE__*/Vue.extend({\n name: NAME$2,\n mixins: [normalizeSlotMixin],\n model: {\n prop: 'show',\n event: 'input'\n },\n props: {\n variant: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$2, 'variant');\n }\n },\n dismissible: {\n type: Boolean,\n default: false\n },\n dismissLabel: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$2, 'dismissLabel');\n }\n },\n show: {\n type: [Boolean, Number, String],\n default: false\n },\n fade: {\n type: Boolean,\n default: false\n }\n },\n data: function data() {\n return {\n countDown: 0,\n countDownTimeout: null,\n // If initially shown, we need to set these for SSR\n localShow: parseShow(this.show)\n };\n },\n watch: {\n show: function show(newVal) {\n this.countDown = parseCountDown(newVal);\n this.localShow = parseShow(newVal);\n },\n countDown: function countDown(newVal) {\n var _this = this;\n \n this.clearCountDownInterval();\n \n if (isNumericLike(this.show)) {\n // Ignore if this.show transitions to a boolean value.\n this.$emit('dismiss-count-down', newVal);\n \n if (this.show !== newVal) {\n // Update the v-model if needed\n this.$emit('input', newVal);\n }\n \n if (newVal > 0) {\n this.localShow = true;\n this.countDownTimeout = setTimeout(function () {\n _this.countDown--;\n }, 1000);\n } else {\n // Slightly delay the hide to allow any UI updates\n this.$nextTick(function () {\n requestAF(function () {\n _this.localShow = false;\n });\n });\n }\n }\n },\n localShow: function localShow(newVal) {\n if (!newVal && (this.dismissible || isNumericLike(this.show))) {\n // Only emit dismissed events for dismissible or auto dismissing alerts\n this.$emit('dismissed');\n }\n \n if (!isNumericLike(this.show) && this.show !== newVal) {\n // Only emit booleans if we weren't passed a number via `this.show`\n this.$emit('input', newVal);\n }\n }\n },\n created: function created() {\n this.countDown = parseCountDown(this.show);\n this.localShow = parseShow(this.show);\n },\n mounted: function mounted() {\n this.countDown = parseCountDown(this.show);\n this.localShow = parseShow(this.show);\n },\n beforeDestroy: function beforeDestroy() {\n this.clearCountDownInterval();\n },\n methods: {\n dismiss: function dismiss() {\n this.clearCountDownInterval();\n this.countDown = 0;\n this.localShow = false;\n },\n clearCountDownInterval: function clearCountDownInterval() {\n if (this.countDownTimeout) {\n clearTimeout(this.countDownTimeout);\n this.countDownTimeout = null;\n }\n }\n },\n render: function render(h) {\n var $alert; // undefined\n \n if (this.localShow) {\n var $dismissBtn = h();\n \n if (this.dismissible) {\n // Add dismiss button\n $dismissBtn = h(BButtonClose, {\n attrs: {\n 'aria-label': this.dismissLabel\n },\n on: {\n click: this.dismiss\n }\n }, [this.normalizeSlot('dismiss')]);\n }\n \n $alert = h('div', {\n key: this._uid,\n staticClass: 'alert',\n class: _defineProperty({\n 'alert-dismissible': this.dismissible\n }, \"alert-\".concat(this.variant), this.variant),\n attrs: {\n role: 'alert',\n 'aria-live': 'polite',\n 'aria-atomic': true\n }\n }, [$dismissBtn, this.normalizeSlot('default')]);\n $alert = [$alert];\n }\n \n return h(BVTransition, {\n props: {\n noFade: !this.fade\n }\n }, $alert);\n }\n });\n \n var AlertPlugin = /*#__PURE__*/pluginFactory({\n components: {\n BAlert: BAlert\n }\n });\n \n // Math utilty functions\n var mathMin = Math.min;\n var mathMax = Math.max;\n var mathAbs = Math.abs;\n var mathCeil = Math.ceil;\n var mathFloor = Math.floor;\n var mathPow = Math.pow;\n var mathRound = Math.round;\n \n var NAME$3 = 'BAspect';\n var CLASS_NAME = 'b-aspect';\n var RX_ASPECT = /^\\d+(\\.\\d*)?[/:]\\d+(\\.\\d*)?$/;\n var RX_SEPARATOR = /[/:]/; // --- Main Component ---\n \n var BAspect = /*#__PURE__*/Vue.extend({\n name: NAME$3,\n mixins: [normalizeSlotMixin],\n props: {\n aspect: {\n // Accepts a number (i.e. `16 / 9`, `1`, `4 / 3`)\n // Or a string (i.e. '16/9', '16:9', '4:3' '1:1')\n type: [Number, String],\n default: '1:1'\n },\n tag: {\n type: String,\n default: 'div'\n }\n },\n computed: {\n padding: function padding() {\n var aspect = this.aspect;\n var ratio = 1;\n \n if (RX_ASPECT.test(aspect)) {\n // Width and/or Height can be a decimal value below `1`, so\n // we only fallback to `1` if the value is `0` or `NaN`\n var _aspect$split$map = aspect.split(RX_SEPARATOR).map(function (v) {\n return toFloat(v) || 1;\n }),\n _aspect$split$map2 = _slicedToArray(_aspect$split$map, 2),\n width = _aspect$split$map2[0],\n height = _aspect$split$map2[1];\n \n ratio = width / height;\n } else {\n ratio = toFloat(aspect) || 1;\n }\n \n return \"\".concat(100 / mathAbs(ratio), \"%\");\n }\n },\n render: function render(h) {\n var $sizer = h('div', {\n staticClass: \"\".concat(CLASS_NAME, \"-sizer flex-grow-1\"),\n style: {\n paddingBottom: this.padding,\n height: 0\n }\n });\n var $content = h('div', {\n staticClass: \"\".concat(CLASS_NAME, \"-content flex-grow-1 w-100 mw-100\"),\n style: {\n marginLeft: '-100%'\n }\n }, [this.normalizeSlot('default')]);\n return h(this.tag, {\n staticClass: \"\".concat(CLASS_NAME, \" d-flex\")\n }, [$sizer, $content]);\n }\n });\n \n var AspectPlugin = /*#__PURE__*/pluginFactory({\n components: {\n BAspect: BAspect\n }\n });\n \n var prefixPropName = function prefixPropName(prefix, value) {\n return prefix + upperFirst(value);\n }; // Remove a prefix from a property\n \n var unprefixPropName = function unprefixPropName(prefix, value) {\n return lowerFirst(value.replace(prefix, ''));\n }; // Suffix can be a falsey value so nothing is appended to string\n // (helps when looping over props & some shouldn't change)\n // Use data last parameters to allow for currying\n \n var suffixPropName = function suffixPropName(suffix, str) {\n return str + (suffix ? upperFirst(suffix) : '');\n }; // Copies props from one array/object to a new array/object\n // Prop values are also cloned as new references to prevent possible\n // mutation of original prop object values\n // Optionally accepts a function to transform the prop name\n \n var copyProps = function copyProps(props) {\n var transformFn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : identity;\n \n if (isArray(props)) {\n return props.map(transformFn);\n }\n \n var copied = {};\n \n for (var prop in props) {\n /* istanbul ignore else */\n if (hasOwnProperty(props, prop)) {\n // If the prop value is an object, do a shallow clone\n // to prevent potential mutations to the original object\n copied[transformFn(prop)] = isObject(props[prop]) ? clone(props[prop]) : props[prop];\n }\n }\n \n return copied;\n }; // Given an array of properties or an object of property keys,\n // plucks all the values off the target object, returning a new object\n // that has props that reference the original prop values\n \n var pluckProps = function pluckProps(keysToPluck, objToPluck) {\n var transformFn = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : identity;\n return (isArray(keysToPluck) ? keysToPluck.slice() : keys(keysToPluck)).reduce(function (memo, prop) {\n memo[transformFn(prop)] = objToPluck[prop];\n return memo;\n }, {});\n };\n \n var ANCHOR_TAG = 'a'; // Precompile RegExp\n \n var commaRE = /%2C/g;\n var encodeReserveRE = /[!'()*]/g;\n var plusRE = /\\+/g;\n var queryStartRE = /^(\\?|#|&)/; // Method to replace reserved chars\n \n var encodeReserveReplacer = function encodeReserveReplacer(c) {\n return '%' + c.charCodeAt(0).toString(16);\n }; // Fixed encodeURIComponent which is more conformant to RFC3986:\n // - escapes [!'()*]\n // - preserve commas\n \n \n var encode = function encode(str) {\n return encodeURIComponent(toString$1(str)).replace(encodeReserveRE, encodeReserveReplacer).replace(commaRE, ',');\n };\n \n var decode = decodeURIComponent; // Stringifies an object of query parameters\n // See: https://github.com/vuejs/vue-router/blob/dev/src/util/query.js\n \n var stringifyQueryObj = function stringifyQueryObj(obj) {\n if (!isPlainObject(obj)) {\n return '';\n }\n \n var query = keys(obj).map(function (key) {\n var val = obj[key];\n \n if (isUndefined(val)) {\n return '';\n } else if (isNull(val)) {\n return encode(key);\n } else if (isArray(val)) {\n return val.reduce(function (results, val2) {\n if (isNull(val2)) {\n results.push(encode(key));\n } else if (!isUndefined(val2)) {\n // Faster than string interpolation\n results.push(encode(key) + '=' + encode(val2));\n }\n \n return results;\n }, []).join('&');\n } // Faster than string interpolation\n \n \n return encode(key) + '=' + encode(val);\n })\n /* must check for length, as we only want to filter empty strings, not things that look falsey! */\n .filter(function (x) {\n return x.length > 0;\n }).join('&');\n return query ? \"?\".concat(query) : '';\n };\n var parseQuery = function parseQuery(query) {\n var parsed = {};\n query = toString$1(query).trim().replace(queryStartRE, '');\n \n if (!query) {\n return parsed;\n }\n \n query.split('&').forEach(function (param) {\n var parts = param.replace(plusRE, ' ').split('=');\n var key = decode(parts.shift());\n var val = parts.length > 0 ? decode(parts.join('=')) : null;\n \n if (isUndefined(parsed[key])) {\n parsed[key] = val;\n } else if (isArray(parsed[key])) {\n parsed[key].push(val);\n } else {\n parsed[key] = [parsed[key], val];\n }\n });\n return parsed;\n };\n var isLink = function isLink(props) {\n return !!(props.href || props.to);\n };\n var isRouterLink = function isRouterLink(tag) {\n return !isTag(tag, ANCHOR_TAG);\n };\n var computeTag = function computeTag() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n to = _ref.to,\n disabled = _ref.disabled,\n routerComponentName = _ref.routerComponentName;\n \n var thisOrParent = arguments.length > 1 ? arguments[1] : undefined;\n var hasRouter = thisOrParent.$router;\n \n if (!hasRouter || hasRouter && disabled || hasRouter && !to) {\n return ANCHOR_TAG;\n } // TODO:\n // Check registered components for existence of user supplied router link component name\n // We would need to check PascalCase, kebab-case, and camelCase versions of name:\n // const name = routerComponentName\n // const names = [name, PascalCase(name), KebabCase(name), CamelCase(name)]\n // exists = names.some(name => !!thisOrParent.$options.components[name])\n // And may want to cache the result for performance or we just let the render fail\n // if the component is not registered\n \n \n return routerComponentName || (thisOrParent.$nuxt ? 'nuxt-link' : 'router-link');\n };\n var computeRel = function computeRel() {\n var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n target = _ref2.target,\n rel = _ref2.rel;\n \n if (target === '_blank' && isNull(rel)) {\n return 'noopener';\n }\n \n return rel || null;\n };\n var computeHref = function computeHref() {\n var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n href = _ref3.href,\n to = _ref3.to;\n \n var tag = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ANCHOR_TAG;\n var fallback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '#';\n var toFallback = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '/';\n \n // We've already checked the $router in computeTag(), so isRouterLink() indicates a live router.\n // When deferring to Vue Router's router-link, don't use the href attribute at all.\n // We return null, and then remove href from the attributes passed to router-link\n if (isRouterLink(tag)) {\n return null;\n } // Return `href` when explicitly provided\n \n \n if (href) {\n return href;\n } // Reconstruct `href` when `to` used, but no router\n \n \n if (to) {\n // Fallback to `to` prop (if `to` is a string)\n if (isString(to)) {\n return to || toFallback;\n } // Fallback to `to.path + to.query + to.hash` prop (if `to` is an object)\n \n \n if (isPlainObject(to) && (to.path || to.query || to.hash)) {\n var path = toString$1(to.path);\n var query = stringifyQueryObj(to.query);\n var hash = toString$1(to.hash);\n hash = !hash || hash.charAt(0) === '#' ? hash : \"#\".concat(hash);\n return \"\".concat(path).concat(query).concat(hash) || toFallback;\n }\n } // If nothing is provided return the fallback\n \n \n return fallback;\n };\n \n /*\n * Key Codes (events)\n */\n var KEY_CODES = freeze({\n SPACE: 32,\n ENTER: 13,\n ESC: 27,\n LEFT: 37,\n UP: 38,\n RIGHT: 39,\n DOWN: 40,\n PAGEUP: 33,\n PAGEDOWN: 34,\n HOME: 36,\n END: 35,\n TAB: 9,\n SHIFT: 16,\n CTRL: 17,\n BACKSPACE: 8,\n ALT: 18,\n PAUSE: 19,\n BREAK: 19,\n INSERT: 45,\n INS: 45,\n DELETE: 46\n });\n \n var makePropWatcher = function makePropWatcher(propName) {\n return {\n handler: function handler(newVal, oldVal) {\n for (var key in oldVal) {\n if (!hasOwnProperty(newVal, key)) {\n this.$delete(this.$data[propName], key);\n }\n }\n \n for (var _key in newVal) {\n this.$set(this.$data[propName], _key, newVal[_key]);\n }\n }\n };\n };\n var makePropCacheMixin = function makePropCacheMixin(propName, proxyPropName) {\n return {\n data: function data() {\n return _defineProperty({}, proxyPropName, {});\n },\n watch: _defineProperty({}, propName, makePropWatcher(proxyPropName)),\n created: function created() {\n this[proxyPropName] = _objectSpread2({}, this[propName]);\n }\n };\n };\n \n var attrsMixin = makePropCacheMixin('$attrs', 'bvAttrs');\n \n var listenersMixin = makePropCacheMixin('$listeners', 'bvListeners');\n \n var NAME$4 = 'BLink'; // --- Props ---\n // <router-link> specific props\n \n var routerLinkProps = {\n to: {\n type: [String, Object],\n default: null\n },\n append: {\n type: Boolean,\n default: false\n },\n replace: {\n type: Boolean,\n default: false\n },\n event: {\n type: [String, Array],\n default: 'click'\n },\n activeClass: {\n type: String // default: undefined\n \n },\n exact: {\n type: Boolean,\n default: false\n },\n exactActiveClass: {\n type: String // default: undefined\n \n },\n routerTag: {\n type: String,\n default: 'a'\n }\n }; // <nuxt-link> specific props\n \n var nuxtLinkProps = {\n prefetch: {\n type: Boolean,\n // Must be `null` to fall back to the value defined in the\n // `nuxt.config.js` configuration file for `router.prefetchLinks`\n // We convert `null` to `undefined`, so that Nuxt.js will use the\n // compiled default. Vue treats `undefined` as default of `false`\n // for Boolean props, so we must set it as `null` here to be a\n // true tri-state prop\n default: null\n },\n noPrefetch: {\n type: Boolean,\n default: false\n }\n };\n var props$1 = _objectSpread2(_objectSpread2(_objectSpread2({\n href: {\n type: String,\n default: null\n },\n rel: {\n type: String,\n // Must be `null` if no value provided\n default: null\n },\n target: {\n type: String,\n default: '_self'\n },\n active: {\n type: Boolean,\n default: false\n },\n disabled: {\n type: Boolean,\n default: false\n }\n }, routerLinkProps), nuxtLinkProps), {}, {\n // To support 3rd party router links based on `<router-link>` (i.e. `g-link` for Gridsome)\n // Default is to auto choose between `<router-link>` and `<nuxt-link>`\n // Gridsome doesn't provide a mechanism to auto detect and has caveats\n // such as not supporting FQDN URLs or hash only URLs\n routerComponentName: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$4, 'routerComponentName');\n }\n }\n }); // --- Main component ---\n // @vue/component\n \n var BLink = /*#__PURE__*/Vue.extend({\n name: 'BLink',\n // Mixin order is important!\n mixins: [attrsMixin, listenersMixin, normalizeSlotMixin],\n inheritAttrs: false,\n props: props$1,\n computed: {\n computedTag: function computedTag() {\n // We don't pass `this` as the first arg as we need reactivity of the props\n var to = this.to,\n disabled = this.disabled,\n routerComponentName = this.routerComponentName;\n return computeTag({\n to: to,\n disabled: disabled,\n routerComponentName: routerComponentName\n }, this);\n },\n isRouterLink: function isRouterLink$1() {\n return isRouterLink(this.computedTag);\n },\n computedRel: function computedRel() {\n // We don't pass `this` as the first arg as we need reactivity of the props\n return computeRel({\n target: this.target,\n rel: this.rel\n });\n },\n computedHref: function computedHref() {\n // We don't pass `this` as the first arg as we need reactivity of the props\n return computeHref({\n to: this.to,\n href: this.href\n }, this.computedTag);\n },\n computedProps: function computedProps() {\n var prefetch = this.prefetch;\n return this.isRouterLink ? _objectSpread2(_objectSpread2({}, pluckProps(_objectSpread2(_objectSpread2({}, routerLinkProps), nuxtLinkProps), this)), {}, {\n // Coerce `prefetch` value `null` to be `undefined`\n prefetch: isBoolean(prefetch) ? prefetch : undefined,\n // Pass `router-tag` as `tag` prop\n tag: this.routerTag\n }) : {};\n },\n computedAttrs: function computedAttrs() {\n var bvAttrs = this.bvAttrs,\n href = this.computedHref,\n rel = this.computedRel,\n disabled = this.disabled,\n target = this.target,\n routerTag = this.routerTag,\n isRouterLink = this.isRouterLink;\n return _objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2({}, bvAttrs), href ? {\n href: href\n } : {}), isRouterLink && routerTag !== 'a' && routerTag !== 'area' ? {} : {\n rel: rel,\n target: target\n }), {}, {\n tabindex: disabled ? '-1' : isUndefined(bvAttrs.tabindex) ? null : bvAttrs.tabindex,\n 'aria-disabled': disabled ? 'true' : null\n });\n },\n computedListeners: function computedListeners() {\n return _objectSpread2(_objectSpread2({}, this.bvListeners), {}, {\n // We want to overwrite any click handler since our callback\n // will invoke the user supplied handler(s) if `!this.disabled`\n click: this.onClick\n });\n }\n },\n methods: {\n onClick: function onClick(evt) {\n var _arguments = arguments;\n var evtIsEvent = isEvent(evt);\n var isRouterLink = this.isRouterLink;\n var suppliedHandler = this.bvListeners.click;\n \n if (evtIsEvent && this.disabled) {\n // Stop event from bubbling up\n evt.stopPropagation(); // Kill the event loop attached to this specific `EventTarget`\n // Needed to prevent `vue-router` for doing its thing\n \n evt.stopImmediatePropagation();\n } else {\n /* istanbul ignore next: difficult to test, but we know it works */\n if (isRouterLink && evt.currentTarget.__vue__) {\n // Router links do not emit instance `click` events, so we\n // add in an `$emit('click', evt)` on its Vue instance\n evt.currentTarget.__vue__.$emit('click', evt);\n } // Call the suppliedHandler(s), if any provided\n \n \n concat(suppliedHandler).filter(function (h) {\n return isFunction(h);\n }).forEach(function (handler) {\n handler.apply(void 0, _toConsumableArray(_arguments));\n }); // Emit the global `$root` click event\n \n this.$root.$emit('clicked::link', evt);\n } // Stop scroll-to-top behavior or navigation on\n // regular links when href is just '#'\n \n \n if (evtIsEvent && (this.disabled || !isRouterLink && this.computedHref === '#')) {\n evt.preventDefault();\n }\n },\n focus: function focus() {\n attemptFocus(this.$el);\n },\n blur: function blur() {\n attemptBlur(this.$el);\n }\n },\n render: function render(h) {\n var active = this.active,\n disabled = this.disabled;\n return h(this.computedTag, _defineProperty({\n class: {\n active: active,\n disabled: disabled\n },\n attrs: this.computedAttrs,\n props: this.computedProps\n }, this.isRouterLink ? 'nativeOn' : 'on', this.computedListeners), this.normalizeSlot('default'));\n }\n });\n \n var NAME$5 = 'BButton'; // --- Props ---\n \n var linkProps = omit(props$1, ['event', 'routerTag']);\n delete linkProps.href.default;\n delete linkProps.to.default;\n var btnProps = {\n block: {\n type: Boolean,\n default: false\n },\n disabled: {\n type: Boolean,\n default: false\n },\n size: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$5, 'size');\n }\n },\n variant: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$5, 'variant');\n }\n },\n type: {\n type: String,\n default: 'button'\n },\n tag: {\n type: String,\n default: 'button'\n },\n pill: {\n type: Boolean,\n default: false\n },\n squared: {\n type: Boolean,\n default: false\n },\n pressed: {\n // Tri-state: `true`, `false` or `null`\n // => On, off, not a toggle\n type: Boolean,\n default: null\n }\n };\n var props$2 = _objectSpread2(_objectSpread2({}, btnProps), linkProps); // --- Helper methods ---\n // Focus handler for toggle buttons\n // Needs class of 'focus' when focused\n \n var handleFocus = function handleFocus(evt) {\n if (evt.type === 'focusin') {\n addClass(evt.target, 'focus');\n } else if (evt.type === 'focusout') {\n removeClass(evt.target, 'focus');\n }\n }; // Is the requested button a link?\n // If tag prop is set to `a`, we use a <b-link> to get proper disabled handling\n \n \n var isLink$1 = function isLink$1(props) {\n return isLink(props) || isTag(props.tag, 'a');\n }; // Is the button to be a toggle button?\n \n \n var isToggle = function isToggle(props) {\n return isBoolean(props.pressed);\n }; // Is the button \"really\" a button?\n \n \n var isButton = function isButton(props) {\n return !(isLink$1(props) || props.tag && !isTag(props.tag, 'button'));\n }; // Is the requested tag not a button or link?\n \n \n var isNonStandardTag = function isNonStandardTag(props) {\n return !isLink$1(props) && !isButton(props);\n }; // Compute required classes (non static classes)\n \n \n var computeClass = function computeClass(props) {\n var _ref;\n \n return [\"btn-\".concat(props.variant || getComponentConfig(NAME$5, 'variant')), (_ref = {}, _defineProperty(_ref, \"btn-\".concat(props.size), props.size), _defineProperty(_ref, 'btn-block', props.block), _defineProperty(_ref, 'rounded-pill', props.pill), _defineProperty(_ref, 'rounded-0', props.squared && !props.pill), _defineProperty(_ref, \"disabled\", props.disabled), _defineProperty(_ref, \"active\", props.pressed), _ref)];\n }; // Compute the link props to pass to b-link (if required)\n \n \n var computeLinkProps = function computeLinkProps(props) {\n return isLink$1(props) ? pluckProps(linkProps, props) : {};\n }; // Compute the attributes for a button\n \n \n var computeAttrs = function computeAttrs(props, data) {\n var button = isButton(props);\n var link = isLink$1(props);\n var toggle = isToggle(props);\n var nonStandardTag = isNonStandardTag(props);\n var hashLink = link && props.href === '#';\n var role = data.attrs && data.attrs.role ? data.attrs.role : null;\n var tabindex = data.attrs ? data.attrs.tabindex : null;\n \n if (nonStandardTag || hashLink) {\n tabindex = '0';\n }\n \n return {\n // Type only used for \"real\" buttons\n type: button && !link ? props.type : null,\n // Disabled only set on \"real\" buttons\n disabled: button ? props.disabled : null,\n // We add a role of button when the tag is not a link or button for ARIA\n // Don't bork any role provided in `data.attrs` when `isLink` or `isButton`\n // Except when link has `href` of `#`\n role: nonStandardTag || hashLink ? 'button' : role,\n // We set the `aria-disabled` state for non-standard tags\n 'aria-disabled': nonStandardTag ? String(props.disabled) : null,\n // For toggles, we need to set the pressed state for ARIA\n 'aria-pressed': toggle ? String(props.pressed) : null,\n // `autocomplete=\"off\"` is needed in toggle mode to prevent some browsers\n // from remembering the previous setting when using the back button\n autocomplete: toggle ? 'off' : null,\n // `tabindex` is used when the component is not a button\n // Links are tabbable, but don't allow disabled, while non buttons or links\n // are not tabbable, so we mimic that functionality by disabling tabbing\n // when disabled, and adding a `tabindex=\"0\"` to non buttons or non links\n tabindex: props.disabled && !button ? '-1' : tabindex\n };\n }; // --- Main component ---\n // @vue/component\n \n \n var BButton = /*#__PURE__*/Vue.extend({\n name: NAME$5,\n functional: true,\n props: props$2,\n render: function render(h, _ref2) {\n var props = _ref2.props,\n data = _ref2.data,\n listeners = _ref2.listeners,\n children = _ref2.children;\n var toggle = isToggle(props);\n var link = isLink$1(props);\n var nonStandardTag = isNonStandardTag(props);\n var hashLink = link && props.href === '#';\n var on = {\n keydown: function keydown(evt) {\n // When the link is a `href=\"#\"` or a non-standard tag (has `role=\"button\"`),\n // we add a keydown handlers for SPACE/ENTER\n \n /* istanbul ignore next */\n if (props.disabled || !(nonStandardTag || hashLink)) {\n return;\n }\n \n var keyCode = evt.keyCode; // Add SPACE handler for `href=\"#\"` and ENTER handler for non-standard tags\n \n if (keyCode === KEY_CODES.SPACE || keyCode === KEY_CODES.ENTER && nonStandardTag) {\n var target = evt.currentTarget || evt.target;\n evt.preventDefault();\n target.click();\n }\n },\n click: function click(evt) {\n /* istanbul ignore if: blink/button disabled should handle this */\n if (props.disabled && isEvent(evt)) {\n evt.stopPropagation();\n evt.preventDefault();\n } else if (toggle && listeners && listeners['update:pressed']) {\n // Send `.sync` updates to any \"pressed\" prop (if `.sync` listeners)\n // `concat()` will normalize the value to an array without\n // double wrapping an array value in an array\n concat(listeners['update:pressed']).forEach(function (fn) {\n if (isFunction(fn)) {\n fn(!props.pressed);\n }\n });\n }\n }\n };\n \n if (toggle) {\n on.focusin = handleFocus;\n on.focusout = handleFocus;\n }\n \n var componentData = {\n staticClass: 'btn',\n class: computeClass(props),\n props: computeLinkProps(props),\n attrs: computeAttrs(props, data),\n on: on\n };\n return h(link ? BLink : props.tag, a(data, componentData), children);\n }\n });\n \n var commonIconProps = {\n variant: {\n type: String,\n default: null\n },\n fontScale: {\n type: [Number, String],\n default: 1\n },\n scale: {\n type: [Number, String],\n default: 1\n },\n rotate: {\n type: [Number, String],\n default: 0\n },\n flipH: {\n type: Boolean,\n default: false\n },\n flipV: {\n type: Boolean,\n default: false\n },\n shiftH: {\n type: [Number, String],\n default: 0\n },\n shiftV: {\n type: [Number, String],\n default: 0\n },\n animation: {\n type: String,\n default: null\n }\n }; // Base attributes needed on all icons\n \n var baseAttrs = {\n viewBox: '0 0 16 16',\n width: '1em',\n height: '1em',\n focusable: 'false',\n role: 'img',\n 'aria-label': 'icon'\n }; // Attributes that are nulled out when stacked\n \n var stackedAttrs = {\n width: null,\n height: null,\n focusable: null,\n role: null,\n 'aria-label': null\n }; // Shared private base component to reduce bundle/runtime size\n // @vue/component\n \n var BVIconBase = /*#__PURE__*/Vue.extend({\n name: 'BVIconBase',\n functional: true,\n props: _objectSpread2({\n content: {\n type: String\n },\n stacked: {\n type: Boolean,\n default: false\n }\n }, commonIconProps),\n render: function render(h, _ref) {\n var _class;\n \n var data = _ref.data,\n props = _ref.props,\n children = _ref.children;\n var fontScale = mathMax(toFloat(props.fontScale, 1), 0) || 1;\n var scale = mathMax(toFloat(props.scale, 1), 0) || 1;\n var rotate = toFloat(props.rotate, 0);\n var shiftH = toFloat(props.shiftH, 0);\n var shiftV = toFloat(props.shiftV, 0);\n var flipH = props.flipH;\n var flipV = props.flipV;\n var animation = props.animation; // Compute the transforms\n // Note that order is important as SVG transforms are applied in order from\n // left to right and we want flipping/scale to occur before rotation\n // Note shifting is applied separately\n // Assumes that the viewbox is `0 0 16 16` (`8 8` is the center)\n \n var hasScale = flipH || flipV || scale !== 1;\n var hasTransforms = hasScale || rotate;\n var hasShift = shiftH || shiftV;\n var transforms = [hasTransforms ? 'translate(8 8)' : null, hasScale ? \"scale(\".concat((flipH ? -1 : 1) * scale, \" \").concat((flipV ? -1 : 1) * scale, \")\") : null, rotate ? \"rotate(\".concat(rotate, \")\") : null, hasTransforms ? 'translate(-8 -8)' : null].filter(identity); // Handling stacked icons\n \n var isStacked = props.stacked;\n var hasContent = !isUndefinedOrNull(props.content); // We wrap the content in a `<g>` for handling the transforms (except shift)\n \n var $inner = h('g', {\n attrs: {\n transform: transforms.join(' ') || null\n },\n domProps: hasContent ? {\n innerHTML: props.content || ''\n } : {}\n }, children); // If needed, we wrap in an additional `<g>` in order to handle the shifting\n \n if (hasShift) {\n $inner = h('g', {\n attrs: {\n transform: \"translate(\".concat(16 * shiftH / 16, \" \").concat(-16 * shiftV / 16, \")\")\n }\n }, [$inner]);\n }\n \n if (isStacked) {\n // Wrap in an additional `<g>` for proper\n // animation handling if stacked\n $inner = h('g', {}, [$inner]);\n }\n \n return h('svg', a({\n staticClass: 'b-icon bi',\n class: (_class = {}, _defineProperty(_class, \"text-\".concat(props.variant), !!props.variant), _defineProperty(_class, \"b-icon-animation-\".concat(animation), !!animation), _class),\n attrs: baseAttrs,\n style: isStacked ? {} : {\n fontSize: fontScale === 1 ? null : \"\".concat(fontScale * 100, \"%\")\n }\n }, // Merge in user supplied data\n data, // If icon is stacked, null out some attrs\n isStacked ? {\n attrs: stackedAttrs\n } : {}, // These cannot be overridden by users\n {\n attrs: {\n xmlns: isStacked ? null : 'http://www.w3.org/2000/svg',\n fill: 'currentColor'\n }\n }), [$inner]);\n }\n });\n \n /**\n * Icon component generator function\n *\n * @param {string} icon name (minus the leading `BIcon`)\n * @param {string} raw `innerHTML` for SVG\n * @return {VueComponent}\n */\n \n var makeIcon = function makeIcon(name, content) {\n // For performance reason we pre-compute some values, so that\n // they are not computed on each render of the icon component\n var kebabName = kebabCase(name);\n var iconName = \"BIcon\".concat(pascalCase(name));\n var iconNameClass = \"bi-\".concat(kebabName);\n var svgContent = trim(content || ''); // Return the icon component definition\n \n return /*#__PURE__*/Vue.extend({\n name: iconName,\n functional: true,\n props: _objectSpread2(_objectSpread2({}, commonIconProps), {}, {\n stacked: {\n type: Boolean,\n default: false\n }\n }),\n render: function render(h, _ref) {\n var data = _ref.data,\n props = _ref.props;\n return h(BVIconBase, a(data, {\n staticClass: iconNameClass,\n props: _objectSpread2(_objectSpread2({}, props), {}, {\n content: svgContent\n }),\n attrs: {\n 'aria-label': kebabName.replace(/-/g, ' ')\n }\n }));\n }\n });\n };\n \n // --- BEGIN AUTO-GENERATED FILE ---\n var BIconBlank=/*#__PURE__*/makeIcon('Blank','');// --- Bootstrap Icons ---\n var BIconCalendar=/*#__PURE__*/makeIcon('Calendar','<path fill-rule=\"evenodd\" d=\"M1 4v10a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V4H1zm1-3a2 2 0 0 0-2 2v11a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2H2z\"/><path fill-rule=\"evenodd\" d=\"M3.5 0a.5.5 0 0 1 .5.5V1a.5.5 0 0 1-1 0V.5a.5.5 0 0 1 .5-.5zm9 0a.5.5 0 0 1 .5.5V1a.5.5 0 0 1-1 0V.5a.5.5 0 0 1 .5-.5z\"/>');// eslint-disable-next-line\n var BIconCalendarFill=/*#__PURE__*/makeIcon('CalendarFill','<path fill-rule=\"evenodd\" d=\"M3.5 0a.5.5 0 0 1 .5.5V1a.5.5 0 0 1-1 0V.5a.5.5 0 0 1 .5-.5zm9 0a.5.5 0 0 1 .5.5V1a.5.5 0 0 1-1 0V.5a.5.5 0 0 1 .5-.5z\"/><path d=\"M2 1a2 2 0 0 0-2 2v1h16V3a2 2 0 0 0-2-2H2zm14 4H0v9a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V5z\"/>');// eslint-disable-next-line\n var BIconChevronBarLeft=/*#__PURE__*/makeIcon('ChevronBarLeft','<path fill-rule=\"evenodd\" d=\"M11.854 3.646a.5.5 0 0 1 0 .708L8.207 8l3.647 3.646a.5.5 0 0 1-.708.708l-4-4a.5.5 0 0 1 0-.708l4-4a.5.5 0 0 1 .708 0zM4.5 1a.5.5 0 0 0-.5.5v13a.5.5 0 0 0 1 0v-13a.5.5 0 0 0-.5-.5z\"/>');// eslint-disable-next-line\n var BIconChevronDoubleLeft=/*#__PURE__*/makeIcon('ChevronDoubleLeft','<path fill-rule=\"evenodd\" d=\"M8.354 1.646a.5.5 0 0 1 0 .708L2.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z\"/><path fill-rule=\"evenodd\" d=\"M12.354 1.646a.5.5 0 0 1 0 .708L6.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z\"/>');// eslint-disable-next-line\n var BIconChevronDown=/*#__PURE__*/makeIcon('ChevronDown','<path fill-rule=\"evenodd\" d=\"M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z\"/>');// eslint-disable-next-line\n var BIconChevronLeft=/*#__PURE__*/makeIcon('ChevronLeft','<path fill-rule=\"evenodd\" d=\"M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z\"/>');// eslint-disable-next-line\n var BIconChevronUp=/*#__PURE__*/makeIcon('ChevronUp','<path fill-rule=\"evenodd\" d=\"M7.646 4.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1-.708.708L8 5.707l-5.646 5.647a.5.5 0 0 1-.708-.708l6-6z\"/>');// eslint-disable-next-line\n var BIconCircleFill=/*#__PURE__*/makeIcon('CircleFill','<circle cx=\"8\" cy=\"8\" r=\"8\"/>');// eslint-disable-next-line\n var BIconClock=/*#__PURE__*/makeIcon('Clock','<path fill-rule=\"evenodd\" d=\"M8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14zm8-7A8 8 0 1 1 0 8a8 8 0 0 1 16 0z\"/><path fill-rule=\"evenodd\" d=\"M7.5 3a.5.5 0 0 1 .5.5v5.21l3.248 1.856a.5.5 0 0 1-.496.868l-3.5-2A.5.5 0 0 1 7 9V3.5a.5.5 0 0 1 .5-.5z\"/>');// eslint-disable-next-line\n var BIconClockFill=/*#__PURE__*/makeIcon('ClockFill','<path fill-rule=\"evenodd\" d=\"M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zM8 3.5a.5.5 0 0 0-1 0V9a.5.5 0 0 0 .252.434l3.5 2a.5.5 0 0 0 .496-.868L8 8.71V3.5z\"/>');// eslint-disable-next-line\n var BIconDash=/*#__PURE__*/makeIcon('Dash','<path fill-rule=\"evenodd\" d=\"M3.5 8a.5.5 0 0 1 .5-.5h8a.5.5 0 0 1 0 1H4a.5.5 0 0 1-.5-.5z\"/>');// eslint-disable-next-line\n var BIconPersonFill=/*#__PURE__*/makeIcon('PersonFill','<path fill-rule=\"evenodd\" d=\"M3 14s-1 0-1-1 1-4 6-4 6 3 6 4-1 1-1 1H3zm5-6a3 3 0 1 0 0-6 3 3 0 0 0 0 6z\"/>');// eslint-disable-next-line\n var BIconPlus=/*#__PURE__*/makeIcon('Plus','<path fill-rule=\"evenodd\" d=\"M8 3.5a.5.5 0 0 1 .5.5v4a.5.5 0 0 1-.5.5H4a.5.5 0 0 1 0-1h3.5V4a.5.5 0 0 1 .5-.5z\"/><path fill-rule=\"evenodd\" d=\"M7.5 8a.5.5 0 0 1 .5-.5h4a.5.5 0 0 1 0 1H8.5V12a.5.5 0 0 1-1 0V8z\"/>');// eslint-disable-next-line\n var BIconStar=/*#__PURE__*/makeIcon('Star','<path fill-rule=\"evenodd\" d=\"M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.523-3.356c.329-.314.158-.888-.283-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767l-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288l1.847-3.658 1.846 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.564.564 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z\"/>');// eslint-disable-next-line\n var BIconStarFill=/*#__PURE__*/makeIcon('StarFill','<path d=\"M3.612 15.443c-.386.198-.824-.149-.746-.592l.83-4.73L.173 6.765c-.329-.314-.158-.888.283-.95l4.898-.696L7.538.792c.197-.39.73-.39.927 0l2.184 4.327 4.898.696c.441.062.612.636.283.95l-3.523 3.356.83 4.73c.078.443-.36.79-.746.592L8 13.187l-4.389 2.256z\"/>');// eslint-disable-next-line\n var BIconStarHalf=/*#__PURE__*/makeIcon('StarHalf','<path fill-rule=\"evenodd\" d=\"M5.354 5.119L7.538.792A.516.516 0 0 1 8 .5c.183 0 .366.097.465.292l2.184 4.327 4.898.696A.537.537 0 0 1 16 6.32a.55.55 0 0 1-.17.445l-3.523 3.356.83 4.73c.078.443-.36.79-.746.592L8 13.187l-4.389 2.256a.519.519 0 0 1-.146.05c-.341.06-.668-.254-.6-.642l.83-4.73L.173 6.765a.55.55 0 0 1-.171-.403.59.59 0 0 1 .084-.302.513.513 0 0 1 .37-.245l4.898-.696zM8 12.027c.08 0 .16.018.232.056l3.686 1.894-.694-3.957a.564.564 0 0 1 .163-.505l2.906-2.77-4.052-.576a.525.525 0 0 1-.393-.288L8.002 2.223 8 2.226v9.8z\"/>');// eslint-disable-next-line\n var BIconX=/*#__PURE__*/makeIcon('X','<path fill-rule=\"evenodd\" d=\"M11.854 4.146a.5.5 0 0 1 0 .708l-7 7a.5.5 0 0 1-.708-.708l7-7a.5.5 0 0 1 .708 0z\"/><path fill-rule=\"evenodd\" d=\"M4.146 4.146a.5.5 0 0 0 0 .708l7 7a.5.5 0 0 0 .708-.708l-7-7a.5.5 0 0 0-.708 0z\"/>');// eslint-disable-next-line\n // --- END AUTO-GENERATED FILE ---\n \n var RX_ICON_PREFIX = /^BIcon/; // Helper BIcon component\n // Requires the requested icon component to be installed\n \n var BIcon = /*#__PURE__*/Vue.extend({\n name: 'BIcon',\n functional: true,\n props: _objectSpread2(_objectSpread2({\n icon: {\n type: String,\n default: null\n }\n }, commonIconProps), {}, {\n stacked: {\n type: Boolean,\n default: false\n }\n }),\n render: function render(h, _ref) {\n var data = _ref.data,\n props = _ref.props,\n parent = _ref.parent;\n var icon = pascalCase(trim(props.icon || '')).replace(RX_ICON_PREFIX, '');\n var iconName = \"BIcon\".concat(icon); // If parent context exists, we check to see if the icon has been registered\n // Either locally in the parent component, or globally at the `$root` level\n // If not registered, we render a blank icon\n \n var components = ((parent || {}).$options || {}).components;\n var componentRefOrName = icon && components ? components[iconName] || BIconBlank : icon ? iconName : BIconBlank;\n return h(componentRefOrName, a(data, {\n props: _objectSpread2(_objectSpread2({}, props), {}, {\n icon: null\n })\n }));\n }\n });\n \n var NAME$6 = 'BAvatar';\n var CLASS_NAME$1 = 'b-avatar';\n var RX_NUMBER = /^[0-9]*\\.?[0-9]+$/;\n var FONT_SIZE_SCALE = 0.4;\n var BADGE_FONT_SIZE_SCALE = FONT_SIZE_SCALE * 0.7;\n var DEFAULT_SIZES = {\n sm: '1.5em',\n md: '2.5em',\n lg: '3.5em'\n }; // --- Props ---\n \n var linkProps$1 = omit(props$1, ['active', 'event', 'routerTag']);\n \n var props$3 = _objectSpread2(_objectSpread2({\n src: {\n type: String // default: null\n \n },\n text: {\n type: String // default: null\n \n },\n icon: {\n type: String // default: null\n \n },\n alt: {\n type: String,\n default: 'avatar'\n },\n variant: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$6, 'variant');\n }\n },\n size: {\n type: [Number, String],\n default: null\n },\n square: {\n type: Boolean,\n default: false\n },\n rounded: {\n type: [Boolean, String],\n default: false\n },\n button: {\n type: Boolean,\n default: false\n },\n buttonType: {\n type: String,\n default: 'button'\n },\n badge: {\n type: [Boolean, String],\n default: false\n },\n badgeVariant: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$6, 'badgeVariant');\n }\n },\n badgeTop: {\n type: Boolean,\n default: false\n },\n badgeLeft: {\n type: Boolean,\n default: false\n },\n badgeOffset: {\n type: String,\n default: '0px'\n }\n }, linkProps$1), {}, {\n ariaLabel: {\n type: String // default: null\n \n }\n }); // --- Utility methods ---\n \n \n var computeSize = function computeSize(value) {\n // Default to `md` size when `null`, or parse to\n // number when value is a float-like string\n value = isUndefinedOrNull(value) || value === '' ? 'md' : isString(value) && RX_NUMBER.test(value) ? toFloat(value, 0) : value; // Convert all numbers to pixel values\n // Handle default sizes when `sm`, `md` or `lg`\n // Or use value as is\n \n return isNumber(value) ? \"\".concat(value, \"px\") : DEFAULT_SIZES[value] || value;\n }; // --- Main component ---\n // @vue/component\n \n var BAvatar = /*#__PURE__*/Vue.extend({\n name: NAME$6,\n mixins: [normalizeSlotMixin],\n inject: {\n bvAvatarGroup: {\n default: null\n }\n },\n props: props$3,\n data: function data() {\n return {\n localSrc: this.src || null\n };\n },\n computed: {\n computedSize: function computedSize() {\n // Always use the avatar group size\n return computeSize(this.bvAvatarGroup ? this.bvAvatarGroup.size : this.size);\n },\n computedVariant: function computedVariant() {\n // Prefer avatar-group variant if provided\n var avatarGroup = this.bvAvatarGroup;\n return avatarGroup && avatarGroup.variant ? avatarGroup.variant : this.variant;\n },\n computedRounded: function computedRounded() {\n var avatarGroup = this.bvAvatarGroup;\n var square = avatarGroup && avatarGroup.square ? true : this.square;\n var rounded = avatarGroup && avatarGroup.rounded ? avatarGroup.rounded : this.rounded;\n return square ? '0' : rounded === '' ? true : rounded || 'circle';\n },\n fontStyle: function fontStyle() {\n var fontSize = this.computedSize;\n fontSize = fontSize ? \"calc(\".concat(fontSize, \" * \").concat(FONT_SIZE_SCALE, \")\") : null;\n return fontSize ? {\n fontSize: fontSize\n } : {};\n },\n marginStyle: function marginStyle() {\n var avatarGroup = this.bvAvatarGroup;\n var overlapScale = avatarGroup ? avatarGroup.overlapScale : 0;\n var size = this.computedSize;\n var value = size && overlapScale ? \"calc(\".concat(size, \" * -\").concat(overlapScale, \")\") : null;\n return value ? {\n marginLeft: value,\n marginRight: value\n } : {};\n },\n badgeStyle: function badgeStyle() {\n var size = this.computedSize,\n badgeTop = this.badgeTop,\n badgeLeft = this.badgeLeft,\n badgeOffset = this.badgeOffset;\n var offset = badgeOffset || '0px';\n return {\n fontSize: size ? \"calc(\".concat(size, \" * \").concat(BADGE_FONT_SIZE_SCALE, \" )\") : null,\n top: badgeTop ? offset : null,\n bottom: badgeTop ? null : offset,\n left: badgeLeft ? offset : null,\n right: badgeLeft ? null : offset\n };\n }\n },\n watch: {\n src: function src(newSrc, oldSrc) {\n if (newSrc !== oldSrc) {\n this.localSrc = newSrc || null;\n }\n }\n },\n methods: {\n onImgError: function onImgError(evt) {\n this.localSrc = null;\n this.$emit('img-error', evt);\n },\n onClick: function onClick(evt) {\n this.$emit('click', evt);\n }\n },\n render: function render(h) {\n var _class2;\n \n var variant = this.computedVariant,\n disabled = this.disabled,\n rounded = this.computedRounded,\n icon = this.icon,\n src = this.localSrc,\n text = this.text,\n fontStyle = this.fontStyle,\n marginStyle = this.marginStyle,\n size = this.computedSize,\n button = this.button,\n type = this.buttonType,\n badge = this.badge,\n badgeVariant = this.badgeVariant,\n badgeStyle = this.badgeStyle;\n var link = !button && isLink(this);\n var tag = button ? BButton : link ? BLink : 'span';\n var alt = this.alt;\n var ariaLabel = this.ariaLabel || null;\n var $content = null;\n \n if (this.hasNormalizedSlot('default')) {\n // Default slot overrides props\n $content = h('span', {\n staticClass: 'b-avatar-custom'\n }, [this.normalizeSlot('default')]);\n } else if (src) {\n $content = h('img', {\n style: variant ? {} : {\n width: '100%',\n height: '100%'\n },\n attrs: {\n src: src,\n alt: alt\n },\n on: {\n error: this.onImgError\n }\n });\n $content = h('span', {\n staticClass: 'b-avatar-img'\n }, [$content]);\n } else if (icon) {\n $content = h(BIcon, {\n props: {\n icon: icon\n },\n attrs: {\n 'aria-hidden': 'true',\n alt: alt\n }\n });\n } else if (text) {\n $content = h('span', {\n staticClass: 'b-avatar-text',\n style: fontStyle\n }, [h('span', text)]);\n } else {\n // Fallback default avatar content\n $content = h(BIconPersonFill, {\n attrs: {\n 'aria-hidden': 'true',\n alt: alt\n }\n });\n }\n \n var $badge = h();\n var hasBadgeSlot = this.hasNormalizedSlot('badge');\n \n if (badge || badge === '' || hasBadgeSlot) {\n var badgeText = badge === true ? '' : badge;\n $badge = h('span', {\n staticClass: 'b-avatar-badge',\n class: _defineProperty({}, \"badge-\".concat(badgeVariant), !!badgeVariant),\n style: badgeStyle\n }, [hasBadgeSlot ? this.normalizeSlot('badge') : badgeText]);\n }\n \n var componentData = {\n staticClass: CLASS_NAME$1,\n class: (_class2 = {}, _defineProperty(_class2, \"badge-\".concat(variant), !button && variant), _defineProperty(_class2, \"rounded\", rounded === true), _defineProperty(_class2, \"rounded-\".concat(rounded), rounded && rounded !== true), _defineProperty(_class2, \"disabled\", disabled), _class2),\n style: _objectSpread2({\n width: size,\n height: size\n }, marginStyle),\n attrs: {\n 'aria-label': ariaLabel || null\n },\n props: button ? {\n variant: variant,\n disabled: disabled,\n type: type\n } : link ? pluckProps(linkProps$1, this) : {},\n on: button || link ? {\n click: this.onClick\n } : {}\n };\n return h(tag, componentData, [$content, $badge]);\n }\n });\n \n var NAME$7 = 'BAvatarGroup'; // --- Main component ---\n // @vue/component\n \n var BAvatarGroup = /*#__PURE__*/Vue.extend({\n name: NAME$7,\n mixins: [normalizeSlotMixin],\n provide: function provide() {\n return {\n bvAvatarGroup: this\n };\n },\n props: {\n variant: {\n // Child avatars will prefer this variant over their own\n type: String,\n default: null\n },\n size: {\n // Child avatars will always use this over their own size\n type: String,\n default: null\n },\n overlap: {\n type: [Number, String],\n default: 0.3\n },\n square: {\n // Child avatars will prefer this prop (if set) over their own\n type: Boolean,\n default: false\n },\n rounded: {\n // Child avatars will prefer this prop (if set) over their own\n type: [Boolean, String],\n default: false\n },\n tag: {\n type: String,\n default: 'div'\n }\n },\n computed: {\n computedSize: function computedSize() {\n return computeSize(this.size);\n },\n overlapScale: function overlapScale() {\n return mathMin(mathMax(toFloat(this.overlap, 0), 0), 1) / 2;\n },\n paddingStyle: function paddingStyle() {\n var value = this.computedSize;\n value = value ? \"calc(\".concat(value, \" * \").concat(this.overlapScale, \")\") : null;\n return value ? {\n paddingLeft: value,\n paddingRight: value\n } : {};\n }\n },\n render: function render(h) {\n var $inner = h('div', {\n staticClass: 'b-avatar-group-inner',\n style: this.paddingStyle\n }, [this.normalizeSlot('default')]);\n return h(this.tag, {\n staticClass: 'b-avatar-group',\n attrs: {\n role: 'group'\n }\n }, [$inner]);\n }\n });\n \n var AvatarPlugin = /*#__PURE__*/pluginFactory({\n components: {\n BAvatar: BAvatar,\n BAvatarGroup: BAvatarGroup\n }\n });\n \n var NAME$8 = 'BBadge'; // --- Props ---\n \n var linkProps$2 = omit(props$1, ['event', 'routerTag']);\n delete linkProps$2.href.default;\n delete linkProps$2.to.default;\n var props$4 = _objectSpread2({\n tag: {\n type: String,\n default: 'span'\n },\n variant: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$8, 'variant');\n }\n },\n pill: {\n type: Boolean,\n default: false\n }\n }, linkProps$2); // --- Main component ---\n // @vue/component\n \n var BBadge = /*#__PURE__*/Vue.extend({\n name: NAME$8,\n functional: true,\n props: props$4,\n render: function render(h, _ref) {\n var props = _ref.props,\n data = _ref.data,\n children = _ref.children;\n var link = isLink(props);\n var tag = link ? BLink : props.tag;\n var componentData = {\n staticClass: 'badge',\n class: [props.variant ? \"badge-\".concat(props.variant) : 'badge-secondary', {\n 'badge-pill': props.pill,\n active: props.active,\n disabled: props.disabled\n }],\n props: link ? pluckProps(linkProps$2, props) : {}\n };\n return h(tag, a(data, componentData), children);\n }\n });\n \n var BadgePlugin = /*#__PURE__*/pluginFactory({\n components: {\n BBadge: BBadge\n }\n });\n \n var RX_HTML_TAGS = /(<([^>]+)>)/gi; // Removes anything that looks like an HTML tag from the supplied string\n \n var stripTags = function stripTags() {\n var text = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n return String(text).replace(RX_HTML_TAGS, '');\n }; // Generate a `domProps` object for either `innerHTML`, `textContent` or an empty object\n \n var htmlOrText = function htmlOrText(innerHTML, textContent) {\n return innerHTML ? {\n innerHTML: innerHTML\n } : textContent ? {\n textContent: textContent\n } : {};\n };\n \n var props$5 = _objectSpread2({\n text: {\n type: String,\n default: null\n },\n html: {\n type: String,\n default: null\n },\n ariaCurrent: {\n type: String,\n default: 'location'\n }\n }, omit(props$1, ['event', 'routerTag'])); // --- Main component ---\n // @vue/component\n \n var BBreadcrumbLink = /*#__PURE__*/Vue.extend({\n name: 'BBreadcrumbLink',\n functional: true,\n props: props$5,\n render: function render(h, _ref) {\n var suppliedProps = _ref.props,\n data = _ref.data,\n children = _ref.children;\n var active = suppliedProps.active;\n var tag = active ? 'span' : BLink;\n var componentData = {\n attrs: {\n 'aria-current': active ? suppliedProps.ariaCurrent : null\n },\n props: pluckProps(props$5, suppliedProps)\n };\n \n if (!children) {\n componentData.domProps = htmlOrText(suppliedProps.html, suppliedProps.text);\n }\n \n return h(tag, a(data, componentData), children);\n }\n });\n \n var BBreadcrumbItem = /*#__PURE__*/Vue.extend({\n name: 'BBreadcrumbItem',\n functional: true,\n props: props$5,\n render: function render(h, _ref) {\n var props = _ref.props,\n data = _ref.data,\n children = _ref.children;\n return h('li', a(data, {\n staticClass: 'breadcrumb-item',\n class: {\n active: props.active\n }\n }), [h(BBreadcrumbLink, {\n props: props\n }, children)]);\n }\n });\n \n var props$6 = {\n items: {\n type: Array,\n default: null\n }\n }; // @vue/component\n \n var BBreadcrumb = /*#__PURE__*/Vue.extend({\n name: 'BBreadcrumb',\n functional: true,\n props: props$6,\n render: function render(h, _ref) {\n var props = _ref.props,\n data = _ref.data,\n children = _ref.children;\n var childNodes = children; // Build child nodes from items if given.\n \n if (isArray(props.items)) {\n var activeDefined = false;\n childNodes = props.items.map(function (item, idx) {\n if (!isObject(item)) {\n item = {\n text: toString$1(item)\n };\n } // Copy the value here so we can normalize it.\n \n \n var active = item.active;\n \n if (active) {\n activeDefined = true;\n }\n \n if (!active && !activeDefined) {\n // Auto-detect active by position in list.\n active = idx + 1 === props.items.length;\n }\n \n return h(BBreadcrumbItem, {\n props: _objectSpread2(_objectSpread2({}, item), {}, {\n active: active\n })\n });\n });\n }\n \n return h('ol', a(data, {\n staticClass: 'breadcrumb'\n }), childNodes);\n }\n });\n \n var BreadcrumbPlugin = /*#__PURE__*/pluginFactory({\n components: {\n BBreadcrumb: BBreadcrumb,\n BBreadcrumbItem: BBreadcrumbItem,\n BBreadcrumbLink: BBreadcrumbLink\n }\n });\n \n var ButtonPlugin = /*#__PURE__*/pluginFactory({\n components: {\n BButton: BButton,\n BBtn: BButton,\n BButtonClose: BButtonClose,\n BBtnClose: BButtonClose\n }\n });\n \n var NAME$9 = 'BButtonGroup';\n var props$7 = {\n vertical: {\n type: Boolean,\n default: false\n },\n size: {\n type: String,\n default: function _default() {\n return getComponentConfig('BButton', 'size');\n }\n },\n tag: {\n type: String,\n default: 'div'\n },\n ariaRole: {\n type: String,\n default: 'group'\n }\n }; // @vue/component\n \n var BButtonGroup = /*#__PURE__*/Vue.extend({\n name: NAME$9,\n functional: true,\n props: props$7,\n render: function render(h, _ref) {\n var props = _ref.props,\n data = _ref.data,\n children = _ref.children;\n return h(props.tag, a(data, {\n class: _defineProperty({\n 'btn-group': !props.vertical,\n 'btn-group-vertical': props.vertical\n }, \"btn-group-\".concat(props.size), props.size),\n attrs: {\n role: props.ariaRole\n }\n }), children);\n }\n });\n \n var ButtonGroupPlugin = /*#__PURE__*/pluginFactory({\n components: {\n BButtonGroup: BButtonGroup,\n BBtnGroup: BButtonGroup\n }\n });\n \n var ITEM_SELECTOR = ['.btn:not(.disabled):not([disabled]):not(.dropdown-item)', '.form-control:not(.disabled):not([disabled])', 'select:not(.disabled):not([disabled])', 'input[type=\"checkbox\"]:not(.disabled)', 'input[type=\"radio\"]:not(.disabled)'].join(','); // @vue/component\n \n var BButtonToolbar = /*#__PURE__*/Vue.extend({\n name: 'BButtonToolbar',\n mixins: [normalizeSlotMixin],\n props: {\n justify: {\n type: Boolean,\n default: false\n },\n keyNav: {\n type: Boolean,\n default: false\n }\n },\n mounted: function mounted() {\n if (this.keyNav) {\n // Pre-set the tabindexes if the markup does not include tabindex=\"-1\" on the toolbar items\n this.getItems();\n }\n },\n methods: {\n onFocusin: function onFocusin(evt) {\n if (evt.target === this.$el) {\n evt.preventDefault();\n evt.stopPropagation();\n this.focusFirst(evt);\n }\n },\n stop: function stop(evt) {\n evt.preventDefault();\n evt.stopPropagation();\n },\n onKeydown: function onKeydown(evt) {\n if (!this.keyNav) {\n /* istanbul ignore next: should never happen */\n return;\n }\n \n var key = evt.keyCode;\n var shift = evt.shiftKey;\n \n if (key === KEY_CODES.UP || key === KEY_CODES.LEFT) {\n this.stop(evt);\n shift ? this.focusFirst(evt) : this.focusPrev(evt);\n } else if (key === KEY_CODES.DOWN || key === KEY_CODES.RIGHT) {\n this.stop(evt);\n shift ? this.focusLast(evt) : this.focusNext(evt);\n }\n },\n focusFirst: function focusFirst() {\n var items = this.getItems();\n attemptFocus(items[0]);\n },\n focusPrev: function focusPrev(evt) {\n var items = this.getItems();\n var index = items.indexOf(evt.target);\n \n if (index > -1) {\n items = items.slice(0, index).reverse();\n attemptFocus(items[0]);\n }\n },\n focusNext: function focusNext(evt) {\n var items = this.getItems();\n var index = items.indexOf(evt.target);\n \n if (index > -1) {\n items = items.slice(index + 1);\n attemptFocus(items[0]);\n }\n },\n focusLast: function focusLast() {\n var items = this.getItems().reverse();\n attemptFocus(items[0]);\n },\n getItems: function getItems() {\n var items = selectAll(ITEM_SELECTOR, this.$el);\n items.forEach(function (item) {\n // Ensure tabfocus is -1 on any new elements\n item.tabIndex = -1;\n });\n return items.filter(function (el) {\n return isVisible(el);\n });\n }\n },\n render: function render(h) {\n return h('div', {\n staticClass: 'btn-toolbar',\n class: {\n 'justify-content-between': this.justify\n },\n attrs: {\n role: 'toolbar',\n tabindex: this.keyNav ? '0' : null\n },\n on: this.keyNav ? {\n focusin: this.onFocusin,\n keydown: this.onKeydown\n } : {}\n }, [this.normalizeSlot('default')]);\n }\n });\n \n var ButtonToolbarPlugin = /*#__PURE__*/pluginFactory({\n components: {\n BButtonToolbar: BButtonToolbar,\n BBtnToolbar: BButtonToolbar\n }\n });\n \n // Handles when arrays are \"sparse\" (array.every(...) doesn't handle sparse)\n \n var compareArrays = function compareArrays(a, b) {\n if (a.length !== b.length) {\n return false;\n }\n \n var equal = true;\n \n for (var i = 0; equal && i < a.length; i++) {\n equal = looseEqual(a[i], b[i]);\n }\n \n return equal;\n };\n /**\n * Check if two values are loosely equal - that is,\n * if they are plain objects, do they have the same shape?\n * Returns boolean true or false\n */\n \n \n var looseEqual = function looseEqual(a, b) {\n if (a === b) {\n return true;\n }\n \n var aValidType = isDate(a);\n var bValidType = isDate(b);\n \n if (aValidType || bValidType) {\n return aValidType && bValidType ? a.getTime() === b.getTime() : false;\n }\n \n aValidType = isArray(a);\n bValidType = isArray(b);\n \n if (aValidType || bValidType) {\n return aValidType && bValidType ? compareArrays(a, b) : false;\n }\n \n aValidType = isObject(a);\n bValidType = isObject(b);\n \n if (aValidType || bValidType) {\n /* istanbul ignore if: this if will probably never be called */\n if (!aValidType || !bValidType) {\n return false;\n }\n \n var aKeysCount = keys(a).length;\n var bKeysCount = keys(b).length;\n \n if (aKeysCount !== bKeysCount) {\n return false;\n }\n \n for (var key in a) {\n var aHasKey = hasOwnProperty(a, key);\n var bHasKey = hasOwnProperty(b, key);\n \n if (aHasKey && !bHasKey || !aHasKey && bHasKey || !looseEqual(a[key], b[key])) {\n return false;\n }\n }\n }\n \n return String(a) === String(b);\n };\n \n // Loose YYYY-MM-DD matching, ignores any appended time inforation\n // Matches '1999-12-20', '1999-1-1', '1999-01-20T22:51:49.118Z', '1999-01-02 13:00:00'\n \n var RX_DATE = /^\\d+-\\d\\d?-\\d\\d?(?:\\s|T|$)/; // Used to split off the date parts of the YYYY-MM-DD string\n \n var RX_DATE_SPLIT = /-|\\s|T/; // --- Date utility methods ---\n // Create or clone a date (`new Date(...)` shortcut)\n \n var createDate = function createDate() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n \n return _construct(Date, args);\n }; // Parse a date sting, or Date object, into a Date object (with no time information)\n \n var parseYMD = function parseYMD(date) {\n if (isString(date) && RX_DATE.test(date.trim())) {\n var _date$split$map = date.split(RX_DATE_SPLIT).map(function (v) {\n return toInteger(v, 1);\n }),\n _date$split$map2 = _slicedToArray(_date$split$map, 3),\n year = _date$split$map2[0],\n month = _date$split$map2[1],\n day = _date$split$map2[2];\n \n return createDate(year, month - 1, day);\n } else if (isDate(date)) {\n return createDate(date.getFullYear(), date.getMonth(), date.getDate());\n }\n \n return null;\n }; // Format a date object as `YYYY-MM-DD` format\n \n var formatYMD = function formatYMD(date) {\n date = parseYMD(date);\n \n if (!date) {\n return null;\n }\n \n var year = date.getFullYear();\n var month = \"0\".concat(date.getMonth() + 1).slice(-2);\n var day = \"0\".concat(date.getDate()).slice(-2);\n return \"\".concat(year, \"-\").concat(month, \"-\").concat(day);\n }; // Given a locale (or locales), resolve the browser available locale\n \n var resolveLocale = function resolveLocale(locales)\n /* istanbul ignore next */\n {\n var calendar = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'gregory';\n locales = concat(locales).filter(identity);\n var fmt = new Intl.DateTimeFormat(locales, {\n calendar: calendar\n });\n return fmt.resolvedOptions().locale;\n }; // Create a `Intl.DateTimeFormat` formatter function\n \n var createDateFormatter = function createDateFormatter(locale, options)\n /* istanbul ignore next */\n {\n var dtf = new Intl.DateTimeFormat(locale, options);\n return dtf.format;\n }; // Determine if two dates are the same date (ignoring time portion)\n \n var datesEqual = function datesEqual(date1, date2) {\n // Returns true of the date portion of two date objects are equal\n // We don't compare the time portion\n return formatYMD(date1) === formatYMD(date2);\n }; // --- Date \"math\" utility methods (for BCalendar component mainly) ---\n \n var firstDateOfMonth = function firstDateOfMonth(date) {\n date = createDate(date);\n date.setDate(1);\n return date;\n };\n var lastDateOfMonth = function lastDateOfMonth(date) {\n date = createDate(date);\n date.setMonth(date.getMonth() + 1);\n date.setDate(0);\n return date;\n };\n var addYears = function addYears(date, numberOfYears) {\n date = createDate(date);\n var month = date.getMonth();\n date.setFullYear(date.getFullYear() + numberOfYears); // Handle Feb 29th for leap years\n \n if (date.getMonth() !== month) {\n date.setDate(0);\n }\n \n return date;\n };\n var oneMonthAgo = function oneMonthAgo(date) {\n date = createDate(date);\n var month = date.getMonth();\n date.setMonth(month - 1); // Handle when days in month are different\n \n if (date.getMonth() === month) {\n date.setDate(0);\n }\n \n return date;\n };\n var oneMonthAhead = function oneMonthAhead(date) {\n date = createDate(date);\n var month = date.getMonth();\n date.setMonth(month + 1); // Handle when days in month are different\n \n if (date.getMonth() === (month + 2) % 12) {\n date.setDate(0);\n }\n \n return date;\n };\n var oneYearAgo = function oneYearAgo(date) {\n return addYears(date, -1);\n };\n var oneYearAhead = function oneYearAhead(date) {\n return addYears(date, 1);\n };\n var oneDecadeAgo = function oneDecadeAgo(date) {\n return addYears(date, -10);\n };\n var oneDecadeAhead = function oneDecadeAhead(date) {\n return addYears(date, 10);\n }; // Helper function to constrain a date between two values\n // Always returns a `Date` object or `null` if no date passed\n \n var constrainDate = function constrainDate(date) {\n var min = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var max = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n // Ensure values are `Date` objects (or `null`)\n date = parseYMD(date);\n min = parseYMD(min) || date;\n max = parseYMD(max) || date; // Return a new `Date` object (or `null`)\n \n return date ? date < min ? min : date > max ? max : date : null;\n };\n \n // Localization utilities\n \n var RTL_LANGS = ['ar', 'az', 'ckb', 'fa', 'he', 'ks', 'lrc', 'mzn', 'ps', 'sd', 'te', 'ug', 'ur', 'yi'].map(function (locale) {\n return locale.toLowerCase();\n }); // Precompile RegExpr\n \n var RX_STRIP_MODS = /-u-.+/; // Returns true if the locale is RTL\n \n var isLocaleRTL = function isLocaleRTL(locale) {\n // Determines if the locale is RTL (only single locale supported)\n var parts = toString$1(locale).toLowerCase().replace(RX_STRIP_MODS, '').split('-');\n var locale1 = parts.slice(0, 2).join('-');\n var locale2 = parts[0];\n return arrayIncludes(RTL_LANGS, locale1) || arrayIncludes(RTL_LANGS, locale2);\n };\n \n // SSR safe client-side ID attribute generation\n // ID's can only be generated client-side, after mount\n // `this._uid` is not synched between server and client\n // @vue/component\n var idMixin = {\n props: {\n id: {\n type: String // default: null\n \n }\n },\n data: function data() {\n return {\n localId_: null\n };\n },\n computed: {\n safeId: function safeId() {\n // Computed property that returns a dynamic function for creating the ID\n // Reacts to changes in both `.id` and `.localId_` and regenerates a new function\n var id = this.id || this.localId_; // We return a function that accepts an optional suffix string\n // So this computed prop looks and works like a method\n // but benefits from Vue's computed prop caching\n \n var fn = function fn(suffix) {\n if (!id) {\n return null;\n }\n \n suffix = String(suffix || '').replace(/\\s+/g, '_');\n return suffix ? id + '_' + suffix : id;\n };\n \n return fn;\n }\n },\n mounted: function mounted() {\n var _this = this;\n \n // `mounted()` only occurs client-side\n this.$nextTick(function () {\n // Update DOM with auto-generated ID after mount\n // to prevent SSR hydration errors\n _this.localId_ = \"__BVID__\".concat(_this._uid);\n });\n }\n };\n \n var NAME$a = 'BCalendar'; // Key Codes\n \n var UP = KEY_CODES.UP,\n DOWN = KEY_CODES.DOWN,\n LEFT = KEY_CODES.LEFT,\n RIGHT = KEY_CODES.RIGHT,\n PAGEUP = KEY_CODES.PAGEUP,\n PAGEDOWN = KEY_CODES.PAGEDOWN,\n HOME = KEY_CODES.HOME,\n END = KEY_CODES.END,\n ENTER = KEY_CODES.ENTER,\n SPACE = KEY_CODES.SPACE; // Common calendar option value strings\n \n var STR_GREGORY = 'gregory';\n var STR_NUMERIC = 'numeric';\n var STR_2_DIGIT = '2-digit';\n var STR_LONG = 'long';\n var STR_SHORT = 'short';\n var STR_NARROW = 'narrow'; // --- BCalendar component ---\n // @vue/component\n \n var BCalendar = Vue.extend({\n name: NAME$a,\n // Mixin order is important!\n mixins: [attrsMixin, idMixin, normalizeSlotMixin],\n model: {\n // Even though this is the default that Vue assumes, we need\n // to add it for the docs to reflect that this is the model\n // And also for some validation libraries to work\n prop: 'value',\n event: 'input'\n },\n props: {\n value: {\n type: [String, Date] // default: null\n \n },\n valueAsDate: {\n // Always return the `v-model` value as a date object\n type: Boolean,\n default: false\n },\n initialDate: {\n // This specifies the calendar year/month/day that will be shown when\n // first opening the datepicker if no v-model value is provided\n // Default is the current date (or `min`/`max`)\n type: [String, Date] // default: null\n \n },\n disabled: {\n type: Boolean,\n default: false\n },\n readonly: {\n type: Boolean,\n default: false\n },\n min: {\n type: [String, Date] // default: null\n \n },\n max: {\n type: [String, Date] // default: null\n \n },\n dateDisabledFn: {\n type: Function // default: null\n \n },\n startWeekday: {\n // `0` (Sunday), `1` (Monday), ... `6` (Saturday)\n // Day of week to start calendar on\n type: [Number, String],\n default: 0\n },\n locale: {\n // Locale(s) to use\n // Default is to use page/browser default setting\n type: [String, Array] // default: null\n \n },\n direction: {\n // 'ltr', 'rtl', or `null` (for auto detect)\n type: String // default: null\n \n },\n selectedVariant: {\n // Variant color to use for the selected date\n type: String,\n default: 'primary'\n },\n todayVariant: {\n // Variant color to use for today's date (defaults to `variant`)\n type: String // default: null\n \n },\n noHighlightToday: {\n // Disable highlighting today's date\n type: Boolean,\n default: false\n },\n dateInfoFn: {\n // Function to set a class of (classes) on the date cell\n // if passed a string or an array\n // TODO:\n // If the function returns an object, look for class prop for classes,\n // and other props for handling events/details/descriptions\n type: Function // default: null\n \n },\n width: {\n // Has no effect if prop `block` is set\n type: String,\n default: '270px'\n },\n block: {\n // Makes calendar the full width of its parent container\n type: Boolean,\n default: false\n },\n hideHeader: {\n // When true makes the selected date header `sr-only`\n type: Boolean,\n default: false\n },\n showDecadeNav: {\n // When `true` enables the decade navigation buttons\n type: Boolean,\n default: false\n },\n hidden: {\n // When `true`, renders a comment node, but keeps the component instance active\n // Mainly for <b-form-date>, so that we can get the component's value and locale\n // But we might just use separate date formatters, using the resolved locale\n // (adjusted for the gregorian calendar)\n type: Boolean,\n default: false\n },\n ariaControls: {\n type: String // default: null\n \n },\n roleDescription: {\n type: String // default: null\n \n },\n // Labels for buttons and keyboard shortcuts\n labelPrevDecade: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$a, 'labelPrevDecade');\n }\n },\n labelPrevYear: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$a, 'labelPrevYear');\n }\n },\n labelPrevMonth: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$a, 'labelPrevMonth');\n }\n },\n labelCurrentMonth: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$a, 'labelCurrentMonth');\n }\n },\n labelNextMonth: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$a, 'labelNextMonth');\n }\n },\n labelNextYear: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$a, 'labelNextYear');\n }\n },\n labelNextDecade: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$a, 'labelNextDecade');\n }\n },\n labelToday: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$a, 'labelToday');\n }\n },\n labelSelected: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$a, 'labelSelected');\n }\n },\n labelNoDateSelected: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$a, 'labelNoDateSelected');\n }\n },\n labelCalendar: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$a, 'labelCalendar');\n }\n },\n labelNav: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$a, 'labelNav');\n }\n },\n labelHelp: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$a, 'labelHelp');\n }\n },\n dateFormatOptions: {\n // `Intl.DateTimeFormat` object\n // Note: This value is *not* to be placed in the global config\n type: Object,\n default: function _default() {\n return {\n year: STR_NUMERIC,\n month: STR_LONG,\n day: STR_NUMERIC,\n weekday: STR_LONG\n };\n }\n },\n weekdayHeaderFormat: {\n // Format of the weekday names at the top of the calendar\n // Note: This value is *not* to be placed in the global config\n type: String,\n // `short` is typically a 3 letter abbreviation,\n // `narrow` is typically a single letter\n // `long` is the full week day name\n // Although some locales may override this (i.e `ar`, etc)\n default: STR_SHORT,\n validator: function validator(value) {\n return arrayIncludes([STR_LONG, STR_SHORT, STR_NARROW], value);\n }\n }\n },\n data: function data() {\n var selected = formatYMD(this.value) || '';\n return {\n // Selected date\n selectedYMD: selected,\n // Date in calendar grid that has `tabindex` of `0`\n activeYMD: selected || formatYMD(constrainDate(this.initialDate || this.getToday()), this.min, this.max),\n // Will be true if the calendar grid has/contains focus\n gridHasFocus: false,\n // Flag to enable the `aria-live` region(s) after mount\n // to prevent screen reader \"outbursts\" when mounting\n isLive: false\n };\n },\n computed: {\n valueId: function valueId() {\n return this.safeId();\n },\n widgetId: function widgetId() {\n return this.safeId('_calendar-wrapper_');\n },\n navId: function navId() {\n return this.safeId('_calendar-nav_');\n },\n gridId: function gridId() {\n return this.safeId('_calendar-grid_');\n },\n gridCaptionId: function gridCaptionId() {\n return this.safeId('_calendar-grid-caption_');\n },\n gridHelpId: function gridHelpId() {\n return this.safeId('_calendar-grid-help_');\n },\n activeId: function activeId() {\n return this.activeYMD ? this.safeId(\"_cell-\".concat(this.activeYMD, \"_\")) : null;\n },\n // TODO: Use computed props to convert `YYYY-MM-DD` to `Date` object\n selectedDate: function selectedDate() {\n // Selected as a `Date` object\n return parseYMD(this.selectedYMD);\n },\n activeDate: function activeDate() {\n // Active as a `Date` object\n return parseYMD(this.activeYMD);\n },\n computedMin: function computedMin() {\n return parseYMD(this.min);\n },\n computedMax: function computedMax() {\n return parseYMD(this.max);\n },\n computedWeekStarts: function computedWeekStarts() {\n // `startWeekday` is a prop (constrained to `0` through `6`)\n return mathMax(toInteger(this.startWeekday, 0), 0) % 7;\n },\n computedLocale: function computedLocale() {\n // Returns the resolved locale used by the calendar\n return resolveLocale(concat(this.locale).filter(identity), STR_GREGORY);\n },\n calendarLocale: function calendarLocale() {\n // This locale enforces the gregorian calendar (for use in formatter functions)\n // Needed because IE 11 resolves `ar-IR` as islamic-civil calendar\n // and IE 11 (and some other browsers) do not support the `calendar` option\n // And we currently only support the gregorian calendar\n var fmt = new Intl.DateTimeFormat(this.computedLocale, {\n calendar: STR_GREGORY\n });\n var calendar = fmt.resolvedOptions().calendar;\n var locale = fmt.resolvedOptions().locale;\n /* istanbul ignore if: mainly for IE 11 and a few other browsers, hard to test in JSDOM */\n \n if (calendar !== STR_GREGORY) {\n // Ensure the locale requests the gregorian calendar\n // Mainly for IE 11, and currently we can't handle non-gregorian calendars\n // TODO: Should we always return this value?\n locale = locale.replace(/-u-.+$/i, '').concat('-u-ca-gregory');\n }\n \n return locale;\n },\n calendarYear: function calendarYear() {\n return this.activeDate.getFullYear();\n },\n calendarMonth: function calendarMonth() {\n return this.activeDate.getMonth();\n },\n calendarFirstDay: function calendarFirstDay() {\n return createDate(this.calendarYear, this.calendarMonth, 1);\n },\n calendarDaysInMonth: function calendarDaysInMonth() {\n // We create a new date as to not mutate the original\n var date = createDate(this.calendarFirstDay);\n date.setMonth(date.getMonth() + 1, 0);\n return date.getDate();\n },\n computedVariant: function computedVariant() {\n return \"btn-\".concat(this.selectedVariant || 'primary');\n },\n computedTodayVariant: function computedTodayVariant() {\n return \"btn-outline-\".concat(this.todayVariant || this.selectedVariant || 'primary');\n },\n isRTL: function isRTL() {\n // `true` if the language requested is RTL\n var dir = toString$1(this.direction).toLowerCase();\n \n if (dir === 'rtl') {\n /* istanbul ignore next */\n return true;\n } else if (dir === 'ltr') {\n /* istanbul ignore next */\n return false;\n }\n \n return isLocaleRTL(this.computedLocale);\n },\n context: function context() {\n var selectedYMD = this.selectedYMD;\n var selectedDate = parseYMD(selectedYMD);\n var activeYMD = this.activeYMD;\n var activeDate = parseYMD(activeYMD);\n return {\n // The current value of the `v-model`\n selectedYMD: selectedYMD,\n selectedDate: selectedDate,\n selectedFormatted: selectedDate ? this.formatDateString(selectedDate) : this.labelNoDateSelected,\n // Which date cell is considered active due to navigation\n activeYMD: activeYMD,\n activeDate: activeDate,\n activeFormatted: activeDate ? this.formatDateString(activeDate) : '',\n // `true` if the date is disabled (when using keyboard navigation)\n disabled: this.dateDisabled(activeDate),\n // Locales used in formatting dates\n locale: this.computedLocale,\n calendarLocale: this.calendarLocale,\n rtl: this.isRTL\n };\n },\n // Computed props that return a function reference\n dateOutOfRange: function dateOutOfRange() {\n // Check whether a date is within the min/max range\n // returns a new function ref if the pops change\n // We do this as we need to trigger the calendar computed prop\n // to update when these props update\n var min = this.computedMin;\n var max = this.computedMax;\n return function (date) {\n // Handle both `YYYY-MM-DD` and `Date` objects\n date = parseYMD(date);\n return min && date < min || max && date > max;\n };\n },\n dateDisabled: function dateDisabled() {\n // Returns a function for validating if a date is within range\n // We grab this variables first to ensure a new function ref\n // is generated when the props value changes\n // We do this as we need to trigger the calendar computed prop\n // to update when these props update\n var rangeFn = this.dateOutOfRange;\n var disabledFn = isFunction(this.dateDisabledFn) ? this.dateDisabledFn : function () {\n return false;\n }; // Return the function ref\n \n return function (date) {\n // Handle both `YYYY-MM-DD` and `Date` objects\n date = parseYMD(date);\n var ymd = formatYMD(date);\n return !!(rangeFn(date) || disabledFn(ymd, date));\n };\n },\n // Computed props that return date formatter functions\n formatDateString: function formatDateString() {\n // Returns a date formatter function\n return createDateFormatter(this.calendarLocale, _objectSpread2(_objectSpread2({\n // Ensure we have year, month, day shown for screen readers/ARIA\n // If users really want to leave one of these out, they can\n // pass `undefined` for the property value\n year: STR_NUMERIC,\n month: STR_2_DIGIT,\n day: STR_2_DIGIT\n }, this.dateFormatOptions), {}, {\n // Ensure hours/minutes/seconds are not shown\n // As we do not support the time portion (yet)\n hour: undefined,\n minute: undefined,\n second: undefined,\n // Ensure calendar is gregorian\n calendar: STR_GREGORY\n }));\n },\n formatYearMonth: function formatYearMonth() {\n // Returns a date formatter function\n return createDateFormatter(this.calendarLocale, {\n year: STR_NUMERIC,\n month: STR_LONG,\n calendar: STR_GREGORY\n });\n },\n formatWeekdayName: function formatWeekdayName() {\n // Long weekday name for weekday header aria-label\n return createDateFormatter(this.calendarLocale, {\n weekday: STR_LONG,\n calendar: STR_GREGORY\n });\n },\n formatWeekdayNameShort: function formatWeekdayNameShort() {\n // Weekday header cell format\n // defaults to 'short' 3 letter days, where possible\n return createDateFormatter(this.calendarLocale, {\n weekday: this.weekdayHeaderFormat || STR_SHORT,\n calendar: STR_GREGORY\n });\n },\n formatDay: function formatDay() {\n // Calendar grid day number formatter\n // We don't use DateTimeFormatter here as it can place extra\n // character(s) after the number (i.e the `zh` locale)\n var nf = new Intl.NumberFormat([this.computedLocale], {\n style: 'decimal',\n minimumIntegerDigits: 1,\n minimumFractionDigits: 0,\n maximumFractionDigits: 0,\n notation: 'standard'\n }); // Return a formatter function instance\n \n return function (date) {\n return nf.format(date.getDate());\n };\n },\n // Disabled states for the nav buttons\n prevDecadeDisabled: function prevDecadeDisabled() {\n var min = this.computedMin;\n return this.disabled || min && lastDateOfMonth(oneDecadeAgo(this.activeDate)) < min;\n },\n prevYearDisabled: function prevYearDisabled() {\n var min = this.computedMin;\n return this.disabled || min && lastDateOfMonth(oneYearAgo(this.activeDate)) < min;\n },\n prevMonthDisabled: function prevMonthDisabled() {\n var min = this.computedMin;\n return this.disabled || min && lastDateOfMonth(oneMonthAgo(this.activeDate)) < min;\n },\n thisMonthDisabled: function thisMonthDisabled() {\n // TODO: We could/should check if today is out of range\n return this.disabled;\n },\n nextMonthDisabled: function nextMonthDisabled() {\n var max = this.computedMax;\n return this.disabled || max && firstDateOfMonth(oneMonthAhead(this.activeDate)) > max;\n },\n nextYearDisabled: function nextYearDisabled() {\n var max = this.computedMax;\n return this.disabled || max && firstDateOfMonth(oneYearAhead(this.activeDate)) > max;\n },\n nextDecadeDisabled: function nextDecadeDisabled() {\n var max = this.computedMax;\n return this.disabled || max && firstDateOfMonth(oneDecadeAhead(this.activeDate)) > max;\n },\n // Calendar dates generation\n calendar: function calendar() {\n var matrix = [];\n var firstDay = this.calendarFirstDay;\n var calendarYear = firstDay.getFullYear();\n var calendarMonth = firstDay.getMonth();\n var daysInMonth = this.calendarDaysInMonth;\n var startIndex = firstDay.getDay(); // `0`..`6`\n \n var weekOffset = (this.computedWeekStarts > startIndex ? 7 : 0) - this.computedWeekStarts; // TODO: Change `dateInfoFn` to handle events and notes as well as classes\n \n var dateInfoFn = isFunction(this.dateInfoFn) ? this.dateInfoFn : function () {\n return {};\n }; // Build the calendar matrix\n \n var currentDay = 0 - weekOffset - startIndex;\n \n for (var week = 0; week < 6 && currentDay < daysInMonth; week++) {\n // For each week\n matrix[week] = []; // The following could be a map function\n \n for (var j = 0; j < 7; j++) {\n // For each day in week\n currentDay++;\n var date = createDate(calendarYear, calendarMonth, currentDay);\n var month = date.getMonth();\n var dayYMD = formatYMD(date);\n var dayDisabled = this.dateDisabled(date); // TODO: This could be a normalizer method\n \n var dateInfo = dateInfoFn(dayYMD, parseYMD(dayYMD));\n dateInfo = isString(dateInfo) || isArray(dateInfo) ?\n /* istanbul ignore next */\n {\n class: dateInfo\n } : isPlainObject(dateInfo) ? _objectSpread2({\n class: ''\n }, dateInfo) :\n /* istanbul ignore next */\n {\n class: ''\n };\n matrix[week].push({\n ymd: dayYMD,\n // Cell content\n day: this.formatDay(date),\n label: this.formatDateString(date),\n // Flags for styling\n isThisMonth: month === calendarMonth,\n isDisabled: dayDisabled,\n // TODO: Handle other dateInfo properties such as notes/events\n info: dateInfo\n });\n }\n }\n \n return matrix;\n },\n calendarHeadings: function calendarHeadings() {\n var _this = this;\n \n return this.calendar[0].map(function (d) {\n return {\n text: _this.formatWeekdayNameShort(parseYMD(d.ymd)),\n label: _this.formatWeekdayName(parseYMD(d.ymd))\n };\n });\n }\n },\n watch: {\n value: function value(newVal, oldVal) {\n var selected = formatYMD(newVal) || '';\n var old = formatYMD(oldVal) || '';\n \n if (!datesEqual(selected, old)) {\n this.activeYMD = selected || this.activeYMD;\n this.selectedYMD = selected;\n }\n },\n selectedYMD: function selectedYMD(newYMD, oldYMD) {\n // TODO:\n // Should we compare to `formatYMD(this.value)` and emit\n // only if they are different?\n if (newYMD !== oldYMD) {\n this.$emit('input', this.valueAsDate ? parseYMD(newYMD) || null : newYMD || '');\n }\n },\n context: function context(newVal, oldVal) {\n if (!looseEqual(newVal, oldVal)) {\n this.$emit('context', newVal);\n }\n },\n hidden: function hidden(newVal) {\n // Reset the active focused day when hidden\n this.activeYMD = this.selectedYMD || formatYMD(this.value || this.constrainDate(this.initialDate || this.getToday())); // Enable/disable the live regions\n \n this.setLive(!newVal);\n }\n },\n created: function created() {\n var _this2 = this;\n \n this.$nextTick(function () {\n _this2.$emit('context', _this2.context);\n });\n },\n mounted: function mounted() {\n this.setLive(true);\n },\n \n /* istanbul ignore next */\n activated: function activated()\n /* istanbul ignore next */\n {\n this.setLive(true);\n },\n \n /* istanbul ignore next */\n deactivated: function deactivated()\n /* istanbul ignore next */\n {\n this.setLive(false);\n },\n beforeDestroy: function beforeDestroy() {\n this.setLive(false);\n },\n methods: {\n // Public method(s)\n focus: function focus() {\n if (!this.disabled) {\n attemptFocus(this.$refs.grid);\n }\n },\n blur: function blur() {\n if (!this.disabled) {\n attemptBlur(this.$refs.grid);\n }\n },\n // Private methods\n setLive: function setLive(on) {\n var _this3 = this;\n \n if (on) {\n this.$nextTick(function () {\n requestAF(function () {\n _this3.isLive = true;\n });\n });\n } else {\n this.isLive = false;\n }\n },\n getToday: function getToday() {\n return parseYMD(createDate());\n },\n constrainDate: function constrainDate$1(date) {\n // Constrains a date between min and max\n // returns a new `Date` object instance\n return constrainDate(date, this.computedMin, this.computedMax);\n },\n emitSelected: function emitSelected(date) {\n var _this4 = this;\n \n // Performed in a `$nextTick()` to (probably) ensure\n // the input event has emitted first\n this.$nextTick(function () {\n _this4.$emit('selected', formatYMD(date) || '', parseYMD(date) || null);\n });\n },\n // Event handlers\n setGridFocusFlag: function setGridFocusFlag(evt) {\n // Sets the gridHasFocus flag to make date \"button\" look focused\n this.gridHasFocus = !this.disabled && evt.type === 'focus';\n },\n onKeydownWrapper: function onKeydownWrapper(evt) {\n // Calendar keyboard navigation\n // Handles PAGEUP/PAGEDOWN/END/HOME/LEFT/UP/RIGHT/DOWN\n // Focuses grid after updating\n var altKey = evt.altKey,\n ctrlKey = evt.ctrlKey,\n keyCode = evt.keyCode;\n \n if (!arrayIncludes([PAGEUP, PAGEDOWN, END, HOME, LEFT, UP, RIGHT, DOWN], keyCode)) {\n /* istanbul ignore next */\n return;\n }\n \n evt.preventDefault();\n evt.stopPropagation();\n var activeDate = createDate(this.activeDate);\n var checkDate = createDate(this.activeDate);\n var day = activeDate.getDate();\n var constrainedToday = this.constrainDate(this.getToday());\n var isRTL = this.isRTL;\n \n if (keyCode === PAGEUP) {\n // PAGEUP - Previous month/year\n activeDate = (altKey ? ctrlKey ? oneDecadeAgo : oneYearAgo : oneMonthAgo)(activeDate); // We check the first day of month to be in rage\n \n checkDate = createDate(activeDate);\n checkDate.setDate(1);\n } else if (keyCode === PAGEDOWN) {\n // PAGEDOWN - Next month/year\n activeDate = (altKey ? ctrlKey ? oneDecadeAhead : oneYearAhead : oneMonthAhead)(activeDate); // We check the last day of month to be in rage\n \n checkDate = createDate(activeDate);\n checkDate.setMonth(checkDate.getMonth() + 1);\n checkDate.setDate(0);\n } else if (keyCode === LEFT) {\n // LEFT - Previous day (or next day for RTL)\n activeDate.setDate(day + (isRTL ? 1 : -1));\n activeDate = this.constrainDate(activeDate);\n checkDate = activeDate;\n } else if (keyCode === RIGHT) {\n // RIGHT - Next day (or previous day for RTL)\n activeDate.setDate(day + (isRTL ? -1 : 1));\n activeDate = this.constrainDate(activeDate);\n checkDate = activeDate;\n } else if (keyCode === UP) {\n // UP - Previous week\n activeDate.setDate(day - 7);\n activeDate = this.constrainDate(activeDate);\n checkDate = activeDate;\n } else if (keyCode === DOWN) {\n // DOWN - Next week\n activeDate.setDate(day + 7);\n activeDate = this.constrainDate(activeDate);\n checkDate = activeDate;\n } else if (keyCode === HOME) {\n // HOME - Today\n activeDate = constrainedToday;\n checkDate = activeDate;\n } else if (keyCode === END) {\n // END - Selected date, or today if no selected date\n activeDate = parseYMD(this.selectedDate) || constrainedToday;\n checkDate = activeDate;\n }\n \n if (!this.dateOutOfRange(checkDate) && !datesEqual(activeDate, this.activeDate)) {\n // We only jump to date if within min/max\n // We don't check for individual disabled dates though (via user function)\n this.activeYMD = formatYMD(activeDate);\n } // Ensure grid is focused\n \n \n this.focus();\n },\n onKeydownGrid: function onKeydownGrid(evt) {\n // Pressing enter/space on grid to select active date\n var keyCode = evt.keyCode;\n var activeDate = this.activeDate;\n \n if (keyCode === ENTER || keyCode === SPACE) {\n evt.preventDefault();\n evt.stopPropagation();\n \n if (!this.disabled && !this.readonly && !this.dateDisabled(activeDate)) {\n this.selectedYMD = formatYMD(activeDate);\n this.emitSelected(activeDate);\n } // Ensure grid is focused\n \n \n this.focus();\n }\n },\n onClickDay: function onClickDay(day) {\n // Clicking on a date \"button\" to select it\n var selectedDate = this.selectedDate;\n var activeDate = this.activeDate;\n var clickedDate = parseYMD(day.ymd);\n \n if (!this.disabled && !day.isDisabled && !this.dateDisabled(clickedDate)) {\n if (!this.readonly) {\n // If readonly mode, we don't set the selected date, just the active date\n // If the clicked date is equal to the already selected date, we don't update the model\n this.selectedYMD = formatYMD(datesEqual(clickedDate, selectedDate) ? selectedDate : clickedDate);\n this.emitSelected(clickedDate);\n }\n \n this.activeYMD = formatYMD(datesEqual(clickedDate, activeDate) ? activeDate : createDate(clickedDate)); // Ensure grid is focused\n \n this.focus();\n }\n },\n gotoPrevDecade: function gotoPrevDecade() {\n this.activeYMD = formatYMD(this.constrainDate(oneDecadeAgo(this.activeDate)));\n },\n gotoPrevYear: function gotoPrevYear() {\n this.activeYMD = formatYMD(this.constrainDate(oneYearAgo(this.activeDate)));\n },\n gotoPrevMonth: function gotoPrevMonth() {\n this.activeYMD = formatYMD(this.constrainDate(oneMonthAgo(this.activeDate)));\n },\n gotoCurrentMonth: function gotoCurrentMonth() {\n // TODO: Maybe this goto date should be configurable?\n this.activeYMD = formatYMD(this.constrainDate(this.getToday()));\n },\n gotoNextMonth: function gotoNextMonth() {\n this.activeYMD = formatYMD(this.constrainDate(oneMonthAhead(this.activeDate)));\n },\n gotoNextYear: function gotoNextYear() {\n this.activeYMD = formatYMD(this.constrainDate(oneYearAhead(this.activeDate)));\n },\n gotoNextDecade: function gotoNextDecade() {\n this.activeYMD = formatYMD(this.constrainDate(oneDecadeAhead(this.activeDate)));\n },\n onHeaderClick: function onHeaderClick() {\n if (!this.disabled) {\n this.activeYMD = this.selectedYMD || formatYMD(this.getToday());\n this.focus();\n }\n }\n },\n render: function render(h) {\n var _this5 = this;\n \n // If `hidden` prop is set, render just a placeholder node\n if (this.hidden) {\n return h();\n }\n \n var valueId = this.valueId,\n widgetId = this.widgetId,\n navId = this.navId,\n gridId = this.gridId,\n gridCaptionId = this.gridCaptionId,\n gridHelpId = this.gridHelpId,\n activeId = this.activeId,\n isLive = this.isLive,\n isRTL = this.isRTL,\n activeYMD = this.activeYMD,\n selectedYMD = this.selectedYMD,\n safeId = this.safeId;\n var hideDecadeNav = !this.showDecadeNav;\n var todayYMD = formatYMD(this.getToday());\n var highlightToday = !this.noHighlightToday; // Header showing current selected date\n \n var $header = h('output', {\n staticClass: 'form-control form-control-sm text-center',\n class: {\n 'text-muted': this.disabled,\n readonly: this.readonly || this.disabled\n },\n attrs: {\n id: valueId,\n for: gridId,\n role: 'status',\n tabindex: this.disabled ? null : '-1',\n // Mainly for testing purposes, as we do not know\n // the exact format `Intl` will format the date string\n 'data-selected': toString$1(selectedYMD),\n // We wait until after mount to enable `aria-live`\n // to prevent initial announcement on page render\n 'aria-live': isLive ? 'polite' : 'off',\n 'aria-atomic': isLive ? 'true' : null\n },\n on: {\n // Transfer focus/click to focus grid\n // and focus active date (or today if no selection)\n click: this.onHeaderClick,\n focus: this.onHeaderClick\n }\n }, this.selectedDate ? [// We use `bdi` elements here in case the label doesn't match the locale\n // Although IE 11 does not deal with <BDI> at all (equivalent to a span)\n h('bdi', {\n staticClass: 'sr-only'\n }, \" (\".concat(toString$1(this.labelSelected), \") \")), h('bdi', this.formatDateString(this.selectedDate))] : this.labelNoDateSelected || \"\\xA0\" // ' '\n );\n $header = h('header', {\n staticClass: 'b-calendar-header',\n class: {\n 'sr-only': this.hideHeader\n },\n attrs: {\n title: this.selectedDate ? this.labelSelectedDate || null : null\n }\n }, [$header]); // Content for the date navigation buttons\n \n var navScope = {\n isRTL: isRTL\n };\n var navProps = {\n shiftV: 0.5\n };\n \n var navPrevProps = _objectSpread2(_objectSpread2({}, navProps), {}, {\n flipH: isRTL\n });\n \n var navNextProps = _objectSpread2(_objectSpread2({}, navProps), {}, {\n flipH: !isRTL\n });\n \n var $prevDecadeIcon = this.normalizeSlot('nav-prev-decade', navScope) || h(BIconChevronBarLeft, {\n props: navPrevProps\n });\n var $prevYearIcon = this.normalizeSlot('nav-prev-year', navScope) || h(BIconChevronDoubleLeft, {\n props: navPrevProps\n });\n var $prevMonthIcon = this.normalizeSlot('nav-prev-month', navScope) || h(BIconChevronLeft, {\n props: navPrevProps\n });\n var $thisMonthIcon = this.normalizeSlot('nav-this-month', navScope) || h(BIconCircleFill, {\n props: navProps\n });\n var $nextMonthIcon = this.normalizeSlot('nav-next-month', navScope) || h(BIconChevronLeft, {\n props: navNextProps\n });\n var $nextYearIcon = this.normalizeSlot('nav-next-year', navScope) || h(BIconChevronDoubleLeft, {\n props: navNextProps\n });\n var $nextDecadeIcon = this.normalizeSlot('nav-next-decade', navScope) || h(BIconChevronBarLeft, {\n props: navNextProps\n }); // Utility to create the date navigation buttons\n \n var makeNavBtn = function makeNavBtn(content, label, handler, btnDisabled, shortcut) {\n return h('button', {\n staticClass: 'btn btn-sm btn-outline-secondary border-0 flex-fill',\n class: {\n disabled: btnDisabled\n },\n attrs: {\n title: label || null,\n type: 'button',\n 'aria-label': label || null,\n 'aria-disabled': btnDisabled ? 'true' : null,\n 'aria-keyshortcuts': shortcut || null\n },\n on: btnDisabled ? {} : {\n click: handler\n }\n }, [h('div', {\n attrs: {\n 'aria-hidden': 'true'\n }\n }, [content])]);\n }; // Generate the date navigation buttons\n \n \n var $nav = h('div', {\n staticClass: 'b-calendar-nav d-flex',\n attrs: {\n id: navId,\n role: 'group',\n 'aria-hidden': this.disabled ? 'true' : null,\n 'aria-label': this.labelNav || null,\n 'aria-controls': gridId\n }\n }, [hideDecadeNav ? h() : makeNavBtn($prevDecadeIcon, this.labelPrevDecade, this.gotoPrevDecade, this.prevDecadeDisabled, 'Ctrl+Alt+PageDown'), makeNavBtn($prevYearIcon, this.labelPrevYear, this.gotoPrevYear, this.prevYearDisabled, 'Alt+PageDown'), makeNavBtn($prevMonthIcon, this.labelPrevMonth, this.gotoPrevMonth, this.prevMonthDisabled, 'PageDown'), makeNavBtn($thisMonthIcon, this.labelCurrentMonth, this.gotoCurrentMonth, this.thisMonthDisabled, 'Home'), makeNavBtn($nextMonthIcon, this.labelNextMonth, this.gotoNextMonth, this.nextMonthDisabled, 'PageUp'), makeNavBtn($nextYearIcon, this.labelNextYear, this.gotoNextYear, this.nextYearDisabled, 'Alt+PageUp'), hideDecadeNav ? h() : makeNavBtn($nextDecadeIcon, this.labelNextDecade, this.gotoNextDecade, this.nextDecadeDisabled, 'Ctrl+Alt+PageUp')]); // Caption for calendar grid\n \n var $gridCaption = h('header', {\n key: 'grid-caption',\n staticClass: 'b-calendar-grid-caption text-center font-weight-bold',\n class: {\n 'text-muted': this.disabled\n },\n attrs: {\n id: gridCaptionId,\n 'aria-live': isLive ? 'polite' : null,\n 'aria-atomic': isLive ? 'true' : null\n }\n }, this.formatYearMonth(this.calendarFirstDay)); // Calendar weekday headings\n \n var $gridWeekDays = h('div', {\n staticClass: 'b-calendar-grid-weekdays row no-gutters border-bottom',\n attrs: {\n 'aria-hidden': 'true'\n }\n }, this.calendarHeadings.map(function (d, idx) {\n return h('small', {\n key: idx,\n staticClass: 'col text-truncate',\n class: {\n 'text-muted': _this5.disabled\n },\n attrs: {\n title: d.label === d.text ? null : d.label,\n 'aria-label': d.label\n }\n }, d.text);\n })); // Calendar day grid\n \n var $gridBody = this.calendar.map(function (week) {\n var $cells = week.map(function (day, dIndex) {\n var _class;\n \n var isSelected = day.ymd === selectedYMD;\n var isActive = day.ymd === activeYMD;\n var isToday = day.ymd === todayYMD;\n var idCell = safeId(\"_cell-\".concat(day.ymd, \"_\")); // \"fake\" button\n \n var $btn = h('span', {\n staticClass: 'btn border-0 rounded-circle text-nowrap',\n // Should we add some classes to signify if today/selected/etc?\n class: (_class = {\n // Give the fake button a focus ring\n focus: isActive && _this5.gridHasFocus,\n // Styling\n disabled: day.isDisabled || _this5.disabled,\n active: isSelected\n }, _defineProperty(_class, _this5.computedVariant, isSelected), _defineProperty(_class, _this5.computedTodayVariant, isToday && highlightToday && !isSelected && day.isThisMonth), _defineProperty(_class, 'btn-outline-light', !(isToday && highlightToday) && !isSelected && !isActive), _defineProperty(_class, 'btn-light', !(isToday && highlightToday) && !isSelected && isActive), _defineProperty(_class, 'text-muted', !day.isThisMonth && !isSelected), _defineProperty(_class, 'text-dark', !(isToday && highlightToday) && !isSelected && !isActive && day.isThisMonth), _defineProperty(_class, 'font-weight-bold', (isSelected || day.isThisMonth) && !day.isDisabled), _class),\n on: {\n click: function click() {\n return _this5.onClickDay(day);\n }\n }\n }, day.day);\n return h('div', // Cell with button\n {\n key: dIndex,\n staticClass: 'col p-0',\n class: day.isDisabled ? 'bg-light' : day.info.class || '',\n attrs: {\n id: idCell,\n role: 'button',\n 'data-date': day.ymd,\n // Primarily for testing purposes\n // Only days in the month are presented as buttons to screen readers\n 'aria-hidden': day.isThisMonth ? null : 'true',\n 'aria-disabled': day.isDisabled || _this5.disabled ? 'true' : null,\n 'aria-label': [day.label, isSelected ? \"(\".concat(_this5.labelSelected, \")\") : null, isToday ? \"(\".concat(_this5.labelToday, \")\") : null].filter(identity).join(' '),\n // NVDA doesn't convey `aria-selected`, but does `aria-current`,\n // ChromeVox doesn't convey `aria-current`, but does `aria-selected`,\n // so we set both attributes for robustness\n 'aria-selected': isSelected ? 'true' : null,\n 'aria-current': isSelected ? 'date' : null\n }\n }, [$btn]);\n }); // Return the week \"row\"\n // We use the first day of the weeks YMD value as a\n // key for efficient DOM patching / element re-use\n \n return h('div', {\n key: week[0].ymd,\n staticClass: 'row no-gutters'\n }, $cells);\n });\n $gridBody = h('div', {\n // A key is only required on the body if we add in transition support\n // key: this.activeYMD.slice(0, -3),\n staticClass: 'b-calendar-grid-body',\n style: this.disabled ? {\n pointerEvents: 'none'\n } : {}\n }, $gridBody);\n var $gridHelp = h('footer', {\n staticClass: 'b-calendar-grid-help border-top small text-muted text-center bg-light',\n attrs: {\n id: gridHelpId\n }\n }, [h('div', {\n staticClass: 'small'\n }, this.labelHelp)]);\n var $grid = h('div', {\n ref: 'grid',\n staticClass: 'b-calendar-grid form-control h-auto text-center',\n attrs: {\n id: gridId,\n role: 'application',\n tabindex: this.disabled ? null : '0',\n 'data-month': activeYMD.slice(0, -3),\n // `YYYY-MM`, mainly for testing\n 'aria-roledescription': this.labelCalendar || null,\n 'aria-labelledby': gridCaptionId,\n 'aria-describedby': gridHelpId,\n // `aria-readonly` is not considered valid on `role=\"application\"`\n // https://www.w3.org/TR/wai-aria-1.1/#aria-readonly\n // 'aria-readonly': this.readonly && !this.disabled ? 'true' : null,\n 'aria-disabled': this.disabled ? 'true' : null,\n 'aria-activedescendant': activeId\n },\n on: {\n keydown: this.onKeydownGrid,\n focus: this.setGridFocusFlag,\n blur: this.setGridFocusFlag\n }\n }, [$gridCaption, $gridWeekDays, $gridBody, $gridHelp]); // Optional bottom slot\n \n var $slot = this.normalizeSlot('default');\n $slot = $slot ? h('footer', {\n staticClass: 'b-calendar-footer'\n }, $slot) : h();\n var $widget = h('div', {\n staticClass: 'b-calendar-inner',\n style: this.block ? {} : {\n width: this.width\n },\n attrs: {\n id: widgetId,\n dir: isRTL ? 'rtl' : 'ltr',\n lang: this.computedLocale || null,\n role: 'group',\n 'aria-disabled': this.disabled ? 'true' : null,\n // If datepicker controls an input, this will specify the ID of the input\n 'aria-controls': this.ariaControls || null,\n // This should be a prop (so it can be changed to Date picker, etc, localized\n 'aria-roledescription': this.roleDescription || null,\n 'aria-describedby': [// Should the attr (if present) go last?\n // Or should this attr be a prop?\n this.bvAttrs['aria-describedby'], valueId, gridHelpId].filter(identity).join(' ')\n },\n on: {\n keydown: this.onKeydownWrapper\n }\n }, [$header, $nav, $grid, $slot]); // Wrap in an outer div that can be styled\n \n return h('div', {\n staticClass: 'b-calendar',\n class: {\n 'd-block': this.block\n }\n }, [$widget]);\n }\n });\n \n var CalendarPlugin = /*#__PURE__*/pluginFactory({\n components: {\n BCalendar: BCalendar\n }\n });\n \n // @vue/component\n var cardMixin = {\n props: {\n tag: {\n type: String,\n default: 'div'\n },\n bgVariant: {\n type: String // default: null\n \n },\n borderVariant: {\n type: String // default: null\n \n },\n textVariant: {\n type: String // default: null\n \n }\n }\n };\n \n var props$8 = {\n title: {\n type: String // default: null\n \n },\n titleTag: {\n type: String,\n default: 'h4'\n }\n }; // @vue/component\n \n var BCardTitle = /*#__PURE__*/Vue.extend({\n name: 'BCardTitle',\n functional: true,\n props: props$8,\n render: function render(h, _ref) {\n var props = _ref.props,\n data = _ref.data,\n children = _ref.children;\n return h(props.titleTag, a(data, {\n staticClass: 'card-title'\n }), children || toString$1(props.title));\n }\n });\n \n var NAME$b = 'BCardSubTitle';\n var props$9 = {\n subTitle: {\n type: String // default: null\n \n },\n subTitleTag: {\n type: String,\n default: 'h6'\n },\n subTitleTextVariant: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$b, 'subTitleTextVariant');\n }\n }\n }; // @vue/component\n \n var BCardSubTitle = /*#__PURE__*/Vue.extend({\n name: NAME$b,\n functional: true,\n props: props$9,\n render: function render(h, _ref) {\n var props = _ref.props,\n data = _ref.data,\n children = _ref.children;\n return h(props.subTitleTag, a(data, {\n staticClass: 'card-subtitle',\n class: [props.subTitleTextVariant ? \"text-\".concat(props.subTitleTextVariant) : null]\n }), children || toString$1(props.subTitle));\n }\n });\n \n var props$a = _objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2({}, copyProps(cardMixin.props, prefixPropName.bind(null, 'body'))), {}, {\n bodyClass: {\n type: [String, Object, Array] // default: null\n \n }\n }, props$8), props$9), {}, {\n overlay: {\n type: Boolean,\n default: false\n }\n }); // @vue/component\n \n var BCardBody = /*#__PURE__*/Vue.extend({\n name: 'BCardBody',\n functional: true,\n props: props$a,\n render: function render(h, _ref) {\n var _ref2;\n \n var props = _ref.props,\n data = _ref.data,\n children = _ref.children;\n var cardTitle = h();\n var cardSubTitle = h();\n var cardContent = children || [h()];\n \n if (props.title) {\n cardTitle = h(BCardTitle, {\n props: pluckProps(props$8, props)\n });\n }\n \n if (props.subTitle) {\n cardSubTitle = h(BCardSubTitle, {\n props: pluckProps(props$9, props),\n class: ['mb-2']\n });\n }\n \n return h(props.bodyTag, a(data, {\n staticClass: 'card-body',\n class: [(_ref2 = {\n 'card-img-overlay': props.overlay\n }, _defineProperty(_ref2, \"bg-\".concat(props.bodyBgVariant), props.bodyBgVariant), _defineProperty(_ref2, \"border-\".concat(props.bodyBorderVariant), props.bodyBorderVariant), _defineProperty(_ref2, \"text-\".concat(props.bodyTextVariant), props.bodyTextVariant), _ref2), props.bodyClass || {}]\n }), [cardTitle, cardSubTitle].concat(_toConsumableArray(cardContent)));\n }\n });\n \n var props$b = _objectSpread2(_objectSpread2({}, copyProps(cardMixin.props, prefixPropName.bind(null, 'header'))), {}, {\n header: {\n type: String // default: null\n \n },\n headerHtml: {\n type: String // default: null\n \n },\n headerClass: {\n type: [String, Object, Array] // default: null\n \n }\n }); // --- Main component ---\n // @vue/component\n \n var BCardHeader = /*#__PURE__*/Vue.extend({\n name: 'BCardHeader',\n functional: true,\n props: props$b,\n render: function render(h, _ref) {\n var _ref2;\n \n var props = _ref.props,\n data = _ref.data,\n children = _ref.children;\n var headerBgVariant = props.headerBgVariant,\n headerBorderVariant = props.headerBorderVariant,\n headerTextVariant = props.headerTextVariant;\n return h(props.headerTag, a(data, {\n staticClass: 'card-header',\n class: [props.headerClass, (_ref2 = {}, _defineProperty(_ref2, \"bg-\".concat(headerBgVariant), headerBgVariant), _defineProperty(_ref2, \"border-\".concat(headerBorderVariant), headerBorderVariant), _defineProperty(_ref2, \"text-\".concat(headerTextVariant), headerTextVariant), _ref2)],\n domProps: children ? {} : htmlOrText(props.headerHtml, props.header)\n }), children);\n }\n });\n \n var props$c = _objectSpread2(_objectSpread2({}, copyProps(cardMixin.props, prefixPropName.bind(null, 'footer'))), {}, {\n footer: {\n type: String // default: null\n \n },\n footerHtml: {\n type: String // default: null\n \n },\n footerClass: {\n type: [String, Object, Array] // default: null\n \n }\n }); // --- Main component ---\n // @vue/component\n \n var BCardFooter = /*#__PURE__*/Vue.extend({\n name: 'BCardFooter',\n functional: true,\n props: props$c,\n render: function render(h, _ref) {\n var _ref2;\n \n var props = _ref.props,\n data = _ref.data,\n children = _ref.children;\n var footerBgVariant = props.footerBgVariant,\n footerBorderVariant = props.footerBorderVariant,\n footerTextVariant = props.footerTextVariant;\n return h(props.footerTag, a(data, {\n staticClass: 'card-footer',\n class: [props.footerClass, (_ref2 = {}, _defineProperty(_ref2, \"bg-\".concat(footerBgVariant), footerBgVariant), _defineProperty(_ref2, \"border-\".concat(footerBorderVariant), footerBorderVariant), _defineProperty(_ref2, \"text-\".concat(footerTextVariant), footerTextVariant), _ref2)],\n domProps: children ? {} : htmlOrText(props.footerHtml, props.footer)\n }), children);\n }\n });\n \n var props$d = {\n src: {\n type: String,\n required: true\n },\n alt: {\n type: String,\n default: null\n },\n top: {\n type: Boolean,\n default: false\n },\n bottom: {\n type: Boolean,\n default: false\n },\n start: {\n type: Boolean,\n default: false\n },\n left: {\n // alias of 'start'\n type: Boolean,\n default: false\n },\n end: {\n type: Boolean,\n default: false\n },\n right: {\n // alias of 'end'\n type: Boolean,\n default: false\n },\n height: {\n type: [Number, String] // default: null\n \n },\n width: {\n type: [Number, String] // default: null\n \n }\n }; // @vue/component\n \n var BCardImg = /*#__PURE__*/Vue.extend({\n name: 'BCardImg',\n functional: true,\n props: props$d,\n render: function render(h, _ref) {\n var props = _ref.props,\n data = _ref.data;\n var baseClass = 'card-img';\n \n if (props.top) {\n baseClass += '-top';\n } else if (props.right || props.end) {\n baseClass += '-right';\n } else if (props.bottom) {\n baseClass += '-bottom';\n } else if (props.left || props.start) {\n baseClass += '-left';\n }\n \n return h('img', a(data, {\n class: [baseClass],\n attrs: {\n src: props.src || null,\n alt: props.alt,\n height: props.height || null,\n width: props.width || null\n }\n }));\n }\n });\n \n var cardImgProps = copyProps(props$d, prefixPropName.bind(null, 'img'));\n cardImgProps.imgSrc.required = false;\n var props$e = _objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2({}, props$a), props$b), props$c), cardImgProps), copyProps(cardMixin.props)), {}, {\n align: {\n type: String // default: null\n \n },\n noBody: {\n type: Boolean,\n default: false\n }\n }); // @vue/component\n \n var BCard = /*#__PURE__*/Vue.extend({\n name: 'BCard',\n functional: true,\n props: props$e,\n render: function render(h, _ref) {\n var _class;\n \n var props = _ref.props,\n data = _ref.data,\n slots = _ref.slots,\n scopedSlots = _ref.scopedSlots;\n var imgLeft = props.imgLeft,\n imgRight = props.imgRight,\n imgStart = props.imgStart,\n imgEnd = props.imgEnd,\n header = props.header,\n headerHtml = props.headerHtml,\n footer = props.footer,\n footerHtml = props.footerHtml,\n align = props.align,\n textVariant = props.textVariant,\n bgVariant = props.bgVariant,\n borderVariant = props.borderVariant;\n var $scopedSlots = scopedSlots || {};\n var $slots = slots();\n var slotScope = {};\n var $imgFirst = h();\n var $imgLast = h();\n \n if (props.imgSrc) {\n var $img = h(BCardImg, {\n props: pluckProps(cardImgProps, props, unprefixPropName.bind(null, 'img'))\n });\n \n if (props.imgBottom) {\n $imgLast = $img;\n } else {\n $imgFirst = $img;\n }\n }\n \n var $header = h();\n var hasHeaderSlot = hasNormalizedSlot('header', $scopedSlots, $slots);\n \n if (hasHeaderSlot || header || headerHtml) {\n $header = h(BCardHeader, {\n props: pluckProps(props$b, props),\n domProps: hasHeaderSlot ? {} : htmlOrText(headerHtml, header)\n }, normalizeSlot('header', slotScope, $scopedSlots, $slots));\n }\n \n var $content = normalizeSlot('default', slotScope, $scopedSlots, $slots); // Wrap content in <card-body> when `noBody` prop set\n \n if (!props.noBody) {\n $content = h(BCardBody, {\n props: pluckProps(props$a, props)\n }, $content);\n }\n \n var $footer = h();\n var hasFooterSlot = hasNormalizedSlot('footer', $scopedSlots, $slots);\n \n if (hasFooterSlot || footer || footerHtml) {\n $footer = h(BCardFooter, {\n props: pluckProps(props$c, props),\n domProps: hasHeaderSlot ? {} : htmlOrText(footerHtml, footer)\n }, normalizeSlot('footer', slotScope, $scopedSlots, $slots));\n }\n \n return h(props.tag, a(data, {\n staticClass: 'card',\n class: (_class = {\n 'flex-row': imgLeft || imgStart,\n 'flex-row-reverse': (imgRight || imgEnd) && !(imgLeft || imgStart)\n }, _defineProperty(_class, \"text-\".concat(align), align), _defineProperty(_class, \"bg-\".concat(bgVariant), bgVariant), _defineProperty(_class, \"border-\".concat(borderVariant), borderVariant), _defineProperty(_class, \"text-\".concat(textVariant), textVariant), _class)\n }), [$imgFirst, $header, $content, $footer, $imgLast]);\n }\n });\n \n var OBSERVER_PROP_NAME = '__bv__visibility_observer';\n var RX_ONLY_DIGITS = /^\\d+$/;\n \n var VisibilityObserver = /*#__PURE__*/function () {\n function VisibilityObserver(el, options, vnode) {\n _classCallCheck(this, VisibilityObserver);\n \n this.el = el;\n this.callback = options.callback;\n this.margin = options.margin || 0;\n this.once = options.once || false;\n this.observer = null;\n this.visible = undefined;\n this.doneOnce = false; // Create the observer instance (if possible)\n \n this.createObserver(vnode);\n }\n \n _createClass(VisibilityObserver, [{\n key: \"createObserver\",\n value: function createObserver(vnode) {\n var _this = this;\n \n // Remove any previous observer\n if (this.observer) {\n /* istanbul ignore next */\n this.stop();\n } // Should only be called once and `callback` prop should be a function\n \n \n if (this.doneOnce || !isFunction(this.callback)) {\n /* istanbul ignore next */\n return;\n } // Create the observer instance\n \n \n try {\n // Future: Possibly add in other modifiers for left/right/top/bottom\n // offsets, root element reference, and thresholds\n this.observer = new IntersectionObserver(this.handler.bind(this), {\n // `null` = 'viewport'\n root: null,\n // Pixels away from view port to consider \"visible\"\n rootMargin: this.margin,\n // Intersection ratio of el and root (as a value from 0 to 1)\n threshold: 0\n });\n } catch (_unused) {\n // No IntersectionObserver support, so just stop trying to observe\n this.doneOnce = true;\n this.observer = undefined;\n this.callback(null);\n return;\n } // Start observing in a `$nextTick()` (to allow DOM to complete rendering)\n \n /* istanbul ignore next: IntersectionObserver not supported in JSDOM */\n \n \n vnode.context.$nextTick(function () {\n requestAF(function () {\n // Placed in an `if` just in case we were destroyed before\n // this `requestAnimationFrame` runs\n if (_this.observer) {\n _this.observer.observe(_this.el);\n }\n });\n });\n }\n /* istanbul ignore next */\n \n }, {\n key: \"handler\",\n value: function handler(entries)\n /* istanbul ignore next: IntersectionObserver not supported in JSDOM */\n {\n var entry = entries ? entries[0] : {};\n var isIntersecting = Boolean(entry.isIntersecting || entry.intersectionRatio > 0.0);\n \n if (isIntersecting !== this.visible) {\n this.visible = isIntersecting;\n this.callback(isIntersecting);\n \n if (this.once && this.visible) {\n this.doneOnce = true;\n this.stop();\n }\n }\n }\n }, {\n key: \"stop\",\n value: function stop() {\n /* istanbul ignore next */\n this.observer && this.observer.disconnect();\n this.observer = null;\n }\n }]);\n \n return VisibilityObserver;\n }();\n \n var destroy = function destroy(el) {\n var observer = el[OBSERVER_PROP_NAME];\n \n if (observer && observer.stop) {\n observer.stop();\n }\n \n delete el[OBSERVER_PROP_NAME];\n };\n \n var bind = function bind(el, _ref, vnode) {\n var value = _ref.value,\n modifiers = _ref.modifiers;\n // `value` is the callback function\n var options = {\n margin: '0px',\n once: false,\n callback: value\n }; // Parse modifiers\n \n keys(modifiers).forEach(function (mod) {\n /* istanbul ignore else: Until <b-img-lazy> is switched to use this directive */\n if (RX_ONLY_DIGITS.test(mod)) {\n options.margin = \"\".concat(mod, \"px\");\n } else if (mod.toLowerCase() === 'once') {\n options.once = true;\n }\n }); // Destroy any previous observer\n \n destroy(el); // Create new observer\n \n el[OBSERVER_PROP_NAME] = new VisibilityObserver(el, options, vnode); // Store the current modifiers on the object (cloned)\n \n el[OBSERVER_PROP_NAME]._prevModifiers = clone(modifiers);\n }; // When the directive options may have been updated (or element)\n \n \n var componentUpdated = function componentUpdated(el, _ref2, vnode) {\n var value = _ref2.value,\n oldValue = _ref2.oldValue,\n modifiers = _ref2.modifiers;\n // Compare value/oldValue and modifiers to see if anything has changed\n // and if so, destroy old observer and create new observer\n \n /* istanbul ignore next */\n modifiers = clone(modifiers);\n /* istanbul ignore next */\n \n if (el && (value !== oldValue || !el[OBSERVER_PROP_NAME] || !looseEqual(modifiers, el[OBSERVER_PROP_NAME]._prevModifiers))) {\n // Re-bind on element\n bind(el, {\n value: value,\n modifiers: modifiers\n }, vnode);\n }\n }; // When directive un-binds from element\n \n \n var unbind = function unbind(el) {\n // Remove the observer\n destroy(el);\n }; // Export the directive\n \n \n var VBVisible = {\n bind: bind,\n componentUpdated: componentUpdated,\n unbind: unbind\n };\n \n var NAME$c = 'BImg'; // Blank image with fill template\n \n var BLANK_TEMPLATE = '<svg width=\"%{w}\" height=\"%{h}\" ' + 'xmlns=\"http://www.w3.org/2000/svg\" ' + 'viewBox=\"0 0 %{w} %{h}\" preserveAspectRatio=\"none\">' + '<rect width=\"100%\" height=\"100%\" style=\"fill:%{f};\"></rect>' + '</svg>';\n var props$f = {\n src: {\n type: String // default: null\n \n },\n srcset: {\n type: [String, Array] // default: null\n \n },\n sizes: {\n type: [String, Array] // default: null\n \n },\n alt: {\n type: String,\n default: null\n },\n width: {\n type: [Number, String] // default: null\n \n },\n height: {\n type: [Number, String] // default: null\n \n },\n block: {\n type: Boolean,\n default: false\n },\n fluid: {\n type: Boolean,\n default: false\n },\n fluidGrow: {\n // Gives fluid images class `w-100` to make them grow to fit container\n type: Boolean,\n default: false\n },\n rounded: {\n // rounded can be:\n // false: no rounding of corners\n // true: slightly rounded corners\n // 'top': top corners rounded\n // 'right': right corners rounded\n // 'bottom': bottom corners rounded\n // 'left': left corners rounded\n // 'circle': circle/oval\n // '0': force rounding off\n type: [Boolean, String],\n default: false\n },\n thumbnail: {\n type: Boolean,\n default: false\n },\n left: {\n type: Boolean,\n default: false\n },\n right: {\n type: Boolean,\n default: false\n },\n center: {\n type: Boolean,\n default: false\n },\n blank: {\n type: Boolean,\n default: false\n },\n blankColor: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$c, 'blankColor');\n }\n }\n }; // --- Helper methods ---\n \n var makeBlankImgSrc = function makeBlankImgSrc(width, height, color) {\n var src = encodeURIComponent(BLANK_TEMPLATE.replace('%{w}', toString$1(width)).replace('%{h}', toString$1(height)).replace('%{f}', color));\n return \"data:image/svg+xml;charset=UTF-8,\".concat(src);\n }; // @vue/component\n \n \n var BImg = /*#__PURE__*/Vue.extend({\n name: NAME$c,\n functional: true,\n props: props$f,\n render: function render(h, _ref) {\n var _class;\n \n var props = _ref.props,\n data = _ref.data;\n var src = props.src;\n var width = toInteger(props.width) || null;\n var height = toInteger(props.height) || null;\n var align = null;\n var block = props.block;\n var srcset = concat(props.srcset).filter(identity).join(',');\n var sizes = concat(props.sizes).filter(identity).join(',');\n \n if (props.blank) {\n if (!height && width) {\n height = width;\n } else if (!width && height) {\n width = height;\n }\n \n if (!width && !height) {\n width = 1;\n height = 1;\n } // Make a blank SVG image\n \n \n src = makeBlankImgSrc(width, height, props.blankColor || 'transparent'); // Disable srcset and sizes\n \n srcset = null;\n sizes = null;\n }\n \n if (props.left) {\n align = 'float-left';\n } else if (props.right) {\n align = 'float-right';\n } else if (props.center) {\n align = 'mx-auto';\n block = true;\n }\n \n return h('img', a(data, {\n attrs: {\n src: src,\n alt: props.alt,\n width: width ? toString$1(width) : null,\n height: height ? toString$1(height) : null,\n srcset: srcset || null,\n sizes: sizes || null\n },\n class: (_class = {\n 'img-thumbnail': props.thumbnail,\n 'img-fluid': props.fluid || props.fluidGrow,\n 'w-100': props.fluidGrow,\n rounded: props.rounded === '' || props.rounded === true\n }, _defineProperty(_class, \"rounded-\".concat(props.rounded), isString(props.rounded) && props.rounded !== ''), _defineProperty(_class, align, align), _defineProperty(_class, 'd-block', block), _class)\n }));\n }\n });\n \n var NAME$d = 'BImgLazy';\n var props$g = {\n src: {\n type: String,\n required: true\n },\n srcset: {\n type: [String, Array] // default: null\n \n },\n sizes: {\n type: [String, Array] // default: null\n \n },\n alt: {\n type: String // default: null\n \n },\n width: {\n type: [Number, String] // default: null\n \n },\n height: {\n type: [Number, String] // default: null\n \n },\n blankSrc: {\n // If null, a blank image is generated\n type: String,\n default: null\n },\n blankColor: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$d, 'blankColor');\n }\n },\n blankWidth: {\n type: [Number, String] // default: null\n \n },\n blankHeight: {\n type: [Number, String] // default: null\n \n },\n show: {\n type: Boolean,\n default: false\n },\n fluid: {\n type: Boolean,\n default: false\n },\n fluidGrow: {\n type: Boolean,\n default: false\n },\n block: {\n type: Boolean,\n default: false\n },\n thumbnail: {\n type: Boolean,\n default: false\n },\n rounded: {\n type: [Boolean, String],\n default: false\n },\n left: {\n type: Boolean,\n default: false\n },\n right: {\n type: Boolean,\n default: false\n },\n center: {\n type: Boolean,\n default: false\n },\n offset: {\n // Distance away from viewport (in pixels) before being\n // considered \"visible\"\n type: [Number, String],\n default: 360\n }\n }; // @vue/component\n \n var BImgLazy = /*#__PURE__*/Vue.extend({\n name: NAME$d,\n directives: {\n bVisible: VBVisible\n },\n props: props$g,\n data: function data() {\n return {\n isShown: this.show\n };\n },\n computed: {\n computedSrc: function computedSrc() {\n return !this.blankSrc || this.isShown ? this.src : this.blankSrc;\n },\n computedBlank: function computedBlank() {\n return !(this.isShown || this.blankSrc);\n },\n computedWidth: function computedWidth() {\n return this.isShown ? this.width : this.blankWidth || this.width;\n },\n computedHeight: function computedHeight() {\n return this.isShown ? this.height : this.blankHeight || this.height;\n },\n computedSrcset: function computedSrcset() {\n var srcset = concat(this.srcset).filter(identity).join(',');\n return !this.blankSrc || this.isShown ? srcset : null;\n },\n computedSizes: function computedSizes() {\n var sizes = concat(this.sizes).filter(identity).join(',');\n return !this.blankSrc || this.isShown ? sizes : null;\n }\n },\n watch: {\n show: function show(newVal, oldVal) {\n if (newVal !== oldVal) {\n // If IntersectionObserver support is not available, image is always shown\n var visible = hasIntersectionObserverSupport ? newVal : true;\n this.isShown = visible;\n \n if (visible !== newVal) {\n // Ensure the show prop is synced (when no IntersectionObserver)\n this.$nextTick(this.updateShowProp);\n }\n }\n },\n isShown: function isShown(newVal, oldVal) {\n if (newVal !== oldVal) {\n // Update synched show prop\n this.updateShowProp();\n }\n }\n },\n mounted: function mounted() {\n // If IntersectionObserver is not available, image is always shown\n this.isShown = hasIntersectionObserverSupport ? this.show : true;\n },\n methods: {\n updateShowProp: function updateShowProp() {\n this.$emit('update:show', this.isShown);\n },\n doShow: function doShow(visible) {\n // If IntersectionObserver is not supported, the callback\n // will be called with `null` rather than `true` or `false`\n if ((visible || visible === null) && !this.isShown) {\n this.isShown = true;\n }\n }\n },\n render: function render(h) {\n var directives = [];\n \n if (!this.isShown) {\n var _modifiers;\n \n // We only add the visible directive if we are not shown\n directives.push({\n // Visible directive will silently do nothing if\n // IntersectionObserver is not supported\n name: 'b-visible',\n // Value expects a callback (passed one arg of `visible` = `true` or `false`)\n value: this.doShow,\n modifiers: (_modifiers = {}, _defineProperty(_modifiers, \"\".concat(toInteger(this.offset, 0)), true), _defineProperty(_modifiers, \"once\", true), _modifiers)\n });\n }\n \n return h(BImg, {\n directives: directives,\n props: {\n // Computed value props\n src: this.computedSrc,\n blank: this.computedBlank,\n width: this.computedWidth,\n height: this.computedHeight,\n srcset: this.computedSrcset || null,\n sizes: this.computedSizes || null,\n // Passthrough props\n alt: this.alt,\n blankColor: this.blankColor,\n fluid: this.fluid,\n fluidGrow: this.fluidGrow,\n block: this.block,\n thumbnail: this.thumbnail,\n rounded: this.rounded,\n left: this.left,\n right: this.right,\n center: this.center\n }\n });\n }\n });\n \n // The `omit()` util creates a new object, so we can just pass the original props\n \n var lazyProps = omit(props$g, ['left', 'right', 'center', 'block', 'rounded', 'thumbnail', 'fluid', 'fluidGrow']);\n var props$h = _objectSpread2(_objectSpread2({}, lazyProps), {}, {\n top: {\n type: Boolean,\n default: false\n },\n bottom: {\n type: Boolean,\n default: false\n },\n start: {\n type: Boolean,\n default: false\n },\n left: {\n // alias of 'start'\n type: Boolean,\n default: false\n },\n end: {\n type: Boolean,\n default: false\n },\n right: {\n // alias of 'end'\n type: Boolean,\n default: false\n }\n }); // @vue/component\n \n var BCardImgLazy = /*#__PURE__*/Vue.extend({\n name: 'BCardImgLazy',\n functional: true,\n props: props$h,\n render: function render(h, _ref) {\n var props = _ref.props,\n data = _ref.data;\n var baseClass = 'card-img';\n \n if (props.top) {\n baseClass += '-top';\n } else if (props.right || props.end) {\n baseClass += '-right';\n } else if (props.bottom) {\n baseClass += '-bottom';\n } else if (props.left || props.start) {\n baseClass += '-left';\n } // False out the left/center/right props before passing to b-img-lazy\n \n \n var lazyProps = _objectSpread2(_objectSpread2({}, props), {}, {\n left: false,\n right: false,\n center: false\n });\n \n return h(BImgLazy, a(data, {\n class: [baseClass],\n props: lazyProps\n }));\n }\n });\n \n var props$i = {\n textTag: {\n type: String,\n default: 'p'\n }\n }; // @vue/component\n \n var BCardText = /*#__PURE__*/Vue.extend({\n name: 'BCardText',\n functional: true,\n props: props$i,\n render: function render(h, _ref) {\n var props = _ref.props,\n data = _ref.data,\n children = _ref.children;\n return h(props.textTag, a(data, {\n staticClass: 'card-text'\n }), children);\n }\n });\n \n var props$j = {\n tag: {\n type: String,\n default: 'div'\n },\n deck: {\n type: Boolean,\n default: false\n },\n columns: {\n type: Boolean,\n default: false\n }\n }; // @vue/component\n \n var BCardGroup = /*#__PURE__*/Vue.extend({\n name: 'BCardGroup',\n functional: true,\n props: props$j,\n render: function render(h, _ref) {\n var props = _ref.props,\n data = _ref.data,\n children = _ref.children;\n return h(props.tag, a(data, {\n class: props.deck ? 'card-deck' : props.columns ? 'card-columns' : 'card-group'\n }), children);\n }\n });\n \n var CardPlugin = /*#__PURE__*/pluginFactory({\n components: {\n BCard: BCard,\n BCardHeader: BCardHeader,\n BCardBody: BCardBody,\n BCardTitle: BCardTitle,\n BCardSubTitle: BCardSubTitle,\n BCardFooter: BCardFooter,\n BCardImg: BCardImg,\n BCardImgLazy: BCardImgLazy,\n BCardText: BCardText,\n BCardGroup: BCardGroup\n }\n });\n \n var noop = function noop() {};\n \n /**\n * Observe a DOM element changes, falls back to eventListener mode\n * @param {Element} el The DOM element to observe\n * @param {Function} callback callback to be called on change\n * @param {object} [options={childList: true, subtree: true}] observe options\n * @see https://stackoverflow.com/questions/3219758\n */\n \n var observeDom = function observeDom(el, callback, options)\n /* istanbul ignore next: difficult to test in JSDOM */\n {\n // Handle cases where we might be passed a Vue instance\n el = el ? el.$el || el : null; // Early exit when we have no element\n \n /* istanbul ignore next: difficult to test in JSDOM */\n \n if (!isElement(el)) {\n return null;\n } // Exit and throw a warning when `MutationObserver` isn't available\n \n \n if (warnNoMutationObserverSupport('observeDom')) {\n return null;\n } // Define a new observer\n \n \n var obs = new MutationObs(function (mutations) {\n var changed = false; // A mutation can contain several change records, so we loop\n // through them to see what has changed\n // We break out of the loop early if any \"significant\" change\n // has been detected\n \n for (var i = 0; i < mutations.length && !changed; i++) {\n // The mutation record\n var mutation = mutations[i]; // Mutation type\n \n var type = mutation.type; // DOM node (could be any DOM node type - HTMLElement, Text, comment, etc.)\n \n var target = mutation.target; // Detect whether a change happened based on type and target\n \n if (type === 'characterData' && target.nodeType === Node.TEXT_NODE) {\n // We ignore nodes that are not TEXT (i.e. comments, etc)\n // as they don't change layout\n changed = true;\n } else if (type === 'attributes') {\n changed = true;\n } else if (type === 'childList' && (mutation.addedNodes.length > 0 || mutation.removedNodes.length > 0)) {\n // This includes HTMLElement and text nodes being\n // added/removed/re-arranged\n changed = true;\n }\n } // We only call the callback if a change that could affect\n // layout/size truly happened\n \n \n if (changed) {\n callback();\n }\n }); // Have the observer observe foo for changes in children, etc\n \n obs.observe(el, _objectSpread2({\n childList: true,\n subtree: true\n }, options)); // We return a reference to the observer so that `obs.disconnect()`\n // can be called if necessary\n // To reduce overhead when the root element is hidden\n \n return obs;\n };\n \n var EVENT_OPTIONS_PASSIVE = {\n passive: true\n };\n var EVENT_OPTIONS_NO_CAPTURE = {\n passive: true,\n capture: false\n }; // --- Utils ---\n // Normalize event options based on support of passive option\n // Exported only for testing purposes\n \n var parseEventOptions = function parseEventOptions(options) {\n /* istanbul ignore else: can't test in JSDOM, as it supports passive */\n if (hasPassiveEventSupport) {\n return isObject(options) ? options : {\n capture: !!options || false\n };\n } else {\n // Need to translate to actual Boolean value\n return !!(isObject(options) ? options.capture : options);\n }\n }; // Attach an event listener to an element\n \n var eventOn = function eventOn(el, evtName, handler, options) {\n if (el && el.addEventListener) {\n el.addEventListener(evtName, handler, parseEventOptions(options));\n }\n }; // Remove an event listener from an element\n \n var eventOff = function eventOff(el, evtName, handler, options) {\n if (el && el.removeEventListener) {\n el.removeEventListener(evtName, handler, parseEventOptions(options));\n }\n }; // Utility method to add/remove a event listener based on first argument (boolean)\n // It passes all other arguments to the `eventOn()` or `eventOff` method\n \n var eventOnOff = function eventOnOff(on) {\n var method = on ? eventOn : eventOff;\n \n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n \n method.apply(void 0, args);\n };\n \n var NAME$e = 'BCarousel'; // Slide directional classes\n \n var DIRECTION = {\n next: {\n dirClass: 'carousel-item-left',\n overlayClass: 'carousel-item-next'\n },\n prev: {\n dirClass: 'carousel-item-right',\n overlayClass: 'carousel-item-prev'\n }\n }; // Fallback Transition duration (with a little buffer) in ms\n \n var TRANS_DURATION = 600 + 50; // Time for mouse compat events to fire after touch\n \n var TOUCH_EVENT_COMPAT_WAIT = 500; // Number of pixels to consider touch move a swipe\n \n var SWIPE_THRESHOLD = 40; // PointerEvent pointer types\n \n var PointerType = {\n TOUCH: 'touch',\n PEN: 'pen'\n }; // Transition Event names\n \n var TransitionEndEvents = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'otransitionend oTransitionEnd',\n transition: 'transitionend'\n }; // Return the browser specific transitionEnd event name\n \n var getTransitionEndEvent = function getTransitionEndEvent(el) {\n for (var name in TransitionEndEvents) {\n if (!isUndefined(el.style[name])) {\n return TransitionEndEvents[name];\n }\n } // Fallback\n \n /* istanbul ignore next */\n \n \n return null;\n }; // @vue/component\n \n \n var BCarousel = /*#__PURE__*/Vue.extend({\n name: NAME$e,\n mixins: [idMixin, normalizeSlotMixin],\n provide: function provide() {\n return {\n bvCarousel: this\n };\n },\n model: {\n prop: 'value',\n event: 'input'\n },\n props: {\n labelPrev: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$e, 'labelPrev');\n }\n },\n labelNext: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$e, 'labelNext');\n }\n },\n labelGotoSlide: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$e, 'labelGotoSlide');\n }\n },\n labelIndicators: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$e, 'labelIndicators');\n }\n },\n interval: {\n type: Number,\n default: 5000\n },\n indicators: {\n type: Boolean,\n default: false\n },\n controls: {\n type: Boolean,\n default: false\n },\n noAnimation: {\n // Disable slide/fade animation\n type: Boolean,\n default: false\n },\n fade: {\n // Enable cross-fade animation instead of slide animation\n type: Boolean,\n default: false\n },\n noWrap: {\n // Disable wrapping/looping when start/end is reached\n type: Boolean,\n default: false\n },\n noTouch: {\n // Sniffed by carousel-slide\n type: Boolean,\n default: false\n },\n noHoverPause: {\n // Disable pause on hover\n type: Boolean,\n default: false\n },\n imgWidth: {\n // Sniffed by carousel-slide\n type: [Number, String] // default: undefined\n \n },\n imgHeight: {\n // Sniffed by carousel-slide\n type: [Number, String] // default: undefined\n \n },\n background: {\n type: String // default: undefined\n \n },\n value: {\n type: Number,\n default: 0\n }\n },\n data: function data() {\n return {\n index: this.value || 0,\n isSliding: false,\n transitionEndEvent: null,\n slides: [],\n direction: null,\n isPaused: !(toInteger(this.interval, 0) > 0),\n // Touch event handling values\n touchStartX: 0,\n touchDeltaX: 0\n };\n },\n computed: {\n numSlides: function numSlides() {\n return this.slides.length;\n }\n },\n watch: {\n value: function value(newVal, oldVal) {\n if (newVal !== oldVal) {\n this.setSlide(toInteger(newVal, 0));\n }\n },\n interval: function interval(newVal, oldVal) {\n if (newVal === oldVal) {\n /* istanbul ignore next */\n return;\n }\n \n if (!newVal) {\n // Pausing slide show\n this.pause(false);\n } else {\n // Restarting or Changing interval\n this.pause(true);\n this.start(false);\n }\n },\n isPaused: function isPaused(newVal, oldVal) {\n if (newVal !== oldVal) {\n this.$emit(newVal ? 'paused' : 'unpaused');\n }\n },\n index: function index(to, from) {\n if (to === from || this.isSliding) {\n /* istanbul ignore next */\n return;\n }\n \n this.doSlide(to, from);\n }\n },\n created: function created() {\n // Create private non-reactive props\n this.$_interval = null;\n this.$_animationTimeout = null;\n this.$_touchTimeout = null;\n this.$_observer = null; // Set initial paused state\n \n this.isPaused = !(toInteger(this.interval, 0) > 0);\n },\n mounted: function mounted() {\n // Cache current browser transitionend event name\n this.transitionEndEvent = getTransitionEndEvent(this.$el) || null; // Get all slides\n \n this.updateSlides(); // Observe child changes so we can update slide list\n \n this.setObserver(true);\n },\n beforeDestroy: function beforeDestroy() {\n this.clearInterval();\n this.clearAnimationTimeout();\n this.clearTouchTimeout();\n this.setObserver(false);\n },\n methods: {\n clearInterval: function (_clearInterval) {\n function clearInterval() {\n return _clearInterval.apply(this, arguments);\n }\n \n clearInterval.toString = function () {\n return _clearInterval.toString();\n };\n \n return clearInterval;\n }(function () {\n clearInterval(this.$_interval);\n this.$_interval = null;\n }),\n clearAnimationTimeout: function clearAnimationTimeout() {\n clearTimeout(this.$_animationTimeout);\n this.$_animationTimeout = null;\n },\n clearTouchTimeout: function clearTouchTimeout() {\n clearTimeout(this.$_touchTimeout);\n this.$_touchTimeout = null;\n },\n setObserver: function setObserver() {\n var on = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n this.$_observer && this.$_observer.disconnect();\n this.$_observer = null;\n \n if (on) {\n this.$_observer = observeDom(this.$refs.inner, this.updateSlides.bind(this), {\n subtree: false,\n childList: true,\n attributes: true,\n attributeFilter: ['id']\n });\n }\n },\n // Set slide\n setSlide: function setSlide(slide) {\n var _this = this;\n \n var direction = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n \n // Don't animate when page is not visible\n \n /* istanbul ignore if: difficult to test */\n if (isBrowser && document.visibilityState && document.hidden) {\n return;\n }\n \n var noWrap = this.noWrap;\n var numSlides = this.numSlides; // Make sure we have an integer (you never know!)\n \n slide = mathFloor(slide); // Don't do anything if nothing to slide to\n \n if (numSlides === 0) {\n return;\n } // Don't change slide while transitioning, wait until transition is done\n \n \n if (this.isSliding) {\n // Schedule slide after sliding complete\n this.$once('sliding-end', function () {\n return _this.setSlide(slide, direction);\n });\n return;\n }\n \n this.direction = direction; // Set new slide index\n // Wrap around if necessary (if no-wrap not enabled)\n \n this.index = slide >= numSlides ? noWrap ? numSlides - 1 : 0 : slide < 0 ? noWrap ? 0 : numSlides - 1 : slide; // Ensure the v-model is synched up if no-wrap is enabled\n // and user tried to slide pass either ends\n \n if (noWrap && this.index !== slide && this.index !== this.value) {\n this.$emit('input', this.index);\n }\n },\n // Previous slide\n prev: function prev() {\n this.setSlide(this.index - 1, 'prev');\n },\n // Next slide\n next: function next() {\n this.setSlide(this.index + 1, 'next');\n },\n // Pause auto rotation\n pause: function pause(evt) {\n if (!evt) {\n this.isPaused = true;\n }\n \n this.clearInterval();\n },\n // Start auto rotate slides\n start: function start(evt) {\n if (!evt) {\n this.isPaused = false;\n }\n /* istanbul ignore next: most likely will never happen, but just in case */\n \n \n this.clearInterval(); // Don't start if no interval, or less than 2 slides\n \n if (this.interval && this.numSlides > 1) {\n this.$_interval = setInterval(this.next, mathMax(1000, this.interval));\n }\n },\n // Restart auto rotate slides when focus/hover leaves the carousel\n \n /* istanbul ignore next */\n restart: function restart()\n /* istanbul ignore next: difficult to test */\n {\n if (!this.$el.contains(getActiveElement())) {\n this.start();\n }\n },\n doSlide: function doSlide(to, from) {\n var _this2 = this;\n \n var isCycling = Boolean(this.interval); // Determine sliding direction\n \n var direction = this.calcDirection(this.direction, from, to);\n var overlayClass = direction.overlayClass;\n var dirClass = direction.dirClass; // Determine current and next slides\n \n var currentSlide = this.slides[from];\n var nextSlide = this.slides[to]; // Don't do anything if there aren't any slides to slide to\n \n if (!currentSlide || !nextSlide) {\n /* istanbul ignore next */\n return;\n } // Start animating\n \n \n this.isSliding = true;\n \n if (isCycling) {\n this.pause(false);\n }\n \n this.$emit('sliding-start', to); // Update v-model\n \n this.$emit('input', this.index);\n \n if (this.noAnimation) {\n addClass(nextSlide, 'active');\n removeClass(currentSlide, 'active');\n this.isSliding = false; // Notify ourselves that we're done sliding (slid)\n \n this.$nextTick(function () {\n return _this2.$emit('sliding-end', to);\n });\n } else {\n addClass(nextSlide, overlayClass); // Trigger a reflow of next slide\n \n reflow(nextSlide);\n addClass(currentSlide, dirClass);\n addClass(nextSlide, dirClass); // Transition End handler\n \n var called = false;\n /* istanbul ignore next: difficult to test */\n \n var onceTransEnd = function onceTransEnd() {\n if (called) {\n return;\n }\n \n called = true;\n /* istanbul ignore if: transition events cant be tested in JSDOM */\n \n if (_this2.transitionEndEvent) {\n var events = _this2.transitionEndEvent.split(/\\s+/);\n \n events.forEach(function (evt) {\n return eventOff(nextSlide, evt, onceTransEnd, EVENT_OPTIONS_NO_CAPTURE);\n });\n }\n \n _this2.clearAnimationTimeout();\n \n removeClass(nextSlide, dirClass);\n removeClass(nextSlide, overlayClass);\n addClass(nextSlide, 'active');\n removeClass(currentSlide, 'active');\n removeClass(currentSlide, dirClass);\n removeClass(currentSlide, overlayClass);\n setAttr(currentSlide, 'aria-current', 'false');\n setAttr(nextSlide, 'aria-current', 'true');\n setAttr(currentSlide, 'aria-hidden', 'true');\n setAttr(nextSlide, 'aria-hidden', 'false');\n _this2.isSliding = false;\n _this2.direction = null; // Notify ourselves that we're done sliding (slid)\n \n _this2.$nextTick(function () {\n return _this2.$emit('sliding-end', to);\n });\n }; // Set up transitionend handler\n \n /* istanbul ignore if: transition events cant be tested in JSDOM */\n \n \n if (this.transitionEndEvent) {\n var events = this.transitionEndEvent.split(/\\s+/);\n events.forEach(function (event) {\n return eventOn(nextSlide, event, onceTransEnd, EVENT_OPTIONS_NO_CAPTURE);\n });\n } // Fallback to setTimeout()\n \n \n this.$_animationTimeout = setTimeout(onceTransEnd, TRANS_DURATION);\n }\n \n if (isCycling) {\n this.start(false);\n }\n },\n // Update slide list\n updateSlides: function updateSlides() {\n this.pause(true); // Get all slides as DOM elements\n \n this.slides = selectAll('.carousel-item', this.$refs.inner);\n var numSlides = this.slides.length; // Keep slide number in range\n \n var index = mathMax(0, mathMin(mathFloor(this.index), numSlides - 1));\n this.slides.forEach(function (slide, idx) {\n var n = idx + 1;\n \n if (idx === index) {\n addClass(slide, 'active');\n setAttr(slide, 'aria-current', 'true');\n } else {\n removeClass(slide, 'active');\n setAttr(slide, 'aria-current', 'false');\n }\n \n setAttr(slide, 'aria-posinset', String(n));\n setAttr(slide, 'aria-setsize', String(numSlides));\n }); // Set slide as active\n \n this.setSlide(index);\n this.start(this.isPaused);\n },\n calcDirection: function calcDirection() {\n var direction = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n var curIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var nextIndex = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n \n if (!direction) {\n return nextIndex > curIndex ? DIRECTION.next : DIRECTION.prev;\n }\n \n return DIRECTION[direction];\n },\n handleClick: function handleClick(evt, fn) {\n var keyCode = evt.keyCode;\n \n if (evt.type === 'click' || keyCode === KEY_CODES.SPACE || keyCode === KEY_CODES.ENTER) {\n evt.preventDefault();\n evt.stopPropagation();\n fn();\n }\n },\n \n /* istanbul ignore next */\n handleSwipe: function handleSwipe()\n /* istanbul ignore next: JSDOM doesn't support touch events */\n {\n var absDeltaX = mathAbs(this.touchDeltaX);\n \n if (absDeltaX <= SWIPE_THRESHOLD) {\n return;\n }\n \n var direction = absDeltaX / this.touchDeltaX; // Reset touch delta X\n // https://github.com/twbs/bootstrap/pull/28558\n \n this.touchDeltaX = 0;\n \n if (direction > 0) {\n // Swipe left\n this.prev();\n } else if (direction < 0) {\n // Swipe right\n this.next();\n }\n },\n \n /* istanbul ignore next */\n touchStart: function touchStart(evt)\n /* istanbul ignore next: JSDOM doesn't support touch events */\n {\n if (hasPointerEventSupport && PointerType[evt.pointerType.toUpperCase()]) {\n this.touchStartX = evt.clientX;\n } else if (!hasPointerEventSupport) {\n this.touchStartX = evt.touches[0].clientX;\n }\n },\n \n /* istanbul ignore next */\n touchMove: function touchMove(evt)\n /* istanbul ignore next: JSDOM doesn't support touch events */\n {\n // Ensure swiping with one touch and not pinching\n if (evt.touches && evt.touches.length > 1) {\n this.touchDeltaX = 0;\n } else {\n this.touchDeltaX = evt.touches[0].clientX - this.touchStartX;\n }\n },\n \n /* istanbul ignore next */\n touchEnd: function touchEnd(evt)\n /* istanbul ignore next: JSDOM doesn't support touch events */\n {\n if (hasPointerEventSupport && PointerType[evt.pointerType.toUpperCase()]) {\n this.touchDeltaX = evt.clientX - this.touchStartX;\n }\n \n this.handleSwipe(); // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n \n this.pause(false);\n this.clearTouchTimeout();\n this.$_touchTimeout = setTimeout(this.start, TOUCH_EVENT_COMPAT_WAIT + mathMax(1000, this.interval));\n }\n },\n render: function render(h) {\n var _this3 = this;\n \n // Wrapper for slides\n var inner = h('div', {\n ref: 'inner',\n class: ['carousel-inner'],\n attrs: {\n id: this.safeId('__BV_inner_'),\n role: 'list'\n }\n }, [this.normalizeSlot('default')]); // Prev and next controls\n \n var controls = h();\n \n if (this.controls) {\n var prevHandler = function prevHandler(evt) {\n /* istanbul ignore next */\n if (!_this3.isSliding) {\n _this3.handleClick(evt, _this3.prev);\n } else {\n evt.preventDefault();\n }\n };\n \n var nextHandler = function nextHandler(evt) {\n /* istanbul ignore next */\n if (!_this3.isSliding) {\n _this3.handleClick(evt, _this3.next);\n } else {\n evt.preventDefault();\n }\n };\n \n controls = [h('a', {\n class: ['carousel-control-prev'],\n attrs: {\n href: '#',\n role: 'button',\n 'aria-controls': this.safeId('__BV_inner_'),\n 'aria-disabled': this.isSliding ? 'true' : null\n },\n on: {\n click: prevHandler,\n keydown: prevHandler\n }\n }, [h('span', {\n class: ['carousel-control-prev-icon'],\n attrs: {\n 'aria-hidden': 'true'\n }\n }), h('span', {\n class: ['sr-only']\n }, [this.labelPrev])]), h('a', {\n class: ['carousel-control-next'],\n attrs: {\n href: '#',\n role: 'button',\n 'aria-controls': this.safeId('__BV_inner_'),\n 'aria-disabled': this.isSliding ? 'true' : null\n },\n on: {\n click: nextHandler,\n keydown: nextHandler\n }\n }, [h('span', {\n class: ['carousel-control-next-icon'],\n attrs: {\n 'aria-hidden': 'true'\n }\n }), h('span', {\n class: ['sr-only']\n }, [this.labelNext])])];\n } // Indicators\n \n \n var indicators = h('ol', {\n class: ['carousel-indicators'],\n directives: [{\n name: 'show',\n rawName: 'v-show',\n value: this.indicators,\n expression: 'indicators'\n }],\n attrs: {\n id: this.safeId('__BV_indicators_'),\n 'aria-hidden': this.indicators ? 'false' : 'true',\n 'aria-label': this.labelIndicators,\n 'aria-owns': this.safeId('__BV_inner_')\n }\n }, this.slides.map(function (slide, n) {\n return h('li', {\n key: \"slide_\".concat(n),\n class: {\n active: n === _this3.index\n },\n attrs: {\n role: 'button',\n id: _this3.safeId(\"__BV_indicator_\".concat(n + 1, \"_\")),\n tabindex: _this3.indicators ? '0' : '-1',\n 'aria-current': n === _this3.index ? 'true' : 'false',\n 'aria-label': \"\".concat(_this3.labelGotoSlide, \" \").concat(n + 1),\n 'aria-describedby': _this3.slides[n].id || null,\n 'aria-controls': _this3.safeId('__BV_inner_')\n },\n on: {\n click: function click(evt) {\n _this3.handleClick(evt, function () {\n _this3.setSlide(n);\n });\n },\n keydown: function keydown(evt) {\n _this3.handleClick(evt, function () {\n _this3.setSlide(n);\n });\n }\n }\n });\n }));\n var on = {\n mouseenter: this.noHoverPause ? noop : this.pause,\n mouseleave: this.noHoverPause ? noop : this.restart,\n focusin: this.pause,\n focusout: this.restart,\n keydown: function keydown(evt) {\n if (/input|textarea/i.test(evt.target.tagName)) {\n /* istanbul ignore next */\n return;\n }\n \n var keyCode = evt.keyCode;\n \n if (keyCode === KEY_CODES.LEFT || keyCode === KEY_CODES.RIGHT) {\n evt.preventDefault();\n evt.stopPropagation();\n \n _this3[keyCode === KEY_CODES.LEFT ? 'prev' : 'next']();\n }\n }\n }; // Touch support event handlers for environment\n \n if (!this.noTouch && hasTouchSupport) {\n // Attach appropriate listeners (prepend event name with '&' for passive mode)\n \n /* istanbul ignore next: JSDOM doesn't support touch events */\n if (hasPointerEventSupport) {\n on['&pointerdown'] = this.touchStart;\n on['&pointerup'] = this.touchEnd;\n } else {\n on['&touchstart'] = this.touchStart;\n on['&touchmove'] = this.touchMove;\n on['&touchend'] = this.touchEnd;\n }\n } // Return the carousel\n \n \n return h('div', {\n staticClass: 'carousel',\n class: {\n slide: !this.noAnimation,\n 'carousel-fade': !this.noAnimation && this.fade,\n 'pointer-event': !this.noTouch && hasTouchSupport && hasPointerEventSupport\n },\n style: {\n background: this.background\n },\n attrs: {\n role: 'region',\n id: this.safeId(),\n 'aria-busy': this.isSliding ? 'true' : 'false'\n },\n on: on\n }, [inner, controls, indicators]);\n }\n });\n \n var imgProps = {\n imgSrc: {\n type: String // default: undefined\n \n },\n imgAlt: {\n type: String // default: undefined\n \n },\n imgWidth: {\n type: [Number, String] // default: undefined\n \n },\n imgHeight: {\n type: [Number, String] // default: undefined\n \n },\n imgBlank: {\n type: Boolean,\n default: false\n },\n imgBlankColor: {\n type: String,\n default: 'transparent'\n }\n };\n var props$k = _objectSpread2(_objectSpread2({}, imgProps), {}, {\n contentVisibleUp: {\n type: String\n },\n contentTag: {\n type: String,\n default: 'div'\n },\n caption: {\n type: String\n },\n captionHtml: {\n type: String\n },\n captionTag: {\n type: String,\n default: 'h3'\n },\n text: {\n type: String\n },\n textHtml: {\n type: String\n },\n textTag: {\n type: String,\n default: 'p'\n },\n background: {\n type: String\n }\n }); // --- Main component ---\n // @vue/component\n \n var BCarouselSlide = /*#__PURE__*/Vue.extend({\n name: 'BCarouselSlide',\n mixins: [idMixin, normalizeSlotMixin],\n inject: {\n bvCarousel: {\n default: function _default() {\n return {\n // Explicitly disable touch if not a child of carousel\n noTouch: true\n };\n }\n }\n },\n props: props$k,\n computed: {\n contentClasses: function contentClasses() {\n return [this.contentVisibleUp ? 'd-none' : '', this.contentVisibleUp ? \"d-\".concat(this.contentVisibleUp, \"-block\") : ''];\n },\n computedWidth: function computedWidth() {\n // Use local width, or try parent width\n return this.imgWidth || this.bvCarousel.imgWidth || null;\n },\n computedHeight: function computedHeight() {\n // Use local height, or try parent height\n return this.imgHeight || this.bvCarousel.imgHeight || null;\n }\n },\n render: function render(h) {\n var $img = this.normalizeSlot('img');\n \n if (!$img && (this.imgSrc || this.imgBlank)) {\n var on = {}; // Touch support event handler\n \n /* istanbul ignore if: difficult to test in JSDOM */\n \n if (!this.bvCarousel.noTouch && hasTouchSupport) {\n on.dragstart = function (evt) {\n evt.preventDefault();\n };\n }\n \n $img = h(BImg, {\n props: _objectSpread2(_objectSpread2({}, pluckProps(imgProps, this.$props, unprefixPropName.bind(null, 'img'))), {}, {\n width: this.computedWidth,\n height: this.computedHeight,\n fluidGrow: true,\n block: true\n }),\n on: on\n });\n }\n \n var $contentChildren = [// Caption\n this.caption || this.captionHtml ? h(this.captionTag, {\n domProps: htmlOrText(this.captionHtml, this.caption)\n }) : false, // Text\n this.text || this.textHtml ? h(this.textTag, {\n domProps: htmlOrText(this.textHtml, this.text)\n }) : false, // Children\n this.normalizeSlot('default') || false];\n var $content = h();\n \n if ($contentChildren.some(Boolean)) {\n $content = h(this.contentTag, {\n staticClass: 'carousel-caption',\n class: this.contentClasses\n }, $contentChildren.map(function ($child) {\n return $child || h();\n }));\n }\n \n return h('div', {\n staticClass: 'carousel-item',\n style: {\n background: this.background || this.bvCarousel.background || null\n },\n attrs: {\n id: this.safeId(),\n role: 'listitem'\n }\n }, [$img, $content]);\n }\n });\n \n var CarouselPlugin =\n /*#__PURE*/\n pluginFactory({\n components: {\n BCarousel: BCarousel,\n BCarouselSlide: BCarouselSlide\n }\n });\n \n // Generic collapse transion helper component\n \n var onEnter = function onEnter(el) {\n el.style.height = 0; // Animaton frame delay needed for `appear` to work\n \n requestAF(function () {\n reflow(el);\n el.style.height = \"\".concat(el.scrollHeight, \"px\");\n });\n };\n \n var onAfterEnter = function onAfterEnter(el) {\n el.style.height = null;\n };\n \n var onLeave = function onLeave(el) {\n el.style.height = 'auto';\n el.style.display = 'block';\n el.style.height = \"\".concat(getBCR(el).height, \"px\");\n reflow(el);\n el.style.height = 0;\n };\n \n var onAfterLeave = function onAfterLeave(el) {\n el.style.height = null;\n }; // Default transition props\n // `appear` will use the enter classes\n \n \n var TRANSITION_PROPS = {\n css: true,\n enterClass: '',\n enterActiveClass: 'collapsing',\n enterToClass: 'collapse show',\n leaveClass: 'collapse show',\n leaveActiveClass: 'collapsing',\n leaveToClass: 'collapse'\n }; // Default transition handlers\n // `appear` will use the enter handlers\n \n var TRANSITION_HANDLERS = {\n enter: onEnter,\n afterEnter: onAfterEnter,\n leave: onLeave,\n afterLeave: onAfterLeave\n }; // @vue/component\n \n var BVCollapse = /*#__PURE__*/Vue.extend({\n name: 'BVCollapse',\n functional: true,\n props: {\n appear: {\n // If `true` (and `visible` is `true` on mount), animate initially visible\n type: Boolean,\n default: false\n }\n },\n render: function render(h, _ref) {\n var props = _ref.props,\n data = _ref.data,\n children = _ref.children;\n return h('transition', // We merge in the `appear` prop last\n a(data, {\n props: TRANSITION_PROPS,\n on: TRANSITION_HANDLERS\n }, {\n props: props\n }), // Note: `<transition>` supports a single root element only\n children);\n }\n });\n \n // @vue/component\n var listenOnRootMixin = {\n methods: {\n /**\n * Safely register event listeners on the root Vue node\n * While Vue automatically removes listeners for individual components,\n * when a component registers a listener on root and is destroyed,\n * this orphans a callback because the node is gone,\n * but the root does not clear the callback\n *\n * When registering a `$root` listener, it also registers a listener on\n * the component's `beforeDestroy()` hook to automatically remove the\n * event listener from the `$root` instance\n *\n * @param {string} event\n * @param {function} callback\n */\n listenOnRoot: function listenOnRoot(event, callback) {\n var _this = this;\n \n this.$root.$on(event, callback);\n this.$on('hook:beforeDestroy', function () {\n _this.$root.$off(event, callback);\n });\n },\n \n /**\n * Safely register a `$once()` event listener on the root Vue node\n * While Vue automatically removes listeners for individual components,\n * when a component registers a listener on root and is destroyed,\n * this orphans a callback because the node is gone,\n * but the root does not clear the callback\n *\n * When registering a $root listener, it also registers a listener on\n * the component's `beforeDestroy` hook to automatically remove the\n * event listener from the $root instance.\n *\n * @param {string} event\n * @param {function} callback\n */\n listenOnRootOnce: function listenOnRootOnce(event, callback) {\n var _this2 = this;\n \n this.$root.$once(event, callback);\n this.$on('hook:beforeDestroy', function () {\n _this2.$root.$off(event, callback);\n });\n },\n \n /**\n * Convenience method for calling `vm.$emit()` on `vm.$root`\n *\n * @param {string} event\n * @param {*} args\n */\n emitOnRoot: function emitOnRoot(event) {\n var _this$$root;\n \n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n \n (_this$$root = this.$root).$emit.apply(_this$$root, [event].concat(args));\n }\n }\n };\n \n var ENTER$1 = KEY_CODES.ENTER,\n SPACE$1 = KEY_CODES.SPACE; // Classes to apply to trigger element\n \n var CLASS_BV_TOGGLE_COLLAPSED = 'collapsed';\n var CLASS_BV_TOGGLE_NOT_COLLAPSED = 'not-collapsed'; // Property key for handler storage\n \n var BV_BASE = '__BV_toggle'; // Root event listener property (Function)\n \n var BV_TOGGLE_ROOT_HANDLER = \"\".concat(BV_BASE, \"_HANDLER__\"); // Trigger element click handler property (Function)\n \n var BV_TOGGLE_CLICK_HANDLER = \"\".concat(BV_BASE, \"_CLICK__\"); // Target visibility state property (Boolean)\n \n var BV_TOGGLE_STATE = \"\".concat(BV_BASE, \"_STATE__\"); // Target ID list property (Array)\n \n var BV_TOGGLE_TARGETS = \"\".concat(BV_BASE, \"_TARGETS__\"); // Commonly used strings\n \n var STRING_FALSE = 'false';\n var STRING_TRUE = 'true'; // Commonly used attribute names\n \n var ATTR_ARIA_CONTROLS = 'aria-controls';\n var ATTR_ARIA_EXPANDED = 'aria-expanded';\n var ATTR_ROLE = 'role';\n var ATTR_TABINDEX = 'tabindex'; // Emitted control event for collapse (emitted to collapse)\n \n var EVENT_TOGGLE = 'bv::toggle::collapse'; // Listen to event for toggle state update (emitted by collapse)\n \n var EVENT_STATE = 'bv::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 \n var EVENT_STATE_SYNC = 'bv::collapse::sync::state'; // Private event we send to collapse to request state update sync event\n \n var EVENT_STATE_REQUEST = 'bv::request::collapse::state';\n var KEYDOWN_KEY_CODES = [ENTER$1, SPACE$1];\n var RX_HASH = /^#/;\n var RX_HASH_ID = /^#[A-Za-z]+[\\w\\-:.]*$/;\n var RX_SPLIT_SEPARATOR = /\\s+/; // --- Helper methods ---\n \n var isNonStandardTag$1 = function isNonStandardTag(el) {\n return !arrayIncludes(['button', 'a'], el.tagName.toLowerCase());\n };\n \n var 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_SPLIT_SEPARATOR) : 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 \n var removeClickListener = function removeClickListener(el) {\n var handler = el[BV_TOGGLE_CLICK_HANDLER];\n \n if (handler) {\n eventOff(el, 'click', handler);\n eventOff(el, 'keydown', handler);\n }\n \n el[BV_TOGGLE_CLICK_HANDLER] = null;\n };\n \n var addClickListener = function addClickListener(el, vnode) {\n removeClickListener(el);\n \n if (vnode.context) {\n var handler = function handler(evt) {\n if (!(evt.type === 'keydown' && !arrayIncludes(KEYDOWN_KEY_CODES, evt.keyCode)) && !isDisabled(el)) {\n var targets = el[BV_TOGGLE_TARGETS] || [];\n targets.forEach(function (target) {\n vnode.context.$root.$emit(EVENT_TOGGLE, target);\n });\n }\n };\n \n el[BV_TOGGLE_CLICK_HANDLER] = handler;\n eventOn(el, 'click', handler);\n \n if (isNonStandardTag$1(el)) {\n eventOn(el, 'keydown', handler);\n }\n }\n };\n \n var removeRootListeners = function removeRootListeners(el, vnode) {\n if (el[BV_TOGGLE_ROOT_HANDLER] && vnode.context) {\n vnode.context.$root.$off([EVENT_STATE, EVENT_STATE_SYNC], el[BV_TOGGLE_ROOT_HANDLER]);\n }\n \n el[BV_TOGGLE_ROOT_HANDLER] = null;\n };\n \n var 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([EVENT_STATE, EVENT_STATE_SYNC], handler);\n }\n };\n \n var 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 \n var resetProp = function resetProp(el, prop) {\n el[prop] = null;\n delete el[prop];\n }; // Handle directive updates\n \n \n var handleUpdate = function handleUpdate(el, binding, vnode) {\n /* istanbul ignore next: should never happen */\n if (!isBrowser || !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$1(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);\n /* istanbul ignore else */\n // Ensure the `aria-controls` hasn't been overwritten\n // or removed when vnode updates\n \n if (targets.length) {\n setAttr(el, ATTR_ARIA_CONTROLS, targets.join(' '));\n } else {\n removeAttr(el, ATTR_ARIA_CONTROLS);\n } // Add/Update our click listener(s)\n \n \n addClickListener(el, vnode); // 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(EVENT_STATE_REQUEST, target);\n });\n }\n };\n /*\n * Export our directive\n */\n \n \n 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\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 }\n };\n \n // Accordion event name we emit on `$root`\n \n var EVENT_ACCORDION = 'bv::collapse::accordion'; // --- Main component ---\n // @vue/component\n \n var BCollapse = /*#__PURE__*/Vue.extend({\n name: 'BCollapse',\n mixins: [idMixin, listenOnRootMixin, normalizeSlotMixin],\n model: {\n prop: 'visible',\n event: 'input'\n },\n props: {\n isNav: {\n type: Boolean,\n default: false\n },\n accordion: {\n type: String // default: null\n \n },\n visible: {\n type: Boolean,\n default: false\n },\n tag: {\n type: String,\n default: 'div'\n },\n appear: {\n // If `true` (and `visible` is `true` on mount), animate initially visible\n type: Boolean,\n default: false\n }\n },\n data: function data() {\n return {\n show: this.visible,\n transitioning: false\n };\n },\n computed: {\n classObject: function classObject() {\n return {\n 'navbar-collapse': this.isNav,\n collapse: !this.transitioning,\n show: this.show && !this.transitioning\n };\n }\n },\n watch: {\n visible: function visible(newVal) {\n if (newVal !== this.show) {\n this.show = newVal;\n }\n },\n show: function show(newVal, oldVal) {\n if (newVal !== oldVal) {\n this.emitState();\n }\n }\n },\n created: function created() {\n this.show = this.visible;\n },\n mounted: function mounted() {\n var _this = this;\n \n this.show = this.visible; // Listen for toggle events to open/close us\n \n this.listenOnRoot(EVENT_TOGGLE, this.handleToggleEvt); // Listen to other collapses for accordion events\n \n this.listenOnRoot(EVENT_ACCORDION, this.handleAccordionEvt);\n \n if (this.isNav) {\n // Set up handlers\n this.setWindowEvents(true);\n this.handleResize();\n }\n \n this.$nextTick(function () {\n _this.emitState();\n }); // Listen for \"Sync state\" requests from `v-b-toggle`\n \n this.listenOnRoot(EVENT_STATE_REQUEST, function (id) {\n if (id === _this.safeId()) {\n _this.$nextTick(_this.emitSync);\n }\n });\n },\n updated: function updated() {\n // Emit a private event every time this component updates to ensure\n // the toggle button is in sync with the collapse's state\n // It is emitted regardless if the visible state changes\n this.emitSync();\n },\n \n /* istanbul ignore next */\n deactivated: function deactivated()\n /* istanbul ignore next */\n {\n if (this.isNav) {\n this.setWindowEvents(false);\n }\n },\n \n /* istanbul ignore next */\n activated: function activated()\n /* istanbul ignore next */\n {\n if (this.isNav) {\n this.setWindowEvents(true);\n }\n \n this.emitSync();\n },\n beforeDestroy: function beforeDestroy() {\n // Trigger state emit if needed\n this.show = false;\n \n if (this.isNav && isBrowser) {\n this.setWindowEvents(false);\n }\n },\n methods: {\n setWindowEvents: function setWindowEvents(on) {\n eventOnOff(on, window, 'resize', this.handleResize, EVENT_OPTIONS_NO_CAPTURE);\n eventOnOff(on, window, 'orientationchange', this.handleResize, EVENT_OPTIONS_NO_CAPTURE);\n },\n toggle: function toggle() {\n this.show = !this.show;\n },\n onEnter: function onEnter() {\n this.transitioning = true; // This should be moved out so we can add cancellable events\n \n this.$emit('show');\n },\n onAfterEnter: function onAfterEnter() {\n this.transitioning = false;\n this.$emit('shown');\n },\n onLeave: function onLeave() {\n this.transitioning = true; // This should be moved out so we can add cancellable events\n \n this.$emit('hide');\n },\n onAfterLeave: function onAfterLeave() {\n this.transitioning = false;\n this.$emit('hidden');\n },\n emitState: function emitState() {\n this.$emit('input', this.show); // Let `v-b-toggle` know the state of this collapse\n \n this.emitOnRoot(EVENT_STATE, this.safeId(), this.show);\n \n if (this.accordion && this.show) {\n // Tell the other collapses in this accordion to close\n this.emitOnRoot(EVENT_ACCORDION, this.safeId(), this.accordion);\n }\n },\n emitSync: function emitSync() {\n // Emit a private event every time this component updates to ensure\n // the toggle button is in sync with the collapse's state\n // It is emitted regardless if the visible state changes\n this.emitOnRoot(EVENT_STATE_SYNC, this.safeId(), this.show);\n },\n checkDisplayBlock: function checkDisplayBlock() {\n // Check to see if the collapse has `display: block !important` set\n // We can't set `display: none` directly on `this.$el`, as it would\n // trigger a new transition to start (or cancel a current one)\n var restore = hasClass(this.$el, 'show');\n removeClass(this.$el, 'show');\n var isBlock = getCS(this.$el).display === 'block';\n \n if (restore) {\n addClass(this.$el, 'show');\n }\n \n return isBlock;\n },\n clickHandler: function clickHandler(evt) {\n // If we are in a nav/navbar, close the collapse when non-disabled link clicked\n var el = evt.target;\n \n if (!this.isNav || !el || getCS(this.$el).display !== 'block') {\n /* istanbul ignore next: can't test getComputedStyle in JSDOM */\n return;\n }\n \n if (matches(el, '.nav-link,.dropdown-item') || closest('.nav-link,.dropdown-item', el)) {\n if (!this.checkDisplayBlock()) {\n // Only close the collapse if it is not forced to be `display: block !important`\n this.show = false;\n }\n }\n },\n handleToggleEvt: function handleToggleEvt(target) {\n if (target !== this.safeId()) {\n return;\n }\n \n this.toggle();\n },\n handleAccordionEvt: function handleAccordionEvt(openedId, accordion) {\n if (!this.accordion || accordion !== this.accordion) {\n return;\n }\n \n if (openedId === this.safeId()) {\n // Open this collapse if not shown\n if (!this.show) {\n this.toggle();\n }\n } else {\n // Close this collapse if shown\n if (this.show) {\n this.toggle();\n }\n }\n },\n handleResize: function handleResize() {\n // Handler for orientation/resize to set collapsed state in nav/navbar\n this.show = getCS(this.$el).display === 'block';\n }\n },\n render: function render(h) {\n var _this2 = this;\n \n var scope = {\n visible: this.show,\n close: function close() {\n return _this2.show = false;\n }\n };\n var content = h(this.tag, {\n class: this.classObject,\n directives: [{\n name: 'show',\n value: this.show\n }],\n attrs: {\n id: this.safeId()\n },\n on: {\n click: this.clickHandler\n }\n }, [this.normalizeSlot('default', scope)]);\n return h(BVCollapse, {\n props: {\n appear: this.appear\n },\n on: {\n enter: this.onEnter,\n afterEnter: this.onAfterEnter,\n leave: this.onLeave,\n afterLeave: this.onAfterLeave\n }\n }, [content]);\n }\n });\n \n var VBTogglePlugin = /*#__PURE__*/pluginFactory({\n directives: {\n VBToggle: VBToggle\n }\n });\n \n var CollapsePlugin = /*#__PURE__*/pluginFactory({\n components: {\n BCollapse: BCollapse\n },\n plugins: {\n VBTogglePlugin: VBTogglePlugin\n }\n });\n \n /**!\n * @fileOverview Kickass library to create and place poppers near their reference elements.\n * @version 1.16.1\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 var isBrowser$1 = typeof window !== 'undefined' && typeof document !== 'undefined' && typeof navigator !== 'undefined';\n \n var timeoutDuration = function () {\n var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\n for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n if (isBrowser$1 && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n return 1;\n }\n }\n return 0;\n }();\n \n function microtaskDebounce(fn) {\n var called = false;\n return function () {\n if (called) {\n return;\n }\n called = true;\n window.Promise.resolve().then(function () {\n called = false;\n fn();\n });\n };\n }\n \n function taskDebounce(fn) {\n var scheduled = false;\n return function () {\n if (!scheduled) {\n scheduled = true;\n setTimeout(function () {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n }\n \n var supportsMicroTasks = isBrowser$1 && window.Promise;\n \n /**\n * Create a debounced version of a method, that's asynchronously deferred\n * but called in the minimum time possible.\n *\n * @method\n * @memberof Popper.Utils\n * @argument {Function} fn\n * @returns {Function}\n */\n var debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;\n \n /**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\n function isFunction$1(functionToCheck) {\n var getType = {};\n return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n }\n \n /**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\n function getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n var window = element.ownerDocument.defaultView;\n var css = window.getComputedStyle(element, null);\n return property ? css[property] : css;\n }\n \n /**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\n function getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n }\n \n /**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\n function getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element) {\n return document.body;\n }\n \n switch (element.nodeName) {\n case 'HTML':\n case 'BODY':\n return element.ownerDocument.body;\n case '#document':\n return element.body;\n }\n \n // Firefox want us to check `-x` and `-y` variations as well\n \n var _getStyleComputedProp = getStyleComputedProperty(element),\n overflow = _getStyleComputedProp.overflow,\n overflowX = _getStyleComputedProp.overflowX,\n overflowY = _getStyleComputedProp.overflowY;\n \n if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n \n return getScrollParent(getParentNode(element));\n }\n \n /**\n * Returns the reference node of the reference object, or the reference object itself.\n * @method\n * @memberof Popper.Utils\n * @param {Element|Object} reference - the reference element (the popper will be relative to this)\n * @returns {Element} parent\n */\n function getReferenceNode(reference) {\n return reference && reference.referenceNode ? reference.referenceNode : reference;\n }\n \n var isIE11 = isBrowser$1 && !!(window.MSInputMethodContext && document.documentMode);\n var isIE10 = isBrowser$1 && /MSIE 10/.test(navigator.userAgent);\n \n /**\n * Determines if the browser is Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @param {Number} version to check\n * @returns {Boolean} isIE\n */\n function isIE$1(version) {\n if (version === 11) {\n return isIE11;\n }\n if (version === 10) {\n return isIE10;\n }\n return isIE11 || isIE10;\n }\n \n /**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\n function getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n \n var noOffsetParent = isIE$1(10) ? document.body : null;\n \n // NOTE: 1 DOM access here\n var offsetParent = element.offsetParent || null;\n // Skip hidden elements which don't have an offsetParent\n while (offsetParent === noOffsetParent && element.nextElementSibling) {\n offsetParent = (element = element.nextElementSibling).offsetParent;\n }\n \n var nodeName = offsetParent && offsetParent.nodeName;\n \n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return element ? element.ownerDocument.documentElement : document.documentElement;\n }\n \n // .offsetParent will return the closest TH, TD or TABLE in case\n // no offsetParent is present, I hate this job...\n if (['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') {\n return getOffsetParent(offsetParent);\n }\n \n return offsetParent;\n }\n \n function isOffsetContainer(element) {\n var nodeName = element.nodeName;\n \n if (nodeName === 'BODY') {\n return false;\n }\n return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;\n }\n \n /**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\n function getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n \n return node;\n }\n \n /**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\n function findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return document.documentElement;\n }\n \n // Here we make sure to give as \"start\" the element that comes first in the DOM\n var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;\n var start = order ? element1 : element2;\n var end = order ? element2 : element1;\n \n // Get common ancestor container\n var range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n var commonAncestorContainer = range.commonAncestorContainer;\n \n // Both nodes are inside #document\n \n if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n \n return getOffsetParent(commonAncestorContainer);\n }\n \n // one of the nodes is inside shadowDOM, find which one\n var element1root = getRoot(element1);\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n }\n \n /**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\n function getScroll(element) {\n var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';\n \n var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n var nodeName = element.nodeName;\n \n if (nodeName === 'BODY' || nodeName === 'HTML') {\n var html = element.ownerDocument.documentElement;\n var scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n \n return element[upperSide];\n }\n \n /*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\n function includeScroll(rect, element) {\n var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n \n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n var modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n }\n \n /*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n \n function getBordersSize(styles, axis) {\n var sideA = axis === 'x' ? 'Left' : 'Top';\n var sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n \n return parseFloat(styles['border' + sideA + 'Width']) + parseFloat(styles['border' + sideB + 'Width']);\n }\n \n function getSize(axis, body, html, computedStyle) {\n return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE$1(10) ? parseInt(html['offset' + axis]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')]) : 0);\n }\n \n function getWindowSizes(document) {\n var body = document.body;\n var html = document.documentElement;\n var computedStyle = isIE$1(10) && getComputedStyle(html);\n \n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle)\n };\n }\n \n var classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n };\n \n var createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n \n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n }();\n \n \n \n \n \n var defineProperty$1 = function (obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n \n return obj;\n };\n \n var _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n \n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n \n return target;\n };\n \n /**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\n function getClientRect(offsets) {\n return _extends({}, offsets, {\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height\n });\n }\n \n /**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\n function getBoundingClientRect(element) {\n var rect = {};\n \n // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n try {\n if (isIE$1(10)) {\n rect = element.getBoundingClientRect();\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n } else {\n rect = element.getBoundingClientRect();\n }\n } catch (e) {}\n \n var result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top\n };\n \n // subtract scrollbar size from sizes\n var sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {};\n var width = sizes.width || element.clientWidth || result.width;\n var height = sizes.height || element.clientHeight || result.height;\n \n var horizScrollbar = element.offsetWidth - width;\n var vertScrollbar = element.offsetHeight - height;\n \n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n if (horizScrollbar || vertScrollbar) {\n var styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n \n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n \n return getClientRect(result);\n }\n \n function getOffsetRectRelativeToArbitraryNode(children, parent) {\n var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n \n var isIE10 = isIE$1(10);\n var isHTML = parent.nodeName === 'HTML';\n var childrenRect = getBoundingClientRect(children);\n var parentRect = getBoundingClientRect(parent);\n var scrollParent = getScrollParent(children);\n \n var styles = getStyleComputedProperty(parent);\n var borderTopWidth = parseFloat(styles.borderTopWidth);\n var borderLeftWidth = parseFloat(styles.borderLeftWidth);\n \n // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n if (fixedPosition && isHTML) {\n parentRect.top = Math.max(parentRect.top, 0);\n parentRect.left = Math.max(parentRect.left, 0);\n }\n var offsets = getClientRect({\n top: childrenRect.top - parentRect.top - borderTopWidth,\n left: childrenRect.left - parentRect.left - borderLeftWidth,\n width: childrenRect.width,\n height: childrenRect.height\n });\n offsets.marginTop = 0;\n offsets.marginLeft = 0;\n \n // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n if (!isIE10 && isHTML) {\n var marginTop = parseFloat(styles.marginTop);\n var marginLeft = parseFloat(styles.marginLeft);\n \n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n \n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n \n if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {\n offsets = includeScroll(offsets, parent);\n }\n \n return offsets;\n }\n \n function getViewportOffsetRectRelativeToArtbitraryNode(element) {\n var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n \n var html = element.ownerDocument.documentElement;\n var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n var width = Math.max(html.clientWidth, window.innerWidth || 0);\n var height = Math.max(html.clientHeight, window.innerHeight || 0);\n \n var scrollTop = !excludeScroll ? getScroll(html) : 0;\n var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n \n var offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width: width,\n height: height\n };\n \n return getClientRect(offset);\n }\n \n /**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\n function isFixed(element) {\n var nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n var parentNode = getParentNode(element);\n if (!parentNode) {\n return false;\n }\n return isFixed(parentNode);\n }\n \n /**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n \n function getFixedPositionOffsetParent(element) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element || !element.parentElement || isIE$1()) {\n return document.documentElement;\n }\n var el = element.parentElement;\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n return el || document.documentElement;\n }\n \n /**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\n function getBoundaries(popper, reference, padding, boundariesElement) {\n var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n \n // NOTE: 1 DOM access here\n \n var boundaries = { top: 0, left: 0 };\n var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n \n // Handle viewport case\n if (boundariesElement === 'viewport') {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n } else {\n // Handle other cases based on DOM element used as boundaries\n var boundariesNode = void 0;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(reference));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = popper.ownerDocument.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = popper.ownerDocument.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n \n var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);\n \n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n var _getWindowSizes = getWindowSizes(popper.ownerDocument),\n height = _getWindowSizes.height,\n width = _getWindowSizes.width;\n \n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n \n // Add paddings\n padding = padding || 0;\n var isPaddingNumber = typeof padding === 'number';\n boundaries.left += isPaddingNumber ? padding : padding.left || 0;\n boundaries.top += isPaddingNumber ? padding : padding.top || 0;\n boundaries.right -= isPaddingNumber ? padding : padding.right || 0;\n boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0;\n \n return boundaries;\n }\n \n function getArea(_ref) {\n var width = _ref.width,\n height = _ref.height;\n \n return width * height;\n }\n \n /**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\n function computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {\n var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n \n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n \n var boundaries = getBoundaries(popper, reference, padding, boundariesElement);\n \n var rects = {\n top: {\n width: boundaries.width,\n height: refRect.top - boundaries.top\n },\n right: {\n width: boundaries.right - refRect.right,\n height: boundaries.height\n },\n bottom: {\n width: boundaries.width,\n height: boundaries.bottom - refRect.bottom\n },\n left: {\n width: refRect.left - boundaries.left,\n height: boundaries.height\n }\n };\n \n var sortedAreas = Object.keys(rects).map(function (key) {\n return _extends({\n key: key\n }, rects[key], {\n area: getArea(rects[key])\n });\n }).sort(function (a, b) {\n return b.area - a.area;\n });\n \n var filteredAreas = sortedAreas.filter(function (_ref2) {\n var width = _ref2.width,\n height = _ref2.height;\n return width >= popper.clientWidth && height >= popper.clientHeight;\n });\n \n var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;\n \n var variation = placement.split('-')[1];\n \n return computedPlacement + (variation ? '-' + variation : '');\n }\n \n /**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\n function getReferenceOffsets(state, popper, reference) {\n var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n \n var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n }\n \n /**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\n function getOuterSizes(element) {\n var window = element.ownerDocument.defaultView;\n var styles = window.getComputedStyle(element);\n var x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0);\n var y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0);\n var result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x\n };\n return result;\n }\n \n /**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\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 * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\n function getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n \n // Get popper node sizes\n var popperRect = getOuterSizes(popper);\n \n // Add position, width and height to our offsets object\n var popperOffsets = {\n width: popperRect.width,\n height: popperRect.height\n };\n \n // depending by the popper placement we have to compute its offsets slightly differently\n var isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n var mainSide = isHoriz ? 'top' : 'left';\n var secondarySide = isHoriz ? 'left' : 'top';\n var measurement = isHoriz ? 'height' : 'width';\n var secondaryMeasurement = !isHoriz ? 'height' : 'width';\n \n popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];\n }\n \n return popperOffsets;\n }\n \n /**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\n function find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n \n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n }\n \n /**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\n function findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(function (cur) {\n return cur[prop] === value;\n });\n }\n \n // use `find` + `indexOf` if `findIndex` isn't supported\n var match = find(arr, function (obj) {\n return obj[prop] === value;\n });\n return arr.indexOf(match);\n }\n \n /**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\n function runModifiers(modifiers, data, ends) {\n var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n \n modifiersToRun.forEach(function (modifier) {\n if (modifier['function']) {\n // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n if (modifier.enabled && isFunction$1(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n \n data = fn(data, modifier);\n }\n });\n \n return data;\n }\n \n /**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.<br />\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\n function update() {\n // if popper is destroyed, don't perform any further update\n if (this.state.isDestroyed) {\n return;\n }\n \n var data = {\n instance: this,\n styles: {},\n arrowStyles: {},\n attributes: {},\n flipped: false,\n offsets: {}\n };\n \n // compute reference element offsets\n data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed);\n \n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding);\n \n // store the computed placement inside `originalPlacement`\n data.originalPlacement = data.placement;\n \n data.positionFixed = this.options.positionFixed;\n \n // compute the popper offsets\n data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);\n \n data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';\n \n // run the modifiers\n data = runModifiers(this.modifiers, data);\n \n // the first `update` will call `onCreate` callback\n // the other ones will call `onUpdate` callback\n if (!this.state.isCreated) {\n this.state.isCreated = true;\n this.options.onCreate(data);\n } else {\n this.options.onUpdate(data);\n }\n }\n \n /**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\n function isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(function (_ref) {\n var name = _ref.name,\n enabled = _ref.enabled;\n return enabled && name === modifierName;\n });\n }\n \n /**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\n function getSupportedPropertyName(property) {\n var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n var upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n \n for (var i = 0; i < prefixes.length; i++) {\n var prefix = prefixes[i];\n var toCheck = prefix ? '' + prefix + upperProp : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n }\n \n /**\n * Destroys the popper.\n * @method\n * @memberof Popper\n */\n function destroy$1() {\n this.state.isDestroyed = true;\n \n // touch DOM only if `applyStyle` modifier is enabled\n if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n this.popper.removeAttribute('x-placement');\n this.popper.style.position = '';\n this.popper.style.top = '';\n this.popper.style.left = '';\n this.popper.style.right = '';\n this.popper.style.bottom = '';\n this.popper.style.willChange = '';\n this.popper.style[getSupportedPropertyName('transform')] = '';\n }\n \n this.disableEventListeners();\n \n // remove the popper if user explicitly asked for the deletion on destroy\n // do not use `remove` because IE11 doesn't support it\n if (this.options.removeOnDestroy) {\n this.popper.parentNode.removeChild(this.popper);\n }\n return this;\n }\n \n /**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\n function getWindow(element) {\n var ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n }\n \n function attachToScrollParents(scrollParent, event, callback, scrollParents) {\n var isBody = scrollParent.nodeName === 'BODY';\n var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n \n if (!isBody) {\n attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);\n }\n scrollParents.push(target);\n }\n \n /**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\n function setupEventListeners(reference, options, state, updateBound) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n \n // Scroll event listener on scroll parents\n var scrollElement = getScrollParent(reference);\n attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n \n return state;\n }\n \n /**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\n function enableEventListeners() {\n if (!this.state.eventsEnabled) {\n this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);\n }\n }\n \n /**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\n function removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound);\n \n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(function (target) {\n target.removeEventListener('scroll', state.updateBound);\n });\n \n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n }\n \n /**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger `onUpdate` callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\n function disableEventListeners() {\n if (this.state.eventsEnabled) {\n cancelAnimationFrame(this.scheduleUpdate);\n this.state = removeEventListeners(this.reference, this.state);\n }\n }\n \n /**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\n function isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n }\n \n /**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\n function setStyles(element, styles) {\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 && isNumeric(styles[prop])) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n }\n \n /**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\n function setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function (prop) {\n var value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n }\n \n /**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\n function applyStyle(data) {\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 setStyles(data.instance.popper, data.styles);\n \n // any property present in `data.attributes` will be applied to the popper,\n // they will be set as HTML attributes of the element\n setAttributes(data.instance.popper, data.attributes);\n \n // if arrowElement is defined and arrowStyles has some properties\n if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n setStyles(data.arrowElement, data.arrowStyles);\n }\n \n return data;\n }\n \n /**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper\n * @param {Object} options - Popper.js options\n */\n function applyStyleOnLoad(reference, popper, options, modifierOptions, state) {\n // compute reference element offsets\n var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n \n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding);\n \n popper.setAttribute('x-placement', placement);\n \n // Apply `position` to popper before anything else because\n // without the position applied we can't guarantee correct computations\n setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n \n return options;\n }\n \n /**\n * @function\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Boolean} shouldRound - If the offsets should be rounded at all\n * @returns {Object} The popper's position offsets rounded\n *\n * The tale of pixel-perfect positioning. It's still not 100% perfect, but as\n * good as it can be within reason.\n * Discussion here: https://github.com/FezVrasta/popper.js/pull/715\n *\n * Low DPI screens cause a popper to be blurry if not using full pixels (Safari\n * as well on High DPI screens).\n *\n * Firefox prefers no rounding for positioning and does not have blurriness on\n * high DPI screens.\n *\n * Only horizontal placement and left/right values need to be considered.\n */\n function getRoundedOffsets(data, shouldRound) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n var round = Math.round,\n floor = Math.floor;\n \n var noRound = function noRound(v) {\n return v;\n };\n \n var referenceWidth = round(reference.width);\n var popperWidth = round(popper.width);\n \n var isVertical = ['left', 'right'].indexOf(data.placement) !== -1;\n var isVariation = data.placement.indexOf('-') !== -1;\n var sameWidthParity = referenceWidth % 2 === popperWidth % 2;\n var bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1;\n \n var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthParity ? round : floor;\n var verticalToInteger = !shouldRound ? noRound : round;\n \n return {\n left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left),\n top: verticalToInteger(popper.top),\n bottom: verticalToInteger(popper.bottom),\n right: horizontalToInteger(popper.right)\n };\n }\n \n var isFirefox = isBrowser$1 && /Firefox/i.test(navigator.userAgent);\n \n /**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\n function computeStyle(data, options) {\n var x = options.x,\n y = options.y;\n var popper = data.offsets.popper;\n \n // Remove this legacy support in Popper.js v2\n \n var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'applyStyle';\n }).gpuAcceleration;\n if (legacyGpuAccelerationOption !== undefined) {\n console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');\n }\n var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration;\n \n var offsetParent = getOffsetParent(data.instance.popper);\n var offsetParentRect = getBoundingClientRect(offsetParent);\n \n // Styles\n var styles = {\n position: popper.position\n };\n \n var offsets = getRoundedOffsets(data, window.devicePixelRatio < 2 || !isFirefox);\n \n var sideA = x === 'bottom' ? 'top' : 'bottom';\n var sideB = y === 'right' ? 'left' : 'right';\n \n // if gpuAcceleration is set to `true` and transform is supported,\n // we use `translate3d` to apply the position to the popper we\n // automatically use the supported prefixed version if needed\n var prefixedProperty = getSupportedPropertyName('transform');\n \n // now, let's make a step back and look at this code closely (wtf?)\n // If the content of the popper grows once it's been positioned, it\n // may happen that the popper gets misplaced because of the new content\n // overflowing its reference element\n // To avoid this problem, we provide two options (x and y), which allow\n // the consumer to define the offset origin.\n // If we position a popper on top of a reference element, we can set\n // `x` to `top` to make the popper grow towards its top instead of\n // its bottom.\n var left = void 0,\n top = void 0;\n if (sideA === 'bottom') {\n // when offsetParent is <html> the positioning is relative to the bottom of the screen (excluding the scrollbar)\n // and not the bottom of the html element\n if (offsetParent.nodeName === 'HTML') {\n top = -offsetParent.clientHeight + offsets.bottom;\n } else {\n top = -offsetParentRect.height + offsets.bottom;\n }\n } else {\n top = offsets.top;\n }\n if (sideB === 'right') {\n if (offsetParent.nodeName === 'HTML') {\n left = -offsetParent.clientWidth + offsets.right;\n } else {\n left = -offsetParentRect.width + offsets.right;\n }\n } else {\n left = offsets.left;\n }\n if (gpuAcceleration && prefixedProperty) {\n styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';\n styles[sideA] = 0;\n styles[sideB] = 0;\n styles.willChange = 'transform';\n } else {\n // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n var invertTop = sideA === 'bottom' ? -1 : 1;\n var invertLeft = sideB === 'right' ? -1 : 1;\n styles[sideA] = top * invertTop;\n styles[sideB] = left * invertLeft;\n styles.willChange = sideA + ', ' + sideB;\n }\n \n // Attributes\n var attributes = {\n 'x-placement': data.placement\n };\n \n // Update `data` attributes, styles and arrowStyles\n data.attributes = _extends({}, attributes, data.attributes);\n data.styles = _extends({}, styles, data.styles);\n data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles);\n \n return data;\n }\n \n /**\n * Helper used to know if the given modifier depends from another one.<br />\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\n function isModifierRequired(modifiers, requestingName, requestedName) {\n var requesting = find(modifiers, function (_ref) {\n var name = _ref.name;\n return name === requestingName;\n });\n \n var isRequired = !!requesting && modifiers.some(function (modifier) {\n return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;\n });\n \n if (!isRequired) {\n var _requesting = '`' + requestingName + '`';\n var requested = '`' + requestedName + '`';\n console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');\n }\n return isRequired;\n }\n \n /**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\n function arrow(data, options) {\n var _data$offsets$arrow;\n \n // arrow depends on keepTogether in order to work\n if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n return data;\n }\n \n var arrowElement = options.element;\n \n // if arrowElement is a string, suppose it's a CSS selector\n if (typeof arrowElement === 'string') {\n arrowElement = data.instance.popper.querySelector(arrowElement);\n \n // if arrowElement is not found, don't run the modifier\n if (!arrowElement) {\n return data;\n }\n } else {\n // if the arrowElement isn't a query selector we must check that the\n // provided DOM node is child of its popper node\n if (!data.instance.popper.contains(arrowElement)) {\n console.warn('WARNING: `arrow.element` must be child of its popper element!');\n return data;\n }\n }\n \n var placement = data.placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n \n var isVertical = ['left', 'right'].indexOf(placement) !== -1;\n \n var len = isVertical ? 'height' : 'width';\n var sideCapitalized = isVertical ? 'Top' : 'Left';\n var side = sideCapitalized.toLowerCase();\n var altSide = isVertical ? 'left' : 'top';\n var opSide = isVertical ? 'bottom' : 'right';\n var arrowElementSize = getOuterSizes(arrowElement)[len];\n \n //\n // extends keepTogether behavior making sure the popper and its\n // reference have enough pixels in conjunction\n //\n \n // top/left side\n if (reference[opSide] - arrowElementSize < popper[side]) {\n data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);\n }\n // bottom/right side\n if (reference[side] + arrowElementSize > popper[opSide]) {\n data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];\n }\n data.offsets.popper = getClientRect(data.offsets.popper);\n \n // compute center of the popper\n var center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n \n // Compute the sideValue using the updated popper offsets\n // take popper margin in account because we don't have this info available\n var css = getStyleComputedProperty(data.instance.popper);\n var popperMarginSide = parseFloat(css['margin' + sideCapitalized]);\n var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width']);\n var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n \n // prevent arrowElement from being placed not contiguously to its popper\n sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n \n data.arrowElement = arrowElement;\n data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty$1(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty$1(_data$offsets$arrow, altSide, ''), _data$offsets$arrow);\n \n return data;\n }\n \n /**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\n function getOppositeVariation(variation) {\n if (variation === 'end') {\n return 'start';\n } else if (variation === 'start') {\n return 'end';\n }\n return variation;\n }\n \n /**\n * List of accepted placements to use as values of the `placement` option.<br />\n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.<br />\n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-end` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\n var placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'];\n \n // Get rid of `auto` `auto-start` and `auto-end`\n var validPlacements = placements.slice(3);\n \n /**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\n function clockwise(placement) {\n var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n \n var index = validPlacements.indexOf(placement);\n var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));\n return counter ? arr.reverse() : arr;\n }\n \n var BEHAVIORS = {\n FLIP: 'flip',\n CLOCKWISE: 'clockwise',\n COUNTERCLOCKWISE: 'counterclockwise'\n };\n \n /**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\n function flip(data, options) {\n // if `inner` modifier is enabled, we can't use the `flip` modifier\n if (isModifierEnabled(data.instance.modifiers, 'inner')) {\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 boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);\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 \n switch (options.behavior) {\n case BEHAVIORS.FLIP:\n flipOrder = [placement, placementOpposite];\n break;\n case BEHAVIORS.CLOCKWISE:\n flipOrder = clockwise(placement);\n break;\n case BEHAVIORS.COUNTERCLOCKWISE:\n flipOrder = clockwise(placement, true);\n break;\n default:\n flipOrder = options.behavior;\n }\n \n flipOrder.forEach(function (step, index) {\n if (placement !== step || flipOrder.length === index + 1) {\n return data;\n }\n \n placement = data.placement.split('-')[0];\n placementOpposite = getOppositePlacement(placement);\n \n var popperOffsets = data.offsets.popper;\n var refOffsets = data.offsets.reference;\n \n // using floor because the reference offsets may contain decimals we are not going to consider here\n var floor = Math.floor;\n var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom);\n \n var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);\n \n var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom;\n \n // flip the variation if required\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n \n // flips variation if reference element overflows boundaries\n var flippedVariationByRef = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom);\n \n // flips variation if popper content overflows boundaries\n var flippedVariationByContent = !!options.flipVariationsByContent && (isVertical && variation === 'start' && overflowsRight || isVertical && variation === 'end' && overflowsLeft || !isVertical && variation === 'start' && overflowsBottom || !isVertical && variation === 'end' && overflowsTop);\n \n var flippedVariation = flippedVariationByRef || flippedVariationByContent;\n \n if (overlapsRef || overflowsBoundaries || flippedVariation) {\n // this boolean to detect any flip loop\n data.flipped = true;\n \n if (overlapsRef || overflowsBoundaries) {\n placement = flipOrder[index + 1];\n }\n \n if (flippedVariation) {\n variation = getOppositeVariation(variation);\n }\n \n data.placement = placement + (variation ? '-' + variation : '');\n \n // this object contains `position`, we want to preserve it along with\n // any additional property we may add in the future\n data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));\n \n data = runModifiers(data.instance.modifiers, data, 'flip');\n }\n });\n return data;\n }\n \n /**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\n function keepTogether(data) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n \n var placement = data.placement.split('-')[0];\n var floor = Math.floor;\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n var side = isVertical ? 'right' : 'bottom';\n var opSide = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n \n if (popper[side] < floor(reference[opSide])) {\n data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];\n }\n if (popper[opSide] > floor(reference[side])) {\n data.offsets.popper[opSide] = floor(reference[side]);\n }\n \n return data;\n }\n \n /**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\n function toValue(str, measurement, popperOffsets, referenceOffsets) {\n // separate value from unit\n var split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n var value = +split[1];\n var unit = split[2];\n \n // If it's not a number it's an operator, I guess\n if (!value) {\n return str;\n }\n \n if (unit.indexOf('%') === 0) {\n var element = void 0;\n switch (unit) {\n case '%p':\n element = popperOffsets;\n break;\n case '%':\n case '%r':\n default:\n element = referenceOffsets;\n }\n \n var rect = getClientRect(element);\n return rect[measurement] / 100 * value;\n } else if (unit === 'vh' || unit === 'vw') {\n // if is a vh or vw, we calculate the size based on the viewport\n var size = void 0;\n if (unit === 'vh') {\n size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n } else {\n size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n }\n return size / 100 * value;\n } else {\n // if is an explicit pixel unit, we get rid of the unit and keep the value\n // if is an implicit unit, it's px, and we return just the value\n return value;\n }\n }\n \n /**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\n function parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {\n var offsets = [0, 0];\n \n // Use height if placement is left or right and index is 0 otherwise use width\n // in this way the first offset will use an axis and the second one\n // will use the other one\n var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n \n // Split the offset string to obtain a list of values and operands\n // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n var fragments = offset.split(/(\\+|\\-)/).map(function (frag) {\n return frag.trim();\n });\n \n // Detect if the offset string contains a pair of values or a single one\n // they could be separated by comma or space\n var divider = fragments.indexOf(find(fragments, function (frag) {\n return frag.search(/,|\\s/) !== -1;\n }));\n \n if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');\n }\n \n // If divider is found, we divide the list of values and operands to divide\n // them by ofset X and Y.\n var splitRegex = /\\s*,\\s*|\\s+/;\n var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments];\n \n // Convert the values with units to absolute pixels to allow our computations\n ops = ops.map(function (op, index) {\n // Most of the units rely on the orientation of the popper\n var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';\n var mergeWithPrevious = false;\n return op\n // This aggregates any `+` or `-` sign that aren't considered operators\n // e.g.: 10 + +5 => [10, +, +5]\n .reduce(function (a, b) {\n if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n a[a.length - 1] = b;\n mergeWithPrevious = true;\n return a;\n } else if (mergeWithPrevious) {\n a[a.length - 1] += b;\n mergeWithPrevious = false;\n return a;\n } else {\n return a.concat(b);\n }\n }, [])\n // Here we convert the string values into number values (in px)\n .map(function (str) {\n return toValue(str, measurement, popperOffsets, referenceOffsets);\n });\n });\n \n // Loop trough the offsets arrays and execute the operations\n ops.forEach(function (op, index) {\n op.forEach(function (frag, index2) {\n if (isNumeric(frag)) {\n offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n }\n });\n });\n return offsets;\n }\n \n /**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\n function offset$1(data, _ref) {\n var offset = _ref.offset;\n var placement = data.placement,\n _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n \n var basePlacement = placement.split('-')[0];\n \n var offsets = void 0;\n if (isNumeric(+offset)) {\n offsets = [+offset, 0];\n } else {\n offsets = parseOffset(offset, popper, reference, basePlacement);\n }\n \n if (basePlacement === 'left') {\n popper.top += offsets[0];\n popper.left -= offsets[1];\n } else if (basePlacement === 'right') {\n popper.top += offsets[0];\n popper.left += offsets[1];\n } else if (basePlacement === 'top') {\n popper.left += offsets[0];\n popper.top -= offsets[1];\n } else if (basePlacement === 'bottom') {\n popper.left += offsets[0];\n popper.top += offsets[1];\n }\n \n data.popper = popper;\n return data;\n }\n \n /**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\n function preventOverflow(data, options) {\n var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper);\n \n // If offsetParent is the reference element, we really want to\n // go one step up and use the next offsetParent as reference to\n // avoid to make this modifier completely useless and look like broken\n if (data.instance.reference === boundariesElement) {\n boundariesElement = getOffsetParent(boundariesElement);\n }\n \n // NOTE: DOM access here\n // resets the popper's position so that the document size can be calculated excluding\n // the size of the popper element itself\n var transformProp = getSupportedPropertyName('transform');\n var popperStyles = data.instance.popper.style; // assignment to help minification\n var top = popperStyles.top,\n left = popperStyles.left,\n transform = popperStyles[transformProp];\n \n popperStyles.top = '';\n popperStyles.left = '';\n popperStyles[transformProp] = '';\n \n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);\n \n // NOTE: DOM access here\n // restores the original style properties after the offsets have been computed\n popperStyles.top = top;\n popperStyles.left = left;\n popperStyles[transformProp] = transform;\n \n options.boundaries = boundaries;\n \n var order = options.priority;\n var popper = data.offsets.popper;\n \n var check = {\n primary: function primary(placement) {\n var value = popper[placement];\n if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {\n value = Math.max(popper[placement], boundaries[placement]);\n }\n return defineProperty$1({}, placement, value);\n },\n secondary: function secondary(placement) {\n var mainSide = placement === 'right' ? 'left' : 'top';\n var value = popper[mainSide];\n if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {\n value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));\n }\n return defineProperty$1({}, mainSide, value);\n }\n };\n \n order.forEach(function (placement) {\n var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n popper = _extends({}, popper, check[side](placement));\n });\n \n data.offsets.popper = popper;\n \n return data;\n }\n \n /**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\n function shift(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 _data$offsets = data.offsets,\n reference = _data$offsets.reference,\n popper = _data$offsets.popper;\n \n var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n var side = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n \n var shiftOffsets = {\n start: defineProperty$1({}, side, reference[side]),\n end: defineProperty$1({}, side, reference[side] + reference[measurement] - popper[measurement])\n };\n \n data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);\n }\n \n return data;\n }\n \n /**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\n function hide(data) {\n if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n return data;\n }\n \n var refRect = data.offsets.reference;\n var bound = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'preventOverflow';\n }).boundaries;\n \n if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === true) {\n return data;\n }\n \n data.hide = true;\n data.attributes['x-out-of-boundaries'] = '';\n } else {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === false) {\n return data;\n }\n \n data.hide = false;\n data.attributes['x-out-of-boundaries'] = false;\n }\n \n return data;\n }\n \n /**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\n function inner(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n \n var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n \n var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n \n popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n \n data.placement = getOppositePlacement(placement);\n data.offsets.popper = getClientRect(popper);\n \n return data;\n }\n \n /**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.<br />\n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n \n /**\n * Modifiers are plugins used to alter the behavior of your poppers.<br />\n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\n var modifiers = {\n /**\n * Modifier used to shift the popper on the start or end of its reference\n * element.<br />\n * It will read the variation of the `placement` property.<br />\n * It can be one either `-end` or `-start`.\n * @memberof modifiers\n * @inner\n */\n shift: {\n /** @prop {number} order=100 - Index used to define the order of execution */\n order: 100,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: shift\n },\n \n /**\n * The `offset` modifier can shift your popper on both its axis.\n *\n * It accepts the following units:\n * - `px` or unit-less, interpreted as pixels\n * - `%` or `%r`, percentage relative to the length of the reference element\n * - `%p`, percentage relative to the length of the popper element\n * - `vw`, CSS viewport width unit\n * - `vh`, CSS viewport height unit\n *\n * For length is intended the main axis relative to the placement of the popper.<br />\n * This means that if the placement is `top` or `bottom`, the length will be the\n * `width`. In case of `left` or `right`, it will be the `height`.\n *\n * You can provide a single value (as `Number` or `String`), or a pair of values\n * as `String` divided by a comma or one (or more) white spaces.<br />\n * The latter is a deprecated method because it leads to confusion and will be\n * removed in v2.<br />\n * Additionally, it accepts additions and subtractions between different units.\n * Note that multiplications and divisions aren't supported.\n *\n * Valid examples are:\n * ```\n * 10\n * '10%'\n * '10, 10'\n * '10%, 10'\n * '10 + 10%'\n * '10 - 5vh + 3%'\n * '-10px + 5vh, 5px - 6%'\n * ```\n * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373).\n *\n * @memberof modifiers\n * @inner\n */\n offset: {\n /** @prop {number} order=200 - Index used to define the order of execution */\n order: 200,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: offset$1,\n /** @prop {Number|String} offset=0\n * The offset value as described in the modifier description\n */\n offset: 0\n },\n \n /**\n * Modifier used to prevent the popper from being positioned outside the boundary.\n *\n * A scenario exists where the reference itself is not within the boundaries.<br />\n * We can say it has \"escaped the boundaries\" — or just \"escaped\".<br />\n * In this case we need to decide whether the popper should either:\n *\n * - detach from the reference and remain \"trapped\" in the boundaries, or\n * - if it should ignore the boundary and \"escape with its reference\"\n *\n * When `escapeWithReference` is set to`true` and reference is completely\n * outside its boundaries, the popper will overflow (or completely leave)\n * the boundaries in order to remain attached to the edge of the reference.\n *\n * @memberof modifiers\n * @inner\n */\n preventOverflow: {\n /** @prop {number} order=300 - Index used to define the order of execution */\n order: 300,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: preventOverflow,\n /**\n * @prop {Array} [priority=['left','right','top','bottom']]\n * Popper will try to prevent overflow following these priorities by default,\n * then, it could overflow on the left and on top of the `boundariesElement`\n */\n priority: ['left', 'right', 'top', 'bottom'],\n /**\n * @prop {number} padding=5\n * Amount of pixel used to define a minimum distance between the boundaries\n * and the popper. This makes sure the popper always has a little padding\n * between the edges of its container\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='scrollParent'\n * Boundaries used by the modifier. Can be `scrollParent`, `window`,\n * `viewport` or any DOM element.\n */\n boundariesElement: 'scrollParent'\n },\n \n /**\n * Modifier used to make sure the reference and its popper stay near each other\n * without leaving any gap between the two. Especially useful when the arrow is\n * enabled and you want to ensure that it points to its reference element.\n * It cares only about the first axis. You can still have poppers with margin\n * between the popper and its reference element.\n * @memberof modifiers\n * @inner\n */\n keepTogether: {\n /** @prop {number} order=400 - Index used to define the order of execution */\n order: 400,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: keepTogether\n },\n \n /**\n * This modifier is used to move the `arrowElement` of the popper to make\n * sure it is positioned between the reference element and its popper element.\n * It will read the outer size of the `arrowElement` node to detect how many\n * pixels of conjunction are needed.\n *\n * It has no effect if no `arrowElement` is provided.\n * @memberof modifiers\n * @inner\n */\n arrow: {\n /** @prop {number} order=500 - Index used to define the order of execution */\n order: 500,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: arrow,\n /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n element: '[x-arrow]'\n },\n \n /**\n * Modifier used to flip the popper's placement when it starts to overlap its\n * reference element.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n *\n * **NOTE:** this modifier will interrupt the current update cycle and will\n * restart it if it detects the need to flip the placement.\n * @memberof modifiers\n * @inner\n */\n flip: {\n /** @prop {number} order=600 - Index used to define the order of execution */\n order: 600,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: flip,\n /**\n * @prop {String|Array} behavior='flip'\n * The behavior used to change the popper's placement. It can be one of\n * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n * placements (with optional variations)\n */\n behavior: 'flip',\n /**\n * @prop {number} padding=5\n * The popper will flip if it hits the edges of the `boundariesElement`\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='viewport'\n * The element which will define the boundaries of the popper position.\n * The popper will never be placed outside of the defined boundaries\n * (except if `keepTogether` is enabled)\n */\n boundariesElement: 'viewport',\n /**\n * @prop {Boolean} flipVariations=false\n * The popper will switch placement variation between `-start` and `-end` when\n * the reference element overlaps its boundaries.\n *\n * The original placement should have a set variation.\n */\n flipVariations: false,\n /**\n * @prop {Boolean} flipVariationsByContent=false\n * The popper will switch placement variation between `-start` and `-end` when\n * the popper element overlaps its reference boundaries.\n *\n * The original placement should have a set variation.\n */\n flipVariationsByContent: false\n },\n \n /**\n * Modifier used to make the popper flow toward the inner of the reference element.\n * By default, when this modifier is disabled, the popper will be placed outside\n * the reference element.\n * @memberof modifiers\n * @inner\n */\n inner: {\n /** @prop {number} order=700 - Index used to define the order of execution */\n order: 700,\n /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n enabled: false,\n /** @prop {ModifierFn} */\n fn: inner\n },\n \n /**\n * Modifier used to hide the popper when its reference element is outside of the\n * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n * be used to hide with a CSS selector the popper when its reference is\n * out of boundaries.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n * @memberof modifiers\n * @inner\n */\n hide: {\n /** @prop {number} order=800 - Index used to define the order of execution */\n order: 800,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: hide\n },\n \n /**\n * Computes the style that will be applied to the popper element to gets\n * properly positioned.\n *\n * Note that this modifier will not touch the DOM, it just prepares the styles\n * so that `applyStyle` modifier can apply it. This separation is useful\n * in case you need to replace `applyStyle` with a custom implementation.\n *\n * This modifier has `850` as `order` value to maintain backward compatibility\n * with previous versions of Popper.js. Expect the modifiers ordering method\n * to change in future major versions of the library.\n *\n * @memberof modifiers\n * @inner\n */\n computeStyle: {\n /** @prop {number} order=850 - Index used to define the order of execution */\n order: 850,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: computeStyle,\n /**\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: true,\n /**\n * @prop {string} [x='bottom']\n * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n * Change this if your popper should grow in a direction different from `bottom`\n */\n x: 'bottom',\n /**\n * @prop {string} [x='left']\n * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n * Change this if your popper should grow in a direction different from `right`\n */\n y: 'right'\n },\n \n /**\n * Applies the computed styles to the popper element.\n *\n * All the DOM manipulations are limited to this modifier. This is useful in case\n * you want to integrate Popper.js inside a framework or view library and you\n * want to delegate all the DOM manipulations to it.\n *\n * Note that if you disable this modifier, you must make sure the popper element\n * has its position set to `absolute` before Popper.js can do its work!\n *\n * Just disable this modifier and define your own to achieve the desired effect.\n *\n * @memberof modifiers\n * @inner\n */\n applyStyle: {\n /** @prop {number} order=900 - Index used to define the order of execution */\n order: 900,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: applyStyle,\n /** @prop {Function} */\n onLoad: applyStyleOnLoad,\n /**\n * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: undefined\n }\n };\n \n /**\n * The `dataObject` is an object containing all the information used by Popper.js.\n * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n \n /**\n * Default options provided to Popper.js constructor.<br />\n * These can be overridden using the `options` argument of Popper.js.<br />\n * To override an option, simply pass an object with the same\n * structure of the `options` object, as the 3rd argument. For example:\n * ```\n * new Popper(ref, pop, {\n * modifiers: {\n * preventOverflow: { enabled: false }\n * }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\n var Defaults = {\n /**\n * Popper's placement.\n * @prop {Popper.placements} placement='bottom'\n */\n placement: 'bottom',\n \n /**\n * Set this to true if you want popper to position it self in 'fixed' mode\n * @prop {Boolean} positionFixed=false\n */\n positionFixed: false,\n \n /**\n * Whether events (resize, scroll) are initially enabled.\n * @prop {Boolean} eventsEnabled=true\n */\n eventsEnabled: true,\n \n /**\n * Set to true if you want to automatically remove the popper when\n * you call the `destroy` method.\n * @prop {Boolean} removeOnDestroy=false\n */\n removeOnDestroy: false,\n \n /**\n * Callback called when the popper is created.<br />\n * By default, it is set to no-op.<br />\n * Access Popper.js instance with `data.instance`.\n * @prop {onCreate}\n */\n onCreate: function onCreate() {},\n \n /**\n * Callback called when the popper is updated. This callback is not called\n * on the initialization/creation of the popper, but only on subsequent\n * updates.<br />\n * By default, it is set to no-op.<br />\n * Access Popper.js instance with `data.instance`.\n * @prop {onUpdate}\n */\n onUpdate: function onUpdate() {},\n \n /**\n * List of modifiers used to modify the offsets before they are applied to the popper.\n * They provide most of the functionalities of Popper.js.\n * @prop {modifiers}\n */\n modifiers: modifiers\n };\n \n /**\n * @callback onCreate\n * @param {dataObject} data\n */\n \n /**\n * @callback onUpdate\n * @param {dataObject} data\n */\n \n // Utils\n // Methods\n var Popper = function () {\n /**\n * Creates a new Popper.js instance.\n * @class Popper\n * @param {Element|referenceObject} reference - The reference element used to position the popper\n * @param {Element} popper - The HTML / XML element used as the popper\n * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n * @return {Object} instance - The generated Popper.js instance\n */\n function Popper(reference, popper) {\n var _this = this;\n \n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n classCallCheck(this, Popper);\n \n this.scheduleUpdate = function () {\n return requestAnimationFrame(_this.update);\n };\n \n // make update() debounced, so that it only runs at most once-per-tick\n this.update = debounce(this.update.bind(this));\n \n // with {} we create a new object with the options inside it\n this.options = _extends({}, Popper.Defaults, options);\n \n // init state\n this.state = {\n isDestroyed: false,\n isCreated: false,\n scrollParents: []\n };\n \n // get reference and popper elements (allow jQuery wrappers)\n this.reference = reference && reference.jquery ? reference[0] : reference;\n this.popper = popper && popper.jquery ? popper[0] : popper;\n \n // Deep merge modifiers options\n this.options.modifiers = {};\n Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) {\n _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});\n });\n \n // Refactoring modifiers' list (Object => Array)\n this.modifiers = Object.keys(this.options.modifiers).map(function (name) {\n return _extends({\n name: name\n }, _this.options.modifiers[name]);\n })\n // sort the modifiers by order\n .sort(function (a, b) {\n return a.order - b.order;\n });\n \n // modifiers have the ability to execute arbitrary code when Popper.js get inited\n // such code is executed in the same order of its modifier\n // they could add new properties to their options configuration\n // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n this.modifiers.forEach(function (modifierOptions) {\n if (modifierOptions.enabled && isFunction$1(modifierOptions.onLoad)) {\n modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);\n }\n });\n \n // fire the first update to position the popper in the right place\n this.update();\n \n var eventsEnabled = this.options.eventsEnabled;\n if (eventsEnabled) {\n // setup event listeners, they will take care of update the position in specific situations\n this.enableEventListeners();\n }\n \n this.state.eventsEnabled = eventsEnabled;\n }\n \n // We can't use class properties because they don't get listed in the\n // class prototype and break stuff like Sinon stubs\n \n \n createClass(Popper, [{\n key: 'update',\n value: function update$$1() {\n return update.call(this);\n }\n }, {\n key: 'destroy',\n value: function destroy$$1() {\n return destroy$1.call(this);\n }\n }, {\n key: 'enableEventListeners',\n value: function enableEventListeners$$1() {\n return enableEventListeners.call(this);\n }\n }, {\n key: 'disableEventListeners',\n value: function disableEventListeners$$1() {\n return disableEventListeners.call(this);\n }\n \n /**\n * Schedules an update. It will run on the next UI update available.\n * @method scheduleUpdate\n * @memberof Popper\n */\n \n \n /**\n * Collection of utilities useful when writing custom modifiers.\n * Starting from version 1.7, this method is available only if you\n * include `popper-utils.js` before `popper.js`.\n *\n * **DEPRECATION**: This way to access PopperUtils is deprecated\n * and will be removed in v2! Use the PopperUtils module directly instead.\n * Due to the high instability of the methods contained in Utils, we can't\n * guarantee them to follow semver. Use them at your own risk!\n * @static\n * @private\n * @type {Object}\n * @deprecated since version 1.8\n * @member Utils\n * @memberof Popper\n */\n \n }]);\n return Popper;\n }();\n \n /**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.<br />\n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10.\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n \n \n Popper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\n Popper.placements = placements;\n Popper.Defaults = Defaults;\n \n var BvEvent = /*#__PURE__*/function () {\n function BvEvent(type) {\n var eventInit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n \n _classCallCheck(this, BvEvent);\n \n // Start by emulating native Event constructor\n if (!type) {\n /* istanbul ignore next */\n throw new TypeError(\"Failed to construct '\".concat(this.constructor.name, \"'. 1 argument required, \").concat(arguments.length, \" given.\"));\n } // Merge defaults first, the eventInit, and the type last\n // so it can't be overwritten\n \n \n assign(this, BvEvent.Defaults, this.constructor.Defaults, eventInit, {\n type: type\n }); // Freeze some props as readonly, but leave them enumerable\n \n defineProperties(this, {\n type: readonlyDescriptor(),\n cancelable: readonlyDescriptor(),\n nativeEvent: readonlyDescriptor(),\n target: readonlyDescriptor(),\n relatedTarget: readonlyDescriptor(),\n vueTarget: readonlyDescriptor(),\n componentId: readonlyDescriptor()\n }); // Create a private variable using closure scoping\n \n var defaultPrevented = false; // Recreate preventDefault method. One way setter\n \n this.preventDefault = function preventDefault() {\n if (this.cancelable) {\n defaultPrevented = true;\n }\n }; // Create `defaultPrevented` publicly accessible prop that\n // can only be altered by the preventDefault method\n \n \n defineProperty(this, 'defaultPrevented', {\n enumerable: true,\n get: function get() {\n return defaultPrevented;\n }\n });\n }\n \n _createClass(BvEvent, null, [{\n key: \"Defaults\",\n get: function get() {\n return {\n type: '',\n cancelable: true,\n nativeEvent: null,\n target: null,\n relatedTarget: null,\n vueTarget: null,\n componentId: null\n };\n }\n }]);\n \n return BvEvent;\n }(); // Named Exports\n \n var clickOutMixin = {\n data: function data() {\n return {\n listenForClickOut: false\n };\n },\n watch: {\n listenForClickOut: function listenForClickOut(newValue, oldValue) {\n if (newValue !== oldValue) {\n eventOff(this.clickOutElement, this.clickOutEventName, this._clickOutHandler, EVENT_OPTIONS_NO_CAPTURE);\n \n if (newValue) {\n eventOn(this.clickOutElement, this.clickOutEventName, this._clickOutHandler, EVENT_OPTIONS_NO_CAPTURE);\n }\n }\n }\n },\n beforeCreate: function beforeCreate() {\n // Declare non-reactive properties\n this.clickOutElement = null;\n this.clickOutEventName = null;\n },\n mounted: function mounted() {\n if (!this.clickOutElement) {\n this.clickOutElement = document;\n }\n \n if (!this.clickOutEventName) {\n this.clickOutEventName = 'click';\n }\n \n if (this.listenForClickOut) {\n eventOn(this.clickOutElement, this.clickOutEventName, this._clickOutHandler, EVENT_OPTIONS_NO_CAPTURE);\n }\n },\n beforeDestroy: function beforeDestroy()\n /* istanbul ignore next */\n {\n eventOff(this.clickOutElement, this.clickOutEventName, this._clickOutHandler, EVENT_OPTIONS_NO_CAPTURE);\n },\n methods: {\n isClickOut: function isClickOut(evt) {\n return !contains(this.$el, evt.target);\n },\n _clickOutHandler: function _clickOutHandler(evt) {\n if (this.clickOutHandler && this.isClickOut(evt)) {\n this.clickOutHandler(evt);\n }\n }\n }\n };\n \n var focusInMixin = {\n data: function data() {\n return {\n listenForFocusIn: false\n };\n },\n watch: {\n listenForFocusIn: function listenForFocusIn(newValue, oldValue) {\n if (newValue !== oldValue) {\n eventOff(this.focusInElement, 'focusin', this._focusInHandler, EVENT_OPTIONS_NO_CAPTURE);\n \n if (newValue) {\n eventOn(this.focusInElement, 'focusin', this._focusInHandler, EVENT_OPTIONS_NO_CAPTURE);\n }\n }\n }\n },\n beforeCreate: function beforeCreate() {\n // Declare non-reactive properties\n this.focusInElement = null;\n },\n mounted: function mounted() {\n if (!this.focusInElement) {\n this.focusInElement = document;\n }\n \n if (this.listenForFocusIn) {\n eventOn(this.focusInElement, 'focusin', this._focusInHandler, EVENT_OPTIONS_NO_CAPTURE);\n }\n },\n beforeDestroy: function beforeDestroy()\n /* istanbul ignore next */\n {\n eventOff(this.focusInElement, 'focusin', this._focusInHandler, EVENT_OPTIONS_NO_CAPTURE);\n },\n methods: {\n _focusInHandler: function _focusInHandler(evt) {\n if (this.focusInHandler) {\n this.focusInHandler(evt);\n }\n }\n }\n };\n \n var filterVisibles = function filterVisibles(els) {\n return (els || []).filter(isVisible);\n }; // Root dropdown event names\n \n \n var ROOT_DROPDOWN_PREFIX = 'bv::dropdown::';\n var ROOT_DROPDOWN_SHOWN = \"\".concat(ROOT_DROPDOWN_PREFIX, \"shown\");\n var ROOT_DROPDOWN_HIDDEN = \"\".concat(ROOT_DROPDOWN_PREFIX, \"hidden\"); // Dropdown item CSS selectors\n \n var Selector = {\n FORM_CHILD: '.dropdown form',\n ITEM_SELECTOR: ['.dropdown-item', '.b-dropdown-form'].map(function (selector) {\n return \"\".concat(selector, \":not(.disabled):not([disabled])\");\n }).join(', ')\n }; // Popper attachment positions\n \n var AttachmentMap = {\n // Dropup left align\n TOP: 'top-start',\n // Dropup right align\n TOPEND: 'top-end',\n // Dropdown left align\n BOTTOM: 'bottom-start',\n // Dropdown right align\n BOTTOMEND: 'bottom-end',\n // Dropright left align\n RIGHT: 'right-start',\n // Dropright right align\n RIGHTEND: 'right-end',\n // Dropleft left align\n LEFT: 'left-start',\n // Dropleft right align\n LEFTEND: 'left-end'\n };\n var commonProps = {\n dropup: {\n // place on top if possible\n type: Boolean,\n default: false\n },\n dropright: {\n // place right if possible\n type: Boolean,\n default: false\n },\n dropleft: {\n // place left if possible\n type: Boolean,\n default: false\n },\n right: {\n // Right align menu (default is left align)\n type: Boolean,\n default: false\n },\n offset: {\n // Number of pixels to offset menu, or a CSS unit value (i.e. 1px, 1rem, etc)\n type: [Number, String],\n default: 0\n },\n noFlip: {\n // Disable auto-flipping of menu from bottom<=>top\n type: Boolean,\n default: false\n },\n popperOpts: {\n // type: Object,\n default: function _default() {}\n },\n boundary: {\n // String: `scrollParent`, `window` or `viewport`\n // HTMLElement: HTML Element reference\n type: [String, HTMLElement],\n default: 'scrollParent'\n }\n }; // @vue/component\n \n var dropdownMixin = {\n mixins: [idMixin, clickOutMixin, focusInMixin],\n provide: function provide() {\n return {\n bvDropdown: this\n };\n },\n inject: {\n bvNavbar: {\n default: null\n }\n },\n props: _objectSpread2({\n disabled: {\n type: Boolean,\n default: false\n }\n }, commonProps),\n data: function data() {\n return {\n visible: false,\n visibleChangePrevented: false\n };\n },\n computed: {\n inNavbar: function inNavbar() {\n return !isNull(this.bvNavbar);\n },\n toggler: function toggler() {\n var toggle = this.$refs.toggle;\n return toggle ? toggle.$el || toggle : null;\n },\n directionClass: function directionClass() {\n if (this.dropup) {\n return 'dropup';\n } else if (this.dropright) {\n return 'dropright';\n } else if (this.dropleft) {\n return 'dropleft';\n }\n \n return '';\n }\n },\n watch: {\n visible: function visible(newValue, oldValue) {\n if (this.visibleChangePrevented) {\n this.visibleChangePrevented = false;\n return;\n }\n \n if (newValue !== oldValue) {\n var evtName = newValue ? 'show' : 'hide';\n var bvEvt = new BvEvent(evtName, {\n cancelable: true,\n vueTarget: this,\n target: this.$refs.menu,\n relatedTarget: null,\n componentId: this.safeId ? this.safeId() : this.id || null\n });\n this.emitEvent(bvEvt);\n \n if (bvEvt.defaultPrevented) {\n // Reset value and exit if canceled\n this.visibleChangePrevented = true;\n this.visible = oldValue; // Just in case a child element triggered `this.hide(true)`\n \n this.$off('hidden', this.focusToggler);\n return;\n }\n \n if (evtName === 'show') {\n this.showMenu();\n } else {\n this.hideMenu();\n }\n }\n },\n disabled: function disabled(newValue, oldValue) {\n if (newValue !== oldValue && newValue && this.visible) {\n // Hide dropdown if disabled changes to true\n this.visible = false;\n }\n }\n },\n created: function created() {\n // Create private non-reactive props\n this.$_popper = null;\n },\n \n /* istanbul ignore next */\n deactivated: function deactivated()\n /* istanbul ignore next: not easy to test */\n {\n // In case we are inside a `<keep-alive>`\n this.visible = false;\n this.whileOpenListen(false);\n this.destroyPopper();\n },\n beforeDestroy: function beforeDestroy() {\n this.visible = false;\n this.whileOpenListen(false);\n this.destroyPopper();\n },\n methods: {\n // Event emitter\n emitEvent: function emitEvent(bvEvt) {\n var type = bvEvt.type;\n this.$emit(type, bvEvt);\n this.$root.$emit(\"\".concat(ROOT_DROPDOWN_PREFIX).concat(type), bvEvt);\n },\n showMenu: function showMenu() {\n var _this = this;\n \n if (this.disabled) {\n /* istanbul ignore next */\n return;\n } // Only instantiate Popper.js when dropdown is not in `<b-navbar>`\n \n \n if (!this.inNavbar) {\n if (typeof Popper === 'undefined') {\n /* istanbul ignore next */\n warn('Popper.js not found. Falling back to CSS positioning', 'BDropdown');\n } else {\n // For dropup with alignment we use the parent element as popper container\n var el = this.dropup && this.right || this.split ? this.$el : this.$refs.toggle; // Make sure we have a reference to an element, not a component!\n \n el = el.$el || el; // Instantiate Popper.js\n \n this.createPopper(el);\n }\n } // Ensure other menus are closed\n \n \n this.$root.$emit(ROOT_DROPDOWN_SHOWN, this); // Enable listeners\n \n this.whileOpenListen(true); // Wrap in `$nextTick()` to ensure menu is fully rendered/shown\n \n this.$nextTick(function () {\n // Focus on the menu container on show\n _this.focusMenu(); // Emit the shown event\n \n \n _this.$emit('shown');\n });\n },\n hideMenu: function hideMenu() {\n this.whileOpenListen(false);\n this.$root.$emit(ROOT_DROPDOWN_HIDDEN, this);\n this.$emit('hidden');\n this.destroyPopper();\n },\n createPopper: function createPopper(element) {\n this.destroyPopper();\n this.$_popper = new Popper(element, this.$refs.menu, this.getPopperConfig());\n },\n // Ensure popper event listeners are removed cleanly\n destroyPopper: function destroyPopper() {\n this.$_popper && this.$_popper.destroy();\n this.$_popper = null;\n },\n // Instructs popper to re-computes the dropdown position\n // useful if the content changes size\n updatePopper: function updatePopper()\n /* istanbul ignore next: not easy to test */\n {\n try {\n this.$_popper.scheduleUpdate();\n } catch (_unused) {}\n },\n getPopperConfig: function getPopperConfig() {\n var placement = AttachmentMap.BOTTOM;\n \n if (this.dropup) {\n placement = this.right ? AttachmentMap.TOPEND : AttachmentMap.TOP;\n } else if (this.dropright) {\n placement = AttachmentMap.RIGHT;\n } else if (this.dropleft) {\n placement = AttachmentMap.LEFT;\n } else if (this.right) {\n placement = AttachmentMap.BOTTOMEND;\n }\n \n var popperConfig = {\n placement: placement,\n modifiers: {\n offset: {\n offset: this.offset || 0\n },\n flip: {\n enabled: !this.noFlip\n }\n }\n };\n \n if (this.boundary) {\n popperConfig.modifiers.preventOverflow = {\n boundariesElement: this.boundary\n };\n }\n \n return _objectSpread2(_objectSpread2({}, popperConfig), this.popperOpts || {});\n },\n // Turn listeners on/off while open\n whileOpenListen: function whileOpenListen(isOpen) {\n // Hide the dropdown when clicked outside\n this.listenForClickOut = isOpen; // Hide the dropdown when it loses focus\n \n this.listenForFocusIn = isOpen; // Hide the dropdown when another dropdown is opened\n \n var method = isOpen ? '$on' : '$off';\n this.$root[method](ROOT_DROPDOWN_SHOWN, this.rootCloseListener);\n },\n rootCloseListener: function rootCloseListener(vm) {\n if (vm !== this) {\n this.visible = false;\n }\n },\n show: function show() {\n var _this2 = this;\n \n // Public method to show dropdown\n if (this.disabled) {\n return;\n } // Wrap in a `requestAF()` to allow any previous\n // click handling to occur first\n \n \n requestAF(function () {\n _this2.visible = true;\n });\n },\n hide: function hide() {\n var refocus = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n \n // Public method to hide dropdown\n if (this.disabled) {\n /* istanbul ignore next */\n return;\n }\n \n this.visible = false;\n \n if (refocus) {\n // Child element is closing the dropdown on click\n this.$once('hidden', this.focusToggler);\n }\n },\n // Called only by a button that toggles the menu\n toggle: function toggle(evt) {\n evt = evt || {}; // Early exit when not a click event or ENTER, SPACE or DOWN were pressed\n \n var _evt = evt,\n type = _evt.type,\n keyCode = _evt.keyCode;\n \n if (type !== 'click' && !(type === 'keydown' && [KEY_CODES.ENTER, KEY_CODES.SPACE, KEY_CODES.DOWN].indexOf(keyCode) !== -1)) {\n /* istanbul ignore next */\n return;\n }\n /* istanbul ignore next */\n \n \n if (this.disabled) {\n this.visible = false;\n return;\n }\n \n this.$emit('toggle', evt);\n evt.preventDefault();\n evt.stopPropagation(); // Toggle visibility\n \n if (this.visible) {\n this.hide(true);\n } else {\n this.show();\n }\n },\n // Mousedown handler for the toggle\n \n /* istanbul ignore next */\n onMousedown: function onMousedown(evt)\n /* istanbul ignore next */\n {\n // We prevent the 'mousedown' event for the toggle to stop the\n // 'focusin' event from being fired\n // The event would otherwise be picked up by the global 'focusin'\n // listener and there is no cross-browser solution to detect it\n // relates to the toggle click\n // The 'click' event will still be fired and we handle closing\n // other dropdowns there too\n // See https://github.com/bootstrap-vue/bootstrap-vue/issues/4328\n evt.preventDefault();\n },\n // Called from dropdown menu context\n onKeydown: function onKeydown(evt) {\n var keyCode = evt.keyCode;\n \n if (keyCode === KEY_CODES.ESC) {\n // Close on ESC\n this.onEsc(evt);\n } else if (keyCode === KEY_CODES.DOWN) {\n // Down Arrow\n this.focusNext(evt, false);\n } else if (keyCode === KEY_CODES.UP) {\n // Up Arrow\n this.focusNext(evt, true);\n }\n },\n // If user presses ESC, close the menu\n onEsc: function onEsc(evt) {\n if (this.visible) {\n this.visible = false;\n evt.preventDefault();\n evt.stopPropagation(); // Return focus to original trigger button\n \n this.$once('hidden', this.focusToggler);\n }\n },\n // Called only in split button mode, for the split button\n onSplitClick: function onSplitClick(evt) {\n /* istanbul ignore next */\n if (this.disabled) {\n this.visible = false;\n return;\n }\n \n this.$emit('click', evt);\n },\n // Shared hide handler between click-out and focus-in events\n hideHandler: function hideHandler(evt) {\n var target = evt.target;\n \n if (this.visible && !contains(this.$refs.menu, target) && !contains(this.toggler, target)) {\n this.hide();\n }\n },\n // Document click-out listener\n clickOutHandler: function clickOutHandler(evt) {\n this.hideHandler(evt);\n },\n // Document focus-in listener\n focusInHandler: function focusInHandler(evt) {\n this.hideHandler(evt);\n },\n // Keyboard nav\n focusNext: function focusNext(evt, up) {\n var _this3 = this;\n \n // Ignore key up/down on form elements\n var target = evt.target;\n \n if (!this.visible || evt && closest(Selector.FORM_CHILD, target)) {\n /* istanbul ignore next: should never happen */\n return;\n }\n \n evt.preventDefault();\n evt.stopPropagation();\n this.$nextTick(function () {\n var items = _this3.getItems();\n \n if (items.length < 1) {\n /* istanbul ignore next: should never happen */\n return;\n }\n \n var index = items.indexOf(target);\n \n if (up && index > 0) {\n index--;\n } else if (!up && index < items.length - 1) {\n index++;\n }\n \n if (index < 0) {\n /* istanbul ignore next: should never happen */\n index = 0;\n }\n \n _this3.focusItem(index, items);\n });\n },\n focusItem: function focusItem(index, items) {\n var el = items.find(function (el, i) {\n return i === index;\n });\n attemptFocus(el);\n },\n getItems: function getItems() {\n // Get all items\n return filterVisibles(selectAll(Selector.ITEM_SELECTOR, this.$refs.menu));\n },\n focusMenu: function focusMenu() {\n attemptFocus(this.$refs.menu);\n },\n focusToggler: function focusToggler() {\n var _this4 = this;\n \n this.$nextTick(function () {\n attemptFocus(_this4.toggler);\n });\n }\n }\n };\n \n var NAME$f = 'BDropdown'; // --- Props ---\n \n var props$l = {\n text: {\n // Button label\n type: String,\n default: ''\n },\n html: {\n // Button label\n type: String // default: undefined\n \n },\n variant: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$f, 'variant');\n }\n },\n size: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$f, 'size');\n }\n },\n block: {\n type: Boolean,\n default: false\n },\n menuClass: {\n type: [String, Array, Object] // default: null\n \n },\n toggleTag: {\n type: String,\n default: 'button'\n },\n toggleText: {\n // This really should be toggleLabel\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$f, 'toggleText');\n }\n },\n toggleClass: {\n type: [String, Array, Object] // default: null\n \n },\n noCaret: {\n type: Boolean,\n default: false\n },\n split: {\n type: Boolean,\n default: false\n },\n splitHref: {\n type: String // default: undefined\n \n },\n splitTo: {\n type: [String, Object] // default: undefined\n \n },\n splitVariant: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$f, 'splitVariant');\n }\n },\n splitClass: {\n type: [String, Array, Object] // default: null\n \n },\n splitButtonType: {\n type: String,\n default: 'button',\n validator: function validator(value) {\n return arrayIncludes(['button', 'submit', 'reset'], value);\n }\n },\n lazy: {\n // If true, only render menu contents when open\n type: Boolean,\n default: false\n },\n role: {\n type: String,\n default: 'menu'\n }\n }; // --- Main component ---\n // @vue/component\n \n var BDropdown = /*#__PURE__*/Vue.extend({\n name: NAME$f,\n mixins: [idMixin, dropdownMixin, normalizeSlotMixin],\n props: props$l,\n computed: {\n dropdownClasses: function dropdownClasses() {\n var block = this.block,\n split = this.split,\n boundary = this.boundary;\n return [this.directionClass, {\n show: this.visible,\n // The 'btn-group' class is required in `split` mode for button alignment\n // It needs also to be applied when `block` is disabled to allow multiple\n // dropdowns to be aligned one line\n 'btn-group': split || !block,\n // When `block` is enabled and we are in `split` mode the 'd-flex' class\n // needs to be applied to allow the buttons to stretch to full width\n 'd-flex': block && split,\n // Position `static` is needed to allow menu to \"breakout\" of the `scrollParent`\n // boundaries when boundary is anything other than `scrollParent`\n // See: https://github.com/twbs/bootstrap/issues/24251#issuecomment-341413786\n 'position-static': boundary !== 'scrollParent' || !boundary\n }];\n },\n menuClasses: function menuClasses() {\n return [this.menuClass, {\n 'dropdown-menu-right': this.right,\n show: this.visible\n }];\n },\n toggleClasses: function toggleClasses() {\n var split = this.split;\n return [this.toggleClass, {\n 'dropdown-toggle-split': split,\n 'dropdown-toggle-no-caret': this.noCaret && !split\n }];\n }\n },\n render: function render(h) {\n var variant = this.variant,\n size = this.size,\n block = this.block,\n disabled = this.disabled,\n split = this.split,\n role = this.role;\n var commonProps = {\n variant: variant,\n size: size,\n block: block,\n disabled: disabled\n };\n var $buttonContent = this.normalizeSlot('button-content');\n var buttonContentProps = this.hasNormalizedSlot('button-content') ? {} : htmlOrText(this.html, this.text);\n var $split = h();\n \n if (split) {\n var splitTo = this.splitTo,\n splitHref = this.splitHref,\n splitButtonType = this.splitButtonType;\n \n var btnProps = _objectSpread2(_objectSpread2({}, commonProps), {}, {\n variant: this.splitVariant || this.variant\n }); // We add these as needed due to <router-link> issues with\n // defined property with `undefined`/`null` values\n \n \n if (splitTo) {\n btnProps.to = splitTo;\n } else if (splitHref) {\n btnProps.href = splitHref;\n } else if (splitButtonType) {\n btnProps.type = splitButtonType;\n }\n \n $split = h(BButton, {\n class: this.splitClass,\n attrs: {\n id: this.safeId('_BV_button_')\n },\n props: btnProps,\n domProps: buttonContentProps,\n on: {\n click: this.onSplitClick\n },\n ref: 'button'\n }, [$buttonContent]);\n }\n \n var $toggle = h(BButton, {\n staticClass: 'dropdown-toggle',\n class: this.toggleClasses,\n attrs: {\n id: this.safeId('_BV_toggle_'),\n 'aria-haspopup': 'true',\n 'aria-expanded': this.visible ? 'true' : 'false'\n },\n props: _objectSpread2(_objectSpread2({}, commonProps), {}, {\n tag: this.toggleTag,\n block: block && !split\n }),\n domProps: split ? {} : buttonContentProps,\n on: {\n mousedown: this.onMousedown,\n click: this.toggle,\n keydown: this.toggle // Handle ENTER, SPACE and DOWN\n \n },\n ref: 'toggle'\n }, [split ? h('span', {\n class: ['sr-only']\n }, [this.toggleText]) : $buttonContent]);\n var $menu = h('ul', {\n staticClass: 'dropdown-menu',\n class: this.menuClasses,\n attrs: {\n role: role,\n tabindex: '-1',\n 'aria-labelledby': this.safeId(split ? '_BV_button_' : '_BV_toggle_')\n },\n on: {\n keydown: this.onKeydown // Handle UP, DOWN and ESC\n \n },\n ref: 'menu'\n }, !this.lazy || this.visible ? this.normalizeSlot('default', {\n hide: this.hide\n }) : [h()]);\n return h('div', {\n staticClass: 'dropdown b-dropdown',\n class: this.dropdownClasses,\n attrs: {\n id: this.safeId()\n }\n }, [$split, $toggle, $menu]);\n }\n });\n \n var props$m = omit(props$1, ['event', 'routerTag']); // @vue/component\n \n var BDropdownItem = /*#__PURE__*/Vue.extend({\n name: 'BDropdownItem',\n mixins: [attrsMixin, normalizeSlotMixin],\n inheritAttrs: false,\n inject: {\n bvDropdown: {\n default: null\n }\n },\n props: _objectSpread2(_objectSpread2({}, props$m), {}, {\n linkClass: {\n type: [String, Array, Object],\n default: null\n },\n variant: {\n type: String,\n default: null\n }\n }),\n computed: {\n computedAttrs: function computedAttrs() {\n return _objectSpread2(_objectSpread2({}, this.bvAttrs), {}, {\n role: 'menuitem'\n });\n }\n },\n methods: {\n closeDropdown: function closeDropdown() {\n var _this = this;\n \n // Close on next animation frame to allow <b-link> time to process\n requestAF(function () {\n if (_this.bvDropdown) {\n _this.bvDropdown.hide(true);\n }\n });\n },\n onClick: function onClick(evt) {\n this.$emit('click', evt);\n this.closeDropdown();\n }\n },\n render: function render(h) {\n return h('li', {\n attrs: {\n role: 'presentation'\n }\n }, [h(BLink, {\n props: this.$props,\n staticClass: 'dropdown-item',\n class: [this.linkClass, _defineProperty({}, \"text-\".concat(this.variant), this.variant && !(this.active || this.disabled))],\n attrs: this.computedAttrs,\n on: {\n click: this.onClick\n },\n ref: 'item'\n }, this.normalizeSlot('default'))]);\n }\n });\n \n var props$n = {\n active: {\n type: Boolean,\n default: false\n },\n activeClass: {\n type: String,\n default: 'active'\n },\n buttonClass: {\n type: [String, Array, Object] // default: null\n \n },\n disabled: {\n type: Boolean,\n default: false\n },\n variant: {\n type: String // default: null\n \n }\n }; // @vue/component\n \n var BDropdownItemButton = /*#__PURE__*/Vue.extend({\n name: 'BDropdownItemButton',\n mixins: [attrsMixin, normalizeSlotMixin],\n inheritAttrs: false,\n inject: {\n bvDropdown: {\n default: null\n }\n },\n props: props$n,\n computed: {\n computedAttrs: function computedAttrs() {\n return _objectSpread2(_objectSpread2({}, this.bvAttrs), {}, {\n role: 'menuitem',\n type: 'button',\n disabled: this.disabled\n });\n }\n },\n methods: {\n closeDropdown: function closeDropdown() {\n if (this.bvDropdown) {\n this.bvDropdown.hide(true);\n }\n },\n onClick: function onClick(evt) {\n this.$emit('click', evt);\n this.closeDropdown();\n }\n },\n render: function render(h) {\n var _ref;\n \n return h('li', {\n attrs: {\n role: 'presentation'\n }\n }, [h('button', {\n staticClass: 'dropdown-item',\n class: [this.buttonClass, (_ref = {}, _defineProperty(_ref, this.activeClass, this.active), _defineProperty(_ref, \"text-\".concat(this.variant), this.variant && !(this.active || this.disabled)), _ref)],\n attrs: this.computedAttrs,\n on: {\n click: this.onClick\n },\n ref: 'button'\n }, this.normalizeSlot('default'))]);\n }\n });\n \n var props$o = {\n id: {\n type: String // default: null\n \n },\n tag: {\n type: String,\n default: 'header'\n },\n variant: {\n type: String // default: null\n \n }\n }; // @vue/component\n \n var BDropdownHeader = /*#__PURE__*/Vue.extend({\n name: 'BDropdownHeader',\n functional: true,\n props: props$o,\n render: function render(h, _ref) {\n var props = _ref.props,\n data = _ref.data,\n children = _ref.children;\n var $attrs = data.attrs || {};\n data.attrs = {};\n return h('li', a(data, {\n attrs: {\n role: 'presentation'\n }\n }), [h(props.tag, {\n staticClass: 'dropdown-header',\n class: _defineProperty({}, \"text-\".concat(props.variant), props.variant),\n attrs: _objectSpread2(_objectSpread2({}, $attrs), {}, {\n id: props.id || null,\n role: 'heading'\n }),\n ref: 'header'\n }, children)]);\n }\n });\n \n var props$p = {\n tag: {\n type: String,\n default: 'hr'\n }\n }; // @vue/component\n \n var BDropdownDivider = /*#__PURE__*/Vue.extend({\n name: 'BDropdownDivider',\n functional: true,\n props: props$p,\n render: function render(h, _ref) {\n var props = _ref.props,\n data = _ref.data;\n var $attrs = data.attrs || {};\n data.attrs = {};\n return h('li', a(data, {\n attrs: {\n role: 'presentation'\n }\n }), [h(props.tag, {\n staticClass: 'dropdown-divider',\n attrs: _objectSpread2(_objectSpread2({}, $attrs), {}, {\n role: 'separator',\n 'aria-orientation': 'horizontal'\n }),\n ref: 'divider'\n })]);\n }\n });\n \n var props$q = {\n id: {\n type: String // default: null\n \n },\n inline: {\n type: Boolean,\n default: false\n },\n novalidate: {\n type: Boolean,\n default: false\n },\n validated: {\n type: Boolean,\n default: false\n }\n }; // @vue/component\n \n var BForm = /*#__PURE__*/Vue.extend({\n name: 'BForm',\n functional: true,\n props: props$q,\n render: function render(h, _ref) {\n var props = _ref.props,\n data = _ref.data,\n children = _ref.children;\n return h('form', a(data, {\n class: {\n 'form-inline': props.inline,\n 'was-validated': props.validated\n },\n attrs: {\n id: props.id,\n novalidate: props.novalidate\n }\n }), children);\n }\n });\n \n var BDropdownForm = /*#__PURE__*/Vue.extend({\n name: 'BDropdownForm',\n functional: true,\n props: _objectSpread2(_objectSpread2({}, props$q), {}, {\n disabled: {\n type: Boolean,\n default: false\n },\n formClass: {\n type: [String, Object, Array] // default: null\n \n }\n }),\n render: function render(h, _ref) {\n var props = _ref.props,\n data = _ref.data,\n children = _ref.children;\n var $attrs = data.attrs || {};\n var $listeners = data.on || {};\n data.attrs = {};\n data.on = {};\n return h('li', a(data, {\n attrs: {\n role: 'presentation'\n }\n }), [h(BForm, {\n ref: 'form',\n staticClass: 'b-dropdown-form',\n class: [props.formClass, {\n disabled: props.disabled\n }],\n props: props,\n attrs: _objectSpread2(_objectSpread2({}, $attrs), {}, {\n disabled: props.disabled,\n // Tab index of -1 for keyboard navigation\n tabindex: props.disabled ? null : '-1'\n }),\n on: $listeners\n }, children)]);\n }\n });\n \n var BDropdownText = /*#__PURE__*/Vue.extend({\n name: 'BDropdownText',\n functional: true,\n props: {\n tag: {\n type: String,\n default: 'p'\n },\n variant: {\n type: String // default: null\n \n }\n },\n render: function render(h, _ref) {\n var props = _ref.props,\n data = _ref.data,\n children = _ref.children;\n var $attrs = data.attrs || {};\n data.attrs = {};\n return h('li', a(data, {\n attrs: {\n role: 'presentation'\n }\n }), [h(props.tag, {\n staticClass: 'b-dropdown-text',\n class: _defineProperty({}, \"text-\".concat(props.variant), props.variant),\n props: props,\n attrs: $attrs,\n ref: 'text'\n }, children)]);\n }\n });\n \n var props$r = {\n id: {\n type: String // default: null\n \n },\n header: {\n type: String // default: null\n \n },\n headerTag: {\n type: String,\n default: 'header'\n },\n headerVariant: {\n type: String // default: null\n \n },\n headerClasses: {\n type: [String, Array, Object] // default: null\n \n },\n ariaDescribedby: {\n type: String // default: null\n \n }\n }; // @vue/component\n \n var BDropdownGroup = /*#__PURE__*/Vue.extend({\n name: 'BDropdownGroup',\n functional: true,\n props: props$r,\n render: function render(h, _ref) {\n var props = _ref.props,\n data = _ref.data,\n slots = _ref.slots,\n scopedSlots = _ref.scopedSlots;\n var $slots = slots();\n var $scopedSlots = scopedSlots || {};\n var $attrs = data.attrs || {};\n data.attrs = {};\n var header;\n var headerId = null;\n \n if (hasNormalizedSlot('header', $scopedSlots, $slots) || props.header) {\n headerId = props.id ? \"_bv_\".concat(props.id, \"_group_dd_header\") : null;\n header = h(props.headerTag, {\n staticClass: 'dropdown-header',\n class: [props.headerClasses, _defineProperty({}, \"text-\".concat(props.variant), props.variant)],\n attrs: {\n id: headerId,\n role: 'heading'\n }\n }, normalizeSlot('header', {}, $scopedSlots, $slots) || props.header);\n }\n \n var adb = [headerId, props.ariaDescribedBy].filter(identity).join(' ').trim();\n return h('li', a(data, {\n attrs: {\n role: 'presentation'\n }\n }), [header || h(), h('ul', {\n staticClass: 'list-unstyled',\n attrs: _objectSpread2(_objectSpread2({}, $attrs), {}, {\n id: props.id || null,\n role: 'group',\n 'aria-describedby': adb || null\n })\n }, normalizeSlot('default', {}, $scopedSlots, $slots))]);\n }\n });\n \n var DropdownPlugin = /*#__PURE__*/pluginFactory({\n components: {\n BDropdown: BDropdown,\n BDd: BDropdown,\n BDropdownItem: BDropdownItem,\n BDdItem: BDropdownItem,\n BDropdownItemButton: BDropdownItemButton,\n BDropdownItemBtn: BDropdownItemButton,\n BDdItemButton: BDropdownItemButton,\n BDdItemBtn: BDropdownItemButton,\n BDropdownHeader: BDropdownHeader,\n BDdHeader: BDropdownHeader,\n BDropdownDivider: BDropdownDivider,\n BDdDivider: BDropdownDivider,\n BDropdownForm: BDropdownForm,\n BDdForm: BDropdownForm,\n BDropdownText: BDropdownText,\n BDdText: BDropdownText,\n BDropdownGroup: BDropdownGroup,\n BDdGroup: BDropdownGroup\n }\n });\n \n var props$s = {\n type: {\n type: String,\n default: 'iframe',\n validator: function validator(str) {\n return arrayIncludes(['iframe', 'embed', 'video', 'object', 'img', 'b-img', 'b-img-lazy'], str);\n }\n },\n tag: {\n type: String,\n default: 'div'\n },\n aspect: {\n type: String,\n default: '16by9'\n }\n }; // @vue/component\n \n var BEmbed = /*#__PURE__*/Vue.extend({\n name: 'BEmbed',\n functional: true,\n props: props$s,\n render: function render(h, _ref) {\n var props = _ref.props,\n data = _ref.data,\n children = _ref.children;\n return h(props.tag, {\n ref: data.ref,\n staticClass: 'embed-responsive',\n class: _defineProperty({}, \"embed-responsive-\".concat(props.aspect), props.aspect)\n }, [h(props.type, a(data, {\n ref: '',\n staticClass: 'embed-responsive-item'\n }), children)]);\n }\n });\n \n var EmbedPlugin = /*#__PURE__*/pluginFactory({\n components: {\n BEmbed: BEmbed\n }\n });\n \n var OPTIONS_OBJECT_DEPRECATED_MSG = 'Setting prop \"options\" to an object is deprecated. Use the array format instead.'; // @vue/component\n \n var formOptionsMixin = {\n props: {\n options: {\n type: [Array, Object],\n default: function _default() {\n return [];\n }\n },\n valueField: {\n type: String,\n default: 'value'\n },\n textField: {\n type: String,\n default: 'text'\n },\n htmlField: {\n type: String,\n default: 'html'\n },\n disabledField: {\n type: String,\n default: 'disabled'\n }\n },\n computed: {\n formOptions: function formOptions() {\n return this.normalizeOptions(this.options);\n }\n },\n methods: {\n normalizeOption: function normalizeOption(option) {\n var key = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n \n // When the option is an object, normalize it\n if (isPlainObject(option)) {\n var value = get(option, this.valueField);\n var text = get(option, this.textField);\n return {\n value: isUndefined(value) ? key || text : value,\n text: stripTags(String(isUndefined(text) ? key : text)),\n html: get(option, this.htmlField),\n disabled: Boolean(get(option, this.disabledField))\n };\n } // Otherwise create an `<option>` object from the given value\n \n \n return {\n value: key || option,\n text: stripTags(String(option)),\n disabled: false\n };\n },\n normalizeOptions: function normalizeOptions(options) {\n var _this = this;\n \n // Normalize the given options array\n if (isArray(options)) {\n return options.map(function (option) {\n return _this.normalizeOption(option);\n });\n } else if (isPlainObject(options)) {\n // Deprecate the object options format\n warn(OPTIONS_OBJECT_DEPRECATED_MSG, this.$options.name); // Normalize a `options` object to an array of options\n \n return keys(options).map(function (key) {\n return _this.normalizeOption(options[key] || {}, key);\n });\n } // If not an array or object, return an empty array\n \n /* istanbul ignore next */\n \n \n return [];\n }\n }\n };\n \n var BFormDatalist = /*#__PURE__*/Vue.extend({\n name: 'BFormDatalist',\n mixins: [formOptionsMixin, normalizeSlotMixin],\n props: {\n id: {\n type: String,\n required: true\n }\n },\n render: function render(h) {\n var $options = this.formOptions.map(function (option, index) {\n var value = option.value,\n text = option.text,\n html = option.html,\n disabled = option.disabled;\n return h('option', {\n attrs: {\n value: value,\n disabled: disabled\n },\n domProps: htmlOrText(html, text),\n key: \"option_\".concat(index)\n });\n });\n return h('datalist', {\n attrs: {\n id: this.id\n }\n }, [$options, this.normalizeSlot('default')]);\n }\n });\n \n var NAME$g = 'BFormText';\n var props$t = {\n id: {\n type: String // default: null\n \n },\n tag: {\n type: String,\n default: 'small'\n },\n textVariant: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$g, 'textVariant');\n }\n },\n inline: {\n type: Boolean,\n default: false\n }\n }; // @vue/component\n \n var BFormText = /*#__PURE__*/Vue.extend({\n name: NAME$g,\n functional: true,\n props: props$t,\n render: function render(h, _ref) {\n var props = _ref.props,\n data = _ref.data,\n children = _ref.children;\n return h(props.tag, a(data, {\n class: _defineProperty({\n 'form-text': !props.inline\n }, \"text-\".concat(props.textVariant), props.textVariant),\n attrs: {\n id: props.id\n }\n }), children);\n }\n });\n \n var props$u = {\n id: {\n type: String // default: null\n \n },\n tag: {\n type: String,\n default: 'div'\n },\n tooltip: {\n type: Boolean,\n default: false\n },\n forceShow: {\n type: Boolean,\n default: false\n },\n state: {\n // Tri-stste prop: `true`, `false`, or `null`\n type: Boolean,\n default: null\n },\n ariaLive: {\n type: String // default: null\n \n },\n role: {\n type: String // default: null\n \n }\n }; // @vue/component\n \n var BFormInvalidFeedback = /*#__PURE__*/Vue.extend({\n name: 'BFormInvalidFeedback',\n functional: true,\n props: props$u,\n render: function render(h, _ref) {\n var props = _ref.props,\n data = _ref.data,\n children = _ref.children;\n var show = props.forceShow === true || props.state === false;\n return h(props.tag, a(data, {\n class: {\n 'invalid-feedback': !props.tooltip,\n 'invalid-tooltip': props.tooltip,\n 'd-block': show\n },\n attrs: {\n id: props.id || null,\n role: props.role || null,\n 'aria-live': props.ariaLive || null,\n 'aria-atomic': props.ariaLive ? 'true' : null\n }\n }), children);\n }\n });\n \n var props$v = {\n id: {\n type: String // default: null\n \n },\n tag: {\n type: String,\n default: 'div'\n },\n tooltip: {\n type: Boolean,\n default: false\n },\n forceShow: {\n type: Boolean,\n default: false\n },\n state: {\n // Tri-state prop: `true`, `false`, or `null`\n type: Boolean,\n default: null\n },\n ariaLive: {\n type: String // default: null\n \n },\n role: {\n type: String // default: null\n \n }\n }; // @vue/component\n \n var BFormValidFeedback = /*#__PURE__*/Vue.extend({\n name: 'BFormValidFeedback',\n functional: true,\n props: props$v,\n render: function render(h, _ref) {\n var props = _ref.props,\n data = _ref.data,\n children = _ref.children;\n var show = props.forceShow === true || props.state === true;\n return h(props.tag, a(data, {\n class: {\n 'valid-feedback': !props.tooltip,\n 'valid-tooltip': props.tooltip,\n 'd-block': show\n },\n attrs: {\n id: props.id || null,\n role: props.role || null,\n 'aria-live': props.ariaLive || null,\n 'aria-atomic': props.ariaLive ? 'true' : null\n }\n }), children);\n }\n });\n \n var props$w = {\n tag: {\n type: String,\n default: 'div'\n }\n }; // @vue/component\n \n var BFormRow = /*#__PURE__*/Vue.extend({\n name: 'BFormRow',\n functional: true,\n props: props$w,\n render: function render(h, _ref) {\n var props = _ref.props,\n data = _ref.data,\n children = _ref.children;\n return h(props.tag, a(data, {\n staticClass: 'form-row'\n }), children);\n }\n });\n \n var FormPlugin = /*#__PURE__*/pluginFactory({\n components: {\n BForm: BForm,\n BFormDatalist: BFormDatalist,\n BDatalist: BFormDatalist,\n BFormText: BFormText,\n BFormInvalidFeedback: BFormInvalidFeedback,\n BFormFeedback: BFormInvalidFeedback,\n BFormValidFeedback: BFormValidFeedback,\n // Added here for convenience\n BFormRow: BFormRow\n }\n }); // BFormRow is not exported here as a named export, as it is exported by Layout\n \n var looseIndexOf = function looseIndexOf(arr, val) {\n // Assumes that the first argument is an array\n for (var i = 0; i < arr.length; i++) {\n if (looseEqual(arr[i], val)) {\n return i;\n }\n }\n \n return -1;\n };\n \n var SELECTOR = 'input, textarea, select'; // @vue/component\n \n var formMixin = {\n props: {\n name: {\n type: String // default: undefined\n \n },\n id: {\n type: String // default: undefined\n \n },\n disabled: {\n type: Boolean\n },\n required: {\n type: Boolean,\n default: false\n },\n form: {\n type: String // default: null\n \n },\n autofocus: {\n type: Boolean,\n default: false\n }\n },\n mounted: function mounted() {\n this.handleAutofocus();\n },\n \n /* istanbul ignore next */\n activated: function activated() {\n this.handleAutofocus();\n },\n methods: {\n handleAutofocus: function handleAutofocus() {\n var _this = this;\n \n this.$nextTick(function () {\n requestAF(function () {\n var el = _this.$el;\n \n if (_this.autofocus && isVisible(el)) {\n if (!matches(el, SELECTOR)) {\n el = select(SELECTOR, el);\n }\n \n attemptFocus(el);\n }\n });\n });\n }\n }\n };\n \n var formRadioCheckMixin = {\n mixins: [attrsMixin, normalizeSlotMixin],\n inheritAttrs: false,\n model: {\n prop: 'checked',\n event: 'input'\n },\n props: {\n value: {// Value when checked\n // type: Object,\n // default: undefined\n },\n checked: {// This is the v-model\n // type: Object,\n // default: undefined\n },\n inline: {\n type: Boolean,\n default: false\n },\n plain: {\n type: Boolean,\n default: false\n },\n button: {\n // Only applicable in standalone mode (non group)\n type: Boolean,\n default: false\n },\n buttonVariant: {\n // Only applicable when rendered with button style\n type: String // default: null\n \n },\n ariaLabel: {\n // Placed on the input if present.\n type: String // default: null\n \n },\n ariaLabelledby: {\n // Placed on the input if present.\n type: String // default: null\n \n }\n },\n data: function data() {\n return {\n localChecked: this.isGroup ? this.bvGroup.checked : this.checked,\n hasFocus: false\n };\n },\n computed: {\n computedLocalChecked: {\n get: function get() {\n return this.isGroup ? this.bvGroup.localChecked : this.localChecked;\n },\n set: function set(val) {\n if (this.isGroup) {\n this.bvGroup.localChecked = val;\n } else {\n this.localChecked = val;\n }\n }\n },\n isGroup: function isGroup() {\n // Is this check/radio a child of check-group or radio-group?\n return Boolean(this.bvGroup);\n },\n isBtnMode: function isBtnMode() {\n // Support button style in single input mode\n return this.isGroup ? this.bvGroup.buttons : this.button;\n },\n isPlain: function isPlain() {\n return this.isBtnMode ? false : this.isGroup ? this.bvGroup.plain : this.plain;\n },\n isCustom: function isCustom() {\n return this.isBtnMode ? false : !this.isPlain;\n },\n isSwitch: function isSwitch() {\n // Custom switch styling (checkboxes only)\n return this.isBtnMode || this.isRadio || this.isPlain ? false : this.isGroup ? this.bvGroup.switches : this.switch;\n },\n isInline: function isInline() {\n return this.isGroup ? this.bvGroup.inline : this.inline;\n },\n isDisabled: function isDisabled() {\n // Child can be disabled while parent isn't, but is always disabled if group is\n return this.isGroup ? this.bvGroup.disabled || this.disabled : this.disabled;\n },\n isRequired: function isRequired() {\n // Required only works when a name is provided for the input(s)\n // Child can only be required when parent is\n // Groups will always have a name (either user supplied or auto generated)\n return this.getName && (this.isGroup ? this.bvGroup.required : this.required);\n },\n getName: function getName() {\n // Group name preferred over local name\n return (this.isGroup ? this.bvGroup.groupName : this.name) || null;\n },\n getForm: function getForm() {\n return (this.isGroup ? this.bvGroup.form : this.form) || null;\n },\n getSize: function getSize() {\n return (this.isGroup ? this.bvGroup.size : this.size) || '';\n },\n getState: function getState() {\n return this.isGroup ? this.bvGroup.computedState : this.computedState;\n },\n getButtonVariant: function getButtonVariant() {\n // Local variant preferred over group variant\n if (this.buttonVariant) {\n return this.buttonVariant;\n } else if (this.isGroup && this.bvGroup.buttonVariant) {\n return this.bvGroup.buttonVariant;\n } // default variant\n \n \n return 'secondary';\n },\n buttonClasses: function buttonClasses() {\n var _ref;\n \n // Same for radio & check\n return ['btn', \"btn-\".concat(this.getButtonVariant), (_ref = {}, _defineProperty(_ref, \"btn-\".concat(this.getSize), this.getSize), _defineProperty(_ref, \"disabled\", this.isDisabled), _defineProperty(_ref, \"active\", this.isChecked), _defineProperty(_ref, \"focus\", this.hasFocus), _ref)];\n },\n computedAttrs: function computedAttrs() {\n return _objectSpread2(_objectSpread2({}, this.bvAttrs), {}, {\n id: this.safeId(),\n type: this.isRadio ? 'radio' : 'checkbox',\n name: this.getName,\n form: this.getForm,\n disabled: this.isDisabled,\n required: this.isRequired,\n autocomplete: 'off',\n 'aria-required': this.isRequired || null,\n 'aria-label': this.ariaLabel || null,\n 'aria-labelledby': this.ariaLabelledby || null\n });\n }\n },\n watch: {\n checked: function checked(newVal) {\n this.computedLocalChecked = newVal;\n }\n },\n methods: {\n handleFocus: function handleFocus(evt) {\n // When in buttons mode, we need to add 'focus' class to label when input focused\n // As it is the hidden input which has actual focus\n if (evt.target) {\n if (evt.type === 'focus') {\n this.hasFocus = true;\n } else if (evt.type === 'blur') {\n this.hasFocus = false;\n }\n }\n },\n // Convenience methods for focusing the input\n focus: function focus() {\n if (!this.isDisabled) {\n attemptFocus(this.$refs.input);\n }\n },\n blur: function blur() {\n if (!this.isDisabled) {\n attemptBlur(this.$refs.input);\n }\n }\n },\n render: function render(h) {\n var defaultSlot = this.normalizeSlot('default'); // Generate the input element\n \n var on = {\n change: this.handleChange\n };\n \n if (this.isBtnMode) {\n // Handlers for focus styling when in button mode\n on.focus = on.blur = this.handleFocus;\n }\n \n var input = h('input', {\n ref: 'input',\n key: 'input',\n on: on,\n class: {\n 'form-check-input': this.isPlain,\n 'custom-control-input': this.isCustom,\n 'is-valid': this.getState === true && !this.isBtnMode,\n 'is-invalid': this.getState === false && !this.isBtnMode,\n // https://github.com/bootstrap-vue/bootstrap-vue/issues/2911\n 'position-static': this.isPlain && !defaultSlot\n },\n directives: [{\n name: 'model',\n rawName: 'v-model',\n value: this.computedLocalChecked,\n expression: 'computedLocalChecked'\n }],\n attrs: this.computedAttrs,\n domProps: {\n value: this.value,\n checked: this.isChecked\n }\n });\n \n if (this.isBtnMode) {\n // Button mode\n var button = h('label', {\n class: this.buttonClasses\n }, [input, defaultSlot]);\n \n if (!this.isGroup) {\n // Standalone button mode, so wrap in 'btn-group-toggle'\n // and flag it as inline-block to mimic regular buttons\n button = h('div', {\n class: ['btn-group-toggle', 'd-inline-block']\n }, [button]);\n }\n \n return button;\n } else {\n // Not button mode\n var label = h(); // If no label content in plain mode we dont render the label\n // https://github.com/bootstrap-vue/bootstrap-vue/issues/2911\n \n if (!(this.isPlain && !defaultSlot)) {\n label = h('label', {\n class: {\n 'form-check-label': this.isPlain,\n 'custom-control-label': this.isCustom\n },\n attrs: {\n for: this.safeId()\n }\n }, defaultSlot);\n } // Wrap it in a div\n \n \n return h('div', {\n class: _defineProperty({\n 'form-check': this.isPlain,\n 'form-check-inline': this.isPlain && this.isInline,\n 'custom-control': this.isCustom,\n 'custom-control-inline': this.isCustom && this.isInline,\n 'custom-checkbox': this.isCustom && this.isCheck && !this.isSwitch,\n 'custom-switch': this.isSwitch,\n 'custom-radio': this.isCustom && this.isRadio\n }, \"b-custom-control-\".concat(this.getSize), Boolean(this.getSize && !this.isBtnMode))\n }, [input, label]);\n }\n }\n };\n \n var formSizeMixin = {\n props: {\n size: {\n type: String,\n default: function _default() {\n return getComponentConfig('formControls', 'size');\n }\n }\n },\n computed: {\n sizeFormClass: function sizeFormClass() {\n return [this.size ? \"form-control-\".concat(this.size) : null];\n },\n \n /* istanbul ignore next: don't think this is used */\n sizeBtnClass: function sizeBtnClass() {\n return [this.size ? \"btn-\".concat(this.size) : null];\n }\n }\n };\n \n /* Form control contextual state class computation\n *\n * Returned class is either 'is-valid' or 'is-invalid' based on the 'state' prop\n * state can be one of five values:\n * - true for is-valid\n * - false for is-invalid\n * - null for no contextual state\n */\n \n var formStateMixin = {\n props: {\n state: {\n // Tri-state prop: true, false, null (or undefined)\n type: Boolean,\n default: null\n }\n },\n computed: {\n computedState: function computedState() {\n // If not a boolean, ensure that value is null\n return isBoolean(this.state) ? this.state : null;\n },\n stateClass: function stateClass() {\n var state = this.computedState;\n return state === true ? 'is-valid' : state === false ? 'is-invalid' : null;\n }\n }\n };\n \n var BFormCheckbox = /*#__PURE__*/Vue.extend({\n name: 'BFormCheckbox',\n mixins: [formRadioCheckMixin, // Includes shared render function\n idMixin, formMixin, formSizeMixin, formStateMixin],\n inject: {\n bvGroup: {\n from: 'bvCheckGroup',\n default: false\n }\n },\n props: {\n value: {\n // type: [String, Number, Boolean, Object],\n default: true\n },\n uncheckedValue: {\n // type: [String, Number, Boolean, Object],\n // Not applicable in multi-check mode\n default: false\n },\n indeterminate: {\n // Not applicable in multi-check mode\n type: Boolean,\n default: false\n },\n switch: {\n // Custom switch styling\n type: Boolean,\n default: false\n },\n checked: {\n // v-model (Array when multiple checkboxes have same name)\n // type: [String, Number, Boolean, Object, Array],\n default: null\n }\n },\n computed: {\n isChecked: function isChecked() {\n var checked = this.computedLocalChecked;\n var value = this.value;\n \n if (isArray(checked)) {\n return looseIndexOf(checked, value) > -1;\n } else {\n return looseEqual(checked, value);\n }\n },\n isRadio: function isRadio() {\n return false;\n },\n isCheck: function isCheck() {\n return true;\n }\n },\n watch: {\n computedLocalChecked: function computedLocalChecked(newVal) {\n this.$emit('input', newVal);\n \n if (this.$refs && this.$refs.input) {\n this.$emit('update:indeterminate', this.$refs.input.indeterminate);\n }\n },\n indeterminate: function indeterminate(newVal) {\n this.setIndeterminate(newVal);\n }\n },\n mounted: function mounted() {\n // Set initial indeterminate state\n this.setIndeterminate(this.indeterminate);\n },\n methods: {\n handleChange: function handleChange(_ref) {\n var _ref$target = _ref.target,\n checked = _ref$target.checked,\n indeterminate = _ref$target.indeterminate;\n var localChecked = this.computedLocalChecked;\n var value = this.value;\n var isArr = isArray(localChecked);\n var uncheckedValue = isArr ? null : this.uncheckedValue; // Update computedLocalChecked\n \n if (isArr) {\n var idx = looseIndexOf(localChecked, value);\n \n if (checked && idx < 0) {\n // Add value to array\n localChecked = localChecked.concat(value);\n } else if (!checked && idx > -1) {\n // Remove value from array\n localChecked = localChecked.slice(0, idx).concat(localChecked.slice(idx + 1));\n }\n } else {\n localChecked = checked ? value : uncheckedValue;\n }\n \n this.computedLocalChecked = localChecked; // Change is only emitted on user interaction\n \n this.$emit('change', checked ? value : uncheckedValue); // If this is a child of form-checkbox-group, we emit a change event on it as well\n \n if (this.isGroup) {\n this.bvGroup.$emit('change', localChecked);\n }\n \n this.$emit('update:indeterminate', indeterminate);\n },\n setIndeterminate: function setIndeterminate(state) {\n // Indeterminate only supported in single checkbox mode\n if (isArray(this.computedLocalChecked)) {\n state = false;\n }\n \n if (this.$refs && this.$refs.input) {\n this.$refs.input.indeterminate = state; // Emit update event to prop\n \n this.$emit('update:indeterminate', state);\n }\n }\n }\n });\n \n var BFormRadio = /*#__PURE__*/Vue.extend({\n name: 'BFormRadio',\n mixins: [idMixin, formRadioCheckMixin, // Includes shared render function\n formMixin, formSizeMixin, formStateMixin],\n inject: {\n bvGroup: {\n from: 'bvRadioGroup',\n default: false\n }\n },\n props: {\n checked: {\n // v-model\n // type: [String, Number, Boolean, Object],\n default: null\n }\n },\n computed: {\n // Radio Groups can only have a single value, so determining if checked is simple\n isChecked: function isChecked() {\n return looseEqual(this.value, this.computedLocalChecked);\n },\n // Flags for form-radio-check mixin\n isRadio: function isRadio() {\n return true;\n },\n isCheck: function isCheck() {\n return false;\n }\n },\n watch: {\n // Radio Groups can only have a single value, so our watchers are simple\n computedLocalChecked: function computedLocalChecked() {\n this.$emit('input', this.computedLocalChecked);\n }\n },\n methods: {\n handleChange: function handleChange(_ref) {\n var checked = _ref.target.checked;\n var value = this.value;\n this.computedLocalChecked = value; // Change is only emitted on user interaction\n \n this.$emit('change', checked ? value : null); // If this is a child of form-radio-group, we emit a change event on it as well\n \n if (this.isGroup) {\n this.bvGroup.$emit('change', checked ? value : null);\n }\n }\n }\n });\n \n var formRadioCheckGroupMixin = {\n mixins: [normalizeSlotMixin],\n model: {\n prop: 'checked',\n event: 'input'\n },\n props: {\n validated: {\n type: Boolean,\n default: false\n },\n ariaInvalid: {\n type: [Boolean, String],\n default: false\n },\n stacked: {\n type: Boolean,\n default: false\n },\n plain: {\n type: Boolean,\n default: false\n },\n buttons: {\n // Render as button style\n type: Boolean,\n default: false\n },\n buttonVariant: {\n // Only applicable when rendered with button style\n type: String,\n default: 'secondary'\n }\n },\n computed: {\n inline: function inline() {\n return !this.stacked;\n },\n groupName: function groupName() {\n // Checks/Radios tied to the same model must have the same name,\n // especially for ARIA accessibility.\n return this.name || this.safeId();\n },\n groupClasses: function groupClasses() {\n if (this.buttons) {\n return ['btn-group-toggle', this.inline ? 'btn-group' : 'btn-group-vertical', this.size ? \"btn-group-\".concat(this.size) : '', this.validated ? \"was-validated\" : ''];\n }\n \n return [this.validated ? \"was-validated\" : ''];\n },\n computedAriaInvalid: function computedAriaInvalid() {\n var ariaInvalid = this.ariaInvalid;\n \n if (ariaInvalid === true || ariaInvalid === 'true' || ariaInvalid === '') {\n return 'true';\n }\n \n return this.computedState === false ? 'true' : null;\n }\n },\n watch: {\n checked: function checked(newVal) {\n this.localChecked = newVal;\n },\n localChecked: function localChecked(newVal, oldVal) {\n if (!looseEqual(newVal, oldVal)) {\n this.$emit('input', newVal);\n }\n }\n },\n render: function render(h) {\n var _this = this;\n \n var $inputs = this.formOptions.map(function (option, index) {\n var key = \"BV_option_\".concat(index);\n return h(_this.isRadioGroup ? BFormRadio : BFormCheckbox, {\n props: {\n id: _this.safeId(key),\n value: option.value,\n // Individual radios or checks can be disabled in a group\n disabled: option.disabled || false // We don't need to include these, since the input's will know they are inside here\n // name: this.groupName,\n // form: this.form || null,\n // required: Boolean(this.name && this.required)\n \n },\n key: key\n }, [h('span', {\n domProps: htmlOrText(option.html, option.text)\n })]);\n });\n return h('div', {\n class: [this.groupClasses, 'bv-no-focus-ring'],\n attrs: {\n id: this.safeId(),\n role: this.isRadioGroup ? 'radiogroup' : 'group',\n // Add `tabindex=\"-1\"` to allow group to be focused if needed by screen readers\n tabindex: '-1',\n 'aria-required': this.required ? 'true' : null,\n 'aria-invalid': this.computedAriaInvalid\n }\n }, [this.normalizeSlot('first'), $inputs, this.normalizeSlot('default')]);\n }\n };\n \n var props$x = {\n switches: {\n // Custom switch styling\n type: Boolean,\n default: false\n },\n checked: {\n type: Array,\n default: null\n }\n }; // @vue/component\n \n var BFormCheckboxGroup = /*#__PURE__*/Vue.extend({\n name: 'BFormCheckboxGroup',\n mixins: [idMixin, formMixin, formRadioCheckGroupMixin, // Includes render function\n formOptionsMixin, formSizeMixin, formStateMixin],\n provide: function provide() {\n return {\n bvCheckGroup: this\n };\n },\n props: props$x,\n data: function data() {\n return {\n localChecked: this.checked || []\n };\n },\n computed: {\n isRadioGroup: function isRadioGroup() {\n return false;\n }\n }\n });\n \n var FormCheckboxPlugin = /*#__PURE__*/pluginFactory({\n components: {\n BFormCheckbox: BFormCheckbox,\n BCheckbox: BFormCheckbox,\n BCheck: BFormCheckbox,\n BFormCheckboxGroup: BFormCheckboxGroup,\n BCheckboxGroup: BFormCheckboxGroup,\n BCheckGroup: BFormCheckboxGroup\n }\n });\n \n // v-b-hover directive\n \n var PROP = '__BV_hover_handler__';\n var MOUSEENTER = 'mouseenter';\n var MOUSELEAVE = 'mouseleave'; // --- Utility methods ---\n \n var createListener = function createListener(handler) {\n var listener = function listener(evt) {\n handler(evt.type === MOUSEENTER, evt);\n };\n \n listener.fn = handler;\n return listener;\n };\n \n var updateListeners = function updateListeners(on, el, listener) {\n eventOnOff(on, el, MOUSEENTER, listener, EVENT_OPTIONS_NO_CAPTURE);\n eventOnOff(on, el, MOUSELEAVE, listener, EVENT_OPTIONS_NO_CAPTURE);\n }; // --- Directive bind/unbind/update handler ---\n \n \n var directive = function directive(el, _ref) {\n var _ref$value = _ref.value,\n handler = _ref$value === void 0 ? null : _ref$value;\n \n if (isBrowser) {\n var listener = el[PROP];\n var hasListener = isFunction(listener);\n var handlerChanged = !(hasListener && listener.fn === handler);\n \n if (hasListener && handlerChanged) {\n updateListeners(false, el, listener);\n delete el[PROP];\n }\n \n if (isFunction(handler) && handlerChanged) {\n el[PROP] = createListener(handler);\n updateListeners(true, el, el[PROP]);\n }\n }\n }; // VBHover directive\n \n \n var VBHover = {\n bind: directive,\n componentUpdated: directive,\n unbind: function unbind(el) {\n directive(el, {\n value: null\n });\n }\n };\n \n var dropdownProps = commonProps; // @vue/component\n \n var BVFormBtnLabelControl = /*#__PURE__*/Vue.extend({\n name: 'BVFormBtnLabelControl',\n directives: {\n BHover: VBHover\n },\n mixins: [idMixin, normalizeSlotMixin, dropdownMixin],\n props: {\n value: {\n // This is the value placed on the hidden input\n type: String,\n default: ''\n },\n formattedValue: {\n // This is the value shown in the label\n // Defaults back to `value`\n type: String // default: null\n \n },\n placeholder: {\n // This is the value placed on the hidden input when no value selected\n type: String // default: null\n \n },\n labelSelected: {\n // Value placed in sr-only span inside label when value is present\n type: String // default: null\n \n },\n state: {\n // Tri-state prop: `true`, `false`, or `null`\n type: Boolean,\n // We must explicitly default to `null` here otherwise\n // Vue coerces `undefined` into Boolean `false`\n default: null\n },\n size: {\n type: String // default: null\n \n },\n name: {\n type: String // default: null\n \n },\n form: {\n type: String // default: null\n \n },\n disabled: {\n type: Boolean,\n default: false\n },\n readonly: {\n type: Boolean,\n default: false\n },\n required: {\n type: Boolean,\n default: false\n },\n lang: {\n type: String // default: null\n \n },\n rtl: {\n // Tri-state prop: `true`, `false` or `null`\n type: Boolean,\n // We must explicitly default to `null` here otherwise\n // Vue coerces `undefined` into Boolean `false`\n default: null\n },\n buttonOnly: {\n // When true, renders a btn-group wrapper and visually hides the label\n type: Boolean,\n default: false\n },\n buttonVariant: {\n // Applicable in button mode only\n type: String,\n default: 'secondary'\n },\n menuClass: {\n // Extra classes to apply to the `dropdown-menu` div\n type: [String, Array, Object] // default: null\n \n }\n },\n data: function data() {\n return {\n isHovered: false,\n hasFocus: false\n };\n },\n computed: {\n idButton: function idButton() {\n return this.safeId();\n },\n idLabel: function idLabel() {\n return this.safeId('_value_');\n },\n idMenu: function idMenu() {\n return this.safeId('_dialog_');\n },\n idWrapper: function idWrapper() {\n return this.safeId('_outer_');\n },\n computedDir: function computedDir() {\n return this.rtl === true ? 'rtl' : this.rtl === false ? 'ltr' : null;\n }\n },\n methods: {\n focus: function focus() {\n if (!this.disabled) {\n attemptFocus(this.$refs.toggle);\n }\n },\n blur: function blur() {\n if (!this.disabled) {\n attemptBlur(this.$refs.toggle);\n }\n },\n setFocus: function setFocus(evt) {\n this.hasFocus = evt.type === 'focus';\n },\n handleHover: function handleHover(hovered) {\n this.isHovered = hovered;\n },\n \n /* istanbul ignore next */\n stopEvent: function stopEvent(evt)\n /* istanbul ignore next */\n {\n evt.stopPropagation();\n }\n },\n render: function render(h) {\n var _class, _class2, _ref;\n \n var idButton = this.idButton;\n var idLabel = this.idLabel;\n var idMenu = this.idMenu;\n var idWrapper = this.idWrapper;\n var disabled = this.disabled;\n var readonly = this.readonly;\n var required = this.required;\n var isHovered = this.isHovered;\n var hasFocus = this.hasFocus;\n var state = this.state;\n var visible = this.visible;\n var size = this.size;\n var value = toString$1(this.value) || '';\n var labelSelected = this.labelSelected;\n var buttonOnly = !!this.buttonOnly;\n var buttonVariant = this.buttonVariant;\n var btnScope = {\n isHovered: isHovered,\n hasFocus: hasFocus,\n state: state,\n opened: visible\n };\n var $button = h('button', {\n ref: 'toggle',\n staticClass: 'btn',\n class: (_class = {}, _defineProperty(_class, \"btn-\".concat(buttonVariant), buttonOnly), _defineProperty(_class, \"btn-\".concat(size), !!size), _defineProperty(_class, 'h-auto', !buttonOnly), _defineProperty(_class, 'dropdown-toggle', buttonOnly), _defineProperty(_class, 'dropdown-toggle-no-caret', buttonOnly), _class),\n attrs: {\n id: idButton,\n type: 'button',\n disabled: disabled,\n 'aria-haspopup': 'dialog',\n 'aria-expanded': visible ? 'true' : 'false',\n 'aria-invalid': state === false || required && !value ? 'true' : null,\n 'aria-required': required ? 'true' : null\n },\n directives: [{\n name: 'b-hover',\n value: this.handleHover\n }],\n on: {\n mousedown: this.onMousedown,\n click: this.toggle,\n keydown: this.toggle,\n // Handle ENTER, SPACE and DOWN\n '!focus': this.setFocus,\n '!blur': this.setFocus\n }\n }, [this.hasNormalizedSlot('button-content') ? this.normalizeSlot('button-content', btnScope) :\n /* istanbul ignore next */\n h(BIconChevronDown, {\n props: {\n scale: 1.25\n }\n })]); // Hidden input\n \n var $hidden = h();\n \n if (this.name && !disabled) {\n $hidden = h('input', {\n attrs: {\n type: 'hidden',\n name: this.name || null,\n form: this.form || null,\n value: value\n }\n });\n } // Dropdown content\n \n \n var $menu = h('div', {\n ref: 'menu',\n staticClass: 'dropdown-menu',\n class: [this.menuClass, {\n show: visible,\n 'dropdown-menu-right': this.right\n }],\n attrs: {\n id: idMenu,\n role: 'dialog',\n tabindex: '-1',\n 'aria-modal': 'false',\n 'aria-labelledby': idLabel\n },\n on: {\n keydown: this.onKeydown // Handle ESC\n \n }\n }, [this.normalizeSlot('default', {\n opened: visible\n })]); // Value label\n \n var $label = h('label', {\n staticClass: 'form-control text-break text-wrap bg-transparent h-auto',\n class: (_class2 = {\n // Hidden in button only mode\n 'sr-only': buttonOnly,\n // Mute the text if showing the placeholder\n 'text-muted': !value\n }, _defineProperty(_class2, \"form-control-\".concat(size), !!size), _defineProperty(_class2, 'is-invalid', state === false), _defineProperty(_class2, 'is-valid', state === true), _class2),\n attrs: {\n id: idLabel,\n for: idButton,\n 'aria-invalid': state === false || required && !value ? 'true' : null,\n 'aria-required': required ? 'true' : null\n },\n directives: [{\n name: 'b-hover',\n value: this.handleHover\n }],\n on: {\n // Disable bubbling of the click event to\n // prevent menu from closing and re-opening\n '!click': this.stopEvent\n }\n }, [value ? this.formattedValue || value : this.placeholder || '', // Add the selected label for screen readers when a value is provided\n value && labelSelected ? h('bdi', {\n staticClass: 'sr-only'\n }, labelSelected) : '']); // Return the custom form control wrapper\n \n return h('div', {\n staticClass: 'b-form-btn-label-control dropdown',\n class: [this.directionClass, (_ref = {\n 'btn-group': buttonOnly,\n 'form-control': !buttonOnly\n }, _defineProperty(_ref, \"form-control-\".concat(size), !!size && !buttonOnly), _defineProperty(_ref, 'd-flex', !buttonOnly), _defineProperty(_ref, 'h-auto', !buttonOnly), _defineProperty(_ref, 'align-items-stretch', !buttonOnly), _defineProperty(_ref, \"focus\", hasFocus && !buttonOnly), _defineProperty(_ref, \"show\", visible), _defineProperty(_ref, 'is-valid', state === true), _defineProperty(_ref, 'is-invalid', state === false), _ref)],\n attrs: {\n id: idWrapper,\n role: buttonOnly ? null : 'group',\n lang: this.lang || null,\n dir: this.computedDir,\n 'aria-disabled': disabled,\n 'aria-readonly': readonly && !disabled,\n 'aria-labelledby': idLabel,\n 'aria-invalid': state === false || required && !value ? 'true' : null,\n 'aria-required': required ? 'true' : null\n }\n }, [$button, $hidden, $menu, $label]);\n }\n });\n \n var NAME$h = 'BFormDatepicker'; // Fallback to BCalendar prop if no value found\n \n var getConfigFallback = function getConfigFallback(prop) {\n return getComponentConfig(NAME$h, prop) || getComponentConfig('BCalendar', prop);\n }; // We create our props as a mixin so that we can control\n // where they appear in the props listing reference section\n \n \n var propsMixin = {\n props: _objectSpread2({\n value: {\n type: [String, Date],\n default: null\n },\n valueAsDate: {\n type: Boolean,\n default: false\n },\n resetValue: {\n type: [String, Date] // default: null\n \n },\n initialDate: {\n // This specifies the calendar year/month/day that will be shown when\n // first opening the datepicker if no v-model value is provided\n // Default is the current date (or `min`/`max`)\n // Passed directly to <b-calendar>\n type: [String, Date] // default: null\n \n },\n placeholder: {\n type: String // Defaults to `labelNoDateSelected` from calendar context\n // default: null\n \n },\n size: {\n type: String // default: null\n \n },\n min: {\n type: [String, Date] // default: null\n \n },\n max: {\n type: [String, Date] // default: null\n \n },\n disabled: {\n type: Boolean,\n default: false\n },\n readonly: {\n type: Boolean,\n default: false\n },\n required: {\n // If true adds the `aria-required` attribute\n type: Boolean,\n default: false\n },\n name: {\n type: String // default: null\n \n },\n form: {\n type: String // default: null\n \n },\n state: {\n // Tri-state prop: `true`, `false` or `null`\n type: Boolean,\n default: null\n },\n dateDisabledFn: {\n type: Function // default: null\n \n },\n noCloseOnSelect: {\n type: Boolean,\n default: false\n },\n hideHeader: {\n type: Boolean,\n default: false\n },\n showDecadeNav: {\n // When `true` enables the decade navigation buttons\n type: Boolean,\n default: false\n },\n locale: {\n type: [String, Array] // default: null\n \n },\n startWeekday: {\n // `0` (Sunday), `1` (Monday), ... `6` (Saturday)\n // Day of week to start calendar on\n type: [Number, String],\n default: 0\n },\n direction: {\n type: String // default: null\n \n },\n buttonOnly: {\n type: Boolean,\n default: false\n },\n buttonVariant: {\n // Applicable in button only mode\n type: String,\n default: 'secondary'\n },\n calendarWidth: {\n // Width of the calendar dropdown\n type: String,\n default: '270px'\n },\n selectedVariant: {\n // Variant color to use for the selected date\n type: String,\n default: 'primary'\n },\n todayVariant: {\n // Variant color to use for today's date (defaults to `variant`)\n type: String // default: null\n \n },\n noHighlightToday: {\n // Disable highlighting today's date\n type: Boolean,\n default: false\n },\n todayButton: {\n type: Boolean,\n default: false\n },\n labelTodayButton: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$h, 'labelTodayButton');\n }\n },\n todayButtonVariant: {\n type: String,\n default: 'outline-primary'\n },\n resetButton: {\n type: Boolean,\n default: false\n },\n labelResetButton: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$h, 'labelResetButton');\n }\n },\n resetButtonVariant: {\n type: String,\n default: 'outline-danger'\n },\n closeButton: {\n type: Boolean,\n default: false\n },\n labelCloseButton: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$h, 'labelCloseButton');\n }\n },\n closeButtonVariant: {\n type: String,\n default: 'outline-secondary'\n },\n dateInfoFn: {\n // Passed through to b-calendar\n type: Function // default: undefined\n \n },\n // Labels for buttons and keyboard shortcuts\n // These pick BCalendar global config if no BFormDate global config\n labelPrevDecade: {\n type: String,\n default: function _default() {\n return getConfigFallback('labelPrevDecade');\n }\n },\n labelPrevYear: {\n type: String,\n default: function _default() {\n return getConfigFallback('labelPrevYear');\n }\n },\n labelPrevMonth: {\n type: String,\n default: function _default() {\n return getConfigFallback('labelPrevMonth');\n }\n },\n labelCurrentMonth: {\n type: String,\n default: function _default() {\n return getConfigFallback('labelCurrentMonth');\n }\n },\n labelNextMonth: {\n type: String,\n default: function _default() {\n return getConfigFallback('labelNextMonth');\n }\n },\n labelNextYear: {\n type: String,\n default: function _default() {\n return getConfigFallback('labelNextYear');\n }\n },\n labelNextDecade: {\n type: String,\n default: function _default() {\n return getConfigFallback('labelNextDecade');\n }\n },\n labelToday: {\n type: String,\n default: function _default() {\n return getConfigFallback('labelToday');\n }\n },\n labelSelected: {\n type: String,\n default: function _default() {\n return getConfigFallback('labelSelected');\n }\n },\n labelNoDateSelected: {\n type: String,\n default: function _default() {\n return getConfigFallback('labelNoDateSelected');\n }\n },\n labelCalendar: {\n type: String,\n default: function _default() {\n return getConfigFallback('labelCalendar');\n }\n },\n labelNav: {\n type: String,\n default: function _default() {\n return getConfigFallback('labelNav');\n }\n },\n labelHelp: {\n type: String,\n default: function _default() {\n return getConfigFallback('labelHelp');\n }\n },\n dateFormatOptions: {\n // `Intl.DateTimeFormat` object\n // Note: This value is *not* to be placed in the global config\n type: Object,\n default: function _default() {\n return {\n year: STR_NUMERIC,\n month: STR_LONG,\n day: STR_NUMERIC,\n weekday: STR_LONG\n };\n }\n },\n weekdayHeaderFormat: {\n // Format of the weekday names at the top of the calendar\n // Note: This value is *not* to be placed in the global config\n type: String,\n // `short` is typically a 3 letter abbreviation,\n // `narrow` is typically a single letter\n // `long` is the full week day name\n // Although some locales may override this (i.e `ar`, etc)\n default: STR_SHORT,\n validator: function validator(value) {\n return arrayIncludes([STR_LONG, STR_SHORT, STR_NARROW], value);\n }\n },\n // Dark mode\n dark: {\n type: Boolean,\n default: false\n },\n // extra dropdown stuff\n menuClass: {\n type: [String, Array, Object] // default: null\n \n }\n }, dropdownProps)\n }; // --- BFormDate component ---\n // @vue/component\n \n var BFormDatepicker = /*#__PURE__*/Vue.extend({\n name: NAME$h,\n // The mixins order determines the order of appearance in the props reference section\n mixins: [idMixin, propsMixin],\n model: {\n prop: 'value',\n event: 'input'\n },\n data: function data() {\n return {\n // We always use `YYYY-MM-DD` value internally\n localYMD: formatYMD(this.value) || '',\n // If the popup is open\n isVisible: false,\n // Context data from BCalendar\n localLocale: null,\n isRTL: false,\n formattedValue: '',\n activeYMD: ''\n };\n },\n computed: {\n calendarYM: function calendarYM() {\n // Returns the calendar year/month\n // Returns the `YYYY-MM` portion of the active calendar date\n return this.activeYMD.slice(0, -3);\n },\n calendarProps: function calendarProps() {\n // Use self for better minification, as `this` won't\n // minimize and we reference it many times below\n var self = this;\n return {\n hidden: !self.isVisible,\n value: self.localYMD,\n min: self.min,\n max: self.max,\n initialDate: self.initialDate,\n readonly: self.readonly,\n disabled: self.disabled,\n locale: self.locale,\n startWeekday: self.startWeekday,\n direction: self.direction,\n width: self.calendarWidth,\n dateDisabledFn: self.dateDisabledFn,\n selectedVariant: self.selectedVariant,\n todayVariant: self.todayVariant,\n dateInfoFn: self.dateInfoFn,\n hideHeader: self.hideHeader,\n showDecadeNav: self.showDecadeNav,\n noHighlightToday: self.noHighlightToday,\n labelPrevDecade: self.labelPrevDecade,\n labelPrevYear: self.labelPrevYear,\n labelPrevMonth: self.labelPrevMonth,\n labelCurrentMonth: self.labelCurrentMonth,\n labelNextMonth: self.labelNextMonth,\n labelNextYear: self.labelNextYear,\n labelNextDecade: self.labelNextDecade,\n labelToday: self.labelToday,\n labelSelected: self.labelSelected,\n labelNoDateSelected: self.labelNoDateSelected,\n labelCalendar: self.labelCalendar,\n labelNav: self.labelNav,\n labelHelp: self.labelHelp,\n dateFormatOptions: self.dateFormatOptions,\n weekdayHeaderFormat: self.weekdayHeaderFormat\n };\n },\n computedLang: function computedLang() {\n return (this.localLocale || '').replace(/-u-.*$/i, '') || null;\n },\n computedResetValue: function computedResetValue() {\n return formatYMD(constrainDate(this.resetValue)) || '';\n }\n },\n watch: {\n value: function value(newVal) {\n this.localYMD = formatYMD(newVal) || '';\n },\n localYMD: function localYMD(newVal) {\n // We only update the v-model when the datepicker is open\n if (this.isVisible) {\n this.$emit('input', this.valueAsDate ? parseYMD(newVal) || null : newVal || '');\n }\n },\n calendarYM: function calendarYM(newVal, oldVal)\n /* istanbul ignore next */\n {\n // Displayed calendar month has changed\n // So possibly the calendar height has changed...\n // We need to update popper computed position\n if (newVal !== oldVal && oldVal) {\n try {\n this.$refs.control.updatePopper();\n } catch (_unused) {}\n }\n }\n },\n methods: {\n // Public methods\n focus: function focus() {\n if (!this.disabled) {\n attemptFocus(this.$refs.control);\n }\n },\n blur: function blur() {\n if (!this.disabled) {\n attemptBlur(this.$refs.control);\n }\n },\n // Private methods\n setAndClose: function setAndClose(ymd) {\n var _this = this;\n \n this.localYMD = ymd; // Close calendar popup, unless `noCloseOnSelect`\n \n if (!this.noCloseOnSelect) {\n this.$nextTick(function () {\n _this.$refs.control.hide(true);\n });\n }\n },\n onSelected: function onSelected(ymd) {\n var _this2 = this;\n \n this.$nextTick(function () {\n _this2.setAndClose(ymd);\n });\n },\n onInput: function onInput(ymd) {\n if (this.localYMD !== ymd) {\n this.localYMD = ymd;\n }\n },\n onContext: function onContext(ctx) {\n var activeYMD = ctx.activeYMD,\n isRTL = ctx.isRTL,\n locale = ctx.locale,\n selectedYMD = ctx.selectedYMD,\n selectedFormatted = ctx.selectedFormatted;\n this.isRTL = isRTL;\n this.localLocale = locale;\n this.formattedValue = selectedFormatted;\n this.localYMD = selectedYMD;\n this.activeYMD = activeYMD; // Re-emit the context event\n \n this.$emit('context', ctx);\n },\n onTodayButton: function onTodayButton() {\n // Set to today (or min/max if today is out of range)\n this.setAndClose(formatYMD(constrainDate(createDate(), this.min, this.max)));\n },\n onResetButton: function onResetButton() {\n this.setAndClose(this.computedResetValue);\n },\n onCloseButton: function onCloseButton() {\n this.$refs.control.hide(true);\n },\n // Menu handlers\n onShow: function onShow() {\n this.isVisible = true;\n },\n onShown: function onShown() {\n var _this3 = this;\n \n this.$nextTick(function () {\n attemptFocus(_this3.$refs.calendar);\n \n _this3.$emit('shown');\n });\n },\n onHidden: function onHidden() {\n this.isVisible = false;\n this.$emit('hidden');\n },\n // Render helpers\n defaultButtonFn: function defaultButtonFn(_ref) {\n var isHovered = _ref.isHovered,\n hasFocus = _ref.hasFocus;\n return this.$createElement(isHovered || hasFocus ? BIconCalendarFill : BIconCalendar, {\n attrs: {\n 'aria-hidden': 'true'\n }\n });\n }\n },\n render: function render(h) {\n var $scopedSlots = this.$scopedSlots;\n var localYMD = this.localYMD;\n var disabled = this.disabled;\n var readonly = this.readonly;\n var placeholder = isUndefinedOrNull(this.placeholder) ? this.labelNoDateSelected : this.placeholder; // Optional footer buttons\n \n var $footer = [];\n \n if (this.todayButton) {\n var label = this.labelTodayButton;\n $footer.push(h(BButton, {\n props: {\n size: 'sm',\n disabled: disabled || readonly,\n variant: this.todayButtonVariant\n },\n attrs: {\n 'aria-label': label || null\n },\n on: {\n click: this.onTodayButton\n }\n }, label));\n }\n \n if (this.resetButton) {\n var _label = this.labelResetButton;\n $footer.push(h(BButton, {\n props: {\n size: 'sm',\n disabled: disabled || readonly,\n variant: this.resetButtonVariant\n },\n attrs: {\n 'aria-label': _label || null\n },\n on: {\n click: this.onResetButton\n }\n }, _label));\n }\n \n if (this.closeButton) {\n var _label2 = this.labelCloseButton;\n $footer.push(h(BButton, {\n props: {\n size: 'sm',\n disabled: disabled,\n variant: this.closeButtonVariant\n },\n attrs: {\n 'aria-label': _label2 || null\n },\n on: {\n click: this.onCloseButton\n }\n }, _label2));\n }\n \n if ($footer.length > 0) {\n $footer = [h('div', {\n staticClass: 'b-form-date-controls d-flex flex-wrap',\n class: {\n 'justify-content-between': $footer.length > 1,\n 'justify-content-end': $footer.length < 2\n }\n }, $footer)];\n }\n \n var $calendar = h(BCalendar, {\n key: 'calendar',\n ref: 'calendar',\n staticClass: 'b-form-date-calendar w-100',\n props: this.calendarProps,\n on: {\n selected: this.onSelected,\n input: this.onInput,\n context: this.onContext\n },\n scopedSlots: pick($scopedSlots, ['nav-prev-decade', 'nav-prev-year', 'nav-prev-month', 'nav-this-month', 'nav-next-month', 'nav-next-year', 'nav-next-decade'])\n }, $footer);\n return h(BVFormBtnLabelControl, {\n ref: 'control',\n staticClass: 'b-form-datepicker',\n props: _objectSpread2(_objectSpread2({}, this.$props), {}, {\n // Overridden / computed props\n id: this.safeId(),\n rtl: this.isRTL,\n lang: this.computedLang,\n value: localYMD || '',\n formattedValue: localYMD ? this.formattedValue : '',\n placeholder: placeholder || '',\n menuClass: [{\n 'bg-dark': !!this.dark,\n 'text-light': !!this.dark\n }, this.menuClass]\n }),\n on: {\n show: this.onShow,\n shown: this.onShown,\n hidden: this.onHidden\n },\n scopedSlots: {\n 'button-content': $scopedSlots['button-content'] || this.defaultButtonFn\n }\n }, [$calendar]);\n }\n });\n \n var FormDatepickerPlugin = /*#__PURE__*/pluginFactory({\n components: {\n BFormDatepicker: BFormDatepicker,\n BDatepicker: BFormDatepicker\n }\n });\n \n // @vue/component\n var formCustomMixin = {\n props: {\n plain: {\n type: Boolean,\n default: false\n }\n },\n computed: {\n custom: function custom() {\n return !this.plain;\n }\n }\n };\n \n var NAME$i = 'BFormFile';\n var VALUE_EMPTY_DEPRECATED_MSG = 'Setting \"value\"/\"v-model\" to an empty string for reset is deprecated. Set to \"null\" instead.'; // --- Helper methods ---\n \n var isValidValue = function isValidValue(value) {\n return isFile(value) || isArray(value) && value.every(function (v) {\n return isValidValue(v);\n });\n }; // @vue/component\n \n \n var BFormFile = /*#__PURE__*/Vue.extend({\n name: NAME$i,\n mixins: [attrsMixin, idMixin, formMixin, formStateMixin, formCustomMixin, normalizeSlotMixin],\n inheritAttrs: false,\n model: {\n prop: 'value',\n event: 'input'\n },\n props: {\n size: {\n type: String,\n default: function _default() {\n return getComponentConfig('BFormControl', 'size');\n }\n },\n value: {\n type: [File, Array],\n default: null,\n validator: function validator(value) {\n /* istanbul ignore next */\n if (value === '') {\n warn(VALUE_EMPTY_DEPRECATED_MSG, NAME$i);\n return true;\n }\n \n return isUndefinedOrNull(value) || isValidValue(value);\n }\n },\n accept: {\n type: String,\n default: ''\n },\n // Instruct input to capture from camera\n capture: {\n type: Boolean,\n default: false\n },\n placeholder: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$i, 'placeholder');\n }\n },\n browseText: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$i, 'browseText');\n }\n },\n dropPlaceholder: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$i, 'dropPlaceholder');\n }\n },\n multiple: {\n type: Boolean,\n default: false\n },\n directory: {\n type: Boolean,\n default: false\n },\n noTraverse: {\n type: Boolean,\n default: false\n },\n noDrop: {\n type: Boolean,\n default: false\n },\n fileNameFormatter: {\n type: Function,\n default: null\n }\n },\n data: function data() {\n return {\n selectedFile: null,\n dragging: false,\n hasFocus: false\n };\n },\n computed: {\n selectLabel: function selectLabel() {\n // Draging active\n if (this.dragging && this.dropPlaceholder) {\n return this.dropPlaceholder;\n } // No file chosen\n \n \n if (!this.selectedFile || this.selectedFile.length === 0) {\n return this.placeholder;\n } // Convert selectedFile to an array (if not already one)\n \n \n var files = concat(this.selectedFile).filter(identity);\n \n if (this.hasNormalizedSlot('file-name')) {\n // There is a slot for formatting the files/names\n return [this.normalizeSlot('file-name', {\n files: files,\n names: files.map(function (f) {\n return f.name;\n })\n })];\n } else {\n // Use the user supplied formatter, or the built in one.\n return isFunction(this.fileNameFormatter) ? toString$1(this.fileNameFormatter(files)) : files.map(function (file) {\n return file.name;\n }).join(', ');\n }\n },\n computedAttrs: function computedAttrs() {\n return _objectSpread2(_objectSpread2({}, this.bvAttrs), {}, {\n type: 'file',\n id: this.safeId(),\n name: this.name,\n disabled: this.disabled,\n required: this.required,\n form: this.form || null,\n capture: this.capture || null,\n accept: this.accept || null,\n multiple: this.multiple,\n webkitdirectory: this.directory,\n 'aria-required': this.required ? 'true' : null\n });\n }\n },\n watch: {\n selectedFile: function selectedFile(newVal, oldVal) {\n // The following test is needed when the file input is \"reset\" or the\n // exact same file(s) are selected to prevent an infinite loop.\n // When in `multiple` mode we need to check for two empty arrays or\n // two arrays with identical files\n if (newVal === oldVal || isArray(newVal) && isArray(oldVal) && newVal.length === oldVal.length && newVal.every(function (v, i) {\n return v === oldVal[i];\n })) {\n return;\n }\n \n if (!newVal && this.multiple) {\n this.$emit('input', []);\n } else {\n this.$emit('input', newVal);\n }\n },\n value: function value(newVal) {\n if (!newVal || isArray(newVal) && newVal.length === 0) {\n this.reset();\n }\n }\n },\n methods: {\n focusHandler: function focusHandler(evt) {\n // Bootstrap v4 doesn't have focus styling for custom file input\n // Firefox has a '[type=file]:focus ~ sibling' selector issue,\n // so we add a 'focus' class to get around these bugs\n if (this.plain || evt.type === 'focusout') {\n this.hasFocus = false;\n } else {\n // Add focus styling for custom file input\n this.hasFocus = true;\n }\n },\n reset: function reset() {\n // IE 11 doesn't support setting `$input.value` to `''` or `null`\n // So we use this little extra hack to reset the value, just in case\n // This also appears to work on modern browsers as well\n // Wrapped in try in case IE 11 or mobile Safari crap out\n try {\n var $input = this.$refs.input;\n $input.value = '';\n $input.type = '';\n $input.type = 'file';\n } catch (e) {}\n \n this.selectedFile = this.multiple ? [] : null;\n },\n onFileChange: function onFileChange(evt) {\n var _this = this;\n \n // Always emit original event\n this.$emit('change', evt); // Check if special `items` prop is available on event (drop mode)\n // Can be disabled by setting no-traverse\n \n var items = evt.dataTransfer && evt.dataTransfer.items;\n /* istanbul ignore next: not supported in JSDOM */\n \n if (items && !this.noTraverse) {\n var queue = [];\n \n for (var i = 0; i < items.length; i++) {\n var item = items[i].webkitGetAsEntry();\n \n if (item) {\n queue.push(this.traverseFileTree(item));\n }\n }\n \n Promise.all(queue).then(function (filesArr) {\n _this.setFiles(from(filesArr));\n });\n return;\n } // Normal handling\n \n \n this.setFiles(evt.target.files || evt.dataTransfer.files);\n },\n setFiles: function setFiles() {\n var files = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n \n if (!files) {\n /* istanbul ignore next: this will probably not happen */\n this.selectedFile = null;\n } else if (this.multiple) {\n // Convert files to array\n var filesArray = [];\n \n for (var i = 0; i < files.length; i++) {\n filesArray.push(files[i]);\n } // Return file(s) as array\n \n \n this.selectedFile = filesArray;\n } else {\n // Return single file object\n this.selectedFile = files[0] || null;\n }\n },\n onReset: function onReset() {\n // Triggered when the parent form (if any) is reset\n this.selectedFile = this.multiple ? [] : null;\n },\n onDragover: function onDragover(evt) {\n evt.preventDefault();\n evt.stopPropagation();\n \n if (this.noDrop || !this.custom) {\n return;\n }\n \n this.dragging = true;\n \n try {\n evt.dataTransfer.dropEffect = 'copy';\n } catch (_unused) {}\n },\n onDragleave: function onDragleave(evt) {\n evt.preventDefault();\n evt.stopPropagation();\n this.dragging = false;\n },\n onDrop: function onDrop(evt) {\n evt.preventDefault();\n evt.stopPropagation();\n \n if (this.noDrop) {\n return;\n }\n \n this.dragging = false;\n \n if (evt.dataTransfer.files && evt.dataTransfer.files.length > 0) {\n this.onFileChange(evt);\n }\n },\n \n /* istanbul ignore next: not supported in JSDOM */\n traverseFileTree: function traverseFileTree(item, path)\n /* istanbul ignore next */\n {\n var _this2 = this;\n \n // Based on https://stackoverflow.com/questions/3590058\n return new Promise(function (resolve) {\n path = path || '';\n \n if (item.isFile) {\n // Get file\n item.file(function (file) {\n file.$path = path; // Inject $path to file obj\n \n resolve(file);\n });\n } else if (item.isDirectory) {\n // Get folder contents\n item.createReader().readEntries(function (entries) {\n var queue = [];\n \n for (var i = 0; i < entries.length; i++) {\n queue.push(_this2.traverseFileTree(entries[i], path + item.name + '/'));\n }\n \n Promise.all(queue).then(function (filesArr) {\n resolve(from(filesArr));\n });\n });\n }\n });\n }\n },\n render: function render(h) {\n // Form Input\n var input = h('input', {\n ref: 'input',\n class: [{\n 'form-control-file': this.plain,\n 'custom-file-input': this.custom,\n focus: this.custom && this.hasFocus\n }, this.stateClass],\n attrs: this.computedAttrs,\n on: {\n change: this.onFileChange,\n focusin: this.focusHandler,\n focusout: this.focusHandler,\n reset: this.onReset\n }\n });\n \n if (this.plain) {\n return input;\n } // Overlay Labels\n \n \n var label = h('label', {\n staticClass: 'custom-file-label',\n class: [this.dragging ? 'dragging' : null],\n attrs: {\n for: this.safeId(),\n 'data-browse': this.browseText || null\n }\n }, this.selectLabel); // Return rendered custom file input\n \n return h('div', {\n staticClass: 'custom-file b-form-file',\n class: [this.stateClass, _defineProperty({}, \"b-custom-control-\".concat(this.size), this.size)],\n attrs: {\n id: this.safeId('_BV_file_outer_')\n },\n on: {\n dragover: this.onDragover,\n dragleave: this.onDragleave,\n drop: this.onDrop\n }\n }, [input, label]);\n }\n });\n \n var FormFilePlugin = /*#__PURE__*/pluginFactory({\n components: {\n BFormFile: BFormFile,\n BFile: BFormFile\n }\n });\n \n var escapeChar = function escapeChar(value) {\n return '\\\\' + value;\n }; // The `cssEscape()` util is based on this `CSS.escape()` polyfill:\n // https://github.com/mathiasbynens/CSS.escape\n \n \n var cssEscape = function cssEscape(value) {\n value = toString$1(value);\n var length = value.length;\n var firstCharCode = value.charCodeAt(0);\n return value.split('').reduce(function (result, char, index) {\n var charCode = value.charCodeAt(index); // If the character is NULL (U+0000), use (U+FFFD) as replacement\n \n if (charCode === 0x0000) {\n return result + \"\\uFFFD\";\n } // If the character ...\n \n \n if ( // ... is U+007F OR\n charCode === 0x007f || // ... is in the range [\\1-\\1F] (U+0001 to U+001F) OR ...\n charCode >= 0x0001 && charCode <= 0x001f || // ... is the first character and is in the range [0-9] (U+0030 to U+0039) OR ...\n index === 0 && charCode >= 0x0030 && charCode <= 0x0039 || // ... is the second character and is in the range [0-9] (U+0030 to U+0039)\n // and the first character is a `-` (U+002D) ...\n index === 1 && charCode >= 0x0030 && charCode <= 0x0039 && firstCharCode === 0x002d) {\n // ... https://drafts.csswg.org/cssom/#escape-a-character-as-code-point\n return result + escapeChar(\"\".concat(charCode.toString(16), \" \"));\n } // If the character ...\n \n \n if ( // ... is the first character AND ...\n index === 0 && // ... is a `-` (U+002D) AND ...\n charCode === 0x002d && // ... there is no second character ...\n length === 1) {\n // ... use the escaped character\n return result + escapeChar(char);\n } // If the character ...\n \n \n if ( // ... is greater than or equal to U+0080 OR ...\n charCode >= 0x0080 || // ... is `-` (U+002D) OR ...\n charCode === 0x002d || // ... is `_` (U+005F) OR ...\n charCode === 0x005f || // ... is in the range [0-9] (U+0030 to U+0039) OR ...\n charCode >= 0x0030 && charCode <= 0x0039 || // ... is in the range [A-Z] (U+0041 to U+005A) OR ...\n charCode >= 0x0041 && charCode <= 0x005a || // ... is in the range [a-z] (U+0061 to U+007A) ...\n charCode >= 0x0061 && charCode <= 0x007a) {\n // ... use the character itself\n return result + char;\n } // Otherwise use the escaped character\n // See: https://drafts.csswg.org/cssom/#escape-a-character\n \n \n return result + escapeChar(char);\n }, '');\n };\n \n var RX_COL_CLASS = /^col-/; // Generates a prop object with a type of `[Boolean, String, Number]`\n \n var boolStrNum = function boolStrNum() {\n return {\n type: [Boolean, String, Number],\n default: false\n };\n }; // Generates a prop object with a type of `[String, Number]`\n \n \n var strNum = function strNum() {\n return {\n type: [String, Number],\n default: null\n };\n }; // Compute a breakpoint class name\n \n \n var computeBreakpoint = function computeBreakpoint(type, breakpoint, val) {\n var className = type;\n \n if (isUndefinedOrNull(val) || val === false) {\n return undefined;\n }\n \n if (breakpoint) {\n className += \"-\".concat(breakpoint);\n } // Handling the boolean style prop when accepting [Boolean, String, Number]\n // means Vue will not convert <b-col sm></b-col> to sm: true for us.\n // Since the default is false, an empty string indicates the prop's presence.\n \n \n if (type === 'col' && (val === '' || val === true)) {\n // .col-md\n return lowerCase(className);\n } // .order-md-6\n \n \n className += \"-\".concat(val);\n return lowerCase(className);\n }; // Memoized function for better performance on generating class names\n \n \n var computeBreakpointClass = memoize(computeBreakpoint); // Cached copy of the breakpoint prop names\n \n var breakpointPropMap = create(null); // Lazy evaled props factory for BCol\n \n var generateProps = function generateProps() {\n // Grab the breakpoints from the cached config (exclude the '' (xs) breakpoint)\n var breakpoints = getBreakpointsUpCached().filter(identity); // Supports classes like: .col-sm, .col-md-6, .col-lg-auto\n \n var breakpointCol = breakpoints.reduce(function (propMap, breakpoint) {\n if (breakpoint) {\n // We filter out the '' breakpoint (xs), as making a prop name ''\n // would not work. The `cols` prop is used for `xs`\n propMap[breakpoint] = boolStrNum();\n }\n \n return propMap;\n }, create(null)); // Supports classes like: .offset-md-1, .offset-lg-12\n \n var breakpointOffset = breakpoints.reduce(function (propMap, breakpoint) {\n propMap[suffixPropName(breakpoint, 'offset')] = strNum();\n return propMap;\n }, create(null)); // Supports classes like: .order-md-1, .order-lg-12\n \n var breakpointOrder = breakpoints.reduce(function (propMap, breakpoint) {\n propMap[suffixPropName(breakpoint, 'order')] = strNum();\n return propMap;\n }, create(null)); // For loop doesn't need to check hasOwnProperty\n // when using an object created from null\n \n breakpointPropMap = assign(create(null), {\n col: keys(breakpointCol),\n offset: keys(breakpointOffset),\n order: keys(breakpointOrder)\n }); // Return the generated props\n \n return _objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2({\n // Generic flexbox .col (xs)\n col: {\n type: Boolean,\n default: false\n },\n // .col-[1-12]|auto (xs)\n cols: strNum()\n }, breakpointCol), {}, {\n offset: strNum()\n }, breakpointOffset), {}, {\n order: strNum()\n }, breakpointOrder), {}, {\n // Flex alignment\n alignSelf: {\n type: String,\n default: null,\n validator: function validator(str) {\n return arrayIncludes(['auto', 'start', 'end', 'center', 'baseline', 'stretch'], str);\n }\n },\n tag: {\n type: String,\n default: 'div'\n }\n });\n }; // We do not use Vue.extend here as that would evaluate the props\n // immediately, which we do not want to happen\n // @vue/component\n \n \n var BCol = {\n name: 'BCol',\n functional: true,\n \n get props() {\n // Allow props to be lazy evaled on first access and\n // then they become a non-getter afterwards.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/get#Smart_self-overwriting_lazy_getters\n delete this.props; // eslint-disable-next-line no-return-assign\n \n return this.props = generateProps();\n },\n \n render: function render(h, _ref) {\n var _classList$push;\n \n var props = _ref.props,\n data = _ref.data,\n children = _ref.children;\n var classList = []; // Loop through `col`, `offset`, `order` breakpoint props\n \n for (var type in breakpointPropMap) {\n // Returns colSm, offset, offsetSm, orderMd, etc.\n var _keys = breakpointPropMap[type];\n \n for (var i = 0; i < _keys.length; i++) {\n // computeBreakpoint(col, colSm => Sm, value=[String, Number, Boolean])\n var c = computeBreakpointClass(type, _keys[i].replace(type, ''), props[_keys[i]]); // If a class is returned, push it onto the array.\n \n if (c) {\n classList.push(c);\n }\n }\n }\n \n var hasColClasses = classList.some(function (className) {\n return RX_COL_CLASS.test(className);\n });\n classList.push((_classList$push = {\n // Default to .col if no other col-{bp}-* classes generated nor `cols` specified.\n col: props.col || !hasColClasses && !props.cols\n }, _defineProperty(_classList$push, \"col-\".concat(props.cols), props.cols), _defineProperty(_classList$push, \"offset-\".concat(props.offset), props.offset), _defineProperty(_classList$push, \"order-\".concat(props.order), props.order), _defineProperty(_classList$push, \"align-self-\".concat(props.alignSelf), props.alignSelf), _classList$push));\n return h(props.tag, a(data, {\n class: classList\n }), children);\n }\n };\n \n // Component name\n \n var NAME$j = 'BFormGroup'; // Selector for finding first input in the form-group\n \n var SELECTOR$1 = 'input:not([disabled]),textarea:not([disabled]),select:not([disabled])'; // --- Render methods ---\n \n var renderInvalidFeedback = function renderInvalidFeedback(h, ctx) {\n var content = ctx.normalizeSlot('invalid-feedback') || ctx.invalidFeedback;\n var invalidFeedback = h();\n \n if (content) {\n invalidFeedback = h(BFormInvalidFeedback, {\n props: {\n id: ctx.invalidFeedbackId,\n // If state is explicitly false, always show the feedback\n state: ctx.computedState,\n tooltip: ctx.tooltip,\n ariaLive: ctx.feedbackAriaLive,\n role: ctx.feedbackAriaLive ? 'alert' : null\n },\n attrs: {\n tabindex: content ? '-1' : null\n }\n }, [content]);\n }\n \n return invalidFeedback;\n };\n \n var renderValidFeedback = function renderValidFeedback(h, ctx) {\n var content = ctx.normalizeSlot('valid-feedback') || ctx.validFeedback;\n var validFeedback = h();\n \n if (content) {\n validFeedback = h(BFormValidFeedback, {\n props: {\n id: ctx.validFeedbackId,\n // If state is explicitly true, always show the feedback\n state: ctx.computedState,\n tooltip: ctx.tooltip,\n ariaLive: ctx.feedbackAriaLive,\n role: ctx.feedbackAriaLive ? 'alert' : null\n },\n attrs: {\n tabindex: content ? '-1' : null\n }\n }, [content]);\n }\n \n return validFeedback;\n };\n \n var renderHelpText = function renderHelpText(h, ctx) {\n // Form help text (description)\n var content = ctx.normalizeSlot('description') || ctx.description;\n var description = h();\n \n if (content) {\n description = h(BFormText, {\n attrs: {\n id: ctx.descriptionId,\n tabindex: content ? '-1' : null\n }\n }, [content]);\n }\n \n return description;\n };\n \n var renderLabel = function renderLabel(h, ctx) {\n // Render label/legend inside b-col if necessary\n var content = ctx.normalizeSlot('label') || ctx.label;\n var labelFor = ctx.labelFor;\n var isLegend = !labelFor;\n var isHorizontal = ctx.isHorizontal;\n var labelTag = isLegend ? 'legend' : 'label';\n \n if (!content && !isHorizontal) {\n return h();\n } else if (ctx.labelSrOnly) {\n var label = h();\n \n if (content) {\n label = h(labelTag, {\n class: 'sr-only',\n attrs: {\n id: ctx.labelId,\n for: labelFor || null\n }\n }, [content]);\n }\n \n return h(isHorizontal ? BCol : 'div', {\n props: isHorizontal ? ctx.labelColProps : {}\n }, [label]);\n } else {\n return h(isHorizontal ? BCol : labelTag, {\n on: isLegend ? {\n click: ctx.legendClick\n } : {},\n props: isHorizontal ? _objectSpread2({\n tag: labelTag\n }, ctx.labelColProps) : {},\n attrs: {\n id: ctx.labelId,\n for: labelFor || null,\n // We add a tab index to legend so that screen readers\n // will properly read the aria-labelledby in IE.\n tabindex: isLegend ? '-1' : null\n },\n class: [// Hide the focus ring on the legend\n isLegend ? 'bv-no-focus-ring' : '', // When horizontal or if a legend is rendered, add col-form-label\n // for correct sizing as Bootstrap has inconsistent font styling\n // for legend in non-horizontal form-groups.\n // See: https://github.com/twbs/bootstrap/issues/27805\n isHorizontal || isLegend ? 'col-form-label' : '', // Emulate label padding top of 0 on legend when not horizontal\n !isHorizontal && isLegend ? 'pt-0' : '', // If not horizontal and not a legend, we add d-block to label\n // so that label-align works\n !isHorizontal && !isLegend ? 'd-block' : '', ctx.labelSize ? \"col-form-label-\".concat(ctx.labelSize) : '', ctx.labelAlignClasses, ctx.labelClass]\n }, [content]);\n }\n }; // -- BFormGroup Prop factory -- used for lazy generation of props\n // Memoize this function to return cached values to\n // save time in computed functions\n \n \n var makePropName = memoize(function () {\n var breakpoint = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var prefix = arguments.length > 1 ? arguments[1] : undefined;\n return \"\".concat(prefix).concat(upperFirst(breakpoint));\n }); // BFormGroup prop generator for lazy generation of props\n \n var generateProps$1 = function generateProps() {\n var BREAKPOINTS = getBreakpointsUpCached(); // Generate the labelCol breakpoint props\n \n var bpLabelColProps = BREAKPOINTS.reduce(function (props, breakpoint) {\n // i.e. label-cols, label-cols-sm, label-cols-md, ...\n props[makePropName(breakpoint, 'labelCols')] = {\n type: [Number, String, Boolean],\n default: breakpoint ? false : null\n };\n return props;\n }, create(null)); // Generate the labelAlign breakpoint props\n \n var bpLabelAlignProps = BREAKPOINTS.reduce(function (props, breakpoint) {\n // label-align, label-align-sm, label-align-md, ...\n props[makePropName(breakpoint, 'labelAlign')] = {\n type: String // left, right, center\n // default: null\n \n };\n return props;\n }, create(null));\n return _objectSpread2(_objectSpread2(_objectSpread2({\n label: {\n type: String // default: null\n \n },\n labelFor: {\n type: String // default: null\n \n },\n labelSize: {\n type: String // default: null\n \n },\n labelSrOnly: {\n type: Boolean,\n default: false\n }\n }, bpLabelColProps), bpLabelAlignProps), {}, {\n labelClass: {\n type: [String, Array, Object] // default: null\n \n },\n description: {\n type: String // default: null\n \n },\n invalidFeedback: {\n type: String // default: null\n \n },\n validFeedback: {\n type: String // default: null\n \n },\n tooltip: {\n // Enable tooltip style feedback\n type: Boolean,\n default: false\n },\n feedbackAriaLive: {\n type: String,\n default: 'assertive'\n },\n validated: {\n type: Boolean,\n default: false\n },\n disabled: {\n type: Boolean,\n default: false\n }\n });\n }; // We do not use Vue.extend here as that would evaluate the props\n // immediately, which we do not want to happen\n // @vue/component\n \n \n var BFormGroup = {\n name: NAME$j,\n mixins: [idMixin, formStateMixin, normalizeSlotMixin],\n \n get props() {\n // Allow props to be lazy evaled on first access and\n // then they become a non-getter afterwards.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/get#Smart_self-overwriting_lazy_getters\n delete this.props; // eslint-disable-next-line no-return-assign\n \n return this.props = generateProps$1();\n },\n \n computed: {\n labelColProps: function labelColProps() {\n var _this = this;\n \n var props = {};\n getBreakpointsUpCached().forEach(function (breakpoint) {\n // Grab the value if the label column breakpoint prop\n var propVal = _this[makePropName(breakpoint, 'labelCols')]; // Handle case where the prop's value is an empty string,\n // which represents true\n \n \n propVal = propVal === '' ? true : propVal || false;\n \n if (!isBoolean(propVal) && propVal !== 'auto') {\n // Convert to column size to number\n propVal = toInteger(propVal, 0); // Ensure column size is greater than 0\n \n propVal = propVal > 0 ? propVal : false;\n }\n \n if (propVal) {\n // Add the prop to the list of props to give to b-col\n // If breakpoint is '' (labelCols=true), then we use the\n // col prop to make equal width at xs\n var bColPropName = breakpoint || (isBoolean(propVal) ? 'col' : 'cols'); // Add it to the props\n \n props[bColPropName] = propVal;\n }\n });\n return props;\n },\n labelAlignClasses: function labelAlignClasses() {\n var _this2 = this;\n \n var classes = [];\n getBreakpointsUpCached().forEach(function (breakpoint) {\n // Assemble the label column breakpoint align classes\n var propVal = _this2[makePropName(breakpoint, 'labelAlign')] || null;\n \n if (propVal) {\n var className = breakpoint ? \"text-\".concat(breakpoint, \"-\").concat(propVal) : \"text-\".concat(propVal);\n classes.push(className);\n }\n });\n return classes;\n },\n isHorizontal: function isHorizontal() {\n // Determine if the resultant form-group will be rendered\n // horizontal (meaning it has label-col breakpoints)\n return keys(this.labelColProps).length > 0;\n },\n labelId: function labelId() {\n return this.hasNormalizedSlot('label') || this.label ? this.safeId('_BV_label_') : null;\n },\n descriptionId: function descriptionId() {\n return this.hasNormalizedSlot('description') || this.description ? this.safeId('_BV_description_') : null;\n },\n hasInvalidFeedback: function hasInvalidFeedback() {\n // Used for computing aria-describedby\n return this.computedState === false && (this.hasNormalizedSlot('invalid-feedback') || this.invalidFeedback);\n },\n invalidFeedbackId: function invalidFeedbackId() {\n return this.hasInvalidFeedback ? this.safeId('_BV_feedback_invalid_') : null;\n },\n hasValidFeedback: function hasValidFeedback() {\n // Used for computing aria-describedby\n return this.computedState === true && (this.hasNormalizedSlot('valid-feedback') || this.validFeedback);\n },\n validFeedbackId: function validFeedbackId() {\n return this.hasValidFeedback ? this.safeId('_BV_feedback_valid_') : null;\n },\n describedByIds: function describedByIds() {\n // Screen readers will read out any content linked to by aria-describedby\n // even if the content is hidden with `display: none;`, hence we only include\n // feedback IDs if the form-group's state is explicitly valid or invalid.\n return [this.descriptionId, this.invalidFeedbackId, this.validFeedbackId].filter(Boolean).join(' ') || null;\n }\n },\n watch: {\n describedByIds: function describedByIds(add, remove) {\n if (add !== remove) {\n this.setInputDescribedBy(add, remove);\n }\n }\n },\n mounted: function mounted() {\n var _this3 = this;\n \n this.$nextTick(function () {\n // Set the aria-describedby IDs on the input specified by label-for\n // We do this in a nextTick to ensure the children have finished rendering\n _this3.setInputDescribedBy(_this3.describedByIds);\n });\n },\n methods: {\n legendClick: function legendClick(evt) {\n if (this.labelFor) {\n // Don't do anything if labelFor is set\n \n /* istanbul ignore next: clicking a label will focus the input, so no need to test */\n return;\n }\n \n var tagName = evt.target ? evt.target.tagName : '';\n \n if (/^(input|select|textarea|label|button|a)$/i.test(tagName)) {\n // If clicked an interactive element inside legend,\n // we just let the default happen\n \n /* istanbul ignore next */\n return;\n }\n \n var inputs = selectAll(SELECTOR$1, this.$refs.content).filter(isVisible); // If only a single input, focus it, emulating label behaviour\n \n if (inputs && inputs.length === 1) {\n attemptFocus(inputs[0]);\n }\n },\n setInputDescribedBy: function setInputDescribedBy(add, remove) {\n // Sets the `aria-describedby` attribute on the input if label-for is set.\n // Optionally accepts a string of IDs to remove as the second parameter.\n // Preserves any aria-describedby value(s) user may have on input.\n if (this.labelFor && isBrowser) {\n // We need to escape `labelFor` since it can be user-provided\n var input = select(\"#\".concat(cssEscape(this.labelFor)), this.$refs.content);\n \n if (input) {\n var adb = 'aria-describedby';\n var ids = (getAttr(input, adb) || '').split(/\\s+/);\n add = (add || '').split(/\\s+/);\n remove = (remove || '').split(/\\s+/); // Update ID list, preserving any original IDs\n // and ensuring the ID's are unique\n \n ids = ids.filter(function (id) {\n return !arrayIncludes(remove, id);\n }).concat(add).filter(Boolean);\n ids = keys(ids.reduce(function (memo, id) {\n return _objectSpread2(_objectSpread2({}, memo), {}, _defineProperty({}, id, true));\n }, {})).join(' ').trim();\n \n if (ids) {\n setAttr(input, adb, ids);\n } else {\n // No IDs, so remove the attribute\n removeAttr(input, adb);\n }\n }\n }\n }\n },\n render: function render(h) {\n var isFieldset = !this.labelFor;\n var isHorizontal = this.isHorizontal; // Generate the label\n \n var label = renderLabel(h, this); // Generate the content\n \n var content = h(isHorizontal ? BCol : 'div', {\n ref: 'content',\n // Hide focus ring\n staticClass: 'bv-no-focus-ring',\n attrs: {\n tabindex: isFieldset ? '-1' : null,\n role: isFieldset ? 'group' : null\n }\n }, [this.normalizeSlot('default') || h(), renderInvalidFeedback(h, this), renderValidFeedback(h, this), renderHelpText(h, this)]); // Create the form-group\n \n var data = {\n staticClass: 'form-group',\n class: [this.validated ? 'was-validated' : null, this.stateClass],\n attrs: {\n id: this.safeId(),\n disabled: isFieldset ? this.disabled : null,\n role: isFieldset ? null : 'group',\n 'aria-invalid': this.computedState === false ? 'true' : null,\n // Only apply aria-labelledby if we are a horizontal fieldset\n // as the legend is no longer a direct child of fieldset\n 'aria-labelledby': isFieldset && isHorizontal ? this.labelId : null,\n // Only apply aria-describedby IDs if we are a fieldset\n // as the input will have the IDs when not a fieldset\n 'aria-describedby': isFieldset ? this.describedByIds : null\n }\n }; // Return it wrapped in a form-group\n // Note: Fieldsets do not support adding `row` or `form-row` directly\n // to them due to browser specific render issues, so we move the `form-row`\n // to an inner wrapper div when horizontal and using a fieldset\n \n return h(isFieldset ? 'fieldset' : isHorizontal ? BFormRow : 'div', data, isHorizontal && isFieldset ? [h(BFormRow, [label, content])] : [label, content]);\n }\n };\n \n var FormGroupPlugin = /*#__PURE__*/pluginFactory({\n components: {\n BFormGroup: BFormGroup,\n BFormFieldset: BFormGroup\n }\n });\n \n // @vue/component\n var formSelectionMixin = {\n computed: {\n selectionStart: {\n // Expose selectionStart for formatters, etc\n cache: false,\n \n /* istanbul ignore next */\n get: function get() {\n return this.$refs.input.selectionStart;\n },\n \n /* istanbul ignore next */\n set: function set(val) {\n this.$refs.input.selectionStart = val;\n }\n },\n selectionEnd: {\n // Expose selectionEnd for formatters, etc\n cache: false,\n \n /* istanbul ignore next */\n get: function get() {\n return this.$refs.input.selectionEnd;\n },\n \n /* istanbul ignore next */\n set: function set(val) {\n this.$refs.input.selectionEnd = val;\n }\n },\n selectionDirection: {\n // Expose selectionDirection for formatters, etc\n cache: false,\n \n /* istanbul ignore next */\n get: function get() {\n return this.$refs.input.selectionDirection;\n },\n \n /* istanbul ignore next */\n set: function set(val) {\n this.$refs.input.selectionDirection = val;\n }\n }\n },\n methods: {\n /* istanbul ignore next */\n select: function select() {\n var _this$$refs$input;\n \n // For external handler that may want a select() method\n (_this$$refs$input = this.$refs.input).select.apply(_this$$refs$input, arguments);\n },\n \n /* istanbul ignore next */\n setSelectionRange: function setSelectionRange() {\n var _this$$refs$input2;\n \n // For external handler that may want a setSelectionRange(a,b,c) method\n (_this$$refs$input2 = this.$refs.input).setSelectionRange.apply(_this$$refs$input2, arguments);\n },\n \n /* istanbul ignore next */\n setRangeText: function setRangeText() {\n var _this$$refs$input3;\n \n // For external handler that may want a setRangeText(a,b,c) method\n (_this$$refs$input3 = this.$refs.input).setRangeText.apply(_this$$refs$input3, arguments);\n }\n }\n };\n \n var formTextMixin = {\n model: {\n prop: 'value',\n event: 'update'\n },\n props: {\n value: {\n type: [String, Number],\n default: ''\n },\n ariaInvalid: {\n type: [Boolean, String],\n default: false\n },\n readonly: {\n type: Boolean,\n default: false\n },\n plaintext: {\n type: Boolean,\n default: false\n },\n autocomplete: {\n type: String // default: null\n \n },\n placeholder: {\n type: String // default: null\n \n },\n formatter: {\n type: Function // default: null\n \n },\n lazyFormatter: {\n type: Boolean,\n default: false\n },\n trim: {\n type: Boolean,\n default: false\n },\n number: {\n type: Boolean,\n default: false\n },\n lazy: {\n // Only update the `v-model` on blur/change events\n type: Boolean,\n default: false\n },\n debounce: {\n // Debounce timeout (in ms). Not applicable with `lazy` prop\n type: [Number, String],\n default: 0\n }\n },\n data: function data() {\n return {\n localValue: toString$1(this.value),\n vModelValue: this.value\n };\n },\n computed: {\n computedClass: function computedClass() {\n return [{\n // Range input needs class `custom-range`\n 'custom-range': this.type === 'range',\n // `plaintext` not supported by `type=\"range\"` or `type=\"color\"`\n 'form-control-plaintext': this.plaintext && this.type !== 'range' && this.type !== 'color',\n // `form-control` not used by `type=\"range\"` or `plaintext`\n // Always used by `type=\"color\"`\n 'form-control': !this.plaintext && this.type !== 'range' || this.type === 'color'\n }, this.sizeFormClass, this.stateClass];\n },\n computedAriaInvalid: function computedAriaInvalid() {\n if (!this.ariaInvalid || this.ariaInvalid === 'false') {\n // `this.ariaInvalid` is `null` or `false` or 'false'\n return this.computedState === false ? 'true' : null;\n }\n \n if (this.ariaInvalid === true) {\n // User wants explicit `:aria-invalid=\"true\"`\n return 'true';\n } // Most likely a string value (which could be the string 'true')\n \n \n return this.ariaInvalid;\n },\n computedDebounce: function computedDebounce() {\n // Ensure we have a positive number equal to or greater than 0\n return mathMax(toInteger(this.debounce, 0), 0);\n },\n hasFormatter: function hasFormatter() {\n return isFunction(this.formatter);\n }\n },\n watch: {\n value: function value(newVal) {\n var stringifyValue = toString$1(newVal);\n \n if (stringifyValue !== this.localValue && newVal !== this.vModelValue) {\n // Clear any pending debounce timeout, as we are overwriting the user input\n this.clearDebounce(); // Update the local values\n \n this.localValue = stringifyValue;\n this.vModelValue = newVal;\n }\n }\n },\n created: function created() {\n // Create private non-reactive props\n this.$_inputDebounceTimer = null;\n },\n mounted: function mounted() {\n // Set up destroy handler\n this.$on('hook:beforeDestroy', this.clearDebounce); // Preset the internal state\n \n var value = this.value;\n var stringifyValue = toString$1(value);\n /* istanbul ignore next */\n \n if (stringifyValue !== this.localValue && value !== this.vModelValue) {\n this.localValue = stringifyValue;\n this.vModelValue = value;\n }\n },\n methods: {\n clearDebounce: function clearDebounce() {\n clearTimeout(this.$_inputDebounceTimer);\n this.$_inputDebounceTimer = null;\n },\n formatValue: function formatValue(value, evt) {\n var force = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n value = toString$1(value);\n \n if (this.hasFormatter && (!this.lazyFormatter || force)) {\n value = this.formatter(value, evt);\n }\n \n return value;\n },\n modifyValue: function modifyValue(value) {\n // Emulate `.trim` modifier behaviour\n if (this.trim) {\n value = value.trim();\n } // Emulate `.number` modifier behaviour\n \n \n if (this.number) {\n value = toFloat(value, value);\n }\n \n return value;\n },\n updateValue: function updateValue(value) {\n var _this = this;\n \n var force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var lazy = this.lazy;\n \n if (lazy && !force) {\n return;\n }\n \n value = this.modifyValue(value);\n \n if (value !== this.vModelValue) {\n this.clearDebounce();\n \n var doUpdate = function doUpdate() {\n _this.vModelValue = value;\n \n _this.$emit('update', value);\n };\n \n var debounce = this.computedDebounce; // Only debounce the value update when a value greater than `0`\n // is set and we are not in lazy mode or this is a forced update\n \n if (debounce > 0 && !lazy && !force) {\n this.$_inputDebounceTimer = setTimeout(doUpdate, debounce);\n } else {\n // Immediately update the v-model\n doUpdate();\n }\n } else if (this.hasFormatter) {\n // When the `vModelValue` hasn't changed but the actual input value\n // is out of sync, make sure to change it to the given one\n // Usually caused by browser autocomplete and how it triggers the\n // change or input event, or depending on the formatter function\n // https://github.com/bootstrap-vue/bootstrap-vue/issues/2657\n // https://github.com/bootstrap-vue/bootstrap-vue/issues/3498\n \n /* istanbul ignore next: hard to test */\n var $input = this.$refs.input;\n /* istanbul ignore if: hard to test out of sync value */\n \n if ($input && value !== $input.value) {\n $input.value = value;\n }\n }\n },\n onInput: function onInput(evt) {\n // `evt.target.composing` is set by Vue\n // https://github.com/vuejs/vue/blob/dev/src/platforms/web/runtime/directives/model.js\n // TODO: Is this needed now with the latest Vue?\n \n /* istanbul ignore if: hard to test composition events */\n if (evt.target.composing) {\n return;\n }\n \n var value = evt.target.value;\n var formattedValue = this.formatValue(value, evt); // Exit when the `formatter` function strictly returned `false`\n // or prevented the input event\n \n /* istanbul ignore next */\n \n if (formattedValue === false || evt.defaultPrevented) {\n evt.preventDefault();\n return;\n }\n \n this.localValue = formattedValue;\n this.updateValue(formattedValue);\n this.$emit('input', formattedValue);\n },\n onChange: function onChange(evt) {\n var value = evt.target.value;\n var formattedValue = this.formatValue(value, evt); // Exit when the `formatter` function strictly returned `false`\n // or prevented the input event\n \n /* istanbul ignore next */\n \n if (formattedValue === false || evt.defaultPrevented) {\n evt.preventDefault();\n return;\n }\n \n this.localValue = formattedValue;\n this.updateValue(formattedValue, true);\n this.$emit('change', formattedValue);\n },\n onBlur: function onBlur(evt) {\n // Apply the `localValue` on blur to prevent cursor jumps\n // on mobile browsers (e.g. caused by autocomplete)\n var value = evt.target.value;\n var formattedValue = this.formatValue(value, evt, true);\n \n if (formattedValue !== false) {\n // We need to use the modified value here to apply the\n // `.trim` and `.number` modifiers properly\n this.localValue = toString$1(this.modifyValue(formattedValue)); // We pass the formatted value here since the `updateValue` method\n // handles the modifiers itself\n \n this.updateValue(formattedValue, true);\n } // Emit native blur event\n \n \n this.$emit('blur', evt);\n },\n focus: function focus() {\n // For external handler that may want a focus method\n if (!this.disabled) {\n attemptFocus(this.$el);\n }\n },\n blur: function blur() {\n // For external handler that may want a blur method\n if (!this.disabled) {\n attemptBlur(this.$el);\n }\n }\n }\n };\n \n // @vue/component\n var formValidityMixin = {\n computed: {\n validity: {\n // Expose validity property\n cache: false,\n \n /* istanbul ignore next */\n get: function get() {\n return this.$refs.input.validity;\n }\n },\n validationMessage: {\n // Expose validationMessage property\n cache: false,\n \n /* istanbul ignore next */\n get: function get() {\n return this.$refs.input.validationMessage;\n }\n },\n willValidate: {\n // Expose willValidate property\n cache: false,\n \n /* istanbul ignore next */\n get: function get() {\n return this.$refs.input.willValidate;\n }\n }\n },\n methods: {\n /* istanbul ignore next */\n setCustomValidity: function setCustomValidity() {\n var _this$$refs$input;\n \n // For external handler that may want a setCustomValidity(...) method\n return (_this$$refs$input = this.$refs.input).setCustomValidity.apply(_this$$refs$input, arguments);\n },\n \n /* istanbul ignore next */\n checkValidity: function checkValidity() {\n var _this$$refs$input2;\n \n // For external handler that may want a checkValidity(...) method\n return (_this$$refs$input2 = this.$refs.input).checkValidity.apply(_this$$refs$input2, arguments);\n },\n \n /* istanbul ignore next */\n reportValidity: function reportValidity() {\n var _this$$refs$input3;\n \n // For external handler that may want a reportValidity(...) method\n return (_this$$refs$input3 = this.$refs.input).reportValidity.apply(_this$$refs$input3, arguments);\n }\n }\n };\n \n var TYPES = ['text', 'password', 'email', 'number', 'url', 'tel', 'search', 'range', 'color', 'date', 'time', 'datetime', 'datetime-local', 'month', 'week']; // @vue/component\n \n var BFormInput = /*#__PURE__*/Vue.extend({\n name: 'BFormInput',\n // Mixin order is important!\n mixins: [listenersMixin, idMixin, formMixin, formSizeMixin, formStateMixin, formTextMixin, formSelectionMixin, formValidityMixin],\n props: {\n // `value` prop is defined in form-text mixin\n type: {\n type: String,\n default: 'text',\n validator: function validator(type) {\n return arrayIncludes(TYPES, type);\n }\n },\n noWheel: {\n // Disable mousewheel to prevent wheel from\n // changing values (i.e. number/date)\n type: Boolean,\n default: false\n },\n min: {\n type: [String, Number] // default: null\n \n },\n max: {\n type: [String, Number] // default: null\n \n },\n step: {\n type: [String, Number] // default: null\n \n },\n list: {\n type: String // default: null\n \n }\n },\n computed: {\n localType: function localType() {\n // We only allow certain types\n return arrayIncludes(TYPES, this.type) ? this.type : 'text';\n },\n computedAttrs: function computedAttrs() {\n var type = this.localType,\n disabled = this.disabled,\n placeholder = this.placeholder,\n required = this.required,\n min = this.min,\n max = this.max,\n step = this.step;\n return {\n id: this.safeId(),\n name: this.name || null,\n form: this.form || null,\n type: type,\n disabled: disabled,\n placeholder: placeholder,\n required: required,\n autocomplete: this.autocomplete || null,\n readonly: this.readonly || this.plaintext,\n min: min,\n max: max,\n step: step,\n list: type !== 'password' ? this.list : null,\n 'aria-required': required ? 'true' : null,\n 'aria-invalid': this.computedAriaInvalid\n };\n },\n computedListeners: function computedListeners() {\n return _objectSpread2(_objectSpread2({}, this.bvListeners), {}, {\n input: this.onInput,\n change: this.onChange,\n blur: this.onBlur\n });\n }\n },\n watch: {\n noWheel: function noWheel(newVal) {\n this.setWheelStopper(newVal);\n }\n },\n mounted: function mounted() {\n this.setWheelStopper(this.noWheel);\n },\n \n /* istanbul ignore next */\n deactivated: function deactivated() {\n // Turn off listeners when keep-alive component deactivated\n \n /* istanbul ignore next */\n this.setWheelStopper(false);\n },\n \n /* istanbul ignore next */\n activated: function activated() {\n // Turn on listeners (if no-wheel) when keep-alive component activated\n \n /* istanbul ignore next */\n this.setWheelStopper(this.noWheel);\n },\n beforeDestroy: function beforeDestroy() {\n /* istanbul ignore next */\n this.setWheelStopper(false);\n },\n methods: {\n setWheelStopper: function setWheelStopper(on) {\n var input = this.$el; // We use native events, so that we don't interfere with propagation\n \n eventOnOff(on, input, 'focus', this.onWheelFocus);\n eventOnOff(on, input, 'blur', this.onWheelBlur);\n \n if (!on) {\n eventOff(document, 'wheel', this.stopWheel);\n }\n },\n onWheelFocus: function onWheelFocus() {\n eventOn(document, 'wheel', this.stopWheel);\n },\n onWheelBlur: function onWheelBlur() {\n eventOff(document, 'wheel', this.stopWheel);\n },\n stopWheel: function stopWheel(evt) {\n evt.preventDefault();\n attemptBlur(this.$el);\n }\n },\n render: function render(h) {\n return h('input', {\n ref: 'input',\n class: this.computedClass,\n attrs: this.computedAttrs,\n domProps: {\n value: this.localValue\n },\n on: this.computedListeners\n });\n }\n });\n \n var FormInputPlugin = /*#__PURE__*/pluginFactory({\n components: {\n BFormInput: BFormInput,\n BInput: BFormInput\n }\n });\n \n var props$y = {\n checked: {\n // type: [String, Number, Boolean, Object],\n default: null\n }\n }; // @vue/component\n \n var BFormRadioGroup = /*#__PURE__*/Vue.extend({\n name: 'BFormRadioGroup',\n mixins: [idMixin, formMixin, formRadioCheckGroupMixin, // Includes render function\n formOptionsMixin, formSizeMixin, formStateMixin],\n provide: function provide() {\n return {\n bvRadioGroup: this\n };\n },\n props: props$y,\n data: function data() {\n return {\n localChecked: this.checked\n };\n },\n computed: {\n isRadioGroup: function isRadioGroup() {\n return true;\n }\n }\n });\n \n var FormRadioPlugin = /*#__PURE__*/pluginFactory({\n components: {\n BFormRadio: BFormRadio,\n BRadio: BFormRadio,\n BFormRadioGroup: BFormRadioGroup,\n BRadioGroup: BFormRadioGroup\n }\n });\n \n var NAME$k = 'BFormRating';\n var MIN_STARS = 3;\n var DEFAULT_STARS = 5;\n var LEFT$1 = KEY_CODES.LEFT,\n RIGHT$1 = KEY_CODES.RIGHT,\n UP$1 = KEY_CODES.UP,\n DOWN$1 = KEY_CODES.DOWN; // --- Private helper component ---\n // @vue/component\n \n var BVFormRatingStar = Vue.extend({\n name: 'BVFormRatingStar',\n mixins: [normalizeSlotMixin],\n props: {\n rating: {\n type: Number,\n default: 0\n },\n star: {\n type: Number,\n default: 0\n },\n focused: {\n // If parent is focused\n type: Boolean,\n default: false\n },\n variant: {\n type: String // default: null\n \n },\n disabled: {\n type: Boolean,\n default: false\n },\n readonly: {\n type: Boolean,\n default: false\n },\n hasClear: {\n type: Boolean,\n default: false\n }\n },\n methods: {\n onClick: function onClick(evt) {\n if (!this.disabled && !this.readonly) {\n evt.preventDefault();\n this.$emit('selected', this.star);\n }\n }\n },\n render: function render(h) {\n var rating = this.rating,\n star = this.star,\n focused = this.focused,\n hasClear = this.hasClear,\n variant = this.variant,\n disabled = this.disabled,\n readonly = this.readonly;\n var minStar = hasClear ? 0 : 1;\n var type = rating >= star ? 'full' : rating >= star - 0.5 ? 'half' : 'empty';\n var slotScope = {\n variant: variant,\n disabled: disabled,\n readonly: readonly\n };\n return h('span', {\n staticClass: 'b-rating-star',\n class: {\n // When not hovered, we use this class to focus the current (or first) star\n focused: focused && rating === star || !toInteger(rating) && star === minStar,\n // We add type classes to we can handle RTL styling\n 'b-rating-star-empty': type === 'empty',\n 'b-rating-star-half': type === 'half',\n 'b-rating-star-full': type === 'full'\n },\n attrs: {\n tabindex: !disabled && !readonly ? '-1' : null\n },\n on: {\n click: this.onClick\n }\n }, [h('span', {\n staticClass: 'b-rating-icon'\n }, [this.normalizeSlot(type, slotScope)])]);\n }\n }); // --- Utility methods ---\n \n var computeStars = function computeStars(stars) {\n return mathMax(MIN_STARS, toInteger(stars, DEFAULT_STARS));\n };\n \n var clampValue = function clampValue(value, min, max) {\n return mathMax(mathMin(value, max), min);\n }; // --- BFormRating ---\n // @vue/component\n \n \n var BFormRating = /*#__PURE__*/Vue.extend({\n name: NAME$k,\n components: {\n BIconStar: BIconStar,\n BIconStarHalf: BIconStarHalf,\n BIconStarFill: BIconStarFill,\n BIconX: BIconX\n },\n mixins: [idMixin],\n model: {\n prop: 'value',\n event: 'change'\n },\n props: {\n value: {\n type: [Number, String],\n default: null\n },\n stars: {\n type: [Number, String],\n default: DEFAULT_STARS,\n validator: function validator(val) {\n return toInteger(val) >= MIN_STARS;\n }\n },\n variant: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$k, 'variant');\n }\n },\n color: {\n // CSS color string (overrides variant)\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$k, 'color');\n }\n },\n showValue: {\n type: Boolean,\n default: false\n },\n showValueMax: {\n type: Boolean,\n default: false\n },\n disabled: {\n type: Boolean,\n default: false\n },\n readonly: {\n type: Boolean,\n default: false\n },\n size: {\n type: String // default: null\n \n },\n name: {\n type: String // default: null\n \n },\n form: {\n type: String // default: null\n \n },\n noBorder: {\n type: Boolean,\n default: false\n },\n inline: {\n type: Boolean,\n default: false\n },\n precision: {\n type: [Number, String],\n default: null\n },\n iconEmpty: {\n type: String,\n default: 'star'\n },\n iconHalf: {\n type: String,\n default: 'star-half'\n },\n iconFull: {\n type: String,\n default: 'star-fill'\n },\n iconClear: {\n type: String,\n default: 'x'\n },\n locale: {\n // Locale for the formatted value (if shown)\n // Defaults to the browser locale. Falls back to `en`\n type: [String, Array] // default: undefined\n \n },\n showClear: {\n type: Boolean,\n default: false\n }\n },\n data: function data() {\n var value = toFloat(this.value, null);\n var stars = computeStars(this.stars);\n return {\n localValue: isNull(value) ? null : clampValue(value, 0, stars),\n hasFocus: false\n };\n },\n computed: {\n computedStars: function computedStars() {\n return computeStars(this.stars);\n },\n computedRating: function computedRating() {\n var value = toFloat(this.localValue, 0);\n var precision = toInteger(this.precision, 3); // We clamp the value between `0` and stars\n \n return clampValue(toFloat(value.toFixed(precision)), 0, this.computedStars);\n },\n computedLocale: function computedLocale() {\n var locales = concat(this.locale).filter(identity);\n var nf = new Intl.NumberFormat(locales);\n return nf.resolvedOptions().locale;\n },\n isInteractive: function isInteractive() {\n return !this.disabled && !this.readonly;\n },\n isRTL: function isRTL() {\n return isLocaleRTL(this.computedLocale);\n },\n formattedRating: function formattedRating() {\n var precision = toInteger(this.precision);\n var showValueMax = this.showValueMax;\n var locale = this.computedLocale;\n var formatOptions = {\n notation: 'standard',\n minimumFractionDigits: isNaN(precision) ? 0 : precision,\n maximumFractionDigits: isNaN(precision) ? 3 : precision\n };\n var stars = this.computedStars.toLocaleString(locale);\n var value = this.localValue;\n value = isNull(value) ? showValueMax ? '-' : '' : value.toLocaleString(locale, formatOptions);\n return showValueMax ? \"\".concat(value, \"/\").concat(stars) : value;\n }\n },\n watch: {\n value: function value(newVal, oldVal) {\n if (newVal !== oldVal) {\n var value = toFloat(newVal, null);\n this.localValue = isNull(value) ? null : clampValue(value, 0, this.computedStars);\n }\n },\n localValue: function localValue(newVal, oldVal) {\n if (newVal !== oldVal && newVal !== (this.value || 0)) {\n this.$emit('change', newVal || null);\n }\n },\n disabled: function disabled(newVal) {\n if (newVal) {\n this.hasFocus = false;\n this.blur();\n }\n }\n },\n methods: {\n // --- Public methods ---\n focus: function focus() {\n if (!this.disabled) {\n attemptFocus(this.$el);\n }\n },\n blur: function blur() {\n if (!this.disabled) {\n attemptBlur(this.$el);\n }\n },\n // --- Private methods ---\n onKeydown: function onKeydown(evt) {\n var keyCode = evt.keyCode;\n \n if (this.isInteractive && arrayIncludes([LEFT$1, DOWN$1, RIGHT$1, UP$1], keyCode)) {\n evt.preventDefault();\n var value = toInteger(this.localValue, 0);\n var min = this.showClear ? 0 : 1;\n var stars = this.computedStars; // In RTL mode, LEFT/RIGHT are swapped\n \n var amountRtl = this.isRTL ? -1 : 1;\n \n if (keyCode === LEFT$1) {\n this.localValue = clampValue(value - amountRtl, min, stars) || null;\n } else if (keyCode === RIGHT$1) {\n this.localValue = clampValue(value + amountRtl, min, stars);\n } else if (keyCode === DOWN$1) {\n this.localValue = clampValue(value - 1, min, stars) || null;\n } else if (keyCode === UP$1) {\n this.localValue = clampValue(value + 1, min, stars);\n }\n }\n },\n onSelected: function onSelected(value) {\n if (this.isInteractive) {\n this.localValue = value;\n }\n },\n onFocus: function onFocus(evt) {\n this.hasFocus = !this.isInteractive ? false : evt.type === 'focus';\n },\n // --- Render methods ---\n renderIcon: function renderIcon(icon) {\n return this.$createElement(BIcon, {\n props: {\n icon: icon,\n variant: this.disabled || this.color ? null : this.variant || null\n }\n });\n },\n iconEmptyFn: function iconEmptyFn() {\n return this.renderIcon(this.iconEmpty);\n },\n iconHalfFn: function iconHalfFn() {\n return this.renderIcon(this.iconHalf);\n },\n iconFullFn: function iconFullFn() {\n return this.renderIcon(this.iconFull);\n },\n iconClearFn: function iconClearFn() {\n return this.$createElement(BIcon, {\n props: {\n icon: this.iconClear\n }\n });\n }\n },\n render: function render(h) {\n var _this = this,\n _class;\n \n var disabled = this.disabled,\n readonly = this.readonly,\n size = this.size,\n name = this.name,\n form = this.form,\n inline = this.inline,\n variant = this.variant,\n color = this.color,\n noBorder = this.noBorder,\n hasFocus = this.hasFocus,\n computedRating = this.computedRating,\n computedStars = this.computedStars,\n formattedRating = this.formattedRating,\n showClear = this.showClear,\n isRTL = this.isRTL,\n isInteractive = this.isInteractive,\n $scopedSlots = this.$scopedSlots;\n var $content = [];\n \n if (showClear && !disabled && !readonly) {\n var $icon = h('span', {\n staticClass: 'b-rating-icon'\n }, [($scopedSlots['icon-clear'] || this.iconClearFn)()]);\n $content.push(h('span', {\n staticClass: 'b-rating-star b-rating-star-clear flex-grow-1',\n class: {\n focused: hasFocus && computedRating === 0\n },\n attrs: {\n tabindex: isInteractive ? '-1' : null\n },\n on: {\n click: function click() {\n return _this.onSelected(null);\n }\n },\n key: 'clear'\n }, [$icon]));\n }\n \n for (var index = 0; index < computedStars; index++) {\n var value = index + 1;\n $content.push(h(BVFormRatingStar, {\n staticClass: 'flex-grow-1',\n style: color && !disabled ? {\n color: color\n } : {},\n props: {\n rating: computedRating,\n star: value,\n variant: disabled ? null : variant || null,\n disabled: disabled,\n readonly: readonly,\n focused: hasFocus,\n hasClear: showClear\n },\n on: {\n selected: this.onSelected\n },\n scopedSlots: {\n empty: $scopedSlots['icon-empty'] || this.iconEmptyFn,\n half: $scopedSlots['icon-half'] || this.iconHalfFn,\n full: $scopedSlots['icon-full'] || this.iconFullFn\n },\n key: index\n }));\n }\n \n if (name) {\n $content.push(h('input', {\n attrs: {\n type: 'hidden',\n value: isNull(this.localValue) ? '' : computedRating,\n name: name,\n form: form || null\n },\n key: 'hidden'\n }));\n }\n \n if (this.showValue) {\n $content.push(h('b', {\n staticClass: 'b-rating-value flex-grow-1',\n attrs: {\n 'aria-hidden': 'true'\n },\n key: 'value'\n }, toString$1(formattedRating)));\n }\n \n return h('output', {\n staticClass: 'b-rating form-control align-items-center',\n class: (_class = {}, _defineProperty(_class, \"form-control-\".concat(size), !!size), _defineProperty(_class, 'd-inline-flex', inline), _defineProperty(_class, 'd-flex', !inline), _defineProperty(_class, 'border-0', noBorder), _defineProperty(_class, \"disabled\", disabled), _defineProperty(_class, \"readonly\", !disabled && readonly), _class),\n attrs: {\n id: this.safeId(),\n dir: isRTL ? 'rtl' : 'ltr',\n tabindex: disabled ? null : '0',\n disabled: disabled,\n role: 'slider',\n 'aria-disabled': disabled ? 'true' : null,\n 'aria-readonly': !disabled && readonly ? 'true' : null,\n 'aria-live': 'off',\n 'aria-valuemin': showClear ? '0' : '1',\n 'aria-valuemax': toString$1(computedStars),\n 'aria-valuenow': computedRating ? toString$1(computedRating) : null\n },\n on: {\n keydown: this.onKeydown,\n focus: this.onFocus,\n blur: this.onFocus\n }\n }, $content);\n }\n });\n \n var FormRatingPlugin = /*#__PURE__*/pluginFactory({\n components: {\n BFormRating: BFormRating,\n BRating: BFormRating\n }\n });\n \n var optionsMixin = {\n mixins: [formOptionsMixin],\n props: {\n labelField: {\n type: String,\n default: 'label'\n },\n optionsField: {\n type: String,\n default: 'options'\n }\n },\n methods: {\n normalizeOption: function normalizeOption(option) {\n var key = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n \n // When the option is an object, normalize it\n if (isPlainObject(option)) {\n var value = get(option, this.valueField);\n var text = get(option, this.textField);\n var options = get(option, this.optionsField, null); // When it has options, create an `<optgroup>` object\n \n if (!isNull(options)) {\n return {\n label: String(get(option, this.labelField) || text),\n options: this.normalizeOptions(options)\n };\n } // Otherwise create an `<option>` object\n \n \n return {\n value: isUndefined(value) ? key || text : value,\n text: String(isUndefined(text) ? key : text),\n html: get(option, this.htmlField),\n disabled: Boolean(get(option, this.disabledField))\n };\n } // Otherwise create an `<option>` object from the given value\n \n \n return {\n value: key || option,\n text: String(option),\n disabled: false\n };\n }\n }\n };\n \n var NAME$l = 'BFormSelectOption';\n var props$z = {\n value: {\n // type: [String, Number, Boolean, Object],\n required: true\n },\n disabled: {\n type: Boolean,\n default: false\n }\n }; // @vue/component\n \n var BFormSelectOption = /*#__PURE__*/Vue.extend({\n name: NAME$l,\n functional: true,\n props: props$z,\n render: function render(h, _ref) {\n var props = _ref.props,\n data = _ref.data,\n children = _ref.children;\n var value = props.value,\n disabled = props.disabled;\n return h('option', a(data, {\n attrs: {\n disabled: disabled\n },\n domProps: {\n value: value\n }\n }), children);\n }\n });\n \n var BFormSelectOptionGroup = /*#__PURE__*/Vue.extend({\n name: 'BFormSelectOptionGroup',\n mixins: [normalizeSlotMixin, formOptionsMixin],\n props: {\n label: {\n type: String,\n required: true\n }\n },\n render: function render(h) {\n var $options = this.formOptions.map(function (option, index) {\n var value = option.value,\n text = option.text,\n html = option.html,\n disabled = option.disabled;\n return h(BFormSelectOption, {\n attrs: {\n value: value,\n disabled: disabled\n },\n domProps: htmlOrText(html, text),\n key: \"option_\".concat(index)\n });\n });\n return h('optgroup', {\n attrs: {\n label: this.label\n }\n }, [this.normalizeSlot('first'), $options, this.normalizeSlot('default')]);\n }\n });\n \n var BFormSelect = /*#__PURE__*/Vue.extend({\n name: 'BFormSelect',\n mixins: [idMixin, normalizeSlotMixin, formMixin, formSizeMixin, formStateMixin, formCustomMixin, optionsMixin],\n model: {\n prop: 'value',\n event: 'input'\n },\n props: {\n value: {// type: [Object, Array, String, Number, Boolean],\n // default: undefined\n },\n multiple: {\n type: Boolean,\n default: false\n },\n selectSize: {\n // Browsers default size to 0, which shows 4 rows in most browsers in multiple mode\n // Size of 1 can bork out Firefox\n type: Number,\n default: 0\n },\n ariaInvalid: {\n type: [Boolean, String],\n default: false\n }\n },\n data: function data() {\n return {\n localValue: this.value\n };\n },\n computed: {\n computedSelectSize: function computedSelectSize() {\n // Custom selects with a size of zero causes the arrows to be hidden,\n // so dont render the size attribute in this case\n return !this.plain && this.selectSize === 0 ? null : this.selectSize;\n },\n inputClass: function inputClass() {\n return [this.plain ? 'form-control' : 'custom-select', this.size && this.plain ? \"form-control-\".concat(this.size) : null, this.size && !this.plain ? \"custom-select-\".concat(this.size) : null, this.stateClass];\n },\n computedAriaInvalid: function computedAriaInvalid() {\n if (this.ariaInvalid === true || this.ariaInvalid === 'true') {\n return 'true';\n }\n \n return this.stateClass === 'is-invalid' ? 'true' : null;\n }\n },\n watch: {\n value: function value(newVal) {\n this.localValue = newVal;\n },\n localValue: function localValue() {\n this.$emit('input', this.localValue);\n }\n },\n methods: {\n focus: function focus() {\n attemptFocus(this.$refs.input);\n },\n blur: function blur() {\n attemptBlur(this.$refs.input);\n },\n onChange: function onChange(evt) {\n var _this = this;\n \n var target = evt.target;\n var selectedVal = from(target.options).filter(function (o) {\n return o.selected;\n }).map(function (o) {\n return '_value' in o ? o._value : o.value;\n });\n this.localValue = target.multiple ? selectedVal : selectedVal[0];\n this.$nextTick(function () {\n _this.$emit('change', _this.localValue);\n });\n }\n },\n render: function render(h) {\n var name = this.name,\n disabled = this.disabled,\n required = this.required,\n size = this.computedSelectSize,\n value = this.localValue;\n var $options = this.formOptions.map(function (option, index) {\n var value = option.value,\n label = option.label,\n options = option.options,\n disabled = option.disabled;\n var key = \"option_\".concat(index);\n return isArray(options) ? h(BFormSelectOptionGroup, {\n props: {\n label: label,\n options: options\n },\n key: key\n }) : h(BFormSelectOption, {\n props: {\n value: value,\n disabled: disabled\n },\n domProps: htmlOrText(option.html, option.text),\n key: key\n });\n });\n return h('select', {\n class: this.inputClass,\n attrs: {\n id: this.safeId(),\n name: name,\n form: this.form || null,\n multiple: this.multiple || null,\n size: size,\n disabled: disabled,\n required: required,\n 'aria-required': required ? 'true' : null,\n 'aria-invalid': this.computedAriaInvalid\n },\n on: {\n change: this.onChange\n },\n directives: [{\n name: 'model',\n value: value\n }],\n ref: 'input'\n }, [this.normalizeSlot('first'), $options, this.normalizeSlot('default')]);\n }\n });\n \n var FormSelectPlugin = /*#__PURE__*/pluginFactory({\n components: {\n BFormSelect: BFormSelect,\n BFormSelectOption: BFormSelectOption,\n BFormSelectOptionGroup: BFormSelectOptionGroup,\n BSelect: BFormSelect,\n BSelectOption: BFormSelectOption,\n BSelectOptionGroup: BFormSelectOptionGroup\n }\n });\n \n var NAME$m = 'BFormSpinbutton';\n var UP$2 = KEY_CODES.UP,\n DOWN$2 = KEY_CODES.DOWN,\n HOME$1 = KEY_CODES.HOME,\n END$1 = KEY_CODES.END,\n PAGEUP$1 = KEY_CODES.PAGEUP,\n PAGEDOWN$1 = KEY_CODES.PAGEDOWN; // Default for spin button range and step\n \n var DEFAULT_MIN = 1;\n var DEFAULT_MAX = 100;\n var DEFAULT_STEP = 1; // Delay before auto-repeat in ms\n \n var DEFAULT_REPEAT_DELAY = 500; // Repeat interval in ms\n \n var DEFAULT_REPEAT_INTERVAL = 100; // Repeat rate increased after number of repeats\n \n var DEFAULT_REPEAT_THRESHOLD = 10; // Repeat speed multiplier (step multiplier, must be an integer)\n \n var DEFAULT_REPEAT_MULTIPLIER = 4; // --- BFormSpinbutton ---\n // @vue/component\n \n var BFormSpinbutton = /*#__PURE__*/Vue.extend({\n name: NAME$m,\n // Mixin order is important!\n mixins: [attrsMixin, idMixin, normalizeSlotMixin],\n inheritAttrs: false,\n props: {\n value: {\n // Should this really be String, to match native number inputs?\n type: Number,\n default: null\n },\n min: {\n type: [Number, String],\n default: DEFAULT_MIN\n },\n max: {\n type: [Number, String],\n default: DEFAULT_MAX\n },\n step: {\n type: [Number, String],\n default: DEFAULT_STEP\n },\n wrap: {\n type: Boolean,\n default: false\n },\n formatterFn: {\n type: Function // default: null\n \n },\n size: {\n type: String // default: null\n \n },\n placeholder: {\n type: String // default: null\n \n },\n disabled: {\n type: Boolean,\n default: false\n },\n readonly: {\n type: Boolean,\n default: false\n },\n required: {\n // Only affects the `aria-invalid` attribute\n type: Boolean,\n default: false\n },\n name: {\n type: String // default: null\n \n },\n form: {\n type: String // default: null\n \n },\n state: {\n // Tri-state prop: `true`, `false`, or `null`\n type: Boolean,\n default: null\n },\n inline: {\n type: Boolean,\n default: false\n },\n vertical: {\n type: Boolean,\n default: false\n },\n ariaLabel: {\n type: String // default: null\n \n },\n ariaControls: {\n type: String // default: null\n \n },\n labelDecrement: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$m, 'labelDecrement');\n }\n },\n labelIncrement: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$m, 'labelIncrement');\n }\n },\n locale: {\n type: [String, Array] // default: null\n \n },\n repeatDelay: {\n type: [Number, String],\n default: DEFAULT_REPEAT_DELAY\n },\n repeatInterval: {\n type: [Number, String],\n default: DEFAULT_REPEAT_INTERVAL\n },\n repeatThreshold: {\n type: [Number, String],\n default: DEFAULT_REPEAT_THRESHOLD\n },\n repeatStepMultiplier: {\n type: [Number, String],\n default: DEFAULT_REPEAT_MULTIPLIER\n }\n },\n data: function data() {\n return {\n localValue: toFloat(this.value, null),\n hasFocus: false\n };\n },\n computed: {\n spinId: function spinId() {\n return this.safeId();\n },\n computedInline: function computedInline() {\n return this.inline && !this.vertical;\n },\n computedReadonly: function computedReadonly() {\n return this.readonly && !this.disabled;\n },\n computedRequired: function computedRequired() {\n return this.required && !this.computedReadonly && !this.disabled;\n },\n computedStep: function computedStep() {\n return toFloat(this.step, DEFAULT_STEP);\n },\n computedMin: function computedMin() {\n return toFloat(this.min, DEFAULT_MIN);\n },\n computedMax: function computedMax() {\n // We round down to the nearest maximum step value\n var max = toFloat(this.max, DEFAULT_MAX);\n var step = this.computedStep;\n var min = this.computedMin;\n return mathFloor((max - min) / step) * step + min;\n },\n computedDelay: function computedDelay() {\n var delay = toInteger(this.repeatDelay, 0);\n return delay > 0 ? delay : DEFAULT_REPEAT_DELAY;\n },\n computedInterval: function computedInterval() {\n var interval = toInteger(this.repeatInterval, 0);\n return interval > 0 ? interval : DEFAULT_REPEAT_INTERVAL;\n },\n computedThreshold: function computedThreshold() {\n return mathMax(toInteger(this.repeatThreshold, DEFAULT_REPEAT_THRESHOLD), 1);\n },\n computedStepMultiplier: function computedStepMultiplier() {\n return mathMax(toInteger(this.repeatStepMultiplier, DEFAULT_REPEAT_MULTIPLIER), 1);\n },\n computedPrecision: function computedPrecision() {\n // Quick and dirty way to get the number of decimals\n var step = this.computedStep;\n return mathFloor(step) === step ? 0 : (step.toString().split('.')[1] || '').length;\n },\n computedMultiplier: function computedMultiplier() {\n return mathPow(10, this.computedPrecision || 0);\n },\n valueAsFixed: function valueAsFixed() {\n var value = this.localValue;\n return isNull(value) ? '' : value.toFixed(this.computedPrecision);\n },\n computedLocale: function computedLocale() {\n var locales = concat(this.locale).filter(identity);\n var nf = new Intl.NumberFormat(locales);\n return nf.resolvedOptions().locale;\n },\n computedRTL: function computedRTL() {\n return isLocaleRTL(this.computedLocale);\n },\n defaultFormatter: function defaultFormatter() {\n // Returns and `Intl.NumberFormat` formatter method reference\n var precision = this.computedPrecision;\n var nf = new Intl.NumberFormat(this.computedLocale, {\n style: 'decimal',\n useGrouping: false,\n minimumIntegerDigits: 1,\n minimumFractionDigits: precision,\n maximumFractionDigits: precision,\n notation: 'standard'\n }); // Return the format method reference\n \n return nf.format;\n },\n computedFormatter: function computedFormatter() {\n return isFunction(this.formatterFn) ? this.formatterFn : this.defaultFormatter;\n },\n computedAttrs: function computedAttrs() {\n return _objectSpread2(_objectSpread2({}, this.bvAttrs), {}, {\n role: 'group',\n lang: this.computedLocale,\n tabindex: this.disabled ? null : '-1',\n title: this.ariaLabel\n });\n },\n computedSpinAttrs: function computedSpinAttrs() {\n var spinId = this.spinId,\n value = this.localValue,\n required = this.computedRequired,\n disabled = this.disabled,\n state = this.state,\n computedFormatter = this.computedFormatter;\n var hasValue = !isNull(value);\n return _objectSpread2(_objectSpread2({\n dir: this.computedRTL ? 'rtl' : 'ltr'\n }, this.bvAttrs), {}, {\n id: spinId,\n role: 'spinbutton',\n tabindex: disabled ? null : '0',\n 'aria-live': 'off',\n 'aria-label': this.ariaLabel || null,\n 'aria-controls': this.ariaControls || null,\n // TODO: May want to check if the value is in range\n 'aria-invalid': state === false || !hasValue && required ? 'true' : null,\n 'aria-required': required ? 'true' : null,\n // These attrs are required for role spinbutton\n 'aria-valuemin': toString$1(this.computedMin),\n 'aria-valuemax': toString$1(this.computedMax),\n // These should be `null` if the value is out of range\n // They must also be non-existent attrs if the value is out of range or `null`\n 'aria-valuenow': hasValue ? value : null,\n 'aria-valuetext': hasValue ? computedFormatter(value) : null\n });\n }\n },\n watch: {\n value: function value(_value) {\n this.localValue = toFloat(_value, null);\n },\n localValue: function localValue(value) {\n this.$emit('input', value);\n },\n disabled: function disabled(_disabled) {\n if (_disabled) {\n this.clearRepeat();\n }\n },\n readonly: function readonly(_readonly) {\n if (_readonly) {\n this.clearRepeat();\n }\n }\n },\n created: function created() {\n // Create non reactive properties\n this.$_autoDelayTimer = null;\n this.$_autoRepeatTimer = null;\n this.$_keyIsDown = false;\n },\n beforeDestroy: function beforeDestroy() {\n this.clearRepeat();\n },\n \n /* istanbul ignore next */\n deactivated: function deactivated()\n /* istanbul ignore next */\n {\n this.clearRepeat();\n },\n methods: {\n // --- Public methods ---\n focus: function focus() {\n if (!this.disabled) {\n attemptFocus(this.$refs.spinner);\n }\n },\n blur: function blur() {\n if (!this.disabled) {\n attemptBlur(this.$refs.spinner);\n }\n },\n // --- Private methods ---\n emitChange: function emitChange() {\n this.$emit('change', this.localValue);\n },\n stepValue: function stepValue(direction) {\n // Sets a new incremented or decremented value, supporting optional wrapping\n // Direction is either +1 or -1 (or a multiple thereof)\n var value = this.localValue;\n \n if (!this.disabled && !isNull(value)) {\n var step = this.computedStep * direction;\n var min = this.computedMin;\n var max = this.computedMax;\n var multiplier = this.computedMultiplier;\n var wrap = this.wrap; // We ensure that the value steps like a native input\n \n value = mathRound((value - min) / step) * step + min + step; // We ensure that precision is maintained (decimals)\n \n value = mathRound(value * multiplier) / multiplier; // Handle if wrapping is enabled\n \n this.localValue = value > max ? wrap ? min : max : value < min ? wrap ? max : min : value;\n }\n },\n onFocusBlur: function onFocusBlur(evt) {\n if (!this.disabled) {\n this.hasFocus = evt.type === 'focus';\n } else {\n this.hasFocus = false;\n }\n },\n stepUp: function stepUp() {\n var multiplier = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n var value = this.localValue;\n \n if (isNull(value)) {\n this.localValue = this.computedMin;\n } else {\n this.stepValue(+1 * multiplier);\n }\n },\n stepDown: function stepDown() {\n var multiplier = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n var value = this.localValue;\n \n if (isNull(value)) {\n this.localValue = this.wrap ? this.computedMax : this.computedMin;\n } else {\n this.stepValue(-1 * multiplier);\n }\n },\n onKeydown: function onKeydown(evt) {\n var keyCode = evt.keyCode,\n altKey = evt.altKey,\n ctrlKey = evt.ctrlKey,\n metaKey = evt.metaKey;\n /* istanbul ignore if */\n \n if (this.disabled || this.readonly || altKey || ctrlKey || metaKey) {\n return;\n }\n \n if (arrayIncludes([UP$2, DOWN$2, HOME$1, END$1, PAGEUP$1, PAGEDOWN$1], keyCode)) {\n // https://w3c.github.io/aria-practices/#spinbutton\n evt.preventDefault();\n /* istanbul ignore if */\n \n if (this.$_keyIsDown) {\n // Keypress is already in progress\n return;\n }\n \n this.resetTimers();\n \n if (arrayIncludes([UP$2, DOWN$2], keyCode)) {\n // The following use the custom auto-repeat handling\n this.$_keyIsDown = true;\n \n if (keyCode === UP$2) {\n this.handleStepRepeat(evt, this.stepUp);\n } else if (keyCode === DOWN$2) {\n this.handleStepRepeat(evt, this.stepDown);\n }\n } else {\n // These use native OS key repeating\n if (keyCode === PAGEUP$1) {\n this.stepUp(this.computedStepMultiplier);\n } else if (keyCode === PAGEDOWN$1) {\n this.stepDown(this.computedStepMultiplier);\n } else if (keyCode === HOME$1) {\n this.localValue = this.computedMin;\n } else if (keyCode === END$1) {\n this.localValue = this.computedMax;\n }\n }\n }\n },\n onKeyup: function onKeyup(evt) {\n // Emit a change event when the keyup happens\n var keyCode = evt.keyCode,\n altKey = evt.altKey,\n ctrlKey = evt.ctrlKey,\n metaKey = evt.metaKey;\n /* istanbul ignore if */\n \n if (this.disabled || this.readonly || altKey || ctrlKey || metaKey) {\n return;\n }\n \n if (arrayIncludes([UP$2, DOWN$2, HOME$1, END$1, PAGEUP$1, PAGEDOWN$1], keyCode)) {\n this.resetTimers();\n this.$_keyIsDown = false;\n evt.preventDefault();\n this.emitChange();\n }\n },\n handleStepRepeat: function handleStepRepeat(evt, stepper) {\n var _this = this;\n \n var _ref = evt || {},\n type = _ref.type,\n button = _ref.button;\n \n if (!this.disabled && !this.readonly) {\n /* istanbul ignore if */\n if (type === 'mousedown' && button) {\n // We only respond to left (main === 0) button clicks\n return;\n }\n \n this.resetTimers(); // Step the counter initially\n \n stepper(1);\n var threshold = this.computedThreshold;\n var multiplier = this.computedStepMultiplier;\n var delay = this.computedDelay;\n var interval = this.computedInterval; // Initiate the delay/repeat interval\n \n this.$_autoDelayTimer = setTimeout(function () {\n var count = 0;\n _this.$_autoRepeatTimer = setInterval(function () {\n // After N initial repeats, we increase the incrementing step amount\n // We do this to minimize screen reader announcements of the value\n // (values are announced every change, which can be chatty for SR users)\n // And to make it easer to select a value when the range is large\n stepper(count < threshold ? 1 : multiplier);\n count++;\n }, interval);\n }, delay);\n }\n },\n onMouseup: function onMouseup(evt) {\n // `<body>` listener, only enabled when mousedown starts\n var _ref2 = evt || {},\n type = _ref2.type,\n button = _ref2.button;\n /* istanbul ignore if */\n \n \n if (type === 'mouseup' && button) {\n // Ignore non left button (main === 0) mouse button click\n return;\n }\n \n evt.preventDefault();\n this.resetTimers();\n this.setMouseup(false); // Trigger the change event\n \n this.emitChange();\n },\n setMouseup: function setMouseup(on) {\n // Enable or disabled the body mouseup/touchend handlers\n // Use try/catch to handle case when called server side\n try {\n eventOnOff(on, document.body, 'mouseup', this.onMouseup, false);\n eventOnOff(on, document.body, 'touchend', this.onMouseup, false);\n } catch (_unused) {}\n },\n resetTimers: function resetTimers() {\n clearTimeout(this.$_autoDelayTimer);\n clearInterval(this.$_autoRepeatTimer);\n this.$_autoDelayTimer = null;\n this.$_autoRepeatTimer = null;\n },\n clearRepeat: function clearRepeat() {\n this.resetTimers();\n this.setMouseup(false);\n this.$_keyIsDown = false;\n }\n },\n render: function render(h) {\n var _this2 = this,\n _class;\n \n var spinId = this.spinId,\n value = this.localValue,\n inline = this.computedInline,\n readonly = this.computedReadonly,\n vertical = this.vertical,\n disabled = this.disabled,\n state = this.state,\n size = this.size,\n computedFormatter = this.computedFormatter;\n var hasValue = !isNull(value);\n \n var makeButton = function makeButton(stepper, label, IconCmp, keyRef, shortcut, btnDisabled, slotName) {\n var $icon = h(IconCmp, {\n props: {\n scale: _this2.hasFocus ? 1.5 : 1.25\n },\n attrs: {\n 'aria-hidden': 'true'\n }\n });\n var scope = {\n hasFocus: _this2.hasFocus\n };\n \n var handler = function handler(evt) {\n if (!disabled && !readonly) {\n evt.preventDefault();\n \n _this2.setMouseup(true); // Since we `preventDefault()`, we must manually focus the button\n \n \n attemptFocus(evt.currentTarget);\n \n _this2.handleStepRepeat(evt, stepper);\n }\n };\n \n return h('button', {\n key: keyRef || null,\n ref: keyRef,\n staticClass: 'btn btn-sm border-0 rounded-0',\n class: {\n 'py-0': !vertical\n },\n attrs: {\n tabindex: '-1',\n type: 'button',\n disabled: disabled || readonly || btnDisabled,\n 'aria-disabled': disabled || readonly || btnDisabled ? 'true' : null,\n 'aria-controls': spinId,\n 'aria-label': label || null,\n 'aria-keyshortcuts': shortcut || null\n },\n on: {\n mousedown: handler,\n touchstart: handler\n }\n }, [h('div', [_this2.normalizeSlot(slotName, scope) || $icon])]);\n }; // TODO: Add button disabled state when `wrap` is `false` and at value max/min\n \n \n var $increment = makeButton(this.stepUp, this.labelIncrement, BIconPlus, 'inc', 'ArrowUp', false, 'increment');\n var $decrement = makeButton(this.stepDown, this.labelDecrement, BIconDash, 'dec', 'ArrowDown', false, 'decrement');\n var $hidden = h();\n \n if (this.name && !disabled) {\n $hidden = h('input', {\n key: 'hidden',\n attrs: {\n type: 'hidden',\n name: this.name,\n form: this.form || null,\n // TODO: Should this be set to '' if value is out of range?\n value: this.valueAsFixed\n }\n });\n }\n \n var $spin = h( // We use 'output' element to make this accept a `<label for=\"id\">` (Except IE)\n 'output', {\n ref: 'spinner',\n key: 'output',\n staticClass: 'flex-grow-1',\n class: {\n 'd-flex': vertical,\n 'align-self-center': !vertical,\n 'align-items-center': vertical,\n 'border-top': vertical,\n 'border-bottom': vertical,\n 'border-left': !vertical,\n 'border-right': !vertical\n },\n attrs: this.computedSpinAttrs\n }, [h('bdi', hasValue ? computedFormatter(value) : this.placeholder || '')]);\n return h('div', {\n staticClass: 'b-form-spinbutton form-control',\n class: (_class = {\n disabled: disabled,\n readonly: readonly,\n focus: this.hasFocus\n }, _defineProperty(_class, \"form-control-\".concat(size), !!size), _defineProperty(_class, 'd-inline-flex', inline || vertical), _defineProperty(_class, 'd-flex', !inline && !vertical), _defineProperty(_class, 'align-items-stretch', !vertical), _defineProperty(_class, 'flex-column', vertical), _defineProperty(_class, 'is-valid', state === true), _defineProperty(_class, 'is-invalid', state === false), _class),\n attrs: this.computedAttrs,\n on: {\n keydown: this.onKeydown,\n keyup: this.onKeyup,\n // We use capture phase (`!` prefix) since focus and blur do not bubble\n '!focus': this.onFocusBlur,\n '!blur': this.onFocusBlur\n }\n }, vertical ? [$increment, $hidden, $spin, $decrement] : [$decrement, $hidden, $spin, $increment]);\n }\n });\n \n var FormSpinbuttonPlugin = /*#__PURE__*/pluginFactory({\n components: {\n BFormSpinbutton: BFormSpinbutton,\n BSpinbutton: BFormSpinbutton\n }\n });\n \n var NAME$n = 'BFormTag';\n var BFormTag = /*#__PURE__*/Vue.extend({\n name: NAME$n,\n mixins: [idMixin, normalizeSlotMixin],\n props: {\n variant: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$n, 'variant');\n }\n },\n disabled: {\n type: Boolean,\n default: false\n },\n title: {\n type: String // default: null\n \n },\n pill: {\n type: Boolean,\n default: false\n },\n removeLabel: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$n, 'removeLabel');\n }\n },\n tag: {\n type: String,\n default: 'span'\n }\n },\n methods: {\n onDelete: function onDelete(evt) {\n var type = evt.type,\n keyCode = evt.keyCode;\n \n if (!this.disabled && (type === 'click' || type === 'keydown' && keyCode === KEY_CODES.DELETE)) {\n this.$emit('remove');\n }\n }\n },\n render: function render(h) {\n var tagId = this.safeId();\n var tagLabelId = this.safeId('_taglabel_');\n var $remove = h();\n \n if (!this.disabled) {\n $remove = h(BButtonClose, {\n staticClass: 'b-form-tag-remove',\n props: {\n ariaLabel: this.removeLabel\n },\n attrs: {\n 'aria-controls': tagId,\n 'aria-describedby': tagLabelId,\n 'aria-keyshortcuts': 'Delete'\n },\n on: {\n click: this.onDelete,\n keydown: this.onDelete\n }\n });\n }\n \n var $tag = h('span', {\n staticClass: 'b-form-tag-content flex-grow-1 text-truncate',\n attrs: {\n id: tagLabelId\n }\n }, this.normalizeSlot('default') || this.title || [h()]);\n return h(BBadge, {\n staticClass: 'b-form-tag d-inline-flex align-items-baseline mw-100',\n class: {\n disabled: this.disabled\n },\n attrs: {\n id: tagId,\n title: this.title || null,\n 'aria-labelledby': tagLabelId\n },\n props: {\n tag: this.tag,\n variant: this.variant,\n pill: this.pill\n }\n }, [$tag, $remove]);\n }\n });\n \n var NAME$o = 'BFormTags'; // Supported input types (for built in input)\n \n var TYPES$1 = ['text', 'email', 'tel', 'url', 'number']; // Pre-compiled regular expressions for performance reasons\n \n var RX_SPACES = /[\\s\\uFEFF\\xA0]+/g; // KeyCode constants\n \n var ENTER$2 = KEY_CODES.ENTER,\n BACKSPACE = KEY_CODES.BACKSPACE,\n DELETE = KEY_CODES.DELETE; // --- Utility methods ---\n // Escape special chars in string and replace\n // contiguous spaces with a whitespace match\n \n var escapeRegExpChars = function escapeRegExpChars(str) {\n return escapeRegExp(str).replace(RX_SPACES, '\\\\s');\n }; // Remove leading/trailing spaces from array of tags and remove duplicates\n \n \n var cleanTags = function cleanTags(tags) {\n return concat(tags).map(function (tag) {\n return trim(toString$1(tag));\n }).filter(function (tag, index, arr) {\n return tag.length > 0 && arr.indexOf(tag) === index;\n });\n }; // Processes an input/change event, normalizing string or event argument\n \n \n var processEventValue = function processEventValue(evt) {\n return isString(evt) ? evt : isEvent(evt) ? evt.target.value || '' : '';\n }; // Returns a fresh empty `tagsState` object\n \n \n var cleanTagsState = function cleanTagsState() {\n return {\n all: [],\n valid: [],\n invalid: [],\n duplicate: []\n };\n }; // @vue/component\n \n \n var BFormTags = /*#__PURE__*/Vue.extend({\n name: NAME$o,\n mixins: [idMixin, normalizeSlotMixin],\n model: {\n // Even though this is the default that Vue assumes, we need\n // to add it for the docs to reflect that this is the model\n prop: 'value',\n event: 'input'\n },\n props: {\n inputId: {\n type: String // default: null\n \n },\n placeholder: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$o, 'placeholder');\n }\n },\n disabled: {\n type: Boolean,\n default: false\n },\n name: {\n type: String // default: null\n \n },\n form: {\n type: String // default: null\n \n },\n autofocus: {\n type: Boolean,\n default: false\n },\n state: {\n // Tri-state: `true`, `false`, `null`\n type: Boolean,\n default: null\n },\n size: {\n type: String // default: null\n \n },\n inputType: {\n type: String,\n default: 'text',\n validator: function validator(type) {\n return arrayIncludes(TYPES$1, type);\n }\n },\n inputClass: {\n type: [String, Array, Object] // default: null\n \n },\n inputAttrs: {\n // Additional attributes to add to the input element\n type: Object,\n default: function _default() {\n return {};\n }\n },\n addButtonText: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$o, 'addButtonText');\n }\n },\n addButtonVariant: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$o, 'addButtonVariant');\n }\n },\n tagVariant: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$o, 'tagVariant');\n }\n },\n tagClass: {\n type: [String, Array, Object] // default: null\n \n },\n tagPills: {\n type: Boolean,\n default: false\n },\n tagRemoveLabel: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$o, 'tagRemoveLabel');\n }\n },\n tagRemovedLabel: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$o, 'tagRemovedLabel');\n }\n },\n tagValidator: {\n type: Function // default: null\n \n },\n duplicateTagText: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$o, 'duplicateTagText');\n }\n },\n invalidTagText: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$o, 'invalidTagText');\n }\n },\n separator: {\n // Character (or characters) that trigger adding tags\n type: [String, Array] // default: null\n \n },\n removeOnDelete: {\n // Enable deleting last tag in list when BACKSPACE is\n // pressed and input is empty\n type: Boolean,\n default: false\n },\n addOnChange: {\n // Enable change event triggering tag addition\n // Handy if using <select> as the input\n type: Boolean,\n default: false\n },\n noAddOnEnter: {\n // Disable ENTER key from triggering tag addition\n type: Boolean,\n default: false\n },\n noOuterFocus: {\n // Disable the focus ring on the root element\n type: Boolean,\n default: false\n },\n ignoreInputFocusSelector: {\n // Disable the input focus behavior when clicking\n // on element matching the selector (or selectors)\n type: [Array, String],\n default: function _default() {\n return ['.b-form-tag', 'button', 'input', 'select'];\n }\n },\n value: {\n // The v-model prop\n type: Array,\n default: function _default() {\n return [];\n }\n }\n },\n data: function data() {\n return {\n hasFocus: false,\n newTag: '',\n tags: [],\n // Tags that were removed\n removedTags: [],\n // Populated when tags are parsed\n tagsState: cleanTagsState()\n };\n },\n computed: {\n computedInputId: function computedInputId() {\n return this.inputId || this.safeId('__input__');\n },\n computedInputType: function computedInputType() {\n // We only allow certain types\n return arrayIncludes(TYPES$1, this.inputType) ? this.inputType : 'text';\n },\n computedInputAttrs: function computedInputAttrs() {\n return _objectSpread2(_objectSpread2({}, this.inputAttrs), {}, {\n // Must have attributes\n id: this.computedInputId,\n value: this.newTag,\n disabled: this.disabled || null,\n form: this.form || null\n });\n },\n computedInputHandlers: function computedInputHandlers() {\n return {\n input: this.onInputInput,\n change: this.onInputChange,\n keydown: this.onInputKeydown\n };\n },\n computedSeparator: function computedSeparator() {\n // Merge the array into a string\n return concat(this.separator).filter(isString).filter(identity).join('');\n },\n computedSeparatorRegExp: function computedSeparatorRegExp() {\n // We use a computed prop here to precompile the RegExp\n // The RegExp is a character class RE in the form of `/[abc]+/`\n // where a, b, and c are the valid separator characters\n // -> `tags = str.split(/[abc]+/).filter(t => t)`\n var separator = this.computedSeparator;\n return separator ? new RegExp(\"[\".concat(escapeRegExpChars(separator), \"]+\")) : null;\n },\n computedJoiner: function computedJoiner() {\n // When tag(s) are invalid or duplicate, we leave them\n // in the input so that the user can see them\n // If there are more than one tag in the input, we use the\n // first separator character as the separator in the input\n // We append a space if the first separator is not a space\n var joiner = this.computedSeparator.charAt(0);\n return joiner !== ' ' ? \"\".concat(joiner, \" \") : joiner;\n },\n computeIgnoreInputFocusSelector: function computeIgnoreInputFocusSelector() {\n // Normalize to an single selector with selectors separated by `,`\n return concat(this.ignoreInputFocusSelector).filter(identity).join(',').trim();\n },\n disableAddButton: function disableAddButton() {\n var _this = this;\n \n // If 'Add' button should be disabled\n // If the input contains at least one tag that can\n // be added, then the 'Add' button should be enabled\n var newTag = trim(this.newTag);\n return newTag === '' || !this.splitTags(newTag).some(function (t) {\n return !arrayIncludes(_this.tags, t) && _this.validateTag(t);\n });\n },\n duplicateTags: function duplicateTags() {\n return this.tagsState.duplicate;\n },\n hasDuplicateTags: function hasDuplicateTags() {\n return this.duplicateTags.length > 0;\n },\n invalidTags: function invalidTags() {\n return this.tagsState.invalid;\n },\n hasInvalidTags: function hasInvalidTags() {\n return this.invalidTags.length > 0;\n }\n },\n watch: {\n value: function value(newVal) {\n this.tags = cleanTags(newVal);\n },\n tags: function tags(newVal, oldVal) {\n // Update the `v-model` (if it differs from the value prop)\n if (!looseEqual(newVal, this.value)) {\n this.$emit('input', newVal);\n }\n \n if (!looseEqual(newVal, oldVal)) {\n newVal = concat(newVal).filter(identity);\n oldVal = concat(oldVal).filter(identity);\n this.removedTags = oldVal.filter(function (old) {\n return !arrayIncludes(newVal, old);\n });\n }\n },\n tagsState: function tagsState(newVal, oldVal) {\n // Emit a tag-state event when the `tagsState` object changes\n if (!looseEqual(newVal, oldVal)) {\n this.$emit('tag-state', newVal.valid, newVal.invalid, newVal.duplicate);\n }\n }\n },\n created: function created() {\n // We do this in created to make sure an input event emits\n // if the cleaned tags are not equal to the value prop\n this.tags = cleanTags(this.value);\n },\n mounted: function mounted() {\n this.handleAutofocus();\n },\n \n /* istanbul ignore next */\n activated: function activated()\n /* istanbul ignore next */\n {\n this.handleAutofocus();\n },\n methods: {\n addTag: function addTag(newTag) {\n newTag = isString(newTag) ? newTag : this.newTag;\n /* istanbul ignore next */\n \n if (this.disabled || trim(newTag) === '') {\n // Early exit\n return;\n }\n \n var parsed = this.parseTags(newTag); // Add any new tags to the `tags` array, or if the\n // array of `allTags` is empty, we clear the input\n \n if (parsed.valid.length > 0 || parsed.all.length === 0) {\n // Clear the user input element (and leave in any invalid/duplicate tag(s)\n \n /* istanbul ignore if: full testing to be added later */\n if (matches(this.getInput(), 'select')) {\n // The following is needed to properly\n // work with `<select>` elements\n this.newTag = '';\n } else {\n var invalidAndDuplicates = [].concat(_toConsumableArray(parsed.invalid), _toConsumableArray(parsed.duplicate));\n this.newTag = parsed.all.filter(function (tag) {\n return arrayIncludes(invalidAndDuplicates, tag);\n }).join(this.computedJoiner).concat(invalidAndDuplicates.length > 0 ? this.computedJoiner.charAt(0) : '');\n }\n }\n \n if (parsed.valid.length > 0) {\n // We add the new tags in one atomic operation\n // to trigger reactivity once (instead of once per tag)\n // We do this after we update the new tag input value\n // `concat()` can be faster than array spread, when both args are arrays\n this.tags = concat(this.tags, parsed.valid);\n }\n \n this.tagsState = parsed; // Attempt to re-focus the input (specifically for when using the Add\n // button, as the button disappears after successfully adding a tag\n \n this.focus();\n },\n removeTag: function removeTag(tag) {\n var _this2 = this;\n \n /* istanbul ignore next */\n if (this.disabled) {\n return;\n } // TODO:\n // Add `onRemoveTag(tag)` user method, which if returns `false`\n // will prevent the tag from being removed (i.e. confirmation)\n // Or emit cancelable `BvEvent`\n \n \n this.tags = this.tags.filter(function (t) {\n return t !== tag;\n }); // Return focus to the input (if possible)\n \n this.$nextTick(function () {\n _this2.focus();\n });\n },\n // --- Input element event handlers ---\n onInputInput: function onInputInput(evt) {\n /* istanbul ignore next: hard to test composition events */\n if (this.disabled || isEvent(evt) && evt.target.composing) {\n // `evt.target.composing` is set by Vue (`v-model` directive)\n // https://github.com/vuejs/vue/blob/dev/src/platforms/web/runtime/directives/model.js\n return;\n }\n \n var newTag = processEventValue(evt);\n var separatorRe = this.computedSeparatorRegExp;\n \n if (this.newTag !== newTag) {\n this.newTag = newTag;\n } // We ignore leading whitespace for the following\n \n \n newTag = trimLeft(newTag);\n \n if (separatorRe && separatorRe.test(newTag.slice(-1))) {\n // A trailing separator character was entered, so add the tag(s)\n // Note: More than one tag on input event is possible via copy/paste\n this.addTag();\n } else {\n // Validate (parse tags) on input event\n this.tagsState = newTag === '' ? cleanTagsState() : this.parseTags(newTag);\n }\n },\n onInputChange: function onInputChange(evt) {\n // Change is triggered on `<input>` blur, or `<select>` selected\n // This event is opt-in\n if (!this.disabled && this.addOnChange) {\n var newTag = processEventValue(evt);\n /* istanbul ignore next */\n \n if (this.newTag !== newTag) {\n this.newTag = newTag;\n }\n \n this.addTag();\n }\n },\n onInputKeydown: function onInputKeydown(evt) {\n // Early exit\n \n /* istanbul ignore next */\n if (this.disabled || !isEvent(evt)) {\n return;\n }\n \n var keyCode = evt.keyCode;\n var value = evt.target.value || '';\n /* istanbul ignore else: testing to be added later */\n \n if (!this.noAddOnEnter && keyCode === ENTER$2) {\n // Attempt to add the tag when user presses enter\n evt.preventDefault();\n this.addTag();\n } else if (this.removeOnDelete && (keyCode === BACKSPACE || keyCode === DELETE) && value === '') {\n // Remove the last tag if the user pressed backspace/delete and the input is empty\n evt.preventDefault();\n this.tags = this.tags.slice(0, -1);\n }\n },\n // --- Wrapper event handlers ---\n onClick: function onClick(evt) {\n var _this3 = this;\n \n var ignoreFocusSelector = this.computeIgnoreInputFocusSelector;\n var target = evt.target;\n \n if (!this.disabled && !isActiveElement(target) && (!ignoreFocusSelector || !closest(ignoreFocusSelector, target, true))) {\n this.$nextTick(function () {\n _this3.focus();\n });\n }\n },\n onFocusin: function onFocusin() {\n this.hasFocus = true;\n },\n onFocusout: function onFocusout() {\n this.hasFocus = false;\n },\n handleAutofocus: function handleAutofocus() {\n var _this4 = this;\n \n this.$nextTick(function () {\n requestAF(function () {\n if (_this4.autofocus && !_this4.disabled) {\n _this4.focus();\n }\n });\n });\n },\n // --- Public methods ---\n focus: function focus() {\n if (!this.disabled) {\n attemptFocus(this.getInput());\n }\n },\n blur: function blur() {\n if (!this.disabled) {\n attemptBlur(this.getInput());\n }\n },\n // --- Private methods ---\n splitTags: function splitTags(newTag) {\n // Split the input into an array of raw tags\n newTag = toString$1(newTag);\n var separatorRe = this.computedSeparatorRegExp; // Split the tag(s) via the optional separator\n // Normally only a single tag is provided, but copy/paste\n // can enter multiple tags in a single operation\n \n return (separatorRe ? newTag.split(separatorRe) : [newTag]).map(trim).filter(identity);\n },\n parseTags: function parseTags(newTag) {\n var _this5 = this;\n \n // Takes `newTag` value and parses it into `validTags`,\n // `invalidTags`, and duplicate tags as an object\n // Split the input into raw tags\n var tags = this.splitTags(newTag); // Base results\n \n var parsed = {\n all: tags,\n valid: [],\n invalid: [],\n duplicate: []\n }; // Parse the unique tags\n \n tags.forEach(function (tag) {\n if (arrayIncludes(_this5.tags, tag) || arrayIncludes(parsed.valid, tag)) {\n // Unique duplicate tags\n if (!arrayIncludes(parsed.duplicate, tag)) {\n parsed.duplicate.push(tag);\n }\n } else if (_this5.validateTag(tag)) {\n // We only add unique/valid tags\n parsed.valid.push(tag);\n } else {\n // Unique invalid tags\n if (!arrayIncludes(parsed.invalid, tag)) {\n parsed.invalid.push(tag);\n }\n }\n });\n return parsed;\n },\n validateTag: function validateTag(tag) {\n // Call the user supplied tag validator\n var validator = this.tagValidator;\n return isFunction(validator) ? validator(tag) : true;\n },\n getInput: function getInput() {\n // Returns the input element reference (or null if not found)\n // We need to escape `computedInputId` since it can be user-provided\n return select(\"#\".concat(cssEscape(this.computedInputId)), this.$el);\n },\n // Default User Interface render\n defaultRender: function defaultRender(_ref) {\n var tags = _ref.tags,\n addTag = _ref.addTag,\n removeTag = _ref.removeTag,\n inputType = _ref.inputType,\n inputAttrs = _ref.inputAttrs,\n inputHandlers = _ref.inputHandlers,\n inputClass = _ref.inputClass,\n tagClass = _ref.tagClass,\n tagVariant = _ref.tagVariant,\n tagPills = _ref.tagPills,\n tagRemoveLabel = _ref.tagRemoveLabel,\n invalidTagText = _ref.invalidTagText,\n duplicateTagText = _ref.duplicateTagText,\n isInvalid = _ref.isInvalid,\n isDuplicate = _ref.isDuplicate,\n disabled = _ref.disabled,\n placeholder = _ref.placeholder,\n addButtonText = _ref.addButtonText,\n addButtonVariant = _ref.addButtonVariant,\n disableAddButton = _ref.disableAddButton;\n var h = this.$createElement; // Make the list of tags\n \n var $tags = tags.map(function (tag) {\n tag = toString$1(tag);\n return h(BFormTag, {\n key: \"li-tag__\".concat(tag),\n class: tagClass,\n props: {\n // `BFormTag` will auto generate an ID\n // so we do not need to set the ID prop\n tag: 'li',\n title: tag,\n disabled: disabled,\n variant: tagVariant,\n pill: tagPills,\n removeLabel: tagRemoveLabel\n },\n on: {\n remove: function remove() {\n return removeTag(tag);\n }\n }\n }, tag);\n }); // Feedback IDs if needed\n \n var invalidFeedbackId = invalidTagText && isInvalid ? this.safeId('__invalid_feedback__') : null;\n var duplicateFeedbackId = duplicateTagText && isDuplicate ? this.safeId('__duplicate_feedback__') : null; // Compute the `aria-describedby` attribute value\n \n var ariaDescribedby = [inputAttrs['aria-describedby'], invalidFeedbackId, duplicateFeedbackId].filter(identity).join(' '); // Input\n \n var $input = h('input', {\n ref: 'input',\n // Directive needed to get `evt.target.composing` set (if needed)\n directives: [{\n name: 'model',\n value: inputAttrs.value\n }],\n staticClass: 'b-form-tags-input w-100 flex-grow-1 p-0 m-0 bg-transparent border-0',\n class: inputClass,\n style: {\n outline: 0,\n minWidth: '5rem'\n },\n attrs: _objectSpread2(_objectSpread2({}, inputAttrs), {}, {\n 'aria-describedby': ariaDescribedby || null,\n type: inputType,\n placeholder: placeholder || null\n }),\n domProps: {\n value: inputAttrs.value\n },\n on: inputHandlers\n }); // Add button\n \n var $button = h(BButton, {\n ref: 'button',\n staticClass: 'b-form-tags-button py-0',\n class: {\n // Only show the button if the tag can be added\n // We use the `invisible` class instead of not rendering\n // the button, so that we maintain layout to prevent\n // the user input from jumping around\n invisible: disableAddButton\n },\n style: {\n fontSize: '90%'\n },\n props: {\n variant: addButtonVariant,\n disabled: disableAddButton\n },\n on: {\n click: function click() {\n return addTag();\n }\n }\n }, [this.normalizeSlot('add-button-text') || addButtonText]); // ID of the tags+input `<ul>` list\n // Note we could concatenate inputAttrs.id with `__TAG__LIST__`\n // But note that the inputID may be null until after mount\n // `safeId` returns `null`, if no user provided ID, until after\n // mount when a unique ID is generated\n \n var tagListId = this.safeId('__TAG__LIST__');\n var $field = h('li', {\n key: '__li-input__',\n staticClass: 'flex-grow-1',\n attrs: {\n role: 'none',\n 'aria-live': 'off',\n 'aria-controls': tagListId\n }\n }, [h('div', {\n staticClass: 'd-flex',\n attrs: {\n role: 'group'\n }\n }, [$input, $button])]); // Wrap in an unordered list element (we use a list for accessibility)\n \n var $ul = h('ul', {\n key: '_tags_list_',\n staticClass: 'b-form-tags-list list-unstyled mb-0 d-flex flex-wrap align-items-center',\n attrs: {\n id: tagListId\n }\n }, [$tags, $field]); // Assemble the feedback\n \n var $feedback = h();\n \n if (invalidTagText || duplicateTagText) {\n // Add an aria live region for the invalid/duplicate tag\n // messages if the user has not disabled the messages\n var joiner = this.computedJoiner; // Invalid tag feedback if needed (error)\n \n var $invalid = h();\n \n if (invalidFeedbackId) {\n $invalid = h(BFormInvalidFeedback, {\n key: '_tags_invalid_feedback_',\n props: {\n id: invalidFeedbackId,\n forceShow: true\n }\n }, [this.invalidTagText, ': ', this.invalidTags.join(joiner)]);\n } // Duplicate tag feedback if needed (warning, not error)\n \n \n var $duplicate = h();\n \n if (duplicateFeedbackId) {\n $duplicate = h(BFormText, {\n key: '_tags_duplicate_feedback_',\n props: {\n id: duplicateFeedbackId\n }\n }, [this.duplicateTagText, ': ', this.duplicateTags.join(joiner)]);\n }\n \n $feedback = h('div', {\n key: '_tags_feedback_',\n attrs: {\n 'aria-live': 'polite',\n 'aria-atomic': 'true'\n }\n }, [$invalid, $duplicate]);\n } // Return the content\n \n \n return [$ul, $feedback];\n }\n },\n render: function render(h) {\n var _this6 = this;\n \n // Scoped slot properties\n var scope = {\n // Array of tags (shallow copy to prevent mutations)\n tags: this.tags.slice(),\n // Methods\n removeTag: this.removeTag,\n addTag: this.addTag,\n // We don't include this in the attrs, as users may want to override this\n inputType: this.computedInputType,\n // <input> v-bind:inputAttrs\n inputAttrs: this.computedInputAttrs,\n // <input> v-on:inputHandlers\n inputHandlers: this.computedInputHandlers,\n // <input> :id=\"inputId\"\n inputId: this.computedInputId,\n // Invalid/Duplicate state information\n invalidTags: this.invalidTags.slice(),\n isInvalid: this.hasInvalidTags,\n duplicateTags: this.duplicateTags.slice(),\n isDuplicate: this.hasDuplicateTags,\n // If the 'Add' button should be disabled\n disableAddButton: this.disableAddButton,\n // Pass-though values\n state: this.state,\n separator: this.separator,\n disabled: this.disabled,\n size: this.size,\n placeholder: this.placeholder,\n inputClass: this.inputClass,\n tagRemoveLabel: this.tagRemoveLabel,\n tagVariant: this.tagVariant,\n tagPills: this.tagPills,\n tagClass: this.tagClass,\n addButtonText: this.addButtonText,\n addButtonVariant: this.addButtonVariant,\n invalidTagText: this.invalidTagText,\n duplicateTagText: this.duplicateTagText\n }; // Generate the user interface\n \n var $content = this.normalizeSlot('default', scope) || this.defaultRender(scope); // Generate the `aria-live` region for the current value(s)\n \n var $output = h('output', {\n staticClass: 'sr-only',\n attrs: {\n id: this.safeId('_selected-tags_'),\n role: 'status',\n for: this.computedInputId,\n 'aria-live': this.hasFocus ? 'polite' : 'off',\n 'aria-atomic': 'true',\n 'aria-relevant': 'additions text'\n }\n }, this.tags.join(', ')); // Removed tag live region\n \n var $removed = h('div', {\n staticClass: 'sr-only',\n attrs: {\n id: this.safeId('_removed-tags_'),\n role: 'status',\n 'aria-live': this.hasFocus ? 'assertive' : 'off',\n 'aria-atomic': 'true'\n }\n }, this.removedTags.length > 0 ? \"(\".concat(this.tagRemovedLabel, \") \").concat(this.removedTags.join(', ')) : ''); // Add hidden inputs for form submission\n \n var $hidden = h();\n \n if (this.name && !this.disabled) {\n // We add hidden inputs for each tag if a name is provided\n // for native submission of forms\n $hidden = this.tags.map(function (tag) {\n return h('input', {\n key: tag,\n attrs: {\n type: 'hidden',\n value: tag,\n name: _this6.name,\n form: _this6.form || null\n }\n });\n });\n } // Return the rendered output\n \n \n return h('div', {\n staticClass: 'b-form-tags form-control h-auto',\n class: _defineProperty({\n focus: this.hasFocus && !this.noOuterFocus && !this.disabled,\n disabled: this.disabled,\n 'is-valid': this.state === true,\n 'is-invalid': this.state === false\n }, \"form-control-\".concat(this.size), this.size),\n attrs: {\n id: this.safeId(),\n role: 'group',\n tabindex: this.disabled || this.noOuterFocus ? null : '-1',\n 'aria-describedby': this.safeId('_selected_')\n },\n on: {\n click: this.onClick,\n focusin: this.onFocusin,\n focusout: this.onFocusout\n }\n }, [$output, $removed, $content, $hidden]);\n }\n });\n \n var FormTagsPlugin = /*#__PURE__*/pluginFactory({\n components: {\n BFormTags: BFormTags,\n BTags: BFormTags,\n BFormTag: BFormTag,\n BTag: BFormTag\n }\n });\n \n var BFormTextarea = /*#__PURE__*/Vue.extend({\n name: 'BFormTextarea',\n directives: {\n 'b-visible': VBVisible\n },\n // Mixin order is important!\n mixins: [listenersMixin, idMixin, listenOnRootMixin, formMixin, formSizeMixin, formStateMixin, formTextMixin, formSelectionMixin, formValidityMixin],\n props: {\n rows: {\n type: [Number, String],\n default: 2\n },\n maxRows: {\n type: [Number, String] // default: null\n \n },\n wrap: {\n // 'soft', 'hard' or 'off'. Browser default is 'soft'\n type: String,\n default: 'soft'\n },\n noResize: {\n // Disable the resize handle of textarea\n type: Boolean,\n default: false\n },\n noAutoShrink: {\n // When in auto resize mode, disable shrinking to content height\n type: Boolean,\n default: false\n }\n },\n data: function data() {\n return {\n heightInPx: null\n };\n },\n computed: {\n computedStyle: function computedStyle() {\n var styles = {\n // Setting `noResize` to true will disable the ability for the user to\n // manually resize the textarea. We also disable when in auto height mode\n resize: !this.computedRows || this.noResize ? 'none' : null\n };\n \n if (!this.computedRows) {\n // Conditionally set the computed CSS height when auto rows/height is enabled\n // We avoid setting the style to `null`, which can override user manual resize handle\n styles.height = this.heightInPx; // We always add a vertical scrollbar to the textarea when auto-height is\n // enabled so that the computed height calculation returns a stable value\n \n styles.overflowY = 'scroll';\n }\n \n return styles;\n },\n computedMinRows: function computedMinRows() {\n // Ensure rows is at least 2 and positive (2 is the native textarea value)\n // A value of 1 can cause issues in some browsers, and most browsers\n // only support 2 as the smallest value\n return mathMax(toInteger(this.rows, 2), 2);\n },\n computedMaxRows: function computedMaxRows() {\n return mathMax(this.computedMinRows, toInteger(this.maxRows, 0));\n },\n computedRows: function computedRows() {\n // This is used to set the attribute 'rows' on the textarea\n // If auto-height is enabled, then we return `null` as we use CSS to control height\n return this.computedMinRows === this.computedMaxRows ? this.computedMinRows : null;\n },\n computedAttrs: function computedAttrs() {\n var disabled = this.disabled,\n required = this.required;\n return {\n id: this.safeId(),\n name: this.name || null,\n form: this.form || null,\n disabled: disabled,\n placeholder: this.placeholder || null,\n required: required,\n autocomplete: this.autocomplete || null,\n readonly: this.readonly || this.plaintext,\n rows: this.computedRows,\n wrap: this.wrap || null,\n 'aria-required': this.required ? 'true' : null,\n 'aria-invalid': this.computedAriaInvalid\n };\n },\n computedListeners: function computedListeners() {\n return _objectSpread2(_objectSpread2({}, this.bvListeners), {}, {\n input: this.onInput,\n change: this.onChange,\n blur: this.onBlur\n });\n }\n },\n watch: {\n localValue: function localValue() {\n this.setHeight();\n }\n },\n mounted: function mounted() {\n this.setHeight();\n },\n methods: {\n // Called by intersection observer directive\n visibleCallback: function visibleCallback(visible)\n /* istanbul ignore next */\n {\n if (visible) {\n // We use a `$nextTick()` here just to make sure any\n // transitions or portalling have completed\n this.$nextTick(this.setHeight);\n }\n },\n setHeight: function setHeight() {\n var _this = this;\n \n this.$nextTick(function () {\n requestAF(function () {\n _this.heightInPx = _this.computeHeight();\n });\n });\n },\n computeHeight: function computeHeight()\n /* istanbul ignore next: can't test getComputedStyle in JSDOM */\n {\n if (this.$isServer || !isNull(this.computedRows)) {\n return null;\n }\n \n var el = this.$el; // Element must be visible (not hidden) and in document\n // Must be checked after above checks\n \n if (!isVisible(el)) {\n return null;\n } // Get current computed styles\n \n \n var computedStyle = getCS(el); // Height of one line of text in px\n \n var lineHeight = toFloat(computedStyle.lineHeight, 1); // Calculate height of border and padding\n \n var border = toFloat(computedStyle.borderTopWidth, 0) + toFloat(computedStyle.borderBottomWidth, 0);\n var padding = toFloat(computedStyle.paddingTop, 0) + toFloat(computedStyle.paddingBottom, 0); // Calculate offset\n \n var offset = border + padding; // Minimum height for min rows (which must be 2 rows or greater for cross-browser support)\n \n var minHeight = lineHeight * this.computedMinRows + offset; // Get the current style height (with `px` units)\n \n var oldHeight = el.style.height || computedStyle.height; // Probe scrollHeight by temporarily changing the height to `auto`\n \n el.style.height = 'auto';\n var scrollHeight = el.scrollHeight; // Place the original old height back on the element, just in case `computedProp`\n // returns the same value as before\n \n el.style.height = oldHeight; // Calculate content height in 'rows' (scrollHeight includes padding but not border)\n \n var contentRows = mathMax((scrollHeight - padding) / lineHeight, 2); // Calculate number of rows to display (limited within min/max rows)\n \n var rows = mathMin(mathMax(contentRows, this.computedMinRows), this.computedMaxRows); // Calculate the required height of the textarea including border and padding (in pixels)\n \n var height = mathMax(mathCeil(rows * lineHeight + offset), minHeight); // Computed height remains the larger of `oldHeight` and new `height`,\n // when height is in `sticky` mode (prop `no-auto-shrink` is true)\n \n if (this.noAutoShrink && toFloat(oldHeight, 0) > height) {\n return oldHeight;\n } // Return the new computed CSS height in px units\n \n \n return \"\".concat(height, \"px\");\n }\n },\n render: function render(h) {\n return h('textarea', {\n ref: 'input',\n class: this.computedClass,\n style: this.computedStyle,\n directives: [{\n name: 'b-visible',\n value: this.visibleCallback,\n // If textarea is within 640px of viewport, consider it visible\n modifiers: {\n '640': true\n }\n }],\n attrs: this.computedAttrs,\n domProps: {\n value: this.localValue\n },\n on: this.computedListeners\n });\n }\n });\n \n var FormTextareaPlugin = /*#__PURE__*/pluginFactory({\n components: {\n BFormTextarea: BFormTextarea,\n BTextarea: BFormTextarea\n }\n });\n \n var NAME$p = 'BTime';\n var NUMERIC = 'numeric';\n var LEFT$2 = KEY_CODES.LEFT,\n RIGHT$2 = KEY_CODES.RIGHT; // Time string RegExpr (optional seconds)\n \n var RE_TIME = /^([0-1]?[0-9]|2[0-3]):[0-5]?[0-9](:[0-5]?[0-9])?$/; // --- Helpers ---\n // Fallback to BFormSpinbutton prop if no value found\n \n var getConfigFallback$1 = function getConfigFallback(prop) {\n return getComponentConfig(NAME$p, prop) || getComponentConfig('BFormSpinbutton', prop);\n };\n \n var padLeftZeros = function padLeftZeros(num) {\n return \"00\".concat(num || '').slice(-2);\n };\n \n var parseHMS = function parseHMS(hms) {\n hms = toString$1(hms);\n var hh = null,\n mm = null,\n ss = null;\n \n if (RE_TIME.test(hms)) {\n \n var _hms$split$map = hms.split(':').map(function (v) {\n return toInteger(v, null);\n });\n \n var _hms$split$map2 = _slicedToArray(_hms$split$map, 3);\n \n hh = _hms$split$map2[0];\n mm = _hms$split$map2[1];\n ss = _hms$split$map2[2];\n }\n \n return {\n hours: isUndefinedOrNull(hh) ? null : hh,\n minutes: isUndefinedOrNull(mm) ? null : mm,\n seconds: isUndefinedOrNull(ss) ? null : ss,\n ampm: isUndefinedOrNull(hh) || hh < 12 ? 0 : 1\n };\n };\n \n var formatHMS = function formatHMS(_ref) {\n var hours = _ref.hours,\n minutes = _ref.minutes,\n seconds = _ref.seconds;\n var requireSeconds = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n \n if (isNull(hours) || isNull(minutes) || requireSeconds && isNull(seconds)) {\n return '';\n }\n \n var hms = [hours, minutes, requireSeconds ? seconds : 0];\n return hms.map(padLeftZeros).join(':');\n }; // @vue/component\n \n \n var BTime = /*#__PURE__*/Vue.extend({\n name: NAME$p,\n mixins: [idMixin, normalizeSlotMixin],\n model: {\n prop: 'value',\n event: 'input'\n },\n props: {\n value: {\n type: String,\n default: ''\n },\n showSeconds: {\n // If true, show the second spinbutton\n type: Boolean,\n default: false\n },\n hour12: {\n // Explicitly force 12 or 24 hour time\n // Default is to use resolved locale for 12/24 hour display\n // Tri-state: `true` = 12, `false` = 24, `null` = auto\n type: Boolean,\n default: null\n },\n locale: {\n type: [String, Array] // default: null\n \n },\n ariaLabelledby: {\n // ID of label element\n type: String // default: null\n \n },\n secondsStep: {\n type: [Number, String],\n default: 1\n },\n minutesStep: {\n type: [Number, String],\n default: 1\n },\n disabled: {\n type: Boolean,\n default: false\n },\n readonly: {\n type: Boolean,\n default: false\n },\n hideHeader: {\n type: Boolean,\n default: false\n },\n labelNoTimeSelected: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$p, 'labelNoTimeSelected');\n }\n },\n labelSelected: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$p, 'labelSelected');\n }\n },\n labelHours: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$p, 'labelHours');\n }\n },\n labelMinutes: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$p, 'labelMinutes');\n }\n },\n labelSeconds: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$p, 'labelSeconds');\n }\n },\n labelAmpm: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$p, 'labelAmpm');\n }\n },\n labelAm: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$p, 'labelAm');\n }\n },\n labelPm: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$p, 'labelPm');\n }\n },\n // Passed to the spin buttons\n labelIncrement: {\n type: String,\n // Falls back to BFormSpinbutton label\n default: function _default() {\n return getConfigFallback$1('labelIncrement');\n }\n },\n labelDecrement: {\n type: String,\n // Falls back to BFormSpinbutton label\n default: function _default() {\n return getConfigFallback$1('labelDecrement');\n }\n },\n hidden: {\n type: Boolean,\n default: false\n }\n },\n data: function data() {\n var parsed = parseHMS(this.value || '');\n return {\n // Spin button models\n modelHours: parsed.hours,\n modelMinutes: parsed.minutes,\n modelSeconds: parsed.seconds,\n modelAmpm: parsed.ampm,\n // Internal flag to enable aria-live regions\n isLive: false\n };\n },\n computed: {\n computedHMS: function computedHMS() {\n var hours = this.modelHours;\n var minutes = this.modelMinutes;\n var seconds = this.modelSeconds;\n return formatHMS({\n hours: hours,\n minutes: minutes,\n seconds: seconds\n }, this.showSeconds);\n },\n resolvedOptions: function resolvedOptions() {\n // Resolved locale options\n var locale = concat(this.locale).filter(identity);\n var options = {\n hour: NUMERIC,\n minute: NUMERIC,\n second: NUMERIC\n };\n \n if (!isUndefinedOrNull(this.hour12)) {\n // Force 12 or 24 hour clock\n options.hour12 = !!this.hour12;\n }\n \n var dtf = new Intl.DateTimeFormat(locale, options);\n var resolved = dtf.resolvedOptions();\n var hour12 = resolved.hour12 || false; // IE 11 doesn't resolve the hourCycle, so we make\n // an assumption and fall back to common values\n \n var hourCycle = resolved.hourCycle || (hour12 ? 'h12' : 'h23');\n return {\n locale: resolved.locale,\n hour12: hour12,\n hourCycle: hourCycle\n };\n },\n computedLocale: function computedLocale() {\n return this.resolvedOptions.locale;\n },\n computedLang: function computedLang() {\n return (this.computedLocale || '').replace(/-u-.*$/, '');\n },\n computedRTL: function computedRTL() {\n return isLocaleRTL(this.computedLang);\n },\n computedHourCycle: function computedHourCycle() {\n // h11, h12, h23, or h24\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Locale/hourCycle\n // h12 - Hour system using 1–12. Corresponds to 'h' in patterns. The 12 hour clock, with midnight starting at 12:00 am\n // h23 - Hour system using 0–23. Corresponds to 'H' in patterns. The 24 hour clock, with midnight starting at 0:00\n // h11 - Hour system using 0–11. Corresponds to 'K' in patterns. The 12 hour clock, with midnight starting at 0:00 am\n // h24 - Hour system using 1–24. Corresponds to 'k' in pattern. The 24 hour clock, with midnight starting at 24:00\n // For h12 or h24, we visually format 00 hours as 12\n return this.resolvedOptions.hourCycle;\n },\n is12Hour: function is12Hour() {\n return !!this.resolvedOptions.hour12;\n },\n context: function context() {\n return {\n locale: this.computedLocale,\n isRTL: this.computedRTL,\n hourCycle: this.computedHourCycle,\n hour12: this.is12Hour,\n hours: this.modelHours,\n minutes: this.modelMinutes,\n seconds: this.showSeconds ? this.modelSeconds : 0,\n value: this.computedHMS,\n formatted: this.formattedTimeString\n };\n },\n valueId: function valueId() {\n return this.safeId() || null;\n },\n computedAriaLabelledby: function computedAriaLabelledby() {\n return [this.ariaLabelledby, this.valueId].filter(identity).join(' ') || null;\n },\n timeFormatter: function timeFormatter() {\n // Returns a formatter function reference\n // The formatter converts the time to a localized string\n var options = {\n hour12: this.is12Hour,\n hourCycle: this.computedHourCycle,\n hour: NUMERIC,\n minute: NUMERIC,\n timeZone: 'UTC'\n };\n \n if (this.showSeconds) {\n options.second = NUMERIC;\n } // Formats the time as a localized string\n \n \n return createDateFormatter(this.computedLocale, options);\n },\n numberFormatter: function numberFormatter() {\n // Returns a formatter function reference\n // The formatter always formats as 2 digits and is localized\n var nf = new Intl.NumberFormat(this.computedLocale, {\n style: 'decimal',\n minimumIntegerDigits: 2,\n minimumFractionDigits: 0,\n maximumFractionDigits: 0,\n notation: 'standard'\n });\n return nf.format;\n },\n formattedTimeString: function formattedTimeString() {\n var hours = this.modelHours;\n var minutes = this.modelMinutes;\n var seconds = this.showSeconds ? this.modelSeconds || 0 : 0;\n \n if (this.computedHMS) {\n return this.timeFormatter(createDate(Date.UTC(0, 0, 1, hours, minutes, seconds)));\n }\n \n return this.labelNoTimeSelected || ' ';\n },\n spinScopedSlots: function spinScopedSlots() {\n var h = this.$createElement;\n return {\n increment: function increment(_ref2) {\n var hasFocus = _ref2.hasFocus;\n return h(BIconChevronUp, {\n props: {\n scale: hasFocus ? 1.5 : 1.25\n },\n attrs: {\n 'aria-hidden': 'true'\n }\n });\n },\n decrement: function decrement(_ref3) {\n var hasFocus = _ref3.hasFocus;\n return h(BIconChevronUp, {\n props: {\n flipV: true,\n scale: hasFocus ? 1.5 : 1.25\n },\n attrs: {\n 'aria-hidden': 'true'\n }\n });\n }\n };\n }\n },\n watch: {\n value: function value(newVal, oldVal) {\n if (newVal !== oldVal && !looseEqual(parseHMS(newVal), parseHMS(this.computedHMS))) {\n var _parseHMS = parseHMS(newVal),\n hours = _parseHMS.hours,\n minutes = _parseHMS.minutes,\n seconds = _parseHMS.seconds,\n ampm = _parseHMS.ampm;\n \n this.modelHours = hours;\n this.modelMinutes = minutes;\n this.modelSeconds = seconds;\n this.modelAmpm = ampm;\n }\n },\n computedHMS: function computedHMS(newVal, oldVal) {\n if (newVal !== oldVal) {\n this.$emit('input', newVal);\n }\n },\n context: function context(newVal, oldVal) {\n if (!looseEqual(newVal, oldVal)) {\n this.$emit('context', newVal);\n }\n },\n modelAmpm: function modelAmpm(newVal, oldVal) {\n var _this = this;\n \n if (newVal !== oldVal) {\n var hours = isNull(this.modelHours) ? 0 : this.modelHours;\n this.$nextTick(function () {\n if (newVal === 0 && hours > 11) {\n // Switched to AM\n _this.modelHours = hours - 12;\n } else if (newVal === 1 && hours < 12) {\n // Switched to PM\n _this.modelHours = hours + 12;\n }\n });\n }\n },\n modelHours: function modelHours(newHours, oldHours) {\n if (newHours !== oldHours) {\n this.modelAmpm = newHours > 11 ? 1 : 0;\n }\n }\n },\n created: function created() {\n var _this2 = this;\n \n this.$nextTick(function () {\n _this2.$emit('context', _this2.context);\n });\n },\n mounted: function mounted() {\n this.setLive(true);\n },\n \n /* istanbul ignore next */\n activated: function activated()\n /* istanbul ignore next */\n {\n this.setLive(true);\n },\n \n /* istanbul ignore next */\n deactivated: function deactivated()\n /* istanbul ignore next */\n {\n this.setLive(false);\n },\n beforeDestroy: function beforeDestroy() {\n this.setLive(false);\n },\n methods: {\n // Public methods\n focus: function focus() {\n if (!this.disabled) {\n // We focus the first spin button\n attemptFocus(this.$refs.spinners[0]);\n }\n },\n blur: function blur() {\n if (!this.disabled) {\n var activeElement = getActiveElement();\n \n if (contains(this.$el, activeElement)) {\n attemptBlur(activeElement);\n }\n }\n },\n // Formatters for the spin buttons\n formatHours: function formatHours(hh) {\n var hourCycle = this.computedHourCycle; // We always store 0-23, but format based on h11/h12/h23/h24 formats\n \n hh = this.is12Hour && hh > 12 ? hh - 12 : hh; // Determine how 00:00 and 12:00 are shown\n \n hh = hh === 0 && hourCycle === 'h12' ? 12 : hh === 0 && hourCycle === 'h24' ?\n /* istanbul ignore next */\n 24 : hh === 12 && hourCycle === 'h11' ?\n /* istanbul ignore next */\n 0 : hh;\n return this.numberFormatter(hh);\n },\n formatMinutes: function formatMinutes(mm) {\n return this.numberFormatter(mm);\n },\n formatSeconds: function formatSeconds(ss) {\n return this.numberFormatter(ss);\n },\n formatAmpm: function formatAmpm(ampm) {\n // These should come from label props???\n // `ampm` should always be a value of `0` or `1`\n return ampm === 0 ? this.labelAm : ampm === 1 ? this.labelPm : '';\n },\n // Spinbutton on change handlers\n setHours: function setHours(value) {\n this.modelHours = value;\n },\n setMinutes: function setMinutes(value) {\n this.modelMinutes = value;\n },\n setSeconds: function setSeconds(value) {\n this.modelSeconds = value;\n },\n setAmpm: function setAmpm(value) {\n this.modelAmpm = value;\n },\n onSpinLeftRight: function onSpinLeftRight() {\n var evt = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var type = evt.type,\n keyCode = evt.keyCode;\n \n if (!this.disabled && type === 'keydown' && (keyCode === LEFT$2 || keyCode === RIGHT$2)) {\n evt.preventDefault();\n evt.stopPropagation();\n var spinners = this.$refs.spinners || [];\n var index = spinners.map(function (cmp) {\n return !!cmp.hasFocus;\n }).indexOf(true);\n index = index + (keyCode === LEFT$2 ? -1 : 1);\n index = index >= spinners.length ? 0 : index < 0 ? spinners.length - 1 : index;\n attemptFocus(spinners[index]);\n }\n },\n setLive: function setLive(on) {\n var _this3 = this;\n \n if (on) {\n this.$nextTick(function () {\n requestAF(function () {\n _this3.isLive = true;\n });\n });\n } else {\n this.isLive = false;\n }\n }\n },\n render: function render(h) {\n var _this4 = this;\n \n /* istanbul ignore if */\n if (this.hidden) {\n // If hidden, we just render a placeholder comment\n return h();\n }\n \n var valueId = this.valueId;\n var computedAriaLabelledby = this.computedAriaLabelledby;\n var spinIds = []; // Helper method to render a spinbutton\n \n var makeSpinbutton = function makeSpinbutton(handler, key, classes) {\n var spinbuttonProps = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var id = _this4.safeId(\"_spinbutton_\".concat(key, \"_\")) || null;\n spinIds.push(id);\n return h(BFormSpinbutton, {\n key: key,\n ref: 'spinners',\n refInFor: true,\n class: classes,\n props: _objectSpread2({\n id: id,\n placeholder: '--',\n vertical: true,\n required: true,\n disabled: _this4.disabled,\n readonly: _this4.readonly,\n locale: _this4.computedLocale,\n labelIncrement: _this4.labelIncrement,\n labelDecrement: _this4.labelDecrement,\n wrap: true,\n ariaControls: valueId,\n min: 0\n }, spinbuttonProps),\n scopedSlots: _this4.spinScopedSlots,\n on: {\n // We use `change` event to minimize SR verbosity\n // As the spinbutton will announce each value change\n // and we don't want the formatted time to be announced\n // on each value input if repeat is happening\n change: handler\n }\n });\n }; // Helper method to return a \"colon\" separator\n \n \n var makeColon = function makeColon() {\n return h('div', {\n staticClass: 'd-flex flex-column',\n class: {\n 'text-muted': _this4.disabled || _this4.readonly\n },\n attrs: {\n 'aria-hidden': 'true'\n }\n }, [h(BIconCircleFill, {\n props: {\n shiftV: 4,\n scale: 0.5\n }\n }), h(BIconCircleFill, {\n props: {\n shiftV: -4,\n scale: 0.5\n }\n })]);\n };\n \n var $spinners = []; // Hours\n \n $spinners.push(makeSpinbutton(this.setHours, 'hours', 'b-time-hours', {\n value: this.modelHours,\n max: 23,\n step: 1,\n formatterFn: this.formatHours,\n ariaLabel: this.labelHours\n })); // Spacer\n \n $spinners.push(makeColon()); // Minutes\n \n $spinners.push(makeSpinbutton(this.setMinutes, 'minutes', 'b-time-minutes', {\n value: this.modelMinutes,\n max: 59,\n step: this.minutesStep || 1,\n formatterFn: this.formatMinutes,\n ariaLabel: this.labelMinutes\n }));\n \n if (this.showSeconds) {\n // Spacer\n $spinners.push(makeColon()); // Seconds\n \n $spinners.push(makeSpinbutton(this.setSeconds, 'seconds', 'b-time-seconds', {\n value: this.modelSeconds,\n max: 59,\n step: this.secondsStep || 1,\n formatterFn: this.formatSeconds,\n ariaLabel: this.labelSeconds\n }));\n } // AM/PM ?\n \n \n if (this.is12Hour) {\n // TODO:\n // If locale is RTL, unshift this instead of push?\n // And switch class `ml-2` to `mr-2`\n // Note some LTR locales (i.e. zh) also place AM/PM to the left\n $spinners.push(makeSpinbutton(this.setAmpm, 'ampm', 'b-time-ampm', {\n value: this.modelAmpm,\n max: 1,\n formatterFn: this.formatAmpm,\n ariaLabel: this.labelAmpm,\n // We set `required` as `false`, since this always has a value\n required: false\n }));\n } // Assemble spinners\n \n \n $spinners = h('div', {\n staticClass: 'd-flex align-items-center justify-content-center mx-auto',\n attrs: {\n role: 'group',\n tabindex: this.disabled || this.readonly ? null : '-1',\n 'aria-labelledby': computedAriaLabelledby\n },\n on: {\n keydown: this.onSpinLeftRight,\n click\n /* istanbul ignore next */\n : function click(evt)\n /* istanbul ignore next */\n {\n if (evt.target === evt.currentTarget) {\n _this4.focus();\n }\n }\n }\n }, $spinners); // Selected type display\n \n var $value = h('output', {\n staticClass: 'form-control form-control-sm text-center',\n class: {\n disabled: this.disabled || this.readonly\n },\n attrs: {\n id: valueId,\n role: 'status',\n for: spinIds.filter(identity).join(' ') || null,\n tabindex: this.disabled ? null : '-1',\n 'aria-live': this.isLive ? 'polite' : 'off',\n 'aria-atomic': 'true'\n },\n on: {\n // Transfer focus/click to focus hours spinner\n click: this.focus,\n focus: this.focus\n }\n }, [h('bdi', this.formattedTimeString), this.computedHMS ? h('span', {\n staticClass: 'sr-only'\n }, \" (\".concat(this.labelSelected, \") \")) : '']);\n var $header = h('header', {\n staticClass: 'b-time-header',\n class: {\n 'sr-only': this.hideHeader\n }\n }, [$value]); // Optional bottom slot\n \n var $slot = this.normalizeSlot('default');\n $slot = $slot ? h('footer', {\n staticClass: 'b-time-footer'\n }, $slot) : h();\n return h('div', {\n staticClass: 'b-time d-inline-flex flex-column text-center',\n attrs: {\n role: 'group',\n lang: this.computedLang || null,\n 'aria-labelledby': computedAriaLabelledby || null,\n 'aria-disabled': this.disabled ? 'true' : null,\n 'aria-readonly': this.readonly && !this.disabled ? 'true' : null\n }\n }, [$header, $spinners, $slot]);\n }\n });\n \n var NAME$q = 'BFormTimepicker'; // Fallback to BTime/BFormSpinbutton prop if no value found\n \n var getConfigFallback$2 = function getConfigFallback(prop) {\n return getComponentConfig(NAME$q, prop) || getComponentConfig('BTime', prop) || getComponentConfig('BFormSpinbutton', prop);\n }; // We create our props as a mixin so that we can control\n // where they appear in the props listing reference section\n \n \n var propsMixin$1 = {\n props: _objectSpread2({\n value: {\n type: String,\n default: ''\n },\n resetValue: {\n type: String,\n default: ''\n },\n placeholder: {\n type: String // Defaults to `labelNoTime` from BTime context\n // default: null\n \n },\n size: {\n type: String // default: null\n \n },\n disabled: {\n type: Boolean,\n default: false\n },\n readonly: {\n type: Boolean,\n default: false\n },\n required: {\n // If true adds the `aria-required` attribute\n type: Boolean,\n default: false\n },\n name: {\n type: String // default: null\n \n },\n form: {\n type: String // default: null\n \n },\n state: {\n // Tri-state prop: `true`, `false` or `null`\n type: Boolean,\n default: null\n },\n hour12: {\n // Tri-state prop: `true` => 12 hour, `false` => 24 hour, `null` => auto\n type: Boolean,\n default: null\n },\n locale: {\n type: [String, Array] // default: null\n \n },\n showSeconds: {\n type: Boolean,\n default: false\n },\n hideHeader: {\n type: Boolean,\n default: false\n },\n secondsStep: {\n type: [Number, String],\n default: 1\n },\n minutesStep: {\n type: [Number, String],\n default: 1\n },\n buttonOnly: {\n type: Boolean,\n default: false\n },\n buttonVariant: {\n // Applicable in button only mode\n type: String,\n default: 'secondary'\n },\n nowButton: {\n type: Boolean,\n default: false\n },\n labelNowButton: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$q, 'labelNowButton');\n }\n },\n nowButtonVariant: {\n type: String,\n default: 'outline-primary'\n },\n resetButton: {\n type: Boolean,\n default: false\n },\n labelResetButton: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$q, 'labelResetButton');\n }\n },\n resetButtonVariant: {\n type: String,\n default: 'outline-danger'\n },\n noCloseButton: {\n type: Boolean,\n default: false\n },\n labelCloseButton: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$q, 'labelCloseButton');\n }\n },\n closeButtonVariant: {\n type: String,\n default: 'outline-secondary'\n },\n // Labels\n // These fallback to BTime values\n labelSelected: {\n type: String,\n default: function _default() {\n return getConfigFallback$2('labelSelected');\n }\n },\n labelNoTimeSelected: {\n type: String,\n default: function _default() {\n return getConfigFallback$2('labelNoTimeSelected');\n }\n },\n labelHours: {\n type: String,\n default: function _default() {\n return getConfigFallback$2('labelHours');\n }\n },\n labelMinutes: {\n type: String,\n default: function _default() {\n return getConfigFallback$2('labelMinutes');\n }\n },\n labelSeconds: {\n type: String,\n default: function _default() {\n return getConfigFallback$2('labelSeconds');\n }\n },\n labelAmpm: {\n type: String,\n default: function _default() {\n return getConfigFallback$2('labelAmpm');\n }\n },\n labelAm: {\n type: String,\n default: function _default() {\n return getConfigFallback$2('labelAm');\n }\n },\n labelPm: {\n type: String,\n default: function _default() {\n return getConfigFallback$2('labelPm');\n }\n },\n // These pick BTime or BFormSpinbutton global config if no BFormTimepicker global config\n labelIncrement: {\n type: String,\n default: function _default() {\n return getConfigFallback$2('labelIncrement');\n }\n },\n labelDecrement: {\n type: String,\n default: function _default() {\n return getConfigFallback$2('labelDecrement');\n }\n },\n // extra dropdown stuff\n menuClass: {\n type: [String, Array, Object] // default: null\n \n }\n }, dropdownProps)\n }; // --- BFormDate component ---\n // @vue/component\n \n var BFormTimepicker = /*#__PURE__*/Vue.extend({\n name: NAME$q,\n // The mixins order determines the order of appearance in the props reference section\n mixins: [idMixin, propsMixin$1],\n model: {\n prop: 'value',\n event: 'input'\n },\n data: function data() {\n return {\n // We always use `HH:mm:ss` value internally\n localHMS: this.value || '',\n // Context data from BTime\n localLocale: null,\n isRTL: false,\n formattedValue: '',\n // If the menu is opened\n isVisible: false\n };\n },\n computed: {\n computedLang: function computedLang() {\n return (this.localLocale || '').replace(/-u-.*$/i, '') || null;\n },\n timeProps: function timeProps() {\n // Props we pass to BTime\n // Use self for better minification, as `this` won't\n // minimize and we reference it many times below\n var self = this;\n return {\n hidden: !self.isVisible,\n value: self.localHMS,\n // Passthrough props\n readonly: self.readonly,\n disabled: self.disabled,\n locale: self.locale,\n hour12: self.hour12,\n hideHeader: self.hideHeader,\n showSeconds: self.showSeconds,\n secondsStep: self.secondsStep,\n minutesStep: self.minutesStep,\n labelNoTimeSelected: self.labelNoTimeSelected,\n labelSelected: self.labelSelected,\n labelHours: self.labelHours,\n labelMinutes: self.labelMinutes,\n labelSeconds: self.labelSeconds,\n labelAmpm: self.labelAmpm,\n labelAm: self.labelAm,\n labelPm: self.labelPm,\n labelIncrement: self.labelIncrement,\n labelDecrement: self.labelDecrement\n };\n }\n },\n watch: {\n value: function value(newVal) {\n this.localHMS = newVal || '';\n },\n localHMS: function localHMS(newVal) {\n // We only update the v-model value when the timepicker\n // is open, to prevent cursor jumps when bound to a\n // text input in button only mode\n if (this.isVisible) {\n this.$emit('input', newVal || '');\n }\n }\n },\n methods: {\n // Public methods\n focus: function focus() {\n if (!this.disabled) {\n attemptFocus(this.$refs.control);\n }\n },\n blur: function blur() {\n if (!this.disabled) {\n attemptBlur(this.$refs.control);\n }\n },\n // Private methods\n setAndClose: function setAndClose(value) {\n var _this = this;\n \n this.localHMS = value;\n this.$nextTick(function () {\n _this.$refs.control.hide(true);\n });\n },\n onInput: function onInput(hms) {\n if (this.localHMS !== hms) {\n this.localHMS = hms;\n }\n },\n onContext: function onContext(ctx) {\n var isRTL = ctx.isRTL,\n locale = ctx.locale,\n value = ctx.value,\n formatted = ctx.formatted;\n this.isRTL = isRTL;\n this.localLocale = locale;\n this.formattedValue = formatted;\n this.localHMS = value || ''; // Re-emit the context event\n \n this.$emit('context', ctx);\n },\n onNowButton: function onNowButton() {\n var now = new Date();\n var hours = now.getHours();\n var minutes = now.getMinutes();\n var seconds = this.showSeconds ? now.getSeconds() : 0;\n var value = [hours, minutes, seconds].map(function (v) {\n return \"00\".concat(v || '').slice(-2);\n }).join(':');\n this.setAndClose(value);\n },\n onResetButton: function onResetButton() {\n this.setAndClose(this.resetValue);\n },\n onCloseButton: function onCloseButton() {\n this.$refs.control.hide(true);\n },\n onShow: function onShow() {\n this.isVisible = true;\n },\n onShown: function onShown() {\n var _this2 = this;\n \n this.$nextTick(function () {\n attemptFocus(_this2.$refs.time);\n \n _this2.$emit('shown');\n });\n },\n onHidden: function onHidden() {\n this.isVisible = false;\n this.$emit('hidden');\n },\n // Render function helpers\n defaultButtonFn: function defaultButtonFn(_ref) {\n var isHovered = _ref.isHovered,\n hasFocus = _ref.hasFocus;\n return this.$createElement(isHovered || hasFocus ? BIconClockFill : BIconClock, {\n attrs: {\n 'aria-hidden': 'true'\n }\n });\n }\n },\n render: function render(h) {\n var localHMS = this.localHMS,\n disabled = this.disabled,\n readonly = this.readonly;\n var placeholder = isUndefinedOrNull(this.placeholder) ? this.labelNoTimeSelected : this.placeholder; // Footer buttons\n \n var $footer = [];\n \n if (this.nowButton) {\n var label = this.labelNowButton;\n $footer.push(h(BButton, {\n key: 'now-btn',\n props: {\n size: 'sm',\n disabled: disabled || readonly,\n variant: this.nowButtonVariant\n },\n attrs: {\n 'aria-label': label || null\n },\n on: {\n click: this.onNowButton\n }\n }, label));\n }\n \n if (this.resetButton) {\n if ($footer.length > 0) {\n // Add a \"spacer\" between buttons (' ')\n $footer.push(h('span', \"\\xA0\"));\n }\n \n var _label = this.labelResetButton;\n $footer.push(h(BButton, {\n key: 'reset-btn',\n props: {\n size: 'sm',\n disabled: disabled || readonly,\n variant: this.resetButtonVariant\n },\n attrs: {\n 'aria-label': _label || null\n },\n on: {\n click: this.onResetButton\n }\n }, _label));\n }\n \n if (!this.noCloseButton) {\n if ($footer.length > 0) {\n // Add a \"spacer\" between buttons (' ')\n $footer.push(h('span', \"\\xA0\"));\n }\n \n var _label2 = this.labelCloseButton;\n $footer.push(h(BButton, {\n key: 'close-btn',\n props: {\n size: 'sm',\n disabled: disabled,\n variant: this.closeButtonVariant\n },\n attrs: {\n 'aria-label': _label2 || null\n },\n on: {\n click: this.onCloseButton\n }\n }, _label2));\n }\n \n if ($footer.length > 0) {\n $footer = [h('div', {\n staticClass: 'b-form-date-controls d-flex flex-wrap',\n class: {\n 'justify-content-between': $footer.length > 1,\n 'justify-content-end': $footer.length < 2\n }\n }, $footer)];\n }\n \n var $time = h(BTime, {\n ref: 'time',\n staticClass: 'b-form-time-control',\n props: this.timeProps,\n on: {\n input: this.onInput,\n context: this.onContext\n }\n }, $footer);\n return h(BVFormBtnLabelControl, {\n ref: 'control',\n staticClass: 'b-form-timepicker',\n props: _objectSpread2(_objectSpread2({}, this.$props), {}, {\n // Overridden / computed props\n id: this.safeId(),\n rtl: this.isRTL,\n lang: this.computedLang,\n value: localHMS || '',\n formattedValue: localHMS ? this.formattedValue : '',\n placeholder: placeholder || ''\n }),\n on: {\n show: this.onShow,\n shown: this.onShown,\n hidden: this.onHidden\n },\n scopedSlots: {\n 'button-content': this.$scopedSlots['button-content'] || this.defaultButtonFn\n }\n }, [$time]);\n }\n });\n \n var FormTimepickerPlugin = /*#__PURE__*/pluginFactory({\n components: {\n BFormTimepicker: BFormTimepicker,\n BTimepicker: BFormTimepicker\n }\n });\n \n var ImagePlugin = /*#__PURE__*/pluginFactory({\n components: {\n BImg: BImg,\n BImgLazy: BImgLazy\n }\n });\n \n var props$A = {\n tag: {\n type: String,\n default: 'div'\n }\n }; // @vue/component\n \n var BInputGroupText = /*#__PURE__*/Vue.extend({\n name: 'BInputGroupText',\n functional: true,\n props: props$A,\n render: function render(h, _ref) {\n var props = _ref.props,\n data = _ref.data,\n children = _ref.children;\n return h(props.tag, a(data, {\n staticClass: 'input-group-text'\n }), children);\n }\n });\n \n var commonProps$1 = {\n id: {\n type: String,\n default: null\n },\n tag: {\n type: String,\n default: 'div'\n },\n isText: {\n type: Boolean,\n default: false\n }\n }; // @vue/component\n \n var BInputGroupAddon = /*#__PURE__*/Vue.extend({\n name: 'BInputGroupAddon',\n functional: true,\n props: _objectSpread2(_objectSpread2({}, commonProps$1), {}, {\n append: {\n type: Boolean,\n default: false\n }\n }),\n render: function render(h, _ref) {\n var props = _ref.props,\n data = _ref.data,\n children = _ref.children;\n return h(props.tag, a(data, {\n class: {\n 'input-group-append': props.append,\n 'input-group-prepend': !props.append\n },\n attrs: {\n id: props.id\n }\n }), props.isText ? [h(BInputGroupText, children)] : children);\n }\n });\n \n var BInputGroupAppend = /*#__PURE__*/Vue.extend({\n name: 'BInputGroupAppend',\n functional: true,\n props: commonProps$1,\n render: function render(h, _ref) {\n var props = _ref.props,\n data = _ref.data,\n children = _ref.children;\n // Pass all our data down to child, and set `append` to `true`\n return h(BInputGroupAddon, a(data, {\n props: _objectSpread2(_objectSpread2({}, props), {}, {\n append: true\n })\n }), children);\n }\n });\n \n var BInputGroupPrepend = /*#__PURE__*/Vue.extend({\n name: 'BInputGroupPrepend',\n functional: true,\n props: commonProps$1,\n render: function render(h, _ref) {\n var props = _ref.props,\n data = _ref.data,\n children = _ref.children;\n // pass all our props/attrs down to child, and set`append` to false\n return h(BInputGroupAddon, a(data, {\n props: _objectSpread2(_objectSpread2({}, props), {}, {\n append: false\n })\n }), children);\n }\n });\n \n var NAME$r = 'BInputGroup'; // --- Props ---\n \n var props$B = {\n id: {\n type: String\n },\n size: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$r, 'size');\n }\n },\n prepend: {\n type: String\n },\n prependHtml: {\n type: String\n },\n append: {\n type: String\n },\n appendHtml: {\n type: String\n },\n tag: {\n type: String,\n default: 'div'\n }\n }; // --- Main component ---\n // @vue/component\n \n var BInputGroup = /*#__PURE__*/Vue.extend({\n name: NAME$r,\n functional: true,\n props: props$B,\n render: function render(h, _ref) {\n var props = _ref.props,\n data = _ref.data,\n slots = _ref.slots,\n scopedSlots = _ref.scopedSlots;\n var prepend = props.prepend,\n prependHtml = props.prependHtml,\n append = props.append,\n appendHtml = props.appendHtml,\n size = props.size;\n var $scopedSlots = scopedSlots || {};\n var $slots = slots();\n var slotScope = {};\n var $prepend = h();\n var hasPrependSlot = hasNormalizedSlot('prepend', $scopedSlots, $slots);\n \n if (hasPrependSlot || prepend || prependHtml) {\n $prepend = h(BInputGroupPrepend, [hasPrependSlot ? normalizeSlot('prepend', slotScope, $scopedSlots, $slots) : h(BInputGroupText, {\n domProps: htmlOrText(prependHtml, prepend)\n })]);\n }\n \n var $append = h();\n var hasAppendSlot = hasNormalizedSlot('append', $scopedSlots, $slots);\n \n if (hasAppendSlot || append || appendHtml) {\n $append = h(BInputGroupAppend, [hasAppendSlot ? normalizeSlot('append', slotScope, $scopedSlots, $slots) : h(BInputGroupText, {\n domProps: htmlOrText(appendHtml, append)\n })]);\n }\n \n return h(props.tag, a(data, {\n staticClass: 'input-group',\n class: _defineProperty({}, \"input-group-\".concat(size), size),\n attrs: {\n id: props.id || null,\n role: 'group'\n }\n }), [$prepend, normalizeSlot('default', slotScope, $scopedSlots, $slots), $append]);\n }\n });\n \n var InputGroupPlugin = /*#__PURE__*/pluginFactory({\n components: {\n BInputGroup: BInputGroup,\n BInputGroupAddon: BInputGroupAddon,\n BInputGroupPrepend: BInputGroupPrepend,\n BInputGroupAppend: BInputGroupAppend,\n BInputGroupText: BInputGroupText\n }\n });\n \n var props$C = {\n tag: {\n type: String,\n default: 'div'\n },\n fluid: {\n // String breakpoint name new in Bootstrap v4.4.x\n type: [Boolean, String],\n default: false\n }\n }; // @vue/component\n \n var BContainer = /*#__PURE__*/Vue.extend({\n name: 'BContainer',\n functional: true,\n props: props$C,\n render: function render(h, _ref) {\n var props = _ref.props,\n data = _ref.data,\n children = _ref.children;\n return h(props.tag, a(data, {\n class: _defineProperty({\n container: !(props.fluid || props.fluid === ''),\n 'container-fluid': props.fluid === true || props.fluid === ''\n }, \"container-\".concat(props.fluid), props.fluid && props.fluid !== true)\n }), children);\n }\n });\n \n var NAME$s = 'BJumbotron'; // --- Props ---\n \n var props$D = {\n fluid: {\n type: Boolean,\n default: false\n },\n containerFluid: {\n type: [Boolean, String],\n default: false\n },\n header: {\n type: String // default: null\n \n },\n headerHtml: {\n type: String // default: null\n \n },\n headerTag: {\n type: String,\n default: 'h1'\n },\n headerLevel: {\n type: [Number, String],\n default: '3'\n },\n lead: {\n type: String // default: null\n \n },\n leadHtml: {\n type: String // default: null\n \n },\n leadTag: {\n type: String,\n default: 'p'\n },\n tag: {\n type: String,\n default: 'div'\n },\n bgVariant: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$s, 'bgVariant');\n }\n },\n borderVariant: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$s, 'borderVariant');\n }\n },\n textVariant: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$s, 'textVariant');\n }\n }\n }; // --- Main component ---\n // @vue/component\n \n var BJumbotron = /*#__PURE__*/Vue.extend({\n name: NAME$s,\n functional: true,\n props: props$D,\n render: function render(h, _ref) {\n var _class2;\n \n var props = _ref.props,\n data = _ref.data,\n slots = _ref.slots,\n scopedSlots = _ref.scopedSlots;\n var header = props.header,\n headerHtml = props.headerHtml,\n lead = props.lead,\n leadHtml = props.leadHtml,\n textVariant = props.textVariant,\n bgVariant = props.bgVariant,\n borderVariant = props.borderVariant;\n var $scopedSlots = scopedSlots || {};\n var $slots = slots();\n var slotScope = {};\n var $header = h();\n var hasHeaderSlot = hasNormalizedSlot('header', $scopedSlots, $slots);\n \n if (hasHeaderSlot || header || headerHtml) {\n var headerLevel = props.headerLevel;\n $header = h(props.headerTag, {\n class: _defineProperty({}, \"display-\".concat(headerLevel), headerLevel),\n domProps: hasHeaderSlot ? {} : htmlOrText(headerHtml, header)\n }, normalizeSlot('header', slotScope, $scopedSlots, $slots));\n }\n \n var $lead = h();\n var hasLeadSlot = hasNormalizedSlot('lead', $scopedSlots, $slots);\n \n if (hasLeadSlot || lead || leadHtml) {\n $lead = h(props.leadTag, {\n staticClass: 'lead',\n domProps: hasLeadSlot ? {} : htmlOrText(leadHtml, lead)\n }, normalizeSlot('lead', slotScope, $scopedSlots, $slots));\n }\n \n var $children = [$header, $lead, normalizeSlot('default', slotScope, $scopedSlots, $slots)]; // If fluid, wrap content in a container\n \n if (props.fluid) {\n $children = [h(BContainer, {\n props: {\n fluid: props.containerFluid\n }\n }, $children)];\n }\n \n return h(props.tag, a(data, {\n staticClass: 'jumbotron',\n class: (_class2 = {\n 'jumbotron-fluid': props.fluid\n }, _defineProperty(_class2, \"text-\".concat(textVariant), textVariant), _defineProperty(_class2, \"bg-\".concat(bgVariant), bgVariant), _defineProperty(_class2, \"border-\".concat(borderVariant), borderVariant), _defineProperty(_class2, \"border\", borderVariant), _class2)\n }), $children);\n }\n });\n \n var JumbotronPlugin = /*#__PURE__*/pluginFactory({\n components: {\n BJumbotron: BJumbotron\n }\n });\n \n var COMMON_ALIGNMENT = ['start', 'end', 'center']; // Generates a prop object with a type of `[String, Number]`\n \n var strNum$1 = function strNum() {\n return {\n type: [String, Number],\n default: null\n };\n }; // Compute a `row-cols-{breakpoint}-{cols}` class name\n // Memoized function for better performance on generating class names\n \n \n var computeRowColsClass = memoize(function (breakpoint, cols) {\n cols = trim(toString$1(cols));\n return cols ? lowerCase(['row-cols', breakpoint, cols].filter(identity).join('-')) : null;\n }); // Get the breakpoint name from the `rowCols` prop name\n // Memoized function for better performance on extracting breakpoint names\n \n var computeRowColsBreakpoint = memoize(function (prop) {\n return lowerCase(prop.replace('cols', ''));\n }); // Cached copy of the `row-cols` breakpoint prop names\n // Will be populated when the props are generated\n \n var rowColsPropList = []; // Lazy evaled props factory for <b-row> (called only once,\n // the first time the component is used)\n \n var generateProps$2 = function generateProps() {\n // Grab the breakpoints from the cached config (including the '' (xs) breakpoint)\n var breakpoints = getBreakpointsUpCached(); // Supports classes like: `row-cols-2`, `row-cols-md-4`, `row-cols-xl-6`\n \n var rowColsProps = breakpoints.reduce(function (props, breakpoint) {\n props[suffixPropName(breakpoint, 'cols')] = strNum$1();\n return props;\n }, create(null)); // Cache the row-cols prop names\n \n rowColsPropList = keys(rowColsProps); // Return the generated props\n \n return _objectSpread2({\n tag: {\n type: String,\n default: 'div'\n },\n noGutters: {\n type: Boolean,\n default: false\n },\n alignV: {\n type: String,\n default: null,\n validator: function validator(str) {\n return arrayIncludes(concat(COMMON_ALIGNMENT, 'baseline', 'stretch'), str);\n }\n },\n alignH: {\n type: String,\n default: null,\n validator: function validator(str) {\n return arrayIncludes(concat(COMMON_ALIGNMENT, 'between', 'around'), str);\n }\n },\n alignContent: {\n type: String,\n default: null,\n validator: function validator(str) {\n return arrayIncludes(concat(COMMON_ALIGNMENT, 'between', 'around', 'stretch'), str);\n }\n }\n }, rowColsProps);\n }; // We do not use `Vue.extend()` here as that would evaluate the props\n // immediately, which we do not want to happen\n // @vue/component\n \n \n var BRow = {\n name: 'BRow',\n functional: true,\n \n get props() {\n // Allow props to be lazy evaled on first access and\n // then they become a non-getter afterwards\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/get#Smart_self-overwriting_lazy_getters\n delete this.props;\n this.props = generateProps$2();\n return this.props;\n },\n \n render: function render(h, _ref) {\n var _classList$push;\n \n var props = _ref.props,\n data = _ref.data,\n children = _ref.children;\n var classList = []; // Loop through row-cols breakpoint props and generate the classes\n \n rowColsPropList.forEach(function (prop) {\n var c = computeRowColsClass(computeRowColsBreakpoint(prop), props[prop]); // If a class is returned, push it onto the array\n \n if (c) {\n classList.push(c);\n }\n });\n classList.push((_classList$push = {\n 'no-gutters': props.noGutters\n }, _defineProperty(_classList$push, \"align-items-\".concat(props.alignV), props.alignV), _defineProperty(_classList$push, \"justify-content-\".concat(props.alignH), props.alignH), _defineProperty(_classList$push, \"align-content-\".concat(props.alignContent), props.alignContent), _classList$push));\n return h(props.tag, a(data, {\n staticClass: 'row',\n class: classList\n }), children);\n }\n };\n \n var LayoutPlugin = /*#__PURE__*/pluginFactory({\n components: {\n BContainer: BContainer,\n BRow: BRow,\n BCol: BCol,\n BFormRow: BFormRow\n }\n });\n \n var LinkPlugin = /*#__PURE__*/pluginFactory({\n components: {\n BLink: BLink\n }\n });\n \n var props$E = {\n tag: {\n type: String,\n default: 'div'\n },\n flush: {\n type: Boolean,\n default: false\n },\n horizontal: {\n type: [Boolean, String],\n default: false\n }\n }; // @vue/component\n \n var BListGroup = /*#__PURE__*/Vue.extend({\n name: 'BListGroup',\n functional: true,\n props: props$E,\n render: function render(h, _ref) {\n var props = _ref.props,\n data = _ref.data,\n children = _ref.children;\n var horizontal = props.horizontal === '' ? true : props.horizontal;\n horizontal = props.flush ? false : horizontal;\n var componentData = {\n staticClass: 'list-group',\n class: _defineProperty({\n 'list-group-flush': props.flush,\n 'list-group-horizontal': horizontal === true\n }, \"list-group-horizontal-\".concat(horizontal), isString(horizontal))\n };\n return h(props.tag, a(data, componentData), children);\n }\n });\n \n var NAME$t = 'BListGroupItem';\n var actionTags = ['a', 'router-link', 'button', 'b-link']; // --- Props ---\n \n var linkProps$3 = omit(props$1, ['event', 'routerTag']);\n delete linkProps$3.href.default;\n delete linkProps$3.to.default;\n var props$F = _objectSpread2({\n tag: {\n type: String,\n default: 'div'\n },\n action: {\n type: Boolean,\n default: null\n },\n button: {\n type: Boolean,\n default: null\n },\n variant: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$t, 'variant');\n }\n }\n }, linkProps$3); // --- Main component ---\n // @vue/component\n \n var BListGroupItem = /*#__PURE__*/Vue.extend({\n name: NAME$t,\n functional: true,\n props: props$F,\n render: function render(h, _ref) {\n var _class;\n \n var props = _ref.props,\n data = _ref.data,\n children = _ref.children;\n var button = props.button,\n variant = props.variant,\n active = props.active,\n disabled = props.disabled;\n var link = isLink(props);\n var tag = button ? 'button' : !link ? props.tag : BLink;\n var action = !!(props.action || link || button || arrayIncludes(actionTags, props.tag));\n var attrs = {};\n var itemProps = {};\n \n if (isTag(tag, 'button')) {\n if (!data.attrs || !data.attrs.type) {\n // Add a type for button is one not provided in passed attributes\n attrs.type = 'button';\n }\n \n if (props.disabled) {\n // Set disabled attribute if button and disabled\n attrs.disabled = true;\n }\n } else {\n itemProps = pluckProps(linkProps$3, props);\n }\n \n return h(tag, a(data, {\n attrs: attrs,\n props: itemProps,\n staticClass: 'list-group-item',\n class: (_class = {}, _defineProperty(_class, \"list-group-item-\".concat(variant), variant), _defineProperty(_class, 'list-group-item-action', action), _defineProperty(_class, \"active\", active), _defineProperty(_class, \"disabled\", disabled), _class)\n }), children);\n }\n });\n \n var ListGroupPlugin = /*#__PURE__*/pluginFactory({\n components: {\n BListGroup: BListGroup,\n BListGroupItem: BListGroupItem\n }\n });\n \n var props$G = {\n tag: {\n type: String,\n default: 'div'\n }\n }; // @vue/component\n \n var BMediaBody = /*#__PURE__*/Vue.extend({\n name: 'BMediaBody',\n functional: true,\n props: props$G,\n render: function render(h, _ref) {\n var props = _ref.props,\n data = _ref.data,\n children = _ref.children;\n return h(props.tag, a(data, {\n staticClass: 'media-body'\n }), children);\n }\n });\n \n var props$H = {\n tag: {\n type: String,\n default: 'div'\n },\n verticalAlign: {\n type: String,\n default: 'top'\n }\n }; // @vue/component\n \n var BMediaAside = /*#__PURE__*/Vue.extend({\n name: 'BMediaAside',\n functional: true,\n props: props$H,\n render: function render(h, _ref) {\n var props = _ref.props,\n data = _ref.data,\n children = _ref.children;\n var align = props.verticalAlign === 'top' ? 'start' : props.verticalAlign === 'bottom' ? 'end' :\n /* istanbul ignore next */\n props.verticalAlign;\n return h(props.tag, a(data, {\n staticClass: 'd-flex',\n class: _defineProperty({}, \"align-self-\".concat(align), align)\n }), children);\n }\n });\n \n var props$I = {\n tag: {\n type: String,\n default: 'div'\n },\n rightAlign: {\n type: Boolean,\n default: false\n },\n verticalAlign: {\n type: String,\n default: 'top'\n },\n noBody: {\n type: Boolean,\n default: false\n }\n }; // @vue/component\n \n var BMedia = /*#__PURE__*/Vue.extend({\n name: 'BMedia',\n functional: true,\n props: props$I,\n render: function render(h, _ref) {\n var props = _ref.props,\n data = _ref.data,\n slots = _ref.slots,\n scopedSlots = _ref.scopedSlots,\n children = _ref.children;\n var childNodes = props.noBody ? children : [];\n \n if (!props.noBody) {\n var $slots = slots();\n var $scopedSlots = scopedSlots || {};\n var $aside = normalizeSlot('aside', {}, $scopedSlots, $slots);\n var $default = normalizeSlot('default', {}, $scopedSlots, $slots);\n \n if ($aside && !props.rightAlign) {\n childNodes.push(h(BMediaAside, {\n staticClass: 'mr-3',\n props: {\n verticalAlign: props.verticalAlign\n }\n }, $aside));\n }\n \n childNodes.push(h(BMediaBody, $default));\n \n if ($aside && props.rightAlign) {\n childNodes.push(h(BMediaAside, {\n staticClass: 'ml-3',\n props: {\n verticalAlign: props.verticalAlign\n }\n }, $aside));\n }\n }\n \n return h(props.tag, a(data, {\n staticClass: 'media'\n }), childNodes);\n }\n });\n \n var MediaPlugin = /*#__PURE__*/pluginFactory({\n components: {\n BMedia: BMedia,\n BMediaAside: BMediaAside,\n BMediaBody: BMediaBody\n }\n });\n \n //\n // Single root node portaling of content, which retains parent/child hierarchy\n // Unlike Portal-Vue where portaled content is no longer a descendent of its\n // intended parent components\n //\n // Private components for use by Tooltips, Popovers and Modals\n //\n // Based on vue-simple-portal\n // https://github.com/LinusBorg/vue-simple-portal\n // Transporter target used by BTransporterSingle\n // Supports only a single root element\n // @vue/component\n \n var BTransporterTargetSingle = /*#__PURE__*/Vue.extend({\n // As an abstract component, it doesn't appear in the $parent chain of\n // components, which means the next parent of any component rendered inside\n // of this one will be the parent from which is was portal'd\n abstract: true,\n name: 'BTransporterTargetSingle',\n props: {\n nodes: {\n // Even though we only support a single root element,\n // VNodes are always passed as an array\n type: [Array, Function] // default: undefined\n \n }\n },\n data: function data(vm) {\n return {\n updatedNodes: vm.nodes\n };\n },\n destroyed: function destroyed() {\n removeNode(this.$el);\n },\n render: function render(h) {\n var nodes = isFunction(this.updatedNodes) ? this.updatedNodes({}) : this.updatedNodes;\n nodes = concat(nodes).filter(Boolean);\n /* istanbul ignore else */\n \n if (nodes && nodes.length > 0 && !nodes[0].text) {\n return nodes[0];\n } else {\n /* istanbul ignore next */\n return h();\n }\n }\n }); // This component has no root element, so only a single VNode is allowed\n // @vue/component\n \n var BTransporterSingle = /*#__PURE__*/Vue.extend({\n name: 'BTransporterSingle',\n mixins: [normalizeSlotMixin],\n props: {\n disabled: {\n type: Boolean,\n default: false\n },\n container: {\n // String: CSS selector,\n // HTMLElement: Element reference\n // Mainly needed for tooltips/popovers inside modals\n type: [String, HTMLElement],\n default: 'body'\n },\n tag: {\n // This should be set to match the root element type\n type: String,\n default: 'div'\n }\n },\n watch: {\n disabled: {\n immediate: true,\n handler: function handler(disabled) {\n disabled ? this.unmountTarget() : this.$nextTick(this.mountTarget);\n }\n }\n },\n created: function created() {\n // Create private non-reactive props\n this.$_defaultFn = null;\n this.$_target = null;\n },\n beforeMount: function beforeMount() {\n this.mountTarget();\n },\n updated: function updated() {\n // We need to make sure that all children have completed updating\n // before rendering in the target\n // `vue-simple-portal` has the this in a `$nextTick()`,\n // while `portal-vue` doesn't\n // Just trying to see if the `$nextTick()` delay is required or not\n // Since all slots in Vue 2.6.x are always functions\n this.updateTarget();\n },\n beforeDestroy: function beforeDestroy() {\n this.unmountTarget();\n this.$_defaultFn = null;\n },\n methods: {\n // Get the element which the target should be appended to\n getContainer: function getContainer() {\n /* istanbul ignore else */\n if (isBrowser) {\n var container = this.container;\n return isString(container) ? select(container) : container;\n } else {\n return null;\n }\n },\n // Mount the target\n mountTarget: function mountTarget() {\n if (!this.$_target) {\n var container = this.getContainer();\n \n if (container) {\n var el = document.createElement('div');\n container.appendChild(el);\n this.$_target = new BTransporterTargetSingle({\n el: el,\n parent: this,\n propsData: {\n // Initial nodes to be rendered\n nodes: concat(this.normalizeSlot('default'))\n }\n });\n }\n }\n },\n // Update the content of the target\n updateTarget: function updateTarget() {\n if (isBrowser && this.$_target) {\n var defaultFn = this.$scopedSlots.default;\n \n if (!this.disabled) {\n /* istanbul ignore else: only applicable in Vue 2.5.x */\n if (defaultFn && this.$_defaultFn !== defaultFn) {\n // We only update the target component if the scoped slot\n // function is a fresh one. The new slot syntax (since Vue 2.6)\n // can cache unchanged slot functions and we want to respect that here\n this.$_target.updatedNodes = defaultFn;\n } else if (!defaultFn) {\n // We also need to be back compatible with non-scoped default slot (i.e. 2.5.x)\n this.$_target.updatedNodes = this.$slots.default;\n }\n } // Update the scoped slot function cache\n \n \n this.$_defaultFn = defaultFn;\n }\n },\n // Unmount the target\n unmountTarget: function unmountTarget() {\n this.$_target && this.$_target.$destroy();\n this.$_target = null;\n }\n },\n render: function render(h) {\n if (this.disabled) {\n var nodes = concat(this.normalizeSlot('default')).filter(identity);\n \n if (nodes.length > 0 && !nodes[0].text) {\n return nodes[0];\n }\n }\n \n return h();\n }\n });\n \n var PROP$1 = '$_bv_documentHandlers_'; // @vue/component\n \n var listenOnDocumentMixin = {\n created: function created() {\n var _this = this;\n \n /* istanbul ignore next */\n if (!isBrowser) {\n return;\n } // Declare non-reactive property\n // Object of arrays, keyed by event name,\n // where value is an array of handlers\n // Prop will be defined on client only\n \n \n this[PROP$1] = {}; // Set up our beforeDestroy handler (client only)\n \n this.$once('hook:beforeDestroy', function () {\n var items = _this[PROP$1] || {}; // Immediately delete this[PROP] to prevent the\n // listenOn/Off methods from running (which may occur\n // due to requestAnimationFrame/transition delays)\n \n delete _this[PROP$1]; // Remove all registered event handlers\n \n keys(items).forEach(function (evtName) {\n var handlers = items[evtName] || [];\n handlers.forEach(function (handler) {\n return eventOff(document, evtName, handler, EVENT_OPTIONS_NO_CAPTURE);\n });\n });\n });\n },\n methods: {\n listenDocument: function listenDocument(on, evtName, handler) {\n on ? this.listenOnDocument(evtName, handler) : this.listenOffDocument(evtName, handler);\n },\n listenOnDocument: function listenOnDocument(evtName, handler) {\n if (this[PROP$1] && isString(evtName) && isFunction(handler)) {\n this[PROP$1][evtName] = this[PROP$1][evtName] || [];\n \n if (!arrayIncludes(this[PROP$1][evtName], handler)) {\n this[PROP$1][evtName].push(handler);\n eventOn(document, evtName, handler, EVENT_OPTIONS_NO_CAPTURE);\n }\n }\n },\n listenOffDocument: function listenOffDocument(evtName, handler) {\n if (this[PROP$1] && isString(evtName) && isFunction(handler)) {\n eventOff(document, evtName, handler, EVENT_OPTIONS_NO_CAPTURE);\n this[PROP$1][evtName] = (this[PROP$1][evtName] || []).filter(function (h) {\n return h !== handler;\n });\n }\n }\n }\n };\n \n var PROP$2 = '$_bv_windowHandlers_'; // @vue/component\n \n var listenOnWindowMixin = {\n beforeCreate: function beforeCreate() {\n // Declare non-reactive property\n // Object of arrays, keyed by event name,\n // where value is an array of handlers\n this[PROP$2] = {};\n },\n beforeDestroy: function beforeDestroy() {\n if (isBrowser) {\n var items = this[PROP$2]; // Immediately delete this[PROP] to prevent the\n // listenOn/Off methods from running (which may occur\n // due to requestAnimationFrame delays)\n \n delete this[PROP$2]; // Remove all registered event handlers\n \n keys(items).forEach(function (evtName) {\n var handlers = items[evtName] || [];\n handlers.forEach(function (handler) {\n return eventOff(window, evtName, handler, EVENT_OPTIONS_NO_CAPTURE);\n });\n });\n }\n },\n methods: {\n listenWindow: function listenWindow(on, evtName, handler) {\n on ? this.listenOnWindow(evtName, handler) : this.listenOffWindow(evtName, handler);\n },\n listenOnWindow: function listenOnWindow(evtName, handler) {\n if (isBrowser && this[PROP$2] && isString(evtName) && isFunction(handler)) {\n this[PROP$2][evtName] = this[PROP$2][evtName] || [];\n \n if (!arrayIncludes(this[PROP$2][evtName], handler)) {\n this[PROP$2][evtName].push(handler);\n eventOn(window, evtName, handler, EVENT_OPTIONS_NO_CAPTURE);\n }\n }\n },\n listenOffWindow: function listenOffWindow(evtName, handler) {\n if (isBrowser && this[PROP$2] && isString(evtName) && isFunction(handler)) {\n eventOff(window, evtName, handler, EVENT_OPTIONS_NO_CAPTURE);\n this[PROP$2][evtName] = (this[PROP$2][evtName] || []).filter(function (h) {\n return h !== handler;\n });\n }\n }\n }\n };\n \n // This method returns a component's scoped style attribute name: `data-v-xxxxxxx`\n // The `_scopeId` options property is added by vue-loader when using scoped styles\n // and will be `undefined` if no scoped styles are in use\n var getScopeId = function getScopeId(vm) {\n var defaultValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n return vm ? vm.$options._scopeId || defaultValue : defaultValue;\n };\n \n var scopedStyleAttrsMixin = {\n computed: {\n scopedStyleAttrs: function scopedStyleAttrs() {\n var scopeId = getScopeId(this.$parent);\n return scopeId ? _defineProperty({}, scopeId, '') : {};\n }\n }\n };\n \n /**\n * Private ModalManager helper\n * Handles controlling modal stacking zIndexes and body adjustments/classes\n */\n // Default modal backdrop z-index\n \n var DEFAULT_ZINDEX = 1040; // Selectors for padding/margin adjustments\n \n var Selector$1 = {\n FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',\n STICKY_CONTENT: '.sticky-top',\n NAVBAR_TOGGLER: '.navbar-toggler'\n }; // @vue/component\n \n var ModalManager = /*#__PURE__*/Vue.extend({\n data: function data() {\n return {\n modals: [],\n baseZIndex: null,\n scrollbarWidth: null,\n isBodyOverflowing: false\n };\n },\n computed: {\n modalCount: function modalCount() {\n return this.modals.length;\n },\n modalsAreOpen: function modalsAreOpen() {\n return this.modalCount > 0;\n }\n },\n watch: {\n modalCount: function modalCount(newCount, oldCount) {\n if (isBrowser) {\n this.getScrollbarWidth();\n \n if (newCount > 0 && oldCount === 0) {\n // Transitioning to modal(s) open\n this.checkScrollbar();\n this.setScrollbar();\n addClass(document.body, 'modal-open');\n } else if (newCount === 0 && oldCount > 0) {\n // Transitioning to modal(s) closed\n this.resetScrollbar();\n removeClass(document.body, 'modal-open');\n }\n \n setAttr(document.body, 'data-modal-open-count', String(newCount));\n }\n },\n modals: function modals(newVal) {\n var _this = this;\n \n this.checkScrollbar();\n requestAF(function () {\n _this.updateModals(newVal || []);\n });\n }\n },\n methods: {\n // Public methods\n registerModal: function registerModal(modal) {\n var _this2 = this;\n \n // Register the modal if not already registered\n if (modal && this.modals.indexOf(modal) === -1) {\n // Add modal to modals array\n this.modals.push(modal);\n modal.$once('hook:beforeDestroy', function () {\n _this2.unregisterModal(modal);\n });\n }\n },\n unregisterModal: function unregisterModal(modal) {\n var index = this.modals.indexOf(modal);\n \n if (index > -1) {\n // Remove modal from modals array\n this.modals.splice(index, 1); // Reset the modal's data\n \n if (!(modal._isBeingDestroyed || modal._isDestroyed)) {\n this.resetModal(modal);\n }\n }\n },\n getBaseZIndex: function getBaseZIndex() {\n if (isNull(this.baseZIndex) && isBrowser) {\n // Create a temporary `div.modal-backdrop` to get computed z-index\n var div = document.createElement('div');\n div.className = 'modal-backdrop d-none';\n div.style.display = 'none';\n document.body.appendChild(div);\n this.baseZIndex = toInteger(getCS(div).zIndex, DEFAULT_ZINDEX);\n document.body.removeChild(div);\n }\n \n return this.baseZIndex || DEFAULT_ZINDEX;\n },\n getScrollbarWidth: function getScrollbarWidth() {\n if (isNull(this.scrollbarWidth) && isBrowser) {\n // Create a temporary `div.measure-scrollbar` to get computed z-index\n var div = document.createElement('div');\n div.className = 'modal-scrollbar-measure';\n document.body.appendChild(div);\n this.scrollbarWidth = getBCR(div).width - div.clientWidth;\n document.body.removeChild(div);\n }\n \n return this.scrollbarWidth || 0;\n },\n // Private methods\n updateModals: function updateModals(modals) {\n var _this3 = this;\n \n var baseZIndex = this.getBaseZIndex();\n var scrollbarWidth = this.getScrollbarWidth();\n modals.forEach(function (modal, index) {\n // We update data values on each modal\n modal.zIndex = baseZIndex + index;\n modal.scrollbarWidth = scrollbarWidth;\n modal.isTop = index === _this3.modals.length - 1;\n modal.isBodyOverflowing = _this3.isBodyOverflowing;\n });\n },\n resetModal: function resetModal(modal) {\n if (modal) {\n modal.zIndex = this.getBaseZIndex();\n modal.isTop = true;\n modal.isBodyOverflowing = false;\n }\n },\n checkScrollbar: function checkScrollbar() {\n // Determine if the body element is overflowing\n var _getBCR = getBCR(document.body),\n left = _getBCR.left,\n right = _getBCR.right;\n \n this.isBodyOverflowing = left + right < window.innerWidth;\n },\n setScrollbar: function setScrollbar() {\n var body = document.body; // Storage place to cache changes to margins and padding\n // Note: This assumes the following element types are not added to the\n // document after the modal has opened.\n \n body._paddingChangedForModal = body._paddingChangedForModal || [];\n body._marginChangedForModal = body._marginChangedForModal || [];\n \n if (this.isBodyOverflowing) {\n var scrollbarWidth = this.scrollbarWidth; // Adjust fixed content padding\n \n /* istanbul ignore next: difficult to test in JSDOM */\n \n selectAll(Selector$1.FIXED_CONTENT).forEach(function (el) {\n var actualPadding = el.style.paddingRight;\n setAttr(el, 'data-padding-right', actualPadding);\n el.style.paddingRight = \"\".concat(toFloat(getCS(el).paddingRight, 0) + scrollbarWidth, \"px\");\n \n body._paddingChangedForModal.push(el);\n }); // Adjust sticky content margin\n \n /* istanbul ignore next: difficult to test in JSDOM */\n \n selectAll(Selector$1.STICKY_CONTENT).forEach(function (el)\n /* istanbul ignore next */\n {\n var actualMargin = el.style.marginRight;\n setAttr(el, 'data-margin-right', actualMargin);\n el.style.marginRight = \"\".concat(toFloat(getCS(el).marginRight, 0) - scrollbarWidth, \"px\");\n \n body._marginChangedForModal.push(el);\n }); // Adjust <b-navbar-toggler> margin\n \n /* istanbul ignore next: difficult to test in JSDOM */\n \n selectAll(Selector$1.NAVBAR_TOGGLER).forEach(function (el)\n /* istanbul ignore next */\n {\n var actualMargin = el.style.marginRight;\n setAttr(el, 'data-margin-right', actualMargin);\n el.style.marginRight = \"\".concat(toFloat(getCS(el).marginRight, 0) + scrollbarWidth, \"px\");\n \n body._marginChangedForModal.push(el);\n }); // Adjust body padding\n \n var actualPadding = body.style.paddingRight;\n setAttr(body, 'data-padding-right', actualPadding);\n body.style.paddingRight = \"\".concat(toFloat(getCS(body).paddingRight, 0) + scrollbarWidth, \"px\");\n }\n },\n resetScrollbar: function resetScrollbar() {\n var body = document.body;\n \n if (body._paddingChangedForModal) {\n // Restore fixed content padding\n body._paddingChangedForModal.forEach(function (el) {\n /* istanbul ignore next: difficult to test in JSDOM */\n if (hasAttr(el, 'data-padding-right')) {\n el.style.paddingRight = getAttr(el, 'data-padding-right') || '';\n removeAttr(el, 'data-padding-right');\n }\n });\n }\n \n if (body._marginChangedForModal) {\n // Restore sticky content and navbar-toggler margin\n body._marginChangedForModal.forEach(function (el) {\n /* istanbul ignore next: difficult to test in JSDOM */\n if (hasAttr(el, 'data-margin-right')) {\n el.style.marginRight = getAttr(el, 'data-margin-right') || '';\n removeAttr(el, 'data-margin-right');\n }\n });\n }\n \n body._paddingChangedForModal = null;\n body._marginChangedForModal = null; // Restore body padding\n \n if (hasAttr(body, 'data-padding-right')) {\n body.style.paddingRight = getAttr(body, 'data-padding-right') || '';\n removeAttr(body, 'data-padding-right');\n }\n }\n }\n }); // Create and export our modal manager instance\n \n var modalManager = new ModalManager();\n \n var BvModalEvent = /*#__PURE__*/function (_BvEvent) {\n _inherits(BvModalEvent, _BvEvent);\n \n var _super = _createSuper(BvModalEvent);\n \n function BvModalEvent(type) {\n var _this;\n \n var eventInit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n \n _classCallCheck(this, BvModalEvent);\n \n _this = _super.call(this, type, eventInit); // Freeze our new props as readonly, but leave them enumerable\n \n defineProperties(_assertThisInitialized(_this), {\n trigger: readonlyDescriptor()\n });\n return _this;\n }\n \n _createClass(BvModalEvent, null, [{\n key: \"Defaults\",\n get: function get() {\n return _objectSpread2(_objectSpread2({}, _get(_getPrototypeOf(BvModalEvent), \"Defaults\", this)), {}, {\n trigger: null\n });\n }\n }]);\n \n return BvModalEvent;\n }(BvEvent); // Named exports\n \n var NAME$u = 'BModal'; // ObserveDom config to detect changes in modal content\n // so that we can adjust the modal padding if needed\n \n var OBSERVER_CONFIG = {\n subtree: true,\n childList: true,\n characterData: true,\n attributes: true,\n attributeFilter: ['style', 'class']\n }; // --- Props ---\n \n var props$J = {\n size: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$u, 'size');\n }\n },\n centered: {\n type: Boolean,\n default: false\n },\n scrollable: {\n type: Boolean,\n default: false\n },\n buttonSize: {\n type: String // default: ''\n \n },\n noStacking: {\n type: Boolean,\n default: false\n },\n noFade: {\n type: Boolean,\n default: false\n },\n noCloseOnBackdrop: {\n type: Boolean,\n default: false\n },\n noCloseOnEsc: {\n type: Boolean,\n default: false\n },\n noEnforceFocus: {\n type: Boolean,\n default: false\n },\n ignoreEnforceFocusSelector: {\n type: [Array, String],\n default: ''\n },\n title: {\n type: String,\n default: ''\n },\n titleHtml: {\n type: String\n },\n titleTag: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$u, 'titleTag');\n }\n },\n titleClass: {\n type: [String, Array, Object] // default: null\n \n },\n titleSrOnly: {\n type: Boolean,\n default: false\n },\n ariaLabel: {\n type: String // default: null\n \n },\n headerBgVariant: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$u, 'headerBgVariant');\n }\n },\n headerBorderVariant: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$u, 'headerBorderVariant');\n }\n },\n headerTextVariant: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$u, 'headerTextVariant');\n }\n },\n headerCloseVariant: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$u, 'headerCloseVariant');\n }\n },\n headerClass: {\n type: [String, Array, Object] // default: null\n \n },\n bodyBgVariant: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$u, 'bodyBgVariant');\n }\n },\n bodyTextVariant: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$u, 'bodyTextVariant');\n }\n },\n modalClass: {\n type: [String, Array, Object] // default: null\n \n },\n dialogClass: {\n type: [String, Array, Object] // default: null\n \n },\n contentClass: {\n type: [String, Array, Object] // default: null\n \n },\n bodyClass: {\n type: [String, Array, Object] // default: null\n \n },\n footerBgVariant: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$u, 'footerBgVariant');\n }\n },\n footerBorderVariant: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$u, 'footerBorderVariant');\n }\n },\n footerTextVariant: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$u, 'footerTextVariant');\n }\n },\n footerClass: {\n type: [String, Array, Object] // default: null\n \n },\n // TODO: Rename to `noHeader` and deprecate `hideHeader`\n hideHeader: {\n type: Boolean,\n default: false\n },\n // TODO: Rename to `noFooter` and deprecate `hideFooter`\n hideFooter: {\n type: Boolean,\n default: false\n },\n // TODO: Rename to `noHeaderClose` and deprecate `hideHeaderClose`\n hideHeaderClose: {\n type: Boolean,\n default: false\n },\n // TODO: Rename to `noBackdrop` and deprecate `hideBackdrop`\n hideBackdrop: {\n type: Boolean,\n default: false\n },\n okOnly: {\n type: Boolean,\n default: false\n },\n okDisabled: {\n type: Boolean,\n default: false\n },\n cancelDisabled: {\n type: Boolean,\n default: false\n },\n visible: {\n type: Boolean,\n default: false\n },\n returnFocus: {\n // HTML Element, CSS selector string or Vue component instance\n type: [HTMLElement, String, Object],\n default: null\n },\n headerCloseContent: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$u, 'headerCloseContent');\n }\n },\n headerCloseLabel: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$u, 'headerCloseLabel');\n }\n },\n cancelTitle: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$u, 'cancelTitle');\n }\n },\n cancelTitleHtml: {\n type: String\n },\n okTitle: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$u, 'okTitle');\n }\n },\n okTitleHtml: {\n type: String\n },\n cancelVariant: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$u, 'cancelVariant');\n }\n },\n okVariant: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$u, 'okVariant');\n }\n },\n lazy: {\n type: Boolean,\n default: false\n },\n busy: {\n type: Boolean,\n default: false\n },\n static: {\n type: Boolean,\n default: false\n },\n autoFocusButton: {\n type: String,\n default: null,\n validator\n /* istanbul ignore next */\n : function validator(val) {\n /* istanbul ignore next */\n return isUndefinedOrNull(val) || arrayIncludes(['ok', 'cancel', 'close'], val);\n }\n }\n }; // @vue/component\n \n var BModal = /*#__PURE__*/Vue.extend({\n name: NAME$u,\n mixins: [attrsMixin, idMixin, listenOnDocumentMixin, listenOnRootMixin, listenOnWindowMixin, normalizeSlotMixin, scopedStyleAttrsMixin],\n inheritAttrs: false,\n model: {\n prop: 'visible',\n event: 'change'\n },\n props: props$J,\n data: function data() {\n return {\n isHidden: true,\n // If modal should not be in document\n isVisible: false,\n // Controls modal visible state\n isTransitioning: false,\n // Used for style control\n isShow: false,\n // Used for style control\n isBlock: false,\n // Used for style control\n isOpening: false,\n // To signal that the modal is in the process of opening\n isClosing: false,\n // To signal that the modal is in the process of closing\n ignoreBackdropClick: false,\n // Used to signify if click out listener should ignore the click\n isModalOverflowing: false,\n return_focus: this.returnFocus || null,\n // The following items are controlled by the modalManager instance\n scrollbarWidth: 0,\n zIndex: modalManager.getBaseZIndex(),\n isTop: true,\n isBodyOverflowing: false\n };\n },\n computed: {\n modalId: function modalId() {\n return this.safeId();\n },\n modalOuterId: function modalOuterId() {\n return this.safeId('__BV_modal_outer_');\n },\n modalHeaderId: function modalHeaderId() {\n return this.safeId('__BV_modal_header_');\n },\n modalBodyId: function modalBodyId() {\n return this.safeId('__BV_modal_body_');\n },\n modalTitleId: function modalTitleId() {\n return this.safeId('__BV_modal_title_');\n },\n modalContentId: function modalContentId() {\n return this.safeId('__BV_modal_content_');\n },\n modalFooterId: function modalFooterId() {\n return this.safeId('__BV_modal_footer_');\n },\n modalBackdropId: function modalBackdropId() {\n return this.safeId('__BV_modal_backdrop_');\n },\n modalClasses: function modalClasses() {\n return [{\n fade: !this.noFade,\n show: this.isShow\n }, this.modalClass];\n },\n modalStyles: function modalStyles() {\n var sbWidth = \"\".concat(this.scrollbarWidth, \"px\");\n return {\n paddingLeft: !this.isBodyOverflowing && this.isModalOverflowing ? sbWidth : '',\n paddingRight: this.isBodyOverflowing && !this.isModalOverflowing ? sbWidth : '',\n // Needed to fix issue https://github.com/bootstrap-vue/bootstrap-vue/issues/3457\n // Even though we are using v-show, we must ensure 'none' is restored in the styles\n display: this.isBlock ? 'block' : 'none'\n };\n },\n dialogClasses: function dialogClasses() {\n var _ref;\n \n return [(_ref = {}, _defineProperty(_ref, \"modal-\".concat(this.size), this.size), _defineProperty(_ref, 'modal-dialog-centered', this.centered), _defineProperty(_ref, 'modal-dialog-scrollable', this.scrollable), _ref), this.dialogClass];\n },\n headerClasses: function headerClasses() {\n var _ref2;\n \n return [(_ref2 = {}, _defineProperty(_ref2, \"bg-\".concat(this.headerBgVariant), this.headerBgVariant), _defineProperty(_ref2, \"text-\".concat(this.headerTextVariant), this.headerTextVariant), _defineProperty(_ref2, \"border-\".concat(this.headerBorderVariant), this.headerBorderVariant), _ref2), this.headerClass];\n },\n titleClasses: function titleClasses() {\n return [{\n 'sr-only': this.titleSrOnly\n }, this.titleClass];\n },\n bodyClasses: function bodyClasses() {\n var _ref3;\n \n return [(_ref3 = {}, _defineProperty(_ref3, \"bg-\".concat(this.bodyBgVariant), this.bodyBgVariant), _defineProperty(_ref3, \"text-\".concat(this.bodyTextVariant), this.bodyTextVariant), _ref3), this.bodyClass];\n },\n footerClasses: function footerClasses() {\n var _ref4;\n \n return [(_ref4 = {}, _defineProperty(_ref4, \"bg-\".concat(this.footerBgVariant), this.footerBgVariant), _defineProperty(_ref4, \"text-\".concat(this.footerTextVariant), this.footerTextVariant), _defineProperty(_ref4, \"border-\".concat(this.footerBorderVariant), this.footerBorderVariant), _ref4), this.footerClass];\n },\n modalOuterStyle: function modalOuterStyle() {\n // Styles needed for proper stacking of modals\n return {\n position: 'absolute',\n zIndex: this.zIndex\n };\n },\n slotScope: function slotScope() {\n return {\n ok: this.onOk,\n cancel: this.onCancel,\n close: this.onClose,\n hide: this.hide,\n visible: this.isVisible\n };\n },\n computeIgnoreEnforceFocusSelector: function computeIgnoreEnforceFocusSelector() {\n // Normalize to an single selector with selectors separated by `,`\n return concat(this.ignoreEnforceFocusSelector).filter(identity).join(',').trim();\n },\n computedAttrs: function computedAttrs() {\n // If the parent has a scoped style attribute, and the modal\n // is portalled, add the scoped attribute to the modal wrapper\n var scopedStyleAttrs = !this.static ? this.scopedStyleAttrs : {};\n return _objectSpread2(_objectSpread2(_objectSpread2({}, scopedStyleAttrs), this.bvAttrs), {}, {\n id: this.modalOuterId\n });\n },\n computedModalAttrs: function computedModalAttrs() {\n var isVisible = this.isVisible,\n ariaLabel = this.ariaLabel;\n return {\n id: this.modalId,\n role: 'dialog',\n 'aria-hidden': isVisible ? null : 'true',\n 'aria-modal': isVisible ? 'true' : null,\n 'aria-label': ariaLabel,\n 'aria-labelledby': this.hideHeader || ariaLabel || // TODO: Rename slot to `title` and deprecate `modal-title`\n !(this.hasNormalizedSlot('modal-title') || this.titleHtml || this.title) ? null : this.modalTitleId,\n 'aria-describedby': this.modalBodyId\n };\n }\n },\n watch: {\n visible: function visible(newVal, oldVal) {\n if (newVal !== oldVal) {\n this[newVal ? 'show' : 'hide']();\n }\n }\n },\n created: function created() {\n // Define non-reactive properties\n this.$_observer = null;\n },\n mounted: function mounted() {\n // Set initial z-index as queried from the DOM\n this.zIndex = modalManager.getBaseZIndex(); // Listen for events from others to either open or close ourselves\n // and listen to all modals to enable/disable enforce focus\n \n this.listenOnRoot('bv::show::modal', this.showHandler);\n this.listenOnRoot('bv::hide::modal', this.hideHandler);\n this.listenOnRoot('bv::toggle::modal', this.toggleHandler); // Listen for `bv:modal::show events`, and close ourselves if the\n // opening modal not us\n \n this.listenOnRoot('bv::modal::show', this.modalListener); // Initially show modal?\n \n if (this.visible === true) {\n this.$nextTick(this.show);\n }\n },\n beforeDestroy: function beforeDestroy() {\n // Ensure everything is back to normal\n this.setObserver(false);\n \n if (this.isVisible) {\n this.isVisible = false;\n this.isShow = false;\n this.isTransitioning = false;\n }\n },\n methods: {\n setObserver: function setObserver() {\n var on = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n this.$_observer && this.$_observer.disconnect();\n this.$_observer = null;\n \n if (on) {\n this.$_observer = observeDom(this.$refs.content, this.checkModalOverflow.bind(this), OBSERVER_CONFIG);\n }\n },\n // Private method to update the v-model\n updateModel: function updateModel(val) {\n if (val !== this.visible) {\n this.$emit('change', val);\n }\n },\n // Private method to create a BvModalEvent object\n buildEvent: function buildEvent(type) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return new BvModalEvent(type, _objectSpread2(_objectSpread2({\n // Default options\n cancelable: false,\n target: this.$refs.modal || this.$el || null,\n relatedTarget: null,\n trigger: null\n }, options), {}, {\n // Options that can't be overridden\n vueTarget: this,\n componentId: this.modalId\n }));\n },\n // Public method to show modal\n show: function show() {\n if (this.isVisible || this.isOpening) {\n // If already open, or in the process of opening, do nothing\n \n /* istanbul ignore next */\n return;\n }\n /* istanbul ignore next */\n \n \n if (this.isClosing) {\n // If we are in the process of closing, wait until hidden before re-opening\n \n /* istanbul ignore next */\n this.$once('hidden', this.show);\n /* istanbul ignore next */\n \n return;\n }\n \n this.isOpening = true; // Set the element to return focus to when closed\n \n this.return_focus = this.return_focus || this.getActiveElement();\n var showEvt = this.buildEvent('show', {\n cancelable: true\n });\n this.emitEvent(showEvt); // Don't show if canceled\n \n if (showEvt.defaultPrevented || this.isVisible) {\n this.isOpening = false; // Ensure the v-model reflects the current state\n \n this.updateModel(false);\n return;\n } // Show the modal\n \n \n this.doShow();\n },\n // Public method to hide modal\n hide: function hide() {\n var trigger = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n \n if (!this.isVisible || this.isClosing) {\n /* istanbul ignore next */\n return;\n }\n \n this.isClosing = true;\n var hideEvt = this.buildEvent('hide', {\n cancelable: trigger !== 'FORCE',\n trigger: trigger || null\n }); // We emit specific event for one of the three built-in buttons\n \n if (trigger === 'ok') {\n this.$emit('ok', hideEvt);\n } else if (trigger === 'cancel') {\n this.$emit('cancel', hideEvt);\n } else if (trigger === 'headerclose') {\n this.$emit('close', hideEvt);\n }\n \n this.emitEvent(hideEvt); // Hide if not canceled\n \n if (hideEvt.defaultPrevented || !this.isVisible) {\n this.isClosing = false; // Ensure v-model reflects current state\n \n this.updateModel(true);\n return;\n } // Stop observing for content changes\n \n \n this.setObserver(false); // Trigger the hide transition\n \n this.isVisible = false; // Update the v-model\n \n this.updateModel(false);\n },\n // Public method to toggle modal visibility\n toggle: function toggle(triggerEl) {\n if (triggerEl) {\n this.return_focus = triggerEl;\n }\n \n if (this.isVisible) {\n this.hide('toggle');\n } else {\n this.show();\n }\n },\n // Private method to get the current document active element\n getActiveElement: function getActiveElement$1() {\n // Returning focus to `document.body` may cause unwanted scrolls,\n // so we exclude setting focus on body\n var activeElement = getActiveElement(isBrowser ? [document.body] : []); // Preset the fallback return focus value if it is not set\n // `document.activeElement` should be the trigger element that was clicked or\n // in the case of using the v-model, which ever element has current focus\n // Will be overridden by some commands such as toggle, etc.\n // Note: On IE 11, `document.activeElement` may be `null`\n // So we test it for truthiness first\n // https://github.com/bootstrap-vue/bootstrap-vue/issues/3206\n \n \n return activeElement && activeElement.focus ? activeElement : null;\n },\n // Private method to finish showing modal\n doShow: function doShow() {\n var _this = this;\n \n /* istanbul ignore next: commenting out for now until we can test stacking */\n if (modalManager.modalsAreOpen && this.noStacking) {\n // If another modal(s) is already open, wait for it(them) to close\n this.listenOnRootOnce('bv::modal::hidden', this.doShow);\n return;\n }\n \n modalManager.registerModal(this); // Place modal in DOM\n \n this.isHidden = false;\n this.$nextTick(function () {\n // We do this in `$nextTick()` to ensure the modal is in DOM first\n // before we show it\n _this.isVisible = true;\n _this.isOpening = false; // Update the v-model\n \n _this.updateModel(true);\n \n _this.$nextTick(function () {\n // Observe changes in modal content and adjust if necessary\n // In a `$nextTick()` in case modal content is lazy\n _this.setObserver(true);\n });\n });\n },\n // Transition handlers\n onBeforeEnter: function onBeforeEnter() {\n this.isTransitioning = true;\n this.setResizeEvent(true);\n },\n onEnter: function onEnter() {\n var _this2 = this;\n \n this.isBlock = true; // We add the `show` class 1 frame later\n // `requestAF()` runs the callback before the next repaint, so we need\n // two calls to guarantee the next frame has been rendered\n \n requestAF(function () {\n requestAF(function () {\n _this2.isShow = true;\n });\n });\n },\n onAfterEnter: function onAfterEnter() {\n var _this3 = this;\n \n this.checkModalOverflow();\n this.isTransitioning = false; // We use `requestAF()` to allow transition hooks to complete\n // before passing control over to the other handlers\n // This will allow users to not have to use `$nextTick()` or `requestAF()`\n // when trying to pre-focus an element\n \n requestAF(function () {\n _this3.emitEvent(_this3.buildEvent('shown'));\n \n _this3.setEnforceFocus(true);\n \n _this3.$nextTick(function () {\n // Delayed in a `$nextTick()` to allow users time to pre-focus\n // an element if the wish\n _this3.focusFirst();\n });\n });\n },\n onBeforeLeave: function onBeforeLeave() {\n this.isTransitioning = true;\n this.setResizeEvent(false);\n this.setEnforceFocus(false);\n },\n onLeave: function onLeave() {\n // Remove the 'show' class\n this.isShow = false;\n },\n onAfterLeave: function onAfterLeave() {\n var _this4 = this;\n \n this.isBlock = false;\n this.isTransitioning = false;\n this.isModalOverflowing = false;\n this.isHidden = true;\n this.$nextTick(function () {\n _this4.isClosing = false;\n modalManager.unregisterModal(_this4);\n \n _this4.returnFocusTo(); // TODO: Need to find a way to pass the `trigger` property\n // to the `hidden` event, not just only the `hide` event\n \n \n _this4.emitEvent(_this4.buildEvent('hidden'));\n });\n },\n // Event emitter\n emitEvent: function emitEvent(bvModalEvt) {\n var type = bvModalEvt.type; // We emit on root first incase a global listener wants to cancel\n // the event first before the instance emits its event\n \n this.emitOnRoot(\"bv::modal::\".concat(type), bvModalEvt, bvModalEvt.componentId);\n this.$emit(type, bvModalEvt);\n },\n // UI event handlers\n onDialogMousedown: function onDialogMousedown() {\n var _this5 = this;\n \n // Watch to see if the matching mouseup event occurs outside the dialog\n // And if it does, cancel the clickOut handler\n var modal = this.$refs.modal;\n \n var onceModalMouseup = function onceModalMouseup(evt) {\n eventOff(modal, 'mouseup', onceModalMouseup, EVENT_OPTIONS_NO_CAPTURE);\n \n if (evt.target === modal) {\n _this5.ignoreBackdropClick = true;\n }\n };\n \n eventOn(modal, 'mouseup', onceModalMouseup, EVENT_OPTIONS_NO_CAPTURE);\n },\n onClickOut: function onClickOut(evt) {\n if (this.ignoreBackdropClick) {\n // Click was initiated inside the modal content, but finished outside.\n // Set by the above onDialogMousedown handler\n this.ignoreBackdropClick = false;\n return;\n } // Do nothing if not visible, backdrop click disabled, or element\n // that generated click event is no longer in document body\n \n \n if (!this.isVisible || this.noCloseOnBackdrop || !contains(document.body, evt.target)) {\n return;\n } // If backdrop clicked, hide modal\n \n \n if (!contains(this.$refs.content, evt.target)) {\n this.hide('backdrop');\n }\n },\n onOk: function onOk() {\n this.hide('ok');\n },\n onCancel: function onCancel() {\n this.hide('cancel');\n },\n onClose: function onClose() {\n this.hide('headerclose');\n },\n onEsc: function onEsc(evt) {\n // If ESC pressed, hide modal\n if (evt.keyCode === KEY_CODES.ESC && this.isVisible && !this.noCloseOnEsc) {\n this.hide('esc');\n }\n },\n // Document focusin listener\n focusHandler: function focusHandler(evt) {\n // If focus leaves modal content, bring it back\n var content = this.$refs.content;\n var target = evt.target;\n \n if (this.noEnforceFocus || !this.isTop || !this.isVisible || !content || document === target || contains(content, target) || this.computeIgnoreEnforceFocusSelector && closest(this.computeIgnoreEnforceFocusSelector, target, true)) {\n return;\n }\n \n var tabables = getTabables(this.$refs.content);\n var _this$$refs = this.$refs,\n bottomTrap = _this$$refs.bottomTrap,\n topTrap = _this$$refs.topTrap;\n \n if (bottomTrap && target === bottomTrap) {\n // If user pressed TAB out of modal into our bottom trab trap element\n // Find the first tabable element in the modal content and focus it\n if (attemptFocus(tabables[0])) {\n // Focus was successful\n return;\n }\n } else if (topTrap && target === topTrap) {\n // If user pressed CTRL-TAB out of modal and into our top tab trap element\n // Find the last tabable element in the modal content and focus it\n if (attemptFocus(tabables[tabables.length - 1])) {\n // Focus was successful\n return;\n }\n } // Otherwise focus the modal content container\n \n \n attemptFocus(content, {\n preventScroll: true\n });\n },\n // Turn on/off focusin listener\n setEnforceFocus: function setEnforceFocus(on) {\n this.listenDocument(on, 'focusin', this.focusHandler);\n },\n // Resize listener\n setResizeEvent: function setResizeEvent(on) {\n this.listenWindow(on, 'resize', this.checkModalOverflow);\n this.listenWindow(on, 'orientationchange', this.checkModalOverflow);\n },\n // Root listener handlers\n showHandler: function showHandler(id, triggerEl) {\n if (id === this.modalId) {\n this.return_focus = triggerEl || this.getActiveElement();\n this.show();\n }\n },\n hideHandler: function hideHandler(id) {\n if (id === this.modalId) {\n this.hide('event');\n }\n },\n toggleHandler: function toggleHandler(id, triggerEl) {\n if (id === this.modalId) {\n this.toggle(triggerEl);\n }\n },\n modalListener: function modalListener(bvEvt) {\n // If another modal opens, close this one if stacking not permitted\n if (this.noStacking && bvEvt.vueTarget !== this) {\n this.hide();\n }\n },\n // Focus control handlers\n focusFirst: function focusFirst() {\n var _this6 = this;\n \n // Don't try and focus if we are SSR\n if (isBrowser) {\n requestAF(function () {\n var modal = _this6.$refs.modal;\n var content = _this6.$refs.content;\n \n var activeElement = _this6.getActiveElement(); // If the modal contains the activeElement, we don't do anything\n \n \n if (modal && content && !(activeElement && contains(content, activeElement))) {\n var ok = _this6.$refs['ok-button'];\n var cancel = _this6.$refs['cancel-button'];\n var close = _this6.$refs['close-button']; // Focus the appropriate button or modal content wrapper\n \n var autoFocus = _this6.autoFocusButton;\n /* istanbul ignore next */\n \n var el = autoFocus === 'ok' && ok ? ok.$el || ok : autoFocus === 'cancel' && cancel ? cancel.$el || cancel : autoFocus === 'close' && close ? close.$el || close : content; // Focus the element\n \n attemptFocus(el);\n \n if (el === content) {\n // Make sure top of modal is showing (if longer than the viewport)\n _this6.$nextTick(function () {\n modal.scrollTop = 0;\n });\n }\n }\n });\n }\n },\n returnFocusTo: function returnFocusTo() {\n // Prefer `returnFocus` prop over event specified\n // `return_focus` value\n var el = this.returnFocus || this.return_focus || null;\n this.return_focus = null;\n this.$nextTick(function () {\n // Is el a string CSS selector?\n el = isString(el) ? select(el) : el;\n \n if (el) {\n // Possibly could be a component reference\n el = el.$el || el;\n attemptFocus(el);\n }\n });\n },\n checkModalOverflow: function checkModalOverflow() {\n if (this.isVisible) {\n var modal = this.$refs.modal;\n this.isModalOverflowing = modal.scrollHeight > document.documentElement.clientHeight;\n }\n },\n makeModal: function makeModal(h) {\n // Modal header\n var $header = h();\n \n if (!this.hideHeader) {\n // TODO: Rename slot to `header` and deprecate `modal-header`\n var $modalHeader = this.normalizeSlot('modal-header', this.slotScope);\n \n if (!$modalHeader) {\n var $closeButton = h();\n \n if (!this.hideHeaderClose) {\n $closeButton = h(BButtonClose, {\n props: {\n content: this.headerCloseContent,\n disabled: this.isTransitioning,\n ariaLabel: this.headerCloseLabel,\n textVariant: this.headerCloseVariant || this.headerTextVariant\n },\n on: {\n click: this.onClose\n },\n ref: 'close-button'\n }, // TODO: Rename slot to `header-close` and deprecate `modal-header-close`\n [this.normalizeSlot('modal-header-close')]);\n }\n \n $modalHeader = [h(this.titleTag, {\n staticClass: 'modal-title',\n class: this.titleClasses,\n attrs: {\n id: this.modalTitleId\n },\n // TODO: Rename slot to `title` and deprecate `modal-title`\n domProps: this.hasNormalizedSlot('modal-title') ? {} : htmlOrText(this.titleHtml, this.title)\n }, // TODO: Rename slot to `title` and deprecate `modal-title`\n [this.normalizeSlot('modal-title', this.slotScope)]), $closeButton];\n }\n \n $header = h('header', {\n staticClass: 'modal-header',\n class: this.headerClasses,\n attrs: {\n id: this.modalHeaderId\n },\n ref: 'header'\n }, [$modalHeader]);\n } // Modal body\n \n \n var $body = h('div', {\n staticClass: 'modal-body',\n class: this.bodyClasses,\n attrs: {\n id: this.modalBodyId\n },\n ref: 'body'\n }, this.normalizeSlot('default', this.slotScope)); // Modal footer\n \n var $footer = h();\n \n if (!this.hideFooter) {\n // TODO: Rename slot to `footer` and deprecate `modal-footer`\n var $modalFooter = this.normalizeSlot('modal-footer', this.slotScope);\n \n if (!$modalFooter) {\n var $cancelButton = h();\n \n if (!this.okOnly) {\n $cancelButton = h(BButton, {\n props: {\n variant: this.cancelVariant,\n size: this.buttonSize,\n disabled: this.cancelDisabled || this.busy || this.isTransitioning\n },\n // TODO: Rename slot to `cancel-button` and deprecate `modal-cancel`\n domProps: this.hasNormalizedSlot('modal-cancel') ? {} : htmlOrText(this.cancelTitleHtml, this.cancelTitle),\n on: {\n click: this.onCancel\n },\n ref: 'cancel-button'\n }, // TODO: Rename slot to `cancel-button` and deprecate `modal-cancel`\n this.normalizeSlot('modal-cancel'));\n }\n \n var $okButton = h(BButton, {\n props: {\n variant: this.okVariant,\n size: this.buttonSize,\n disabled: this.okDisabled || this.busy || this.isTransitioning\n },\n // TODO: Rename slot to `ok-button` and deprecate `modal-ok`\n domProps: this.hasNormalizedSlot('modal-ok') ? {} : htmlOrText(this.okTitleHtml, this.okTitle),\n on: {\n click: this.onOk\n },\n ref: 'ok-button'\n }, // TODO: Rename slot to `ok-button` and deprecate `modal-ok`\n this.normalizeSlot('modal-ok'));\n $modalFooter = [$cancelButton, $okButton];\n }\n \n $footer = h('footer', {\n staticClass: 'modal-footer',\n class: this.footerClasses,\n attrs: {\n id: this.modalFooterId\n },\n ref: 'footer'\n }, [$modalFooter]);\n } // Assemble modal content\n \n \n var $modalContent = h('div', {\n staticClass: 'modal-content',\n class: this.contentClass,\n attrs: {\n id: this.modalContentId,\n tabindex: '-1'\n },\n ref: 'content'\n }, [$header, $body, $footer]); // Tab traps to prevent page from scrolling to next element in\n // tab index during enforce-focus tab cycle\n \n var $tabTrapTop = h();\n var $tabTrapBottom = h();\n \n if (this.isVisible && !this.noEnforceFocus) {\n $tabTrapTop = h('span', {\n ref: 'topTrap',\n attrs: {\n tabindex: '0'\n }\n });\n $tabTrapBottom = h('span', {\n ref: 'bottomTrap',\n attrs: {\n tabindex: '0'\n }\n });\n } // Modal dialog wrapper\n \n \n var $modalDialog = h('div', {\n staticClass: 'modal-dialog',\n class: this.dialogClasses,\n on: {\n mousedown: this.onDialogMousedown\n },\n ref: 'dialog'\n }, [$tabTrapTop, $modalContent, $tabTrapBottom]); // Modal\n \n var $modal = h('div', {\n staticClass: 'modal',\n class: this.modalClasses,\n style: this.modalStyles,\n attrs: this.computedModalAttrs,\n on: {\n keydown: this.onEsc,\n click: this.onClickOut\n },\n directives: [{\n name: 'show',\n value: this.isVisible\n }],\n ref: 'modal'\n }, [$modalDialog]); // Wrap modal in transition\n // Sadly, we can't use `BVTransition` here due to the differences in\n // transition durations for `.modal` and `.modal-dialog`\n // At least until https://github.com/vuejs/vue/issues/9986 is resolved\n \n $modal = h('transition', {\n props: {\n enterClass: '',\n enterToClass: '',\n enterActiveClass: '',\n leaveClass: '',\n leaveActiveClass: '',\n leaveToClass: ''\n },\n on: {\n beforeEnter: this.onBeforeEnter,\n enter: this.onEnter,\n afterEnter: this.onAfterEnter,\n beforeLeave: this.onBeforeLeave,\n leave: this.onLeave,\n afterLeave: this.onAfterLeave\n }\n }, [$modal]); // Modal backdrop\n \n var $backdrop = h();\n \n if (!this.hideBackdrop && this.isVisible) {\n $backdrop = h('div', {\n staticClass: 'modal-backdrop',\n attrs: {\n id: this.modalBackdropId\n }\n }, // TODO: Rename slot to `backdrop` and deprecate `modal-backdrop`\n this.normalizeSlot('modal-backdrop'));\n }\n \n $backdrop = h(BVTransition, {\n props: {\n noFade: this.noFade\n }\n }, [$backdrop]); // Assemble modal and backdrop in an outer <div>\n \n return h('div', {\n style: this.modalOuterStyle,\n attrs: this.computedAttrs,\n key: \"modal-outer-\".concat(this._uid)\n }, [$modal, $backdrop]);\n }\n },\n render: function render(h) {\n if (this.static) {\n return this.lazy && this.isHidden ? h() : this.makeModal(h);\n } else {\n return this.isHidden ? h() : h(BTransporterSingle, [this.makeModal(h)]);\n }\n }\n });\n \n var EVENT_SHOW = 'bv::show::modal'; // Prop name we use to store info on root element\n \n var PROPERTY = '__bv_modal_directive__';\n \n var getTarget = function getTarget(_ref) {\n var _ref$modifiers = _ref.modifiers,\n modifiers = _ref$modifiers === void 0 ? {} : _ref$modifiers,\n arg = _ref.arg,\n value = _ref.value;\n // Try value, then arg, otherwise pick last modifier\n return isString(value) ? value : isString(arg) ? arg : keys(modifiers).reverse()[0];\n };\n \n var getTriggerElement = function getTriggerElement(el) {\n // If root element is a dropdown-item or nav-item, we\n // need to target the inner link or button instead\n return el && matches(el, '.dropdown-menu > li, li.nav-item') ? select('a, button', el) || el : el;\n };\n \n var setRole = function setRole(trigger) {\n // Ensure accessibility on non button elements\n if (trigger && trigger.tagName !== 'BUTTON') {\n // Only set a role if the trigger element doesn't have one\n if (!hasAttr(trigger, 'role')) {\n setAttr(trigger, 'role', 'button');\n } // Add a tabindex is not a button or link, and tabindex is not provided\n \n \n if (trigger.tagName !== 'A' && !hasAttr(trigger, 'tabindex')) {\n setAttr(trigger, 'tabindex', '0');\n }\n }\n };\n \n var bind$1 = function bind(el, binding, vnode) {\n var target = getTarget(binding);\n var trigger = getTriggerElement(el);\n \n if (target && trigger) {\n var handler = function handler(evt) {\n // `currentTarget` is the element with the listener on it\n var currentTarget = evt.currentTarget;\n \n if (!isDisabled(currentTarget)) {\n var type = evt.type;\n var key = evt.keyCode; // Open modal only if trigger is not disabled\n \n if (type === 'click' || type === 'keydown' && (key === KEY_CODES.ENTER || key === KEY_CODES.SPACE)) {\n vnode.context.$root.$emit(EVENT_SHOW, target, currentTarget);\n }\n }\n };\n \n el[PROPERTY] = {\n handler: handler,\n target: target,\n trigger: trigger\n }; // If element is not a button, we add `role=\"button\"` for accessibility\n \n setRole(trigger); // Listen for click events\n \n eventOn(trigger, 'click', handler, EVENT_OPTIONS_PASSIVE);\n \n if (trigger.tagName !== 'BUTTON' && getAttr(trigger, 'role') === 'button') {\n // If trigger isn't a button but has role button,\n // we also listen for `keydown.space` && `keydown.enter`\n eventOn(trigger, 'keydown', handler, EVENT_OPTIONS_PASSIVE);\n }\n }\n };\n \n var unbind$1 = function unbind(el) {\n var oldProp = el[PROPERTY] || {};\n var trigger = oldProp.trigger;\n var handler = oldProp.handler;\n \n if (trigger && handler) {\n eventOff(trigger, 'click', handler, EVENT_OPTIONS_PASSIVE);\n eventOff(trigger, 'keydown', handler, EVENT_OPTIONS_PASSIVE);\n eventOff(el, 'click', handler, EVENT_OPTIONS_PASSIVE);\n eventOff(el, 'keydown', handler, EVENT_OPTIONS_PASSIVE);\n }\n \n delete el[PROPERTY];\n };\n \n var componentUpdated$1 = function componentUpdated(el, binding, vnode) {\n var oldProp = el[PROPERTY] || {};\n var target = getTarget(binding);\n var trigger = getTriggerElement(el);\n \n if (target !== oldProp.target || trigger !== oldProp.trigger) {\n // We bind and rebind if the target or trigger changes\n unbind$1(el);\n bind$1(el, binding, vnode);\n } // If trigger element is not a button, ensure `role=\"button\"`\n // is still set for accessibility\n \n \n setRole(trigger);\n };\n \n var updated = function updated() {};\n /*\n * Export our directive\n */\n \n \n var VBModal = {\n inserted: componentUpdated$1,\n updated: updated,\n componentUpdated: componentUpdated$1,\n unbind: unbind$1\n };\n \n var PROP_NAME$2 = '$bvModal';\n var PROP_NAME_PRIV = '_bv__modal'; // Base modal props that are allowed\n // Some may be ignored or overridden on some message boxes\n // Prop ID is allowed, but really only should be used for testing\n // We need to add it in explicitly as it comes from the `idMixin`\n \n var BASE_PROPS = ['id'].concat(_toConsumableArray(keys(omit(props$J, ['busy', 'lazy', 'noStacking', \"static\", 'visible'])))); // Fallback event resolver (returns undefined)\n \n var defaultResolver = function defaultResolver() {}; // Map prop names to modal slot names\n \n \n var propsToSlots = {\n msgBoxContent: 'default',\n title: 'modal-title',\n okTitle: 'modal-ok',\n cancelTitle: 'modal-cancel'\n }; // --- Utility methods ---\n // Method to filter only recognized props that are not undefined\n \n var filterOptions = function filterOptions(options) {\n return BASE_PROPS.reduce(function (memo, key) {\n if (!isUndefined(options[key])) {\n memo[key] = options[key];\n }\n \n return memo;\n }, {});\n }; // Method to install `$bvModal` VM injection\n \n \n var plugin = function plugin(Vue) {\n // Create a private sub-component that extends BModal\n // which self-destructs after hidden\n // @vue/component\n var BMsgBox = Vue.extend({\n name: 'BMsgBox',\n extends: BModal,\n destroyed: function destroyed() {\n // Make sure we not in document any more\n if (this.$el && this.$el.parentNode) {\n this.$el.parentNode.removeChild(this.$el);\n }\n },\n mounted: function mounted() {\n var _this = this;\n \n // Self destruct handler\n var handleDestroy = function handleDestroy() {\n var self = _this;\n \n _this.$nextTick(function () {\n // In a `setTimeout()` to release control back to application\n setTimeout(function () {\n return self.$destroy();\n }, 0);\n });\n }; // Self destruct if parent destroyed\n \n \n this.$parent.$once('hook:destroyed', handleDestroy); // Self destruct after hidden\n \n this.$once('hidden', handleDestroy); // Self destruct on route change\n \n /* istanbul ignore if */\n \n if (this.$router && this.$route) {\n // Destroy ourselves if route changes\n \n /* istanbul ignore next */\n this.$once('hook:beforeDestroy', this.$watch('$router', handleDestroy));\n } // Show the `BMsgBox`\n \n \n this.show();\n }\n }); // Method to generate the on-demand modal message box\n // Returns a promise that resolves to a value returned by the resolve\n \n var asyncMsgBox = function asyncMsgBox($parent, props) {\n var resolver = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : defaultResolver;\n \n if (warnNotClient(PROP_NAME$2) || warnNoPromiseSupport(PROP_NAME$2)) {\n /* istanbul ignore next */\n return;\n } // Create an instance of `BMsgBox` component\n \n \n var msgBox = new BMsgBox({\n // We set parent as the local VM so these modals can emit events on\n // the app `$root`, as needed by things like tooltips and popovers\n // And it helps to ensure `BMsgBox` is destroyed when parent is destroyed\n parent: $parent,\n // Preset the prop values\n propsData: _objectSpread2(_objectSpread2(_objectSpread2({}, filterOptions(getComponentConfig('BModal') || {})), {}, {\n // Defaults that user can override\n hideHeaderClose: true,\n hideHeader: !(props.title || props.titleHtml)\n }, omit(props, keys(propsToSlots))), {}, {\n // Props that can't be overridden\n lazy: false,\n busy: false,\n visible: false,\n noStacking: false,\n noEnforceFocus: false\n })\n }); // Convert certain props to scoped slots\n \n keys(propsToSlots).forEach(function (prop) {\n if (!isUndefined(props[prop])) {\n // Can be a string, or array of VNodes.\n // Alternatively, user can use HTML version of prop to pass an HTML string.\n msgBox.$slots[propsToSlots[prop]] = concat(props[prop]);\n }\n }); // Return a promise that resolves when hidden, or rejects on destroyed\n \n return new Promise(function (resolve, reject) {\n var resolved = false;\n msgBox.$once('hook:destroyed', function () {\n if (!resolved) {\n /* istanbul ignore next */\n reject(new Error('BootstrapVue MsgBox destroyed before resolve'));\n }\n });\n msgBox.$on('hide', function (bvModalEvt) {\n if (!bvModalEvt.defaultPrevented) {\n var result = resolver(bvModalEvt); // If resolver didn't cancel hide, we resolve\n \n if (!bvModalEvt.defaultPrevented) {\n resolved = true;\n resolve(result);\n }\n }\n }); // Create a mount point (a DIV) and mount the msgBo which will trigger it to show\n \n var div = document.createElement('div');\n document.body.appendChild(div);\n msgBox.$mount(div);\n });\n }; // Private utility method to open a user defined message box and returns a promise.\n // Not to be used directly by consumers, as this method may change calling syntax\n \n \n var makeMsgBox = function makeMsgBox($parent, content) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var resolver = arguments.length > 3 ? arguments[3] : undefined;\n \n if (!content || warnNoPromiseSupport(PROP_NAME$2) || warnNotClient(PROP_NAME$2) || !isFunction(resolver)) {\n /* istanbul ignore next */\n return;\n }\n \n return asyncMsgBox($parent, _objectSpread2(_objectSpread2({}, filterOptions(options)), {}, {\n msgBoxContent: content\n }), resolver);\n }; // BvModal instance class\n \n \n var BvModal = /*#__PURE__*/function () {\n function BvModal(vm) {\n _classCallCheck(this, BvModal);\n \n // Assign the new properties to this instance\n assign(this, {\n _vm: vm,\n _root: vm.$root\n }); // Set these properties as read-only and non-enumerable\n \n defineProperties(this, {\n _vm: readonlyDescriptor(),\n _root: readonlyDescriptor()\n });\n } // --- Instance methods ---\n // Show modal with the specified ID args are for future use\n \n \n _createClass(BvModal, [{\n key: \"show\",\n value: function show(id) {\n if (id && this._root) {\n var _this$_root;\n \n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n \n (_this$_root = this._root).$emit.apply(_this$_root, ['bv::show::modal', id].concat(args));\n }\n } // Hide modal with the specified ID args are for future use\n \n }, {\n key: \"hide\",\n value: function hide(id) {\n if (id && this._root) {\n var _this$_root2;\n \n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n \n (_this$_root2 = this._root).$emit.apply(_this$_root2, ['bv::hide::modal', id].concat(args));\n }\n } // The following methods require Promise support!\n // IE 11 and others do not support Promise natively, so users\n // should have a Polyfill loaded (which they need anyways for IE 11 support)\n // Open a message box with OK button only and returns a promise\n \n }, {\n key: \"msgBoxOk\",\n value: function msgBoxOk(message) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n \n // Pick the modal props we support from options\n var props = _objectSpread2(_objectSpread2({}, options), {}, {\n // Add in overrides and our content prop\n okOnly: true,\n okDisabled: false,\n hideFooter: false,\n msgBoxContent: message\n });\n \n return makeMsgBox(this._vm, message, props, function () {\n // Always resolve to true for OK\n return true;\n });\n } // Open a message box modal with OK and CANCEL buttons\n // and returns a promise\n \n }, {\n key: \"msgBoxConfirm\",\n value: function msgBoxConfirm(message) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n \n // Set the modal props we support from options\n var props = _objectSpread2(_objectSpread2({}, options), {}, {\n // Add in overrides and our content prop\n okOnly: false,\n okDisabled: false,\n cancelDisabled: false,\n hideFooter: false\n });\n \n return makeMsgBox(this._vm, message, props, function (bvModalEvt) {\n var trigger = bvModalEvt.trigger;\n return trigger === 'ok' ? true : trigger === 'cancel' ? false : null;\n });\n }\n }]);\n \n return BvModal;\n }(); // Add our instance mixin\n \n \n Vue.mixin({\n beforeCreate: function beforeCreate() {\n // Because we need access to `$root` for `$emits`, and VM for parenting,\n // we have to create a fresh instance of `BvModal` for each VM\n this[PROP_NAME_PRIV] = new BvModal(this);\n }\n }); // Define our read-only `$bvModal` instance property\n // Placed in an if just in case in HMR mode\n \n if (!hasOwnProperty(Vue.prototype, PROP_NAME$2)) {\n defineProperty(Vue.prototype, PROP_NAME$2, {\n get: function get() {\n /* istanbul ignore next */\n if (!this || !this[PROP_NAME_PRIV]) {\n warn(\"\\\"\".concat(PROP_NAME$2, \"\\\" must be accessed from a Vue instance \\\"this\\\" context.\"), 'BModal');\n }\n \n return this[PROP_NAME_PRIV];\n }\n });\n }\n };\n \n var BVModalPlugin = /*#__PURE__*/pluginFactory({\n plugins: {\n plugin: plugin\n }\n });\n \n var ModalPlugin = /*#__PURE__*/pluginFactory({\n components: {\n BModal: BModal\n },\n directives: {\n VBModal: VBModal\n },\n // $bvModal injection\n plugins: {\n BVModalPlugin: BVModalPlugin\n }\n });\n \n var props$K = {\n tag: {\n type: String,\n default: 'ul'\n },\n fill: {\n type: Boolean,\n default: false\n },\n justified: {\n type: Boolean,\n default: false\n },\n align: {\n type: String // default: null\n \n },\n tabs: {\n type: Boolean,\n default: false\n },\n pills: {\n type: Boolean,\n default: false\n },\n vertical: {\n type: Boolean,\n default: false\n },\n small: {\n type: Boolean,\n default: false\n },\n cardHeader: {\n // Set to true if placing in a card header\n type: Boolean,\n default: false\n }\n }; // -- Utils --\n \n var computeJustifyContent = function computeJustifyContent(value) {\n // Normalize value\n value = value === 'left' ? 'start' : value === 'right' ? 'end' : value;\n return \"justify-content-\".concat(value);\n }; // @vue/component\n \n \n var BNav = /*#__PURE__*/Vue.extend({\n name: 'BNav',\n functional: true,\n props: props$K,\n render: function render(h, _ref) {\n var _class;\n \n var props = _ref.props,\n data = _ref.data,\n children = _ref.children;\n return h(props.tag, a(data, {\n staticClass: 'nav',\n class: (_class = {\n 'nav-tabs': props.tabs,\n 'nav-pills': props.pills && !props.tabs,\n 'card-header-tabs': !props.vertical && props.cardHeader && props.tabs,\n 'card-header-pills': !props.vertical && props.cardHeader && props.pills && !props.tabs,\n 'flex-column': props.vertical,\n 'nav-fill': !props.vertical && props.fill,\n 'nav-justified': !props.vertical && props.justified\n }, _defineProperty(_class, computeJustifyContent(props.align), !props.vertical && props.align), _defineProperty(_class, \"small\", props.small), _class)\n }), children);\n }\n });\n \n var props$L = omit(props$1, ['event', 'routerTag']); // --- Main component ---\n // @vue/component\n \n var BNavItem = /*#__PURE__*/Vue.extend({\n name: 'BNavItem',\n functional: true,\n props: _objectSpread2(_objectSpread2({}, props$L), {}, {\n linkAttrs: {\n type: Object,\n default: function _default() {}\n },\n linkClasses: {\n type: [String, Object, Array],\n default: null\n }\n }),\n render: function render(h, _ref) {\n var props = _ref.props,\n data = _ref.data,\n listeners = _ref.listeners,\n children = _ref.children;\n // We transfer the listeners to the link\n delete data.on;\n return h('li', a(data, {\n staticClass: 'nav-item'\n }), [h(BLink, {\n staticClass: 'nav-link',\n class: props.linkClasses,\n attrs: props.linkAttrs,\n props: props,\n on: listeners\n }, children)]);\n }\n });\n \n var props$M = {}; // @vue/component\n \n var BNavText = /*#__PURE__*/Vue.extend({\n name: 'BNavText',\n functional: true,\n props: props$M,\n render: function render(h, _ref) {\n var data = _ref.data,\n children = _ref.children;\n return h('li', a(data, {\n staticClass: 'navbar-text'\n }), children);\n }\n });\n \n var props$N = _objectSpread2(_objectSpread2({}, omit(props$q, ['inline'])), {}, {\n formClass: {\n type: [String, Array, Object] // default: null\n \n }\n }); // @vue/component\n \n var BNavForm = /*#__PURE__*/Vue.extend({\n name: 'BNavForm',\n functional: true,\n props: props$N,\n render: function render(h, _ref) {\n var props = _ref.props,\n data = _ref.data,\n children = _ref.children,\n _ref$listeners = _ref.listeners,\n listeners = _ref$listeners === void 0 ? {} : _ref$listeners;\n var attrs = data.attrs; // The following data properties are cleared out\n // as they will be passed to BForm directly\n \n data.attrs = {};\n data.on = {};\n var $form = h(BForm, {\n class: props.formClass,\n props: _objectSpread2(_objectSpread2({}, props), {}, {\n inline: true\n }),\n attrs: attrs,\n on: listeners\n }, children);\n return h('li', a(data, {\n staticClass: 'form-inline'\n }), [$form]);\n }\n });\n \n var props$O = pluckProps(['text', 'html', 'menuClass', 'toggleClass', 'noCaret', 'role', 'lazy'], props$l); // --- Main component ---\n // @vue/component\n \n var BNavItemDropdown = /*#__PURE__*/Vue.extend({\n name: 'BNavItemDropdown',\n mixins: [idMixin, dropdownMixin, normalizeSlotMixin],\n props: props$O,\n computed: {\n toggleId: function toggleId() {\n return this.safeId('_BV_toggle_');\n },\n isNav: function isNav() {\n // Signal to dropdown mixin that we are in a navbar\n return true;\n },\n dropdownClasses: function dropdownClasses() {\n return [this.directionClass, {\n show: this.visible\n }];\n },\n menuClasses: function menuClasses() {\n return [this.menuClass, {\n 'dropdown-menu-right': this.right,\n show: this.visible\n }];\n },\n toggleClasses: function toggleClasses() {\n return [this.toggleClass, {\n 'dropdown-toggle-no-caret': this.noCaret\n }];\n }\n },\n render: function render(h) {\n var toggleId = this.toggleId,\n visible = this.visible;\n var $toggle = h(BLink, {\n staticClass: 'nav-link dropdown-toggle',\n class: this.toggleClasses,\n props: {\n href: \"#\".concat(this.id || ''),\n disabled: this.disabled\n },\n attrs: {\n id: toggleId,\n role: 'button',\n 'aria-haspopup': 'true',\n 'aria-expanded': visible ? 'true' : 'false'\n },\n on: {\n mousedown: this.onMousedown,\n click: this.toggle,\n keydown: this.toggle // Handle ENTER, SPACE and DOWN\n \n },\n ref: 'toggle'\n }, [// TODO: The `text` slot is deprecated in favor of the `button-content` slot\n this.normalizeSlot(['button-content', 'text']) || h('span', {\n domProps: htmlOrText(this.html, this.text)\n })]);\n var $menu = h('ul', {\n staticClass: 'dropdown-menu',\n class: this.menuClasses,\n attrs: {\n tabindex: '-1',\n 'aria-labelledby': toggleId\n },\n on: {\n keydown: this.onKeydown // Handle UP, DOWN and ESC\n \n },\n ref: 'menu'\n }, !this.lazy || visible ? this.normalizeSlot('default', {\n hide: this.hide\n }) : [h()]);\n return h('li', {\n staticClass: 'nav-item b-nav-dropdown dropdown',\n class: this.dropdownClasses,\n attrs: {\n id: this.safeId()\n }\n }, [$toggle, $menu]);\n }\n });\n \n var NavPlugin = /*#__PURE__*/pluginFactory({\n components: {\n BNav: BNav,\n BNavItem: BNavItem,\n BNavText: BNavText,\n BNavForm: BNavForm,\n BNavItemDropdown: BNavItemDropdown,\n BNavItemDd: BNavItemDropdown,\n BNavDropdown: BNavItemDropdown,\n BNavDd: BNavItemDropdown\n },\n plugins: {\n DropdownPlugin: DropdownPlugin\n }\n });\n \n var NAME$v = 'BNavbar'; // --- Props ---\n \n var props$P = {\n tag: {\n type: String,\n default: 'nav'\n },\n type: {\n type: String,\n default: 'light'\n },\n variant: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$v, 'variant');\n }\n },\n toggleable: {\n type: [Boolean, String],\n default: false\n },\n fixed: {\n type: String\n },\n sticky: {\n type: Boolean,\n default: false\n },\n print: {\n type: Boolean,\n default: false\n }\n }; // --- Main component ---\n // @vue/component\n \n var BNavbar = /*#__PURE__*/Vue.extend({\n name: NAME$v,\n mixins: [normalizeSlotMixin],\n props: props$P,\n provide: function provide() {\n return {\n bvNavbar: this\n };\n },\n computed: {\n breakpointClass: function breakpointClass() {\n var breakpoint = null;\n var xs = getBreakpoints()[0];\n var toggleable = this.toggleable;\n \n if (toggleable && isString(toggleable) && toggleable !== xs) {\n breakpoint = \"navbar-expand-\".concat(toggleable);\n } else if (toggleable === false) {\n breakpoint = 'navbar-expand';\n }\n \n return breakpoint;\n }\n },\n render: function render(h) {\n var _ref;\n \n return h(this.tag, {\n staticClass: 'navbar',\n class: [(_ref = {\n 'd-print': this.print,\n 'sticky-top': this.sticky\n }, _defineProperty(_ref, \"navbar-\".concat(this.type), this.type), _defineProperty(_ref, \"bg-\".concat(this.variant), this.variant), _defineProperty(_ref, \"fixed-\".concat(this.fixed), this.fixed), _ref), this.breakpointClass],\n attrs: {\n role: isTag(this.tag, 'nav') ? null : 'navigation'\n }\n }, [this.normalizeSlot('default')]);\n }\n });\n \n var props$Q = pluckProps(['tag', 'fill', 'justified', 'align', 'small'], props$K); // -- Utils --\n \n var computeJustifyContent$1 = function computeJustifyContent(value) {\n // Normalize value\n value = value === 'left' ? 'start' : value === 'right' ? 'end' : value;\n return \"justify-content-\".concat(value);\n }; // @vue/component\n \n \n var BNavbarNav = /*#__PURE__*/Vue.extend({\n name: 'BNavbarNav',\n functional: true,\n props: props$Q,\n render: function render(h, _ref) {\n var _class;\n \n var props = _ref.props,\n data = _ref.data,\n children = _ref.children;\n return h(props.tag, a(data, {\n staticClass: 'navbar-nav',\n class: (_class = {\n 'nav-fill': props.fill,\n 'nav-justified': props.justified\n }, _defineProperty(_class, computeJustifyContent$1(props.align), props.align), _defineProperty(_class, \"small\", props.small), _class)\n }), children);\n }\n });\n \n var linkProps$4 = omit(props$1, ['event', 'routerTag']);\n linkProps$4.href.default = undefined;\n linkProps$4.to.default = undefined;\n var props$R = _objectSpread2({\n tag: {\n type: String,\n default: 'div'\n }\n }, linkProps$4); // --- Main component ---\n // @vue/component\n \n var BNavbarBrand = /*#__PURE__*/Vue.extend({\n name: 'BNavbarBrand',\n functional: true,\n props: props$R,\n render: function render(h, _ref) {\n var props = _ref.props,\n data = _ref.data,\n children = _ref.children;\n var isLink = props.to || props.href;\n var tag = isLink ? BLink : props.tag;\n return h(tag, a(data, {\n staticClass: 'navbar-brand',\n props: isLink ? pluckProps(linkProps$4, props) : {}\n }), children);\n }\n });\n \n var NAME$w = 'BNavbarToggle';\n var CLASS_NAME$2 = 'navbar-toggler'; // --- Main component ---\n // @vue/component\n \n var BNavbarToggle = /*#__PURE__*/Vue.extend({\n name: NAME$w,\n directives: {\n BToggle: VBToggle\n },\n mixins: [listenOnRootMixin, normalizeSlotMixin],\n props: {\n label: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$w, 'label');\n }\n },\n target: {\n type: String,\n required: true\n },\n disabled: {\n type: Boolean,\n default: false\n }\n },\n data: function data() {\n return {\n toggleState: false\n };\n },\n created: function created() {\n this.listenOnRoot(EVENT_STATE, this.handleStateEvt);\n this.listenOnRoot(EVENT_STATE_SYNC, this.handleStateEvt);\n },\n methods: {\n onClick: function onClick(evt) {\n if (!this.disabled) {\n // Emit courtesy `click` event\n this.$emit('click', evt);\n }\n },\n handleStateEvt: function handleStateEvt(id, state) {\n // We listen for state events so that we can pass the\n // boolean expanded state to the default scoped slot\n if (id === this.target) {\n this.toggleState = state;\n }\n }\n },\n render: function render(h) {\n var disabled = this.disabled;\n return h('button', {\n staticClass: CLASS_NAME$2,\n class: {\n disabled: disabled\n },\n directives: [{\n name: 'BToggle',\n value: this.target\n }],\n attrs: {\n type: 'button',\n disabled: disabled,\n 'aria-label': this.label\n },\n on: {\n click: this.onClick\n }\n }, [this.normalizeSlot('default', {\n expanded: this.toggleState\n }) || h('span', {\n staticClass: \"\".concat(CLASS_NAME$2, \"-icon\")\n })]);\n }\n });\n \n var NavbarPlugin = /*#__PURE__*/pluginFactory({\n components: {\n BNavbar: BNavbar,\n BNavbarNav: BNavbarNav,\n BNavbarBrand: BNavbarBrand,\n BNavbarToggle: BNavbarToggle,\n BNavToggle: BNavbarToggle\n },\n plugins: {\n NavPlugin: NavPlugin,\n CollapsePlugin: CollapsePlugin,\n DropdownPlugin: DropdownPlugin\n }\n });\n \n var NAME$x = 'BSpinner'; // @vue/component\n \n var BSpinner = /*#__PURE__*/Vue.extend({\n name: NAME$x,\n functional: true,\n props: {\n type: {\n type: String,\n default: 'border' // SCSS currently supports 'border' or 'grow'\n \n },\n label: {\n type: String // default: null\n \n },\n variant: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$x, 'variant');\n }\n },\n small: {\n type: Boolean,\n default: false\n },\n role: {\n type: String,\n default: 'status'\n },\n tag: {\n type: String,\n default: 'span'\n }\n },\n render: function render(h, _ref) {\n var _class;\n \n var props = _ref.props,\n data = _ref.data,\n slots = _ref.slots,\n scopedSlots = _ref.scopedSlots;\n var $slots = slots();\n var $scopedSlots = scopedSlots || {};\n var label = normalizeSlot('label', {}, $scopedSlots, $slots) || props.label;\n \n if (label) {\n label = h('span', {\n staticClass: 'sr-only'\n }, label);\n }\n \n return h(props.tag, a(data, {\n attrs: {\n role: label ? props.role || 'status' : null,\n 'aria-hidden': label ? null : 'true'\n },\n class: (_class = {}, _defineProperty(_class, \"spinner-\".concat(props.type), props.type), _defineProperty(_class, \"spinner-\".concat(props.type, \"-sm\"), props.small), _defineProperty(_class, \"text-\".concat(props.variant), props.variant), _class)\n }), [label || h()]);\n }\n });\n \n var positionCover = {\n top: 0,\n left: 0,\n bottom: 0,\n right: 0\n };\n var BOverlay = /*#__PURE__*/Vue.extend({\n name: 'BOverlay',\n mixins: [normalizeSlotMixin],\n props: {\n show: {\n type: Boolean,\n default: false\n },\n variant: {\n type: String,\n default: 'light'\n },\n bgColor: {\n // Alternative to variant, allowing a specific\n // CSS color to be applied to the overlay\n type: String // default: null\n \n },\n opacity: {\n type: [Number, String],\n default: 0.85,\n validator: function validator(value) {\n var number = toFloat(value, 0);\n return number >= 0 && number <= 1;\n }\n },\n blur: {\n type: String,\n default: '2px'\n },\n rounded: {\n type: [Boolean, String],\n default: false\n },\n noCenter: {\n type: Boolean,\n default: false\n },\n noFade: {\n type: Boolean,\n default: false\n },\n spinnerType: {\n type: String,\n default: 'border'\n },\n spinnerVariant: {\n type: String // default: null\n \n },\n spinnerSmall: {\n type: Boolean,\n default: false\n },\n overlayTag: {\n type: String,\n default: 'div'\n },\n wrapTag: {\n type: String,\n default: 'div'\n },\n noWrap: {\n // If set, does not render the default slot\n // and switches to absolute positioning\n type: Boolean,\n default: false\n },\n fixed: {\n type: Boolean,\n default: false\n },\n zIndex: {\n type: [Number, String],\n default: 10\n }\n },\n computed: {\n computedRounded: function computedRounded() {\n var rounded = this.rounded;\n return rounded === true || rounded === '' ? 'rounded' : !rounded ? '' : \"rounded-\".concat(rounded);\n },\n computedVariant: function computedVariant() {\n return this.variant && !this.bgColor ? \"bg-\".concat(this.variant) : '';\n },\n overlayScope: function overlayScope() {\n return {\n spinnerType: this.spinnerType || null,\n spinnerVariant: this.spinnerVariant || null,\n spinnerSmall: this.spinnerSmall\n };\n }\n },\n methods: {\n defaultOverlayFn: function defaultOverlayFn(_ref) {\n var spinnerType = _ref.spinnerType,\n spinnerVariant = _ref.spinnerVariant,\n spinnerSmall = _ref.spinnerSmall;\n return this.$createElement(BSpinner, {\n props: {\n type: spinnerType,\n variant: spinnerVariant,\n small: spinnerSmall\n }\n });\n }\n },\n render: function render(h) {\n var _this = this;\n \n var $overlay = h();\n \n if (this.show) {\n var scope = this.overlayScope; // Overlay backdrop\n \n var $background = h('div', {\n staticClass: 'position-absolute',\n class: [this.computedVariant, this.computedRounded],\n style: _objectSpread2(_objectSpread2({}, positionCover), {}, {\n opacity: this.opacity,\n backgroundColor: this.bgColor || null,\n backdropFilter: this.blur ? \"blur(\".concat(this.blur, \")\") : null\n })\n }); // Overlay content\n \n var $content = h('div', {\n staticClass: 'position-absolute',\n style: this.noCenter ?\n /* istanbul ignore next */\n _objectSpread2({}, positionCover) : {\n top: '50%',\n left: '50%',\n transform: 'translateX(-50%) translateY(-50%)'\n }\n }, [this.normalizeSlot('overlay', scope) || this.defaultOverlayFn(scope)]); // Overlay positioning\n \n $overlay = h(this.overlayTag, {\n key: 'overlay',\n staticClass: 'b-overlay',\n class: {\n 'position-absolute': !this.noWrap || this.noWrap && !this.fixed,\n 'position-fixed': this.noWrap && this.fixed\n },\n style: _objectSpread2(_objectSpread2({}, positionCover), {}, {\n zIndex: this.zIndex || 10\n }),\n on: {\n click: function click(evt) {\n return _this.$emit('click', evt);\n }\n }\n }, [$background, $content]);\n } // Wrap in a fade transition\n \n \n $overlay = h(BVTransition, {\n props: {\n noFade: this.noFade,\n appear: true\n },\n on: {\n 'after-enter': function afterEnter() {\n return _this.$emit('shown');\n },\n 'after-leave': function afterLeave() {\n return _this.$emit('hidden');\n }\n }\n }, [$overlay]);\n \n if (this.noWrap) {\n return $overlay;\n }\n \n return h(this.wrapTag, {\n staticClass: 'b-overlay-wrap position-relative',\n attrs: {\n 'aria-busy': this.show ? 'true' : null\n }\n }, this.noWrap ? [$overlay] : [this.normalizeSlot('default'), $overlay]);\n }\n });\n \n var OverlayPlugin = /*#__PURE__*/pluginFactory({\n components: {\n BOverlay: BOverlay\n }\n });\n \n /**\n * @param {number} length\n * @return {Array}\n */\n var range = function range(length) {\n return Array.apply(null, {\n length: length\n });\n };\n \n // for `<b-pagination>` and `<b-pagination-nav>`\n // --- Constants ---\n // Threshold of limit size when we start/stop showing ellipsis\n \n var ELLIPSIS_THRESHOLD = 3; // Default # of buttons limit\n \n var DEFAULT_LIMIT = 5; // --- Helper methods ---\n // Make an array of N to N+X\n \n var makePageArray = function makePageArray(startNumber, numberOfPages) {\n return range(numberOfPages).map(function (val, i) {\n return {\n number: startNumber + i,\n classes: null\n };\n });\n }; // Sanitize the provided limit value (converting to a number)\n \n \n var sanitizeLimit = function sanitizeLimit(val) {\n var limit = toInteger(val) || 1;\n return limit < 1 ? DEFAULT_LIMIT : limit;\n }; // Sanitize the provided current page number (converting to a number)\n \n \n var sanitizeCurrentPage = function sanitizeCurrentPage(val, numberOfPages) {\n var page = toInteger(val) || 1;\n return page > numberOfPages ? numberOfPages : page < 1 ? 1 : page;\n }; // Links don't normally respond to SPACE, so we add that\n // functionality via this handler\n \n \n var onSpaceKey = function onSpaceKey(evt) {\n if (evt.keyCode === KEY_CODES.SPACE) {\n evt.preventDefault(); // Stop page from scrolling\n \n evt.stopImmediatePropagation();\n evt.stopPropagation(); // Trigger the click event on the link\n \n evt.currentTarget.click();\n return false;\n }\n }; // --- Props ---\n \n \n var props$S = {\n disabled: {\n type: Boolean,\n default: false\n },\n value: {\n type: [Number, String],\n default: null,\n validator: function validator(value)\n /* istanbul ignore next */\n {\n if (!isNull(value) && toInteger(value, 0) < 1) {\n warn('\"v-model\" value must be a number greater than \"0\"', 'BPagination');\n return false;\n }\n \n return true;\n }\n },\n limit: {\n type: [Number, String],\n default: DEFAULT_LIMIT,\n validator: function validator(value)\n /* istanbul ignore next */\n {\n if (toInteger(value, 0) < 1) {\n warn('Prop \"limit\" must be a number greater than \"0\"', 'BPagination');\n return false;\n }\n \n return true;\n }\n },\n align: {\n type: String,\n default: 'left'\n },\n pills: {\n type: Boolean,\n default: false\n },\n hideGotoEndButtons: {\n type: Boolean,\n default: false\n },\n ariaLabel: {\n type: String,\n default: 'Pagination'\n },\n labelFirstPage: {\n type: String,\n default: 'Go to first page'\n },\n firstText: {\n type: String,\n default: \"\\xAB\" // '«'\n \n },\n firstNumber: {\n type: Boolean,\n default: false\n },\n firstClass: {\n type: [String, Array, Object],\n default: null\n },\n labelPrevPage: {\n type: String,\n default: 'Go to previous page'\n },\n prevText: {\n type: String,\n default: \"\\u2039\" // '‹'\n \n },\n prevClass: {\n type: [String, Array, Object],\n default: null\n },\n labelNextPage: {\n type: String,\n default: 'Go to next page'\n },\n nextText: {\n type: String,\n default: \"\\u203A\" // '›'\n \n },\n nextClass: {\n type: [String, Array, Object] // default: null\n \n },\n labelLastPage: {\n type: String,\n default: 'Go to last page'\n },\n lastText: {\n type: String,\n default: \"\\xBB\" // '»'\n \n },\n lastNumber: {\n type: Boolean,\n default: false\n },\n lastClass: {\n type: [String, Array, Object] // default: null\n \n },\n labelPage: {\n type: [String, Function],\n default: 'Go to page'\n },\n pageClass: {\n type: [String, Array, Object] // default: null\n \n },\n hideEllipsis: {\n type: Boolean,\n default: false\n },\n ellipsisText: {\n type: String,\n default: \"\\u2026\" // '…'\n \n },\n ellipsisClass: {\n type: [String, Array, Object] // default: null\n \n }\n }; // @vue/component\n \n var paginationMixin = {\n mixins: [normalizeSlotMixin],\n model: {\n prop: 'value',\n event: 'input'\n },\n props: props$S,\n data: function data() {\n // `-1` signifies no page initially selected\n var currentPage = toInteger(this.value, 0);\n currentPage = currentPage > 0 ? currentPage : -1;\n return {\n currentPage: currentPage,\n localNumberOfPages: 1,\n localLimit: DEFAULT_LIMIT\n };\n },\n computed: {\n btnSize: function btnSize() {\n return this.size ? \"pagination-\".concat(this.size) : '';\n },\n alignment: function alignment() {\n var align = this.align;\n \n if (align === 'center') {\n return 'justify-content-center';\n } else if (align === 'end' || align === 'right') {\n return 'justify-content-end';\n } else if (align === 'fill') {\n // The page-items will also have 'flex-fill' added\n // We add text centering to make the button appearance better in fill mode\n return 'text-center';\n }\n \n return '';\n },\n styleClass: function styleClass() {\n return this.pills ? 'b-pagination-pills' : '';\n },\n computedCurrentPage: function computedCurrentPage() {\n return sanitizeCurrentPage(this.currentPage, this.localNumberOfPages);\n },\n paginationParams: function paginationParams() {\n // Determine if we should show the the ellipsis\n var limit = this.localLimit;\n var numberOfPages = this.localNumberOfPages;\n var currentPage = this.computedCurrentPage;\n var hideEllipsis = this.hideEllipsis;\n var firstNumber = this.firstNumber;\n var lastNumber = this.lastNumber;\n var showFirstDots = false;\n var showLastDots = false;\n var numberOfLinks = limit;\n var startNumber = 1;\n \n if (numberOfPages <= limit) {\n // Special case: Less pages available than the limit of displayed pages\n numberOfLinks = numberOfPages;\n } else if (currentPage < limit - 1 && limit > ELLIPSIS_THRESHOLD) {\n if (!hideEllipsis || lastNumber) {\n showLastDots = true;\n numberOfLinks = limit - (firstNumber ? 0 : 1);\n }\n \n numberOfLinks = mathMin(numberOfLinks, limit);\n } else if (numberOfPages - currentPage + 2 < limit && limit > ELLIPSIS_THRESHOLD) {\n if (!hideEllipsis || firstNumber) {\n showFirstDots = true;\n numberOfLinks = limit - (lastNumber ? 0 : 1);\n }\n \n startNumber = numberOfPages - numberOfLinks + 1;\n } else {\n // We are somewhere in the middle of the page list\n if (limit > ELLIPSIS_THRESHOLD) {\n numberOfLinks = limit - 2;\n showFirstDots = !!(!hideEllipsis || firstNumber);\n showLastDots = !!(!hideEllipsis || lastNumber);\n }\n \n startNumber = currentPage - mathFloor(numberOfLinks / 2);\n } // Sanity checks\n \n /* istanbul ignore if */\n \n \n if (startNumber < 1) {\n startNumber = 1;\n showFirstDots = false;\n } else if (startNumber > numberOfPages - numberOfLinks) {\n startNumber = numberOfPages - numberOfLinks + 1;\n showLastDots = false;\n }\n \n if (showFirstDots && firstNumber && startNumber < 4) {\n numberOfLinks = numberOfLinks + 2;\n startNumber = 1;\n showFirstDots = false;\n }\n \n var lastPageNumber = startNumber + numberOfLinks - 1;\n \n if (showLastDots && lastNumber && lastPageNumber > numberOfPages - 3) {\n numberOfLinks = numberOfLinks + (lastPageNumber === numberOfPages - 2 ? 2 : 3);\n showLastDots = false;\n } // Special handling for lower limits (where ellipsis are never shown)\n \n \n if (limit <= ELLIPSIS_THRESHOLD) {\n if (firstNumber && startNumber === 1) {\n numberOfLinks = mathMin(numberOfLinks + 1, numberOfPages, limit + 1);\n } else if (lastNumber && numberOfPages === startNumber + numberOfLinks - 1) {\n startNumber = mathMax(startNumber - 1, 1);\n numberOfLinks = mathMin(numberOfPages - startNumber + 1, numberOfPages, limit + 1);\n }\n }\n \n numberOfLinks = mathMin(numberOfLinks, numberOfPages - startNumber + 1);\n return {\n showFirstDots: showFirstDots,\n showLastDots: showLastDots,\n numberOfLinks: numberOfLinks,\n startNumber: startNumber\n };\n },\n pageList: function pageList() {\n // Generates the pageList array\n var _this$paginationParam = this.paginationParams,\n numberOfLinks = _this$paginationParam.numberOfLinks,\n startNumber = _this$paginationParam.startNumber;\n var currentPage = this.computedCurrentPage; // Generate list of page numbers\n \n var pages = makePageArray(startNumber, numberOfLinks); // We limit to a total of 3 page buttons on XS screens\n // So add classes to page links to hide them for XS breakpoint\n // Note: Ellipsis will also be hidden on XS screens\n // TODO: Make this visual limit configurable based on breakpoint(s)\n \n if (pages.length > 3) {\n var idx = currentPage - startNumber; // THe following is a bootstrap-vue custom utility class\n \n var classes = 'bv-d-xs-down-none';\n \n if (idx === 0) {\n // Keep leftmost 3 buttons visible when current page is first page\n for (var i = 3; i < pages.length; i++) {\n pages[i].classes = classes;\n }\n } else if (idx === pages.length - 1) {\n // Keep rightmost 3 buttons visible when current page is last page\n for (var _i = 0; _i < pages.length - 3; _i++) {\n pages[_i].classes = classes;\n }\n } else {\n // Hide all except current page, current page - 1 and current page + 1\n for (var _i2 = 0; _i2 < idx - 1; _i2++) {\n // hide some left button(s)\n pages[_i2].classes = classes;\n }\n \n for (var _i3 = pages.length - 1; _i3 > idx + 1; _i3--) {\n // hide some right button(s)\n pages[_i3].classes = classes;\n }\n }\n }\n \n return pages;\n }\n },\n watch: {\n value: function value(newValue, oldValue) {\n if (newValue !== oldValue) {\n this.currentPage = sanitizeCurrentPage(newValue, this.localNumberOfPages);\n }\n },\n currentPage: function currentPage(newValue, oldValue) {\n if (newValue !== oldValue) {\n // Emit null if no page selected\n this.$emit('input', newValue > 0 ? newValue : null);\n }\n },\n limit: function limit(newValue, oldValue) {\n if (newValue !== oldValue) {\n this.localLimit = sanitizeLimit(newValue);\n }\n }\n },\n created: function created() {\n var _this = this;\n \n // Set our default values in data\n this.localLimit = sanitizeLimit(this.limit);\n this.$nextTick(function () {\n // Sanity check\n _this.currentPage = _this.currentPage > _this.localNumberOfPages ? _this.localNumberOfPages : _this.currentPage;\n });\n },\n methods: {\n handleKeyNav: function handleKeyNav(evt) {\n var keyCode = evt.keyCode,\n shiftKey = evt.shiftKey;\n /* istanbul ignore if */\n \n if (this.isNav) {\n // We disable left/right keyboard navigation in `<b-pagination-nav>`\n return;\n }\n \n if (keyCode === KEY_CODES.LEFT || keyCode === KEY_CODES.UP) {\n evt.preventDefault();\n shiftKey ? this.focusFirst() : this.focusPrev();\n } else if (keyCode === KEY_CODES.RIGHT || keyCode === KEY_CODES.DOWN) {\n evt.preventDefault();\n shiftKey ? this.focusLast() : this.focusNext();\n }\n },\n getButtons: function getButtons() {\n // Return only buttons that are visible\n return selectAll('button.page-link, a.page-link', this.$el).filter(function (btn) {\n return isVisible(btn);\n });\n },\n focusCurrent: function focusCurrent() {\n var _this2 = this;\n \n // We do this in `$nextTick()` to ensure buttons have finished rendering\n this.$nextTick(function () {\n var btn = _this2.getButtons().find(function (el) {\n return toInteger(getAttr(el, 'aria-posinset'), 0) === _this2.computedCurrentPage;\n });\n \n if (!attemptFocus(btn)) {\n // Fallback if current page is not in button list\n _this2.focusFirst();\n }\n });\n },\n focusFirst: function focusFirst() {\n var _this3 = this;\n \n // We do this in `$nextTick()` to ensure buttons have finished rendering\n this.$nextTick(function () {\n var btn = _this3.getButtons().find(function (el) {\n return !isDisabled(el);\n });\n \n attemptFocus(btn);\n });\n },\n focusLast: function focusLast() {\n var _this4 = this;\n \n // We do this in `$nextTick()` to ensure buttons have finished rendering\n this.$nextTick(function () {\n var btn = _this4.getButtons().reverse().find(function (el) {\n return !isDisabled(el);\n });\n \n attemptFocus(btn);\n });\n },\n focusPrev: function focusPrev() {\n var _this5 = this;\n \n // We do this in `$nextTick()` to ensure buttons have finished rendering\n this.$nextTick(function () {\n var buttons = _this5.getButtons();\n \n var index = buttons.indexOf(getActiveElement());\n \n if (index > 0 && !isDisabled(buttons[index - 1])) {\n attemptFocus(buttons[index - 1]);\n }\n });\n },\n focusNext: function focusNext() {\n var _this6 = this;\n \n // We do this in `$nextTick()` to ensure buttons have finished rendering\n this.$nextTick(function () {\n var buttons = _this6.getButtons();\n \n var index = buttons.indexOf(getActiveElement());\n \n if (index < buttons.length - 1 && !isDisabled(buttons[index + 1])) {\n attemptFocus(buttons[index + 1]);\n }\n });\n }\n },\n render: function render(h) {\n var _this7 = this;\n \n var buttons = [];\n var numberOfPages = this.localNumberOfPages;\n var pageNumbers = this.pageList.map(function (p) {\n return p.number;\n });\n var disabled = this.disabled;\n var _this$paginationParam2 = this.paginationParams,\n showFirstDots = _this$paginationParam2.showFirstDots,\n showLastDots = _this$paginationParam2.showLastDots;\n var currentPage = this.computedCurrentPage;\n var fill = this.align === 'fill'; // Used to control what type of aria attributes are rendered and wrapper\n \n var isNav = this.isNav; // Helper function and flag\n \n var isActivePage = function isActivePage(pageNumber) {\n return pageNumber === currentPage;\n };\n \n var noCurrentPage = this.currentPage < 1; // Factory function for prev/next/first/last buttons\n \n var makeEndBtn = function makeEndBtn(linkTo, ariaLabel, btnSlot, btnText, btnClass, pageTest, key) {\n var isDisabled = disabled || isActivePage(pageTest) || noCurrentPage || linkTo < 1 || linkTo > numberOfPages;\n var pageNumber = linkTo < 1 ? 1 : linkTo > numberOfPages ? numberOfPages : linkTo;\n var scope = {\n disabled: isDisabled,\n page: pageNumber,\n index: pageNumber - 1\n };\n var $btnContent = _this7.normalizeSlot(btnSlot, scope) || toString$1(btnText) || h();\n var $inner = h(isDisabled ? 'span' : isNav ? BLink : 'button', {\n staticClass: 'page-link',\n class: {\n 'flex-grow-1': !isNav && !isDisabled && fill\n },\n props: isDisabled || !isNav ? {} : _this7.linkProps(linkTo),\n attrs: {\n role: isNav ? null : 'menuitem',\n type: isNav || isDisabled ? null : 'button',\n tabindex: isDisabled || isNav ? null : '-1',\n 'aria-label': ariaLabel,\n 'aria-controls': _this7.ariaControls || null,\n 'aria-disabled': isDisabled ? 'true' : null\n },\n on: isDisabled ? {} : {\n '!click': function click(evt) {\n _this7.onClick(linkTo, evt);\n },\n keydown: onSpaceKey\n }\n }, [$btnContent]);\n return h('li', {\n key: key,\n staticClass: 'page-item',\n class: [{\n disabled: isDisabled,\n 'flex-fill': fill,\n 'd-flex': fill && !isNav && !isDisabled\n }, btnClass],\n attrs: {\n role: isNav ? null : 'presentation',\n 'aria-hidden': isDisabled ? 'true' : null\n }\n }, [$inner]);\n }; // Ellipsis factory\n \n \n var makeEllipsis = function makeEllipsis(isLast) {\n return h('li', {\n key: \"ellipsis-\".concat(isLast ? 'last' : 'first'),\n staticClass: 'page-item',\n class: ['disabled', 'bv-d-xs-down-none', fill ? 'flex-fill' : '', _this7.ellipsisClass],\n attrs: {\n role: 'separator'\n }\n }, [h('span', {\n staticClass: 'page-link'\n }, [_this7.normalizeSlot('ellipsis-text') || toString$1(_this7.ellipsisText) || h()])]);\n }; // Page button factory\n \n \n var makePageButton = function makePageButton(page, idx) {\n var active = isActivePage(page.number) && !noCurrentPage; // Active page will have tabindex of 0, or if no current page and first page button\n \n var tabIndex = disabled ? null : active || noCurrentPage && idx === 0 ? '0' : '-1';\n var attrs = {\n role: isNav ? null : 'menuitemradio',\n type: isNav || disabled ? null : 'button',\n 'aria-disabled': disabled ? 'true' : null,\n 'aria-controls': _this7.ariaControls || null,\n 'aria-label': isFunction(_this7.labelPage) ?\n /* istanbul ignore next */\n _this7.labelPage(page.number) : \"\".concat(_this7.labelPage, \" \").concat(page.number),\n 'aria-checked': isNav ? null : active ? 'true' : 'false',\n 'aria-current': isNav && active ? 'page' : null,\n 'aria-posinset': page.number,\n 'aria-setsize': numberOfPages,\n // ARIA \"roving tabindex\" method (except in isNav mode)\n tabindex: isNav ? null : tabIndex\n };\n var btnContent = toString$1(_this7.makePage(page.number));\n var scope = {\n page: page.number,\n index: page.number - 1,\n content: btnContent,\n active: active,\n disabled: disabled\n };\n var $inner = h(disabled ? 'span' : isNav ? BLink : 'button', {\n props: disabled || !isNav ? {} : _this7.linkProps(page.number),\n staticClass: 'page-link',\n class: {\n 'flex-grow-1': !isNav && !disabled && fill\n },\n attrs: attrs,\n on: disabled ? {} : {\n '!click': function click(evt) {\n _this7.onClick(page.number, evt);\n },\n keydown: onSpaceKey\n }\n }, [_this7.normalizeSlot('page', scope) || btnContent]);\n return h('li', {\n key: \"page-\".concat(page.number),\n staticClass: 'page-item',\n class: [{\n disabled: disabled,\n active: active,\n 'flex-fill': fill,\n 'd-flex': fill && !isNav && !disabled\n }, page.classes, _this7.pageClass],\n attrs: {\n role: isNav ? null : 'presentation'\n }\n }, [$inner]);\n }; // Goto first page button\n // Don't render button when `hideGotoEndButtons` or `firstNumber` is set\n \n \n var $firstPageBtn = h();\n \n if (!this.firstNumber && !this.hideGotoEndButtons) {\n $firstPageBtn = makeEndBtn(1, this.labelFirstPage, 'first-text', this.firstText, this.firstClass, 1, 'pagination-goto-first');\n }\n \n buttons.push($firstPageBtn); // Goto previous page button\n \n buttons.push(makeEndBtn(currentPage - 1, this.labelPrevPage, 'prev-text', this.prevText, this.prevClass, 1, 'pagination-goto-prev')); // Show first (1) button?\n \n buttons.push(this.firstNumber && pageNumbers[0] !== 1 ? makePageButton({\n number: 1\n }, 0) : h()); // First ellipsis\n \n buttons.push(showFirstDots ? makeEllipsis(false) : h()); // Individual page links\n \n this.pageList.forEach(function (page, idx) {\n var offset = showFirstDots && _this7.firstNumber && pageNumbers[0] !== 1 ? 1 : 0;\n buttons.push(makePageButton(page, idx + offset));\n }); // Last ellipsis\n \n buttons.push(showLastDots ? makeEllipsis(true) : h()); // Show last page button?\n \n buttons.push(this.lastNumber && pageNumbers[pageNumbers.length - 1] !== numberOfPages ? makePageButton({\n number: numberOfPages\n }, -1) : h()); // Goto next page button\n \n buttons.push(makeEndBtn(currentPage + 1, this.labelNextPage, 'next-text', this.nextText, this.nextClass, numberOfPages, 'pagination-goto-next')); // Goto last page button\n // Don't render button when `hideGotoEndButtons` or `lastNumber` is set\n \n var $lastPageBtn = h();\n \n if (!this.lastNumber && !this.hideGotoEndButtons) {\n $lastPageBtn = makeEndBtn(numberOfPages, this.labelLastPage, 'last-text', this.lastText, this.lastClass, numberOfPages, 'pagination-goto-last');\n }\n \n buttons.push($lastPageBtn); // Assemble the pagination buttons\n \n var $pagination = h('ul', {\n ref: 'ul',\n staticClass: 'pagination',\n class: ['b-pagination', this.btnSize, this.alignment, this.styleClass],\n attrs: {\n role: isNav ? null : 'menubar',\n 'aria-disabled': disabled ? 'true' : 'false',\n 'aria-label': isNav ? null : this.ariaLabel || null\n },\n // We disable keyboard left/right nav when `<b-pagination-nav>`\n on: isNav ? {} : {\n keydown: this.handleKeyNav\n }\n }, buttons); // If we are `<b-pagination-nav>`, wrap in `<nav>` wrapper\n \n if (isNav) {\n return h('nav', {\n attrs: {\n 'aria-disabled': disabled ? 'true' : null,\n 'aria-hidden': disabled ? 'true' : 'false',\n 'aria-label': isNav ? this.ariaLabel || null : null\n }\n }, [$pagination]);\n }\n \n return $pagination;\n }\n };\n \n var NAME$y = 'BPagination';\n var DEFAULT_PER_PAGE = 20;\n var DEFAULT_TOTAL_ROWS = 0;\n var props$T = {\n size: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$y, 'size');\n }\n },\n perPage: {\n type: [Number, String],\n default: DEFAULT_PER_PAGE\n },\n totalRows: {\n type: [Number, String],\n default: DEFAULT_TOTAL_ROWS\n },\n ariaControls: {\n type: String // default: null\n \n }\n }; // --- Helper functions ---\n // Sanitize the provided per page number (converting to a number)\n \n var sanitizePerPage = function sanitizePerPage(val) {\n return mathMax(toInteger(val) || DEFAULT_PER_PAGE, 1);\n }; // Sanitize the provided total rows number (converting to a number)\n \n \n var sanitizeTotalRows = function sanitizeTotalRows(val) {\n return mathMax(toInteger(val) || DEFAULT_TOTAL_ROWS, 0);\n }; // The render function is brought in via the `paginationMixin`\n // @vue/component\n \n \n var BPagination = /*#__PURE__*/Vue.extend({\n name: NAME$y,\n mixins: [paginationMixin],\n props: props$T,\n computed: {\n numberOfPages: function numberOfPages() {\n var result = mathCeil(sanitizeTotalRows(this.totalRows) / sanitizePerPage(this.perPage));\n return result < 1 ? 1 : result;\n },\n pageSizeNumberOfPages: function pageSizeNumberOfPages() {\n // Used for watching changes to `perPage` and `numberOfPages`\n return {\n perPage: sanitizePerPage(this.perPage),\n totalRows: sanitizeTotalRows(this.totalRows),\n numberOfPages: this.numberOfPages\n };\n }\n },\n watch: {\n pageSizeNumberOfPages: function pageSizeNumberOfPages(newVal, oldVal) {\n if (!isUndefinedOrNull(oldVal)) {\n if (newVal.perPage !== oldVal.perPage && newVal.totalRows === oldVal.totalRows) {\n // If the page size changes, reset to page 1\n this.currentPage = 1;\n } else if (newVal.numberOfPages !== oldVal.numberOfPages && this.currentPage > newVal.numberOfPages) {\n // If `numberOfPages` changes and is less than\n // the `currentPage` number, reset to page 1\n this.currentPage = 1;\n }\n }\n \n this.localNumberOfPages = newVal.numberOfPages;\n }\n },\n created: function created() {\n var _this = this;\n \n // Set the initial page count\n this.localNumberOfPages = this.numberOfPages; // Set the initial page value\n \n var currentPage = toInteger(this.value, 0);\n \n if (currentPage > 0) {\n this.currentPage = currentPage;\n } else {\n this.$nextTick(function () {\n // If this value parses to NaN or a value less than 1\n // Trigger an initial emit of 'null' if no page specified\n _this.currentPage = 0;\n });\n }\n },\n mounted: function mounted() {\n // Set the initial page count\n this.localNumberOfPages = this.numberOfPages;\n },\n methods: {\n // These methods are used by the render function\n onClick: function onClick(num, evt) {\n var _this2 = this;\n \n // Handle edge cases where number of pages has changed (i.e. if perPage changes)\n // This should normally not happen, but just in case.\n if (num > this.numberOfPages) {\n /* istanbul ignore next */\n num = this.numberOfPages;\n } else if (num < 1) {\n /* istanbul ignore next */\n num = 1;\n } // Update the v-model\n \n \n this.currentPage = num; // Emit event triggered by user interaction\n \n this.$emit('change', this.currentPage);\n this.$nextTick(function () {\n // Keep the current button focused if possible\n var target = evt.target;\n \n if (isVisible(target) && _this2.$el.contains(target)) {\n attemptFocus(target);\n } else {\n _this2.focusCurrent();\n }\n });\n },\n makePage: function makePage(pageNum) {\n return pageNum;\n },\n \n /* istanbul ignore next */\n linkProps: function linkProps() {\n // No props, since we render a plain button\n \n /* istanbul ignore next */\n return {};\n }\n }\n });\n \n var PaginationPlugin = /*#__PURE__*/pluginFactory({\n components: {\n BPagination: BPagination\n }\n });\n \n var NAME$z = 'BPaginationNav'; // --- Props ---\n \n var _linkProps = omit(props$1, ['event', 'routerTag']);\n \n var props$U = _objectSpread2({\n size: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$z, 'size');\n }\n },\n numberOfPages: {\n type: [Number, String],\n default: 1,\n validator: function validator(value)\n /* istanbul ignore next */\n {\n var number = toInteger(value, 0);\n \n if (number < 1) {\n warn('Prop \"number-of-pages\" must be a number greater than \"0\"', NAME$z);\n return false;\n }\n \n return true;\n }\n },\n baseUrl: {\n type: String,\n default: '/'\n },\n useRouter: {\n type: Boolean,\n default: false\n },\n linkGen: {\n type: Function // default: null\n \n },\n pageGen: {\n type: Function // default: null\n \n },\n pages: {\n // Optional array of page links\n type: Array // default: null\n \n },\n noPageDetect: {\n // Disable auto page number detection if true\n type: Boolean,\n default: false\n }\n }, _linkProps); // --- Utility methods ---\n // Sanitize the provided number of pages (converting to a number)\n \n \n var sanitizeNumberOfPages = function sanitizeNumberOfPages(value) {\n return mathMax(toInteger(value, 0), 1);\n }; // --- Main component ---\n // The render function is brought in via the pagination mixin\n // @vue/component\n \n var BPaginationNav = /*#__PURE__*/Vue.extend({\n name: NAME$z,\n mixins: [paginationMixin],\n props: props$U,\n computed: {\n // Used by render function to trigger wrapping in '<nav>' element\n isNav: function isNav() {\n return true;\n },\n computedValue: function computedValue() {\n // Returns the value prop as a number or `null` if undefined or < 1\n var value = toInteger(this.value, 0);\n return value < 1 ? null : value;\n }\n },\n watch: {\n numberOfPages: function numberOfPages() {\n var _this = this;\n \n this.$nextTick(function () {\n _this.setNumberOfPages();\n });\n },\n pages: function pages() {\n var _this2 = this;\n \n this.$nextTick(function () {\n _this2.setNumberOfPages();\n });\n }\n },\n created: function created() {\n this.setNumberOfPages();\n },\n mounted: function mounted() {\n var _this3 = this;\n \n if (this.$router) {\n // We only add the watcher if vue router is detected\n this.$watch('$route', function () {\n _this3.$nextTick(function () {\n requestAF(function () {\n _this3.guessCurrentPage();\n });\n });\n });\n }\n },\n methods: {\n setNumberOfPages: function setNumberOfPages() {\n var _this4 = this;\n \n if (isArray(this.pages) && this.pages.length > 0) {\n this.localNumberOfPages = this.pages.length;\n } else {\n this.localNumberOfPages = sanitizeNumberOfPages(this.numberOfPages);\n }\n \n this.$nextTick(function () {\n _this4.guessCurrentPage();\n });\n },\n onClick: function onClick(pageNum, evt) {\n var _this5 = this;\n \n // Dont do anything if clicking the current active page\n if (pageNum === this.currentPage) {\n return;\n }\n \n requestAF(function () {\n // Update the v-model\n // Done in in requestAF() to allow browser to complete the\n // native browser click handling of a link\n _this5.currentPage = pageNum;\n \n _this5.$emit('change', pageNum);\n });\n this.$nextTick(function () {\n // Emulate native link click page reloading behaviour by blurring the\n // paginator and returning focus to the document\n // Done in a `nextTick()` to ensure rendering complete\n var target = evt.currentTarget || evt.target;\n attemptBlur(target);\n });\n },\n getPageInfo: function getPageInfo(pageNum) {\n if (!isArray(this.pages) || this.pages.length === 0 || isUndefined(this.pages[pageNum - 1])) {\n var link = \"\".concat(this.baseUrl).concat(pageNum);\n return {\n link: this.useRouter ? {\n path: link\n } : link,\n text: toString$1(pageNum)\n };\n }\n \n var info = this.pages[pageNum - 1];\n \n if (isObject(info)) {\n var _link = info.link;\n return {\n // Normalize link for router use\n link: isObject(_link) ? _link : this.useRouter ? {\n path: _link\n } : _link,\n // Make sure text has a value\n text: toString$1(info.text || pageNum)\n };\n } else {\n return {\n link: toString$1(info),\n text: toString$1(pageNum)\n };\n }\n },\n makePage: function makePage(pageNum) {\n var info = this.getPageInfo(pageNum);\n \n if (this.pageGen && isFunction(this.pageGen)) {\n return this.pageGen(pageNum, info);\n }\n \n return info.text;\n },\n makeLink: function makeLink(pageNum) {\n var info = this.getPageInfo(pageNum);\n \n if (this.linkGen && isFunction(this.linkGen)) {\n return this.linkGen(pageNum, info);\n }\n \n return info.link;\n },\n linkProps: function linkProps(pageNum) {\n var props = pluckProps(_linkProps, this);\n var link = this.makeLink(pageNum);\n \n if (this.useRouter || isObject(link)) {\n props.to = link;\n } else {\n props.href = link;\n }\n \n return props;\n },\n resolveLink: function resolveLink() {\n var to = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n // Given a to (or href string), convert to normalized route-like structure\n // Works only client side!!\n var link;\n \n try {\n // Convert the `to` to a HREF via a temporary `a` tag\n link = document.createElement('a');\n link.href = computeHref({\n to: to\n }, 'a', '/', '/'); // We need to add the anchor to the document to make sure the\n // `pathname` is correctly detected in any browser (i.e. IE)\n \n document.body.appendChild(link); // Once href is assigned, the link will be normalized to the full URL bits\n \n var _link2 = link,\n pathname = _link2.pathname,\n hash = _link2.hash,\n search = _link2.search; // Remove link from document\n \n document.body.removeChild(link); // Return the location in a route-like object\n \n return {\n path: pathname,\n hash: hash,\n query: parseQuery(search)\n };\n } catch (e) {\n /* istanbul ignore next */\n try {\n link && link.parentNode && link.parentNode.removeChild(link);\n } catch (e) {}\n /* istanbul ignore next */\n \n \n return {};\n }\n },\n resolveRoute: function resolveRoute() {\n var to = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n \n // Given a to (or href string), convert to normalized route location structure\n // works only when router available!!\n try {\n var route = this.$router.resolve(to, this.$route).route;\n return {\n path: route.path,\n hash: route.hash,\n query: route.query\n };\n } catch (e) {\n /* istanbul ignore next */\n return {};\n }\n },\n guessCurrentPage: function guessCurrentPage() {\n var guess = this.computedValue;\n var $router = this.$router;\n var $route = this.$route; // This section only occurs if we are client side, or server-side with $router\n \n /* istanbul ignore else */\n \n if (!this.noPageDetect && !guess && (isBrowser || !isBrowser && $router)) {\n // Current route (if router available)\n var currRoute = $router && $route ? {\n path: $route.path,\n hash: $route.hash,\n query: $route.query\n } : {}; // Current page full HREF (if client side). Can't be done as a computed prop!\n \n var loc = isBrowser ? window.location || document.location : null;\n var currLink = loc ? {\n path: loc.pathname,\n hash: loc.hash,\n query: parseQuery(loc.search)\n } :\n /* istanbul ignore next */\n {}; // Loop through the possible pages looking for a match until found\n \n for (var page = 1; !guess && page <= this.localNumberOfPages; page++) {\n var to = this.makeLink(page);\n \n if ($router && (isObject(to) || this.useRouter)) {\n // Resolve the page via the $router\n guess = looseEqual(this.resolveRoute(to), currRoute) ? page : null;\n } else if (isBrowser) {\n // If no $router available (or !this.useRouter when `to` is a string)\n // we compare using parsed URIs\n guess = looseEqual(this.resolveLink(to), currLink) ? page : null;\n } else {\n // probably SSR, but no $router so we can't guess, so lets break out of\n // the loop early\n \n /* istanbul ignore next */\n guess = -1;\n }\n }\n } // We set currentPage to 0 to trigger an $emit('input', null)\n // As the default for this.currentPage is -1 when no value is specified\n // And valid page numbers are greater than 0\n \n \n this.currentPage = guess > 0 ? guess : 0;\n }\n }\n });\n \n var PaginationNavPlugin = /*#__PURE__*/pluginFactory({\n components: {\n BPaginationNav: BPaginationNav\n }\n });\n \n // Base on-demand component for tooltip / popover templates\n var NAME$A = 'BVPopper';\n var AttachmentMap$1 = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: 'right',\n BOTTOM: 'bottom',\n LEFT: 'left',\n TOPLEFT: 'top',\n TOPRIGHT: 'top',\n RIGHTTOP: 'right',\n RIGHTBOTTOM: 'right',\n BOTTOMLEFT: 'bottom',\n BOTTOMRIGHT: 'bottom',\n LEFTTOP: 'left',\n LEFTBOTTOM: 'left'\n };\n var OffsetMap = {\n AUTO: 0,\n TOPLEFT: -1,\n TOP: 0,\n TOPRIGHT: +1,\n RIGHTTOP: -1,\n RIGHT: 0,\n RIGHTBOTTOM: +1,\n BOTTOMLEFT: -1,\n BOTTOM: 0,\n BOTTOMRIGHT: +1,\n LEFTTOP: -1,\n LEFT: 0,\n LEFTBOTTOM: +1\n }; // @vue/component\n \n var BVPopper = /*#__PURE__*/Vue.extend({\n name: NAME$A,\n props: {\n target: {\n // Element that the tooltip/popover is positioned relative to\n type: [HTMLElement, SVGElement] // default: null\n \n },\n placement: {\n type: String,\n default: 'top'\n },\n fallbackPlacement: {\n type: [String, Array],\n default: 'flip'\n },\n offset: {\n type: Number,\n default: 0\n },\n boundary: {\n // 'scrollParent', 'viewport', 'window', or Element\n type: [String, HTMLElement],\n default: 'scrollParent'\n },\n boundaryPadding: {\n // Tooltip/popover will try and stay away from\n // boundary edge by this many pixels\n type: Number,\n default: 5\n },\n arrowPadding: {\n // The minimum distance (in `px`) from the edge of the\n // tooltip/popover that the arrow can be positioned\n type: Number,\n default: 6\n }\n },\n data: function data() {\n return {\n // reactive props set by parent\n noFade: false,\n // State related data\n localShow: true,\n attachment: this.getAttachment(this.placement)\n };\n },\n computed: {\n /* istanbul ignore next */\n templateType: function templateType()\n /* istanbul ignore next */\n {\n // Overridden by template component\n return 'unknown';\n },\n popperConfig: function popperConfig() {\n var _this = this;\n \n var placement = this.placement;\n return {\n placement: this.getAttachment(placement),\n modifiers: {\n offset: {\n offset: this.getOffset(placement)\n },\n flip: {\n behavior: this.fallbackPlacement\n },\n // `arrow.element` can also be a reference to an HTML Element\n // maybe we should make this a `$ref` in the templates?\n arrow: {\n element: '.arrow'\n },\n preventOverflow: {\n padding: this.boundaryPadding,\n boundariesElement: this.boundary\n }\n },\n onCreate: function onCreate(data) {\n // Handle flipping arrow classes\n if (data.originalPlacement !== data.placement) {\n /* istanbul ignore next: can't test in JSDOM */\n _this.popperPlacementChange(data);\n }\n },\n onUpdate: function onUpdate(data) {\n // Handle flipping arrow classes\n _this.popperPlacementChange(data);\n }\n };\n }\n },\n created: function created() {\n var _this2 = this;\n \n // Note: We are created on-demand, and should be guaranteed that\n // DOM is rendered/ready by the time the created hook runs\n this.$_popper = null; // Ensure we show as we mount\n \n this.localShow = true; // Create popper instance before shown\n \n this.$on('show', function (el) {\n _this2.popperCreate(el);\n }); // Self destruct once hidden\n \n this.$on('hidden', function () {\n _this2.$nextTick(_this2.$destroy);\n }); // If parent is destroyed, ensure we are destroyed\n \n this.$parent.$once('hook:destroyed', this.$destroy);\n },\n beforeMount: function beforeMount() {\n // Ensure that the attachment position is correct before mounting\n // as our propsData is added after `new Template({...})`\n this.attachment = this.getAttachment(this.placement);\n },\n mounted: function mounted() {// TBD\n },\n updated: function updated() {\n // Update popper if needed\n // TODO: Should this be a watcher on `this.popperConfig` instead?\n this.updatePopper();\n },\n beforeDestroy: function beforeDestroy() {\n this.destroyPopper();\n },\n destroyed: function destroyed() {\n // Make sure template is removed from DOM\n var el = this.$el;\n el && el.parentNode && el.parentNode.removeChild(el);\n },\n methods: {\n // \"Public\" method to trigger hide template\n hide: function hide() {\n this.localShow = false;\n },\n // Private\n getAttachment: function getAttachment(placement) {\n return AttachmentMap$1[String(placement).toUpperCase()] || 'auto';\n },\n getOffset: function getOffset(placement) {\n if (!this.offset) {\n // Could set a ref for the arrow element\n var arrow = this.$refs.arrow || select('.arrow', this.$el);\n var arrowOffset = toFloat(getCS(arrow).width, 0) + toFloat(this.arrowPadding, 0);\n \n switch (OffsetMap[String(placement).toUpperCase()] || 0) {\n /* istanbul ignore next: can't test in JSDOM */\n case +1:\n /* istanbul ignore next: can't test in JSDOM */\n return \"+50%p - \".concat(arrowOffset, \"px\");\n \n /* istanbul ignore next: can't test in JSDOM */\n \n case -1:\n /* istanbul ignore next: can't test in JSDOM */\n return \"-50%p + \".concat(arrowOffset, \"px\");\n \n default:\n return 0;\n }\n }\n /* istanbul ignore next */\n \n \n return this.offset;\n },\n popperCreate: function popperCreate(el) {\n this.destroyPopper(); // We use `el` rather than `this.$el` just in case the original\n // mountpoint root element type was changed by the template\n \n this.$_popper = new Popper(this.target, el, this.popperConfig);\n },\n destroyPopper: function destroyPopper() {\n this.$_popper && this.$_popper.destroy();\n this.$_popper = null;\n },\n updatePopper: function updatePopper() {\n this.$_popper && this.$_popper.scheduleUpdate();\n },\n popperPlacementChange: function popperPlacementChange(data) {\n // Callback used by popper to adjust the arrow placement\n this.attachment = this.getAttachment(data.placement);\n },\n \n /* istanbul ignore next */\n renderTemplate: function renderTemplate(h)\n /* istanbul ignore next */\n {\n // Will be overridden by templates\n return h('div');\n }\n },\n render: function render(h) {\n var _this3 = this;\n \n // Note: `show` and 'fade' classes are only appled during transition\n return h(BVTransition, {\n // Transitions as soon as mounted\n props: {\n appear: true,\n noFade: this.noFade\n },\n on: {\n // Events used by parent component/instance\n beforeEnter: function beforeEnter(el) {\n return _this3.$emit('show', el);\n },\n afterEnter: function afterEnter(el) {\n return _this3.$emit('shown', el);\n },\n beforeLeave: function beforeLeave(el) {\n return _this3.$emit('hide', el);\n },\n afterLeave: function afterLeave(el) {\n return _this3.$emit('hidden', el);\n }\n }\n }, [this.localShow ? this.renderTemplate(h) : h()]);\n }\n });\n \n var NAME$B = 'BVTooltipTemplate'; // @vue/component\n \n var BVTooltipTemplate = /*#__PURE__*/Vue.extend({\n name: NAME$B,\n extends: BVPopper,\n mixins: [scopedStyleAttrsMixin],\n props: {\n // Other non-reactive (while open) props are pulled in from BVPopper\n id: {\n type: String // default: null\n \n },\n html: {\n // Used only by the directive versions\n type: Boolean // default: false\n \n }\n },\n data: function data() {\n // We use data, rather than props to ensure reactivity\n // Parent component will directly set this data\n return {\n title: '',\n content: '',\n variant: null,\n customClass: null,\n interactive: true\n };\n },\n computed: {\n templateType: function templateType() {\n return 'tooltip';\n },\n templateClasses: function templateClasses() {\n var _ref;\n \n return [(_ref = {\n // Disables pointer events to hide the tooltip when the user\n // hovers over its content\n noninteractive: !this.interactive\n }, _defineProperty(_ref, \"b-\".concat(this.templateType, \"-\").concat(this.variant), this.variant), _defineProperty(_ref, \"bs-\".concat(this.templateType, \"-\").concat(this.attachment), this.attachment), _ref), this.customClass];\n },\n templateAttributes: function templateAttributes() {\n return _objectSpread2({\n id: this.id,\n role: 'tooltip',\n tabindex: '-1'\n }, this.scopedStyleAttrs);\n },\n templateListeners: function templateListeners() {\n var _this = this;\n \n // Used for hover/focus trigger listeners\n return {\n mouseenter\n /* istanbul ignore next */\n : function mouseenter(evt) {\n /* istanbul ignore next: difficult to test in JSDOM */\n _this.$emit('mouseenter', evt);\n },\n mouseleave\n /* istanbul ignore next */\n : function mouseleave(evt) {\n /* istanbul ignore next: difficult to test in JSDOM */\n _this.$emit('mouseleave', evt);\n },\n focusin\n /* istanbul ignore next */\n : function focusin(evt) {\n /* istanbul ignore next: difficult to test in JSDOM */\n _this.$emit('focusin', evt);\n },\n focusout\n /* istanbul ignore next */\n : function focusout(evt) {\n /* istanbul ignore next: difficult to test in JSDOM */\n _this.$emit('focusout', evt);\n }\n };\n }\n },\n methods: {\n renderTemplate: function renderTemplate(h) {\n // Title can be a scoped slot function\n var $title = isFunction(this.title) ? this.title({}) : isUndefinedOrNull(this.title) ?\n /* istanbul ignore next */\n h() : this.title; // Directive versions only\n \n var domProps = this.html && !isFunction(this.title) ? {\n innerHTML: this.title\n } : {};\n return h('div', {\n staticClass: 'tooltip b-tooltip',\n class: this.templateClasses,\n attrs: this.templateAttributes,\n on: this.templateListeners\n }, [h('div', {\n ref: 'arrow',\n staticClass: 'arrow'\n }), h('div', {\n staticClass: 'tooltip-inner',\n domProps: domProps\n }, [$title])]);\n }\n }\n });\n \n var NAME$C = 'BVTooltip'; // Modal container selector for appending tooltip/popover\n \n var MODAL_SELECTOR = '.modal-content'; // Modal `$root` hidden event\n \n var MODAL_CLOSE_EVENT = 'bv::modal::hidden'; // Sidebar container selector for appending tooltip/popover\n \n var SIDEBAR_SELECTOR = '.b-sidebar'; // For finding the container to append to\n \n var CONTAINER_SELECTOR = [MODAL_SELECTOR, SIDEBAR_SELECTOR].join(', '); // For dropdown sniffing\n \n var DROPDOWN_CLASS = 'dropdown';\n var DROPDOWN_OPEN_SELECTOR = '.dropdown-menu.show'; // Data specific to popper and template\n // We don't use props, as we need reactivity (we can't pass reactive props)\n \n var templateData = {\n // Text string or Scoped slot function\n title: '',\n // Text string or Scoped slot function\n content: '',\n // String\n variant: null,\n // String, Array, Object\n customClass: null,\n // String or array of Strings (overwritten by BVPopper)\n triggers: '',\n // String (overwritten by BVPopper)\n placement: 'auto',\n // String or array of strings\n fallbackPlacement: 'flip',\n // Element or Component reference (or function that returns element) of\n // the element that will have the trigger events bound, and is also\n // default element for positioning\n target: null,\n // HTML ID, Element or Component reference\n container: null,\n // 'body'\n // Boolean\n noFade: false,\n // 'scrollParent', 'viewport', 'window', Element, or Component reference\n boundary: 'scrollParent',\n // Tooltip/popover will try and stay away from\n // boundary edge by this many pixels (Number)\n boundaryPadding: 5,\n // Arrow offset (Number)\n offset: 0,\n // Hover/focus delay (Number or Object)\n delay: 0,\n // Arrow of Tooltip/popover will try and stay away from\n // the edge of tooltip/popover edge by this many pixels\n arrowPadding: 6,\n // Interactive state (Boolean)\n interactive: true,\n // Disabled state (Boolean)\n disabled: false,\n // ID to use for tooltip/popover\n id: null,\n // Flag used by directives only, for HTML content\n html: false\n }; // @vue/component\n \n var BVTooltip = /*#__PURE__*/Vue.extend({\n name: NAME$C,\n props: {// None\n },\n data: function data() {\n return _objectSpread2(_objectSpread2({}, templateData), {}, {\n // State management data\n activeTrigger: {\n // manual: false,\n hover: false,\n click: false,\n focus: false\n },\n localShow: false\n });\n },\n computed: {\n templateType: function templateType() {\n // Overwritten by BVPopover\n return 'tooltip';\n },\n computedId: function computedId() {\n return this.id || \"__bv_\".concat(this.templateType, \"_\").concat(this._uid, \"__\");\n },\n computedDelay: function computedDelay() {\n // Normalizes delay into object form\n var delay = {\n show: 0,\n hide: 0\n };\n \n if (isPlainObject(this.delay)) {\n delay.show = mathMax(toInteger(this.delay.show, 0), 0);\n delay.hide = mathMax(toInteger(this.delay.hide, 0), 0);\n } else if (isNumber(this.delay) || isString(this.delay)) {\n delay.show = delay.hide = mathMax(toInteger(this.delay, 0), 0);\n }\n \n return delay;\n },\n computedTriggers: function computedTriggers() {\n // Returns the triggers in sorted array form\n // TODO: Switch this to object form for easier lookup\n return concat(this.triggers).filter(Boolean).join(' ').trim().toLowerCase().split(/\\s+/).sort();\n },\n isWithActiveTrigger: function isWithActiveTrigger() {\n for (var trigger in this.activeTrigger) {\n if (this.activeTrigger[trigger]) {\n return true;\n }\n }\n \n return false;\n },\n computedTemplateData: function computedTemplateData() {\n return {\n title: this.title,\n content: this.content,\n variant: this.variant,\n customClass: this.customClass,\n noFade: this.noFade,\n interactive: this.interactive\n };\n }\n },\n watch: {\n computedTriggers: function computedTriggers(newTriggers, oldTriggers) {\n var _this = this;\n \n // Triggers have changed, so re-register them\n \n /* istanbul ignore next */\n if (!looseEqual(newTriggers, oldTriggers)) {\n this.$nextTick(function () {\n // Disable trigger listeners\n _this.unListen(); // Clear any active triggers that are no longer in the list of triggers\n \n \n oldTriggers.forEach(function (trigger) {\n if (!arrayIncludes(newTriggers, trigger)) {\n if (_this.activeTrigger[trigger]) {\n _this.activeTrigger[trigger] = false;\n }\n }\n }); // Re-enable the trigger listeners\n \n _this.listen();\n });\n }\n },\n computedTemplateData: function computedTemplateData() {\n // If any of the while open reactive \"props\" change,\n // ensure that the template updates accordingly\n this.handleTemplateUpdate();\n },\n disabled: function disabled(newVal) {\n newVal ? this.disable() : this.enable();\n }\n },\n created: function created() {\n var _this2 = this;\n \n // Create non-reactive properties\n this.$_tip = null;\n this.$_hoverTimeout = null;\n this.$_hoverState = '';\n this.$_visibleInterval = null;\n this.$_enabled = !this.disabled;\n this.$_noop = noop.bind(this); // Destroy ourselves when the parent is destroyed\n \n if (this.$parent) {\n this.$parent.$once('hook:beforeDestroy', this.$destroy);\n }\n \n this.$nextTick(function () {\n var target = _this2.getTarget();\n \n if (target && contains(document.body, target)) {\n // Copy the parent's scoped style attribute\n _this2.scopeId = getScopeId(_this2.$parent); // Set up all trigger handlers and listeners\n \n _this2.listen();\n } else {\n /* istanbul ignore next */\n warn('Unable to find target element in document.', _this2.templateType);\n }\n });\n },\n \n /* istanbul ignore next */\n updated: function updated()\n /* istanbul ignore next */\n {\n // Usually called when the slots/data changes\n this.$nextTick(this.handleTemplateUpdate);\n },\n \n /* istanbul ignore next */\n deactivated: function deactivated()\n /* istanbul ignore next */\n {\n // In a keepalive that has been deactivated, so hide\n // the tooltip/popover if it is showing\n this.forceHide();\n },\n beforeDestroy: function beforeDestroy() {\n // Remove all handler/listeners\n this.unListen();\n this.setWhileOpenListeners(false); // Clear any timeouts/intervals\n \n this.clearHoverTimeout();\n this.clearVisibilityInterval(); // Destroy the template\n \n this.destroyTemplate(); // Remove any other private properties created during create\n \n this.$_noop = null;\n },\n methods: {\n // --- Methods for creating and destroying the template ---\n getTemplate: function getTemplate() {\n // Overridden by BVPopover\n return BVTooltipTemplate;\n },\n updateData: function updateData() {\n var _this3 = this;\n \n var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n // Method for updating popper/template data\n // We only update data if it exists, and has not changed\n var titleUpdated = false;\n keys(templateData).forEach(function (prop) {\n if (!isUndefined(data[prop]) && _this3[prop] !== data[prop]) {\n _this3[prop] = data[prop];\n \n if (prop === 'title') {\n titleUpdated = true;\n }\n }\n });\n \n if (titleUpdated && this.localShow) {\n // If the title has updated, we may need to handle the title\n // attribute on the trigger target. We only do this while the\n // template is open\n this.fixTitle();\n }\n },\n createTemplateAndShow: function createTemplateAndShow() {\n // Creates the template instance and show it\n var container = this.getContainer();\n var Template = this.getTemplate();\n var $tip = this.$_tip = new Template({\n parent: this,\n // The following is not reactive to changes in the props data\n propsData: {\n // These values cannot be changed while template is showing\n id: this.computedId,\n html: this.html,\n placement: this.placement,\n fallbackPlacement: this.fallbackPlacement,\n target: this.getPlacementTarget(),\n boundary: this.getBoundary(),\n // Ensure the following are integers\n offset: toInteger(this.offset, 0),\n arrowPadding: toInteger(this.arrowPadding, 0),\n boundaryPadding: toInteger(this.boundaryPadding, 0)\n }\n }); // We set the initial reactive data (values that can be changed while open)\n \n this.handleTemplateUpdate(); // Template transition phase events (handled once only)\n // When the template has mounted, but not visibly shown yet\n \n $tip.$once('show', this.onTemplateShow); // When the template has completed showing\n \n $tip.$once('shown', this.onTemplateShown); // When the template has started to hide\n \n $tip.$once('hide', this.onTemplateHide); // When the template has completed hiding\n \n $tip.$once('hidden', this.onTemplateHidden); // When the template gets destroyed for any reason\n \n $tip.$once('hook:destroyed', this.destroyTemplate); // Convenience events from template\n // To save us from manually adding/removing DOM\n // listeners to tip element when it is open\n \n $tip.$on('focusin', this.handleEvent);\n $tip.$on('focusout', this.handleEvent);\n $tip.$on('mouseenter', this.handleEvent);\n $tip.$on('mouseleave', this.handleEvent); // Mount (which triggers the `show`)\n \n $tip.$mount(container.appendChild(document.createElement('div'))); // Template will automatically remove its markup from DOM when hidden\n },\n hideTemplate: function hideTemplate() {\n // Trigger the template to start hiding\n // The template will emit the `hide` event after this and\n // then emit the `hidden` event once it is fully hidden\n // The `hook:destroyed` will also be called (safety measure)\n this.$_tip && this.$_tip.hide(); // Clear out any stragging active triggers\n \n this.clearActiveTriggers(); // Reset the hover state\n \n this.$_hoverState = '';\n },\n // Destroy the template instance and reset state\n destroyTemplate: function destroyTemplate() {\n this.setWhileOpenListeners(false);\n this.clearHoverTimeout();\n this.$_hoverState = '';\n this.clearActiveTriggers();\n this.localPlacementTarget = null;\n \n try {\n this.$_tip.$destroy();\n } catch (_unused) {}\n \n this.$_tip = null;\n this.removeAriaDescribedby();\n this.restoreTitle();\n this.localShow = false;\n },\n getTemplateElement: function getTemplateElement() {\n return this.$_tip ? this.$_tip.$el : null;\n },\n handleTemplateUpdate: function handleTemplateUpdate() {\n var _this4 = this;\n \n // Update our template title/content \"props\"\n // So that the template updates accordingly\n var $tip = this.$_tip;\n \n if ($tip) {\n var props = ['title', 'content', 'variant', 'customClass', 'noFade', 'interactive']; // Only update the values if they have changed\n \n props.forEach(function (prop) {\n if ($tip[prop] !== _this4[prop]) {\n $tip[prop] = _this4[prop];\n }\n });\n }\n },\n // --- Show/Hide handlers ---\n // Show the tooltip\n show: function show() {\n var target = this.getTarget();\n \n if (!target || !contains(document.body, target) || !isVisible(target) || this.dropdownOpen() || (isUndefinedOrNull(this.title) || this.title === '') && (isUndefinedOrNull(this.content) || this.content === '')) {\n // If trigger element isn't in the DOM or is not visible, or\n // is on an open dropdown toggle, or has no content, then\n // we exit without showing\n return;\n } // If tip already exists, exit early\n \n \n if (this.$_tip || this.localShow) {\n /* istanbul ignore next */\n return;\n } // In the process of showing\n \n \n this.localShow = true; // Create a cancelable BvEvent\n \n var showEvt = this.buildEvent('show', {\n cancelable: true\n });\n this.emitEvent(showEvt); // Don't show if event cancelled\n \n /* istanbul ignore if */\n \n if (showEvt.defaultPrevented) {\n // Destroy the template (if for some reason it was created)\n this.destroyTemplate();\n return;\n } // Fix the title attribute on target\n \n \n this.fixTitle(); // Set aria-describedby on target\n \n this.addAriaDescribedby(); // Create and show the tooltip\n \n this.createTemplateAndShow();\n },\n hide: function hide() {\n var force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n // Hide the tooltip\n var tip = this.getTemplateElement();\n /* istanbul ignore if */\n \n if (!tip || !this.localShow) {\n this.restoreTitle();\n return;\n } // Emit cancelable BvEvent 'hide'\n // We disable cancelling if `force` is true\n \n \n var hideEvt = this.buildEvent('hide', {\n cancelable: !force\n });\n this.emitEvent(hideEvt);\n /* istanbul ignore if: ignore for now */\n \n if (hideEvt.defaultPrevented) {\n // Don't hide if event cancelled\n return;\n } // Tell the template to hide\n \n \n this.hideTemplate();\n },\n forceHide: function forceHide() {\n // Forcefully hides/destroys the template, regardless of any active triggers\n var tip = this.getTemplateElement();\n \n if (!tip || !this.localShow) {\n /* istanbul ignore next */\n return;\n } // Disable while open listeners/watchers\n // This is also done in the template `hide` evt handler\n \n \n this.setWhileOpenListeners(false); // Clear any hover enter/leave event\n \n this.clearHoverTimeout();\n this.$_hoverState = '';\n this.clearActiveTriggers(); // Disable the fade animation on the template\n \n if (this.$_tip) {\n this.$_tip.noFade = true;\n } // Hide the tip (with force = true)\n \n \n this.hide(true);\n },\n enable: function enable() {\n this.$_enabled = true; // Create a non-cancelable BvEvent\n \n this.emitEvent(this.buildEvent('enabled'));\n },\n disable: function disable() {\n this.$_enabled = false; // Create a non-cancelable BvEvent\n \n this.emitEvent(this.buildEvent('disabled'));\n },\n // --- Handlers for template events ---\n // When template is inserted into DOM, but not yet shown\n onTemplateShow: function onTemplateShow() {\n // Enable while open listeners/watchers\n this.setWhileOpenListeners(true);\n },\n // When template show transition completes\n onTemplateShown: function onTemplateShown() {\n var prevHoverState = this.$_hoverState;\n this.$_hoverState = '';\n /* istanbul ignore next: occasional Node 10 coverage error */\n \n if (prevHoverState === 'out') {\n this.leave(null);\n } // Emit a non-cancelable BvEvent 'shown'\n \n \n this.emitEvent(this.buildEvent('shown'));\n },\n // When template is starting to hide\n onTemplateHide: function onTemplateHide() {\n // Disable while open listeners/watchers\n this.setWhileOpenListeners(false);\n },\n // When template has completed closing (just before it self destructs)\n onTemplateHidden: function onTemplateHidden() {\n // Destroy the template\n this.destroyTemplate(); // Emit a non-cancelable BvEvent 'shown'\n \n this.emitEvent(this.buildEvent('hidden'));\n },\n // --- Utility methods ---\n getTarget: function getTarget() {\n // Handle case where target may be a component ref\n var target = this.target ? this.target.$el || this.target : null; // If an ID\n \n target = isString(target) ? getById(target.replace(/^#/, '')) : target; // If a function\n \n target = isFunction(target) ? target() : target; // If an element ref\n \n return isElement(target) ? target : null;\n },\n getPlacementTarget: function getPlacementTarget() {\n // This is the target that the tooltip will be placed on, which may not\n // necessarily be the same element that has the trigger event listeners\n // For now, this is the same as target\n // TODO:\n // Add in child selector support\n // Add in visibility checks for this element\n // Fallback to target if not found\n return this.getTarget();\n },\n getTargetId: function getTargetId() {\n // Returns the ID of the trigger element\n var target = this.getTarget();\n return target && target.id ? target.id : null;\n },\n getContainer: function getContainer() {\n // Handle case where container may be a component ref\n var container = this.container ? this.container.$el || this.container : false;\n var body = document.body;\n var target = this.getTarget(); // If we are in a modal, we append to the modal, If we\n // are in a sidebar, we append to the sidebar, else append\n // to body, unless a container is specified\n // TODO:\n // Template should periodically check to see if it is in dom\n // And if not, self destruct (if container got v-if'ed out of DOM)\n // Or this could possibly be part of the visibility check\n \n return container === false ? closest(CONTAINER_SELECTOR, target) || body :\n /*istanbul ignore next */\n isString(container) ?\n /*istanbul ignore next */\n getById(container.replace(/^#/, '')) || body :\n /*istanbul ignore next */\n body;\n },\n getBoundary: function getBoundary() {\n return this.boundary ? this.boundary.$el || this.boundary : 'scrollParent';\n },\n isInModal: function isInModal() {\n var target = this.getTarget();\n return target && closest(MODAL_SELECTOR, target);\n },\n isDropdown: function isDropdown() {\n // Returns true if trigger is a dropdown\n var target = this.getTarget();\n return target && hasClass(target, DROPDOWN_CLASS);\n },\n dropdownOpen: function dropdownOpen() {\n // Returns true if trigger is a dropdown and the dropdown menu is open\n var target = this.getTarget();\n return this.isDropdown() && target && select(DROPDOWN_OPEN_SELECTOR, target);\n },\n clearHoverTimeout: function clearHoverTimeout() {\n clearTimeout(this.$_hoverTimeout);\n this.$_hoverTimeout = null;\n },\n clearVisibilityInterval: function clearVisibilityInterval() {\n clearInterval(this.$_visibleInterval);\n this.$_visibleInterval = null;\n },\n clearActiveTriggers: function clearActiveTriggers() {\n for (var trigger in this.activeTrigger) {\n this.activeTrigger[trigger] = false;\n }\n },\n addAriaDescribedby: function addAriaDescribedby() {\n // Add aria-describedby on trigger element, without removing any other IDs\n var target = this.getTarget();\n var desc = getAttr(target, 'aria-describedby') || '';\n desc = desc.split(/\\s+/).concat(this.computedId).join(' ').trim(); // Update/add aria-described by\n \n setAttr(target, 'aria-describedby', desc);\n },\n removeAriaDescribedby: function removeAriaDescribedby() {\n var _this5 = this;\n \n // Remove aria-describedby on trigger element, without removing any other IDs\n var target = this.getTarget();\n var desc = getAttr(target, 'aria-describedby') || '';\n desc = desc.split(/\\s+/).filter(function (d) {\n return d !== _this5.computedId;\n }).join(' ').trim(); // Update or remove aria-describedby\n \n if (desc) {\n /* istanbul ignore next */\n setAttr(target, 'aria-describedby', desc);\n } else {\n removeAttr(target, 'aria-describedby');\n }\n },\n fixTitle: function fixTitle() {\n // If the target has a title attribute, null it out and\n // store on data-title\n var target = this.getTarget();\n \n if (target && getAttr(target, 'title')) {\n // We only update title attribute if it has a value\n setAttr(target, 'data-original-title', getAttr(target, 'title') || '');\n setAttr(target, 'title', '');\n }\n },\n restoreTitle: function restoreTitle() {\n // If target had a title, restore the title attribute\n // and remove the data-title attribute\n var target = this.getTarget();\n \n if (target && hasAttr(target, 'data-original-title')) {\n setAttr(target, 'title', getAttr(target, 'data-original-title') || '');\n removeAttr(target, 'data-original-title');\n }\n },\n // --- BvEvent helpers ---\n buildEvent: function buildEvent(type) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n // Defaults to a non-cancellable event\n return new BvEvent(type, _objectSpread2({\n cancelable: false,\n target: this.getTarget(),\n relatedTarget: this.getTemplateElement() || null,\n componentId: this.computedId,\n vueTarget: this\n }, options));\n },\n emitEvent: function emitEvent(bvEvt) {\n // Emits a BvEvent on $root and this instance\n var evtName = bvEvt.type;\n var $root = this.$root;\n \n if ($root && $root.$emit) {\n // Emit an event on $root\n $root.$emit(\"bv::\".concat(this.templateType, \"::\").concat(evtName), bvEvt);\n }\n \n this.$emit(evtName, bvEvt);\n },\n // --- Event handler setup methods ---\n listen: function listen() {\n var _this6 = this;\n \n // Enable trigger event handlers\n var el = this.getTarget();\n \n if (!el) {\n /* istanbul ignore next */\n return;\n } // Listen for global show/hide events\n \n \n this.setRootListener(true); // Set up our listeners on the target trigger element\n \n this.computedTriggers.forEach(function (trigger) {\n if (trigger === 'click') {\n eventOn(el, 'click', _this6.handleEvent, EVENT_OPTIONS_NO_CAPTURE);\n } else if (trigger === 'focus') {\n eventOn(el, 'focusin', _this6.handleEvent, EVENT_OPTIONS_NO_CAPTURE);\n eventOn(el, 'focusout', _this6.handleEvent, EVENT_OPTIONS_NO_CAPTURE);\n } else if (trigger === 'blur') {\n // Used to close $tip when element looses focus\n \n /* istanbul ignore next */\n eventOn(el, 'focusout', _this6.handleEvent, EVENT_OPTIONS_NO_CAPTURE);\n } else if (trigger === 'hover') {\n eventOn(el, 'mouseenter', _this6.handleEvent, EVENT_OPTIONS_NO_CAPTURE);\n eventOn(el, 'mouseleave', _this6.handleEvent, EVENT_OPTIONS_NO_CAPTURE);\n }\n }, this);\n },\n unListen: function unListen()\n /* istanbul ignore next */\n {\n var _this7 = this;\n \n // Remove trigger event handlers\n var events = ['click', 'focusin', 'focusout', 'mouseenter', 'mouseleave'];\n var target = this.getTarget(); // Stop listening for global show/hide/enable/disable events\n \n this.setRootListener(false); // Clear out any active target listeners\n \n events.forEach(function (evt) {\n target && eventOff(target, evt, _this7.handleEvent, EVENT_OPTIONS_NO_CAPTURE);\n }, this);\n },\n setRootListener: function setRootListener(on) {\n // Listen for global `bv::{hide|show}::{tooltip|popover}` hide request event\n var $root = this.$root;\n \n if ($root) {\n var method = on ? '$on' : '$off';\n var type = this.templateType;\n $root[method](\"bv::hide::\".concat(type), this.doHide);\n $root[method](\"bv::show::\".concat(type), this.doShow);\n $root[method](\"bv::disable::\".concat(type), this.doDisable);\n $root[method](\"bv::enable::\".concat(type), this.doEnable);\n }\n },\n setWhileOpenListeners: function setWhileOpenListeners(on) {\n // Events that are only registered when the template is showing\n // Modal close events\n this.setModalListener(on); // Dropdown open events (if we are attached to a dropdown)\n \n this.setDropdownListener(on); // Periodic $element visibility check\n // For handling when tip target is in <keepalive>, tabs, carousel, etc\n \n this.visibleCheck(on); // On-touch start listeners\n \n this.setOnTouchStartListener(on);\n },\n // Handler for periodic visibility check\n visibleCheck: function visibleCheck(on) {\n var _this8 = this;\n \n this.clearVisibilityInterval();\n var target = this.getTarget();\n var tip = this.getTemplateElement();\n \n if (on) {\n this.$_visibleInterval = setInterval(function () {\n if (tip && _this8.localShow && (!target.parentNode || !isVisible(target))) {\n // Target element is no longer visible or not in DOM, so force-hide the tooltip\n _this8.forceHide();\n }\n }, 100);\n }\n },\n setModalListener: function setModalListener(on) {\n // Handle case where tooltip/target is in a modal\n if (this.isInModal()) {\n // We can listen for modal hidden events on `$root`\n this.$root[on ? '$on' : '$off'](MODAL_CLOSE_EVENT, this.forceHide);\n }\n },\n setOnTouchStartListener: function setOnTouchStartListener(on)\n /* istanbul ignore next: JSDOM doesn't support `ontouchstart` */\n {\n var _this9 = this;\n \n // If this is a touch-enabled device we add extra empty\n // `mouseover` listeners to the body's immediate children\n // Only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement) {\n from(document.body.children).forEach(function (el) {\n eventOnOff(on, el, 'mouseover', _this9.$_noop);\n });\n }\n },\n setDropdownListener: function setDropdownListener(on) {\n var target = this.getTarget();\n \n if (!target || !this.$root || !this.isDropdown) {\n return;\n } // We can listen for dropdown shown events on its instance\n // TODO:\n // We could grab the ID from the dropdown, and listen for\n // $root events for that particular dropdown id\n // Dropdown shown and hidden events will need to emit\n // Note: Dropdown auto-ID happens in a `$nextTick()` after mount\n // So the ID lookup would need to be done in a `$nextTick()`\n \n \n if (target.__vue__) {\n target.__vue__[on ? '$on' : '$off']('shown', this.forceHide);\n }\n },\n // --- Event handlers ---\n handleEvent: function handleEvent(evt) {\n // General trigger event handler\n // target is the trigger element\n var target = this.getTarget();\n \n if (!target || isDisabled(target) || !this.$_enabled || this.dropdownOpen()) {\n // If disabled or not enabled, or if a dropdown that is open, don't do anything\n // If tip is shown before element gets disabled, then tip will not\n // close until no longer disabled or forcefully closed\n return;\n }\n \n var type = evt.type;\n var triggers = this.computedTriggers;\n \n if (type === 'click' && arrayIncludes(triggers, 'click')) {\n this.click(evt);\n } else if (type === 'mouseenter' && arrayIncludes(triggers, 'hover')) {\n // `mouseenter` is a non-bubbling event\n this.enter(evt);\n } else if (type === 'focusin' && arrayIncludes(triggers, 'focus')) {\n // `focusin` is a bubbling event\n // `evt` includes `relatedTarget` (element losing focus)\n this.enter(evt);\n } else if (type === 'focusout' && (arrayIncludes(triggers, 'focus') || arrayIncludes(triggers, 'blur')) || type === 'mouseleave' && arrayIncludes(triggers, 'hover')) {\n // `focusout` is a bubbling event\n // `mouseleave` is a non-bubbling event\n // `tip` is the template (will be null if not open)\n var tip = this.getTemplateElement(); // `evtTarget` is the element which is losing focus/hover and\n \n var evtTarget = evt.target; // `relatedTarget` is the element gaining focus/hover\n \n var relatedTarget = evt.relatedTarget;\n /* istanbul ignore next */\n \n if ( // From tip to target\n tip && contains(tip, evtTarget) && contains(target, relatedTarget) || // From target to tip\n tip && contains(target, evtTarget) && contains(tip, relatedTarget) || // Within tip\n tip && contains(tip, evtTarget) && contains(tip, relatedTarget) || // Within target\n contains(target, evtTarget) && contains(target, relatedTarget)) {\n // If focus/hover moves within `tip` and `target`, don't trigger a leave\n return;\n } // Otherwise trigger a leave\n \n \n this.leave(evt);\n }\n },\n doHide: function doHide(id) {\n // Programmatically hide tooltip or popover\n if (!id || this.getTargetId() === id || this.computedId === id) {\n // Close all tooltips or popovers, or this specific tip (with ID)\n this.forceHide();\n }\n },\n doShow: function doShow(id) {\n // Programmatically show tooltip or popover\n if (!id || this.getTargetId() === id || this.computedId === id) {\n // Open all tooltips or popovers, or this specific tip (with ID)\n this.show();\n }\n },\n \n /*istanbul ignore next: ignore for now */\n doDisable: function doDisable(id)\n /*istanbul ignore next: ignore for now */\n {\n // Programmatically disable tooltip or popover\n if (!id || this.getTargetId() === id || this.computedId === id) {\n // Disable all tooltips or popovers (no ID), or this specific tip (with ID)\n this.disable();\n }\n },\n \n /*istanbul ignore next: ignore for now */\n doEnable: function doEnable(id)\n /*istanbul ignore next: ignore for now */\n {\n // Programmatically enable tooltip or popover\n if (!id || this.getTargetId() === id || this.computedId === id) {\n // Enable all tooltips or popovers (no ID), or this specific tip (with ID)\n this.enable();\n }\n },\n click: function click(evt) {\n if (!this.$_enabled || this.dropdownOpen()) {\n /* istanbul ignore next */\n return;\n } // Get around a WebKit bug where `click` does not trigger focus events\n // On most browsers, `click` triggers a `focusin`/`focus` event first\n // Needed so that trigger 'click blur' works on iOS\n // https://github.com/bootstrap-vue/bootstrap-vue/issues/5099\n // We use `currentTarget` rather than `target` to trigger on the\n // element, not the inner content\n \n \n attemptFocus(evt.currentTarget);\n this.activeTrigger.click = !this.activeTrigger.click;\n \n if (this.isWithActiveTrigger) {\n this.enter(null);\n } else {\n /* istanbul ignore next */\n this.leave(null);\n }\n },\n \n /* istanbul ignore next */\n toggle: function toggle()\n /* istanbul ignore next */\n {\n // Manual toggle handler\n if (!this.$_enabled || this.dropdownOpen()) {\n /* istanbul ignore next */\n return;\n } // Should we register as an active trigger?\n // this.activeTrigger.manual = !this.activeTrigger.manual\n \n \n if (this.localShow) {\n this.leave(null);\n } else {\n this.enter(null);\n }\n },\n enter: function enter() {\n var _this10 = this;\n \n var evt = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n \n // Opening trigger handler\n // Note: Click events are sent with evt === null\n if (evt) {\n this.activeTrigger[evt.type === 'focusin' ? 'focus' : 'hover'] = true;\n }\n /* istanbul ignore next */\n \n \n if (this.localShow || this.$_hoverState === 'in') {\n this.$_hoverState = 'in';\n return;\n }\n \n this.clearHoverTimeout();\n this.$_hoverState = 'in';\n \n if (!this.computedDelay.show) {\n this.show();\n } else {\n // Hide any title attribute while enter delay is active\n this.fixTitle();\n this.$_hoverTimeout = setTimeout(function () {\n /* istanbul ignore else */\n if (_this10.$_hoverState === 'in') {\n _this10.show();\n } else if (!_this10.localShow) {\n _this10.restoreTitle();\n }\n }, this.computedDelay.show);\n }\n },\n leave: function leave() {\n var _this11 = this;\n \n var evt = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n \n // Closing trigger handler\n // Note: Click events are sent with evt === null\n if (evt) {\n this.activeTrigger[evt.type === 'focusout' ? 'focus' : 'hover'] = false;\n /* istanbul ignore next */\n \n if (evt.type === 'focusout' && arrayIncludes(this.computedTriggers, 'blur')) {\n // Special case for `blur`: we clear out the other triggers\n this.activeTrigger.click = false;\n this.activeTrigger.hover = false;\n }\n }\n /* istanbul ignore next: ignore for now */\n \n \n if (this.isWithActiveTrigger) {\n return;\n }\n \n this.clearHoverTimeout();\n this.$_hoverState = 'out';\n \n if (!this.computedDelay.hide) {\n this.hide();\n } else {\n this.$_hoverTimeout = setTimeout(function () {\n if (_this11.$_hoverState === 'out') {\n _this11.hide();\n }\n }, this.computedDelay.hide);\n }\n }\n }\n });\n \n var NAME$D = 'BTooltip'; // @vue/component\n \n var BTooltip = /*#__PURE__*/Vue.extend({\n name: NAME$D,\n props: {\n title: {\n type: String // default: undefined\n \n },\n // Added in by BPopover\n // content: {\n // type: String,\n // default: undefined\n // },\n target: {\n // String ID of element, or element/component reference\n // Or function that returns one of the above\n type: [String, HTMLElement, SVGElement, Function, Object],\n required: true\n },\n triggers: {\n type: [String, Array],\n default: 'hover focus'\n },\n placement: {\n type: String,\n default: 'top'\n },\n fallbackPlacement: {\n type: [String, Array],\n default: 'flip',\n validator: function validator(value) {\n return isArray(value) && value.every(function (v) {\n return isString(v);\n }) || arrayIncludes(['flip', 'clockwise', 'counterclockwise'], value);\n }\n },\n variant: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$D, 'variant');\n }\n },\n customClass: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$D, 'customClass');\n }\n },\n delay: {\n type: [Number, Object, String],\n default: function _default() {\n return getComponentConfig(NAME$D, 'delay');\n }\n },\n boundary: {\n // String: scrollParent, window, or viewport\n // Element: element reference\n // Object: Vue component\n type: [String, HTMLElement, Object],\n default: function _default() {\n return getComponentConfig(NAME$D, 'boundary');\n }\n },\n boundaryPadding: {\n type: [Number, String],\n default: function _default() {\n return getComponentConfig(NAME$D, 'boundaryPadding');\n }\n },\n offset: {\n type: [Number, String],\n default: 0\n },\n noFade: {\n type: Boolean,\n default: false\n },\n container: {\n // String: HTML ID of container, if null body is used (default)\n // HTMLElement: element reference reference\n // Object: Vue Component\n type: [String, HTMLElement, Object] // default: undefined\n \n },\n show: {\n type: Boolean,\n default: false\n },\n noninteractive: {\n type: Boolean,\n default: false\n },\n disabled: {\n type: Boolean,\n default: false\n },\n id: {\n // ID to use for tooltip element\n // If not provided on will automatically be generated\n type: String // default: null\n \n }\n },\n data: function data() {\n return {\n localShow: this.show,\n localTitle: '',\n localContent: ''\n };\n },\n computed: {\n templateData: function templateData() {\n // Data that will be passed to the template and popper\n return {\n // We use massaged versions of the title and content props/slots\n title: this.localTitle,\n content: this.localContent,\n // Pass these props as is\n target: this.target,\n triggers: this.triggers,\n placement: this.placement,\n fallbackPlacement: this.fallbackPlacement,\n variant: this.variant,\n customClass: this.customClass,\n container: this.container,\n boundary: this.boundary,\n boundaryPadding: this.boundaryPadding,\n delay: this.delay,\n offset: this.offset,\n noFade: this.noFade,\n interactive: !this.noninteractive,\n disabled: this.disabled,\n id: this.id\n };\n },\n templateTitleContent: function templateTitleContent() {\n // Used to watch for changes to the title and content props\n return {\n title: this.title,\n content: this.content\n };\n }\n },\n watch: {\n show: function show(_show, oldVal) {\n if (_show !== oldVal && _show !== this.localShow && this.$_toolpop) {\n if (_show) {\n this.$_toolpop.show();\n } else {\n // We use `forceHide()` to override any active triggers\n this.$_toolpop.forceHide();\n }\n }\n },\n disabled: function disabled(newVal) {\n if (newVal) {\n this.doDisable();\n } else {\n this.doEnable();\n }\n },\n localShow: function localShow(newVal) {\n // TODO: May need to be done in a `$nextTick()`\n this.$emit('update:show', newVal);\n },\n templateData: function templateData() {\n var _this = this;\n \n this.$nextTick(function () {\n if (_this.$_toolpop) {\n _this.$_toolpop.updateData(_this.templateData);\n }\n });\n },\n // Watchers for title/content props (prop changes do not trigger the `updated()` hook)\n templateTitleContent: function templateTitleContent() {\n this.$nextTick(this.updateContent);\n }\n },\n created: function created() {\n // Create private non-reactive props\n this.$_toolpop = null;\n },\n updated: function updated() {\n // Update the `propData` object\n // Done in a `$nextTick()` to ensure slot(s) have updated\n this.$nextTick(this.updateContent);\n },\n beforeDestroy: function beforeDestroy() {\n // Shutdown our local event listeners\n this.$off('open', this.doOpen);\n this.$off('close', this.doClose);\n this.$off('disable', this.doDisable);\n this.$off('enable', this.doEnable); // Destroy the tip instance\n \n if (this.$_toolpop) {\n this.$_toolpop.$destroy();\n this.$_toolpop = null;\n }\n },\n mounted: function mounted() {\n var _this2 = this;\n \n // Instantiate a new BVTooltip instance\n // Done in a `$nextTick()` to ensure DOM has completed rendering\n // so that target can be found\n this.$nextTick(function () {\n // Load the on demand child instance\n var Component = _this2.getComponent(); // Ensure we have initial content\n \n \n _this2.updateContent(); // Pass down the scoped style attribute if available\n \n \n var scopeId = getScopeId(_this2) || getScopeId(_this2.$parent); // Create the instance\n \n var $toolpop = _this2.$_toolpop = new Component({\n parent: _this2,\n // Pass down the scoped style ID\n _scopeId: scopeId || undefined\n }); // Set the initial data\n \n $toolpop.updateData(_this2.templateData); // Set listeners\n \n $toolpop.$on('show', _this2.onShow);\n $toolpop.$on('shown', _this2.onShown);\n $toolpop.$on('hide', _this2.onHide);\n $toolpop.$on('hidden', _this2.onHidden);\n $toolpop.$on('disabled', _this2.onDisabled);\n $toolpop.$on('enabled', _this2.onEnabled); // Initially disabled?\n \n if (_this2.disabled) {\n // Initially disabled\n _this2.doDisable();\n } // Listen to open signals from others\n \n \n _this2.$on('open', _this2.doOpen); // Listen to close signals from others\n \n \n _this2.$on('close', _this2.doClose); // Listen to disable signals from others\n \n \n _this2.$on('disable', _this2.doDisable); // Listen to enable signals from others\n \n \n _this2.$on('enable', _this2.doEnable); // Initially show tooltip?\n \n \n if (_this2.localShow) {\n $toolpop.show();\n }\n });\n },\n methods: {\n getComponent: function getComponent() {\n // Overridden by BPopover\n return BVTooltip;\n },\n updateContent: function updateContent() {\n // Overridden by BPopover\n // Tooltip: Default slot is `title`\n // Popover: Default slot is `content`, `title` slot is title\n // We pass a scoped slot function reference by default (Vue v2.6x)\n // And pass the title prop as a fallback\n this.setTitle(this.$scopedSlots.default || this.title);\n },\n // Helper methods for `updateContent()`\n setTitle: function setTitle(val) {\n val = isUndefinedOrNull(val) ? '' : val; // We only update the value if it has changed\n \n if (this.localTitle !== val) {\n this.localTitle = val;\n }\n },\n setContent: function setContent(val) {\n val = isUndefinedOrNull(val) ? '' : val; // We only update the value if it has changed\n \n if (this.localContent !== val) {\n this.localContent = val;\n }\n },\n // --- Template event handlers ---\n onShow: function onShow(bvEvt) {\n // Placeholder\n this.$emit('show', bvEvt);\n \n if (bvEvt) {\n this.localShow = !bvEvt.defaultPrevented;\n }\n },\n onShown: function onShown(bvEvt) {\n // Tip is now showing\n this.localShow = true;\n this.$emit('shown', bvEvt);\n },\n onHide: function onHide(bvEvt) {\n this.$emit('hide', bvEvt);\n },\n onHidden: function onHidden(bvEvt) {\n // Tip is no longer showing\n this.$emit('hidden', bvEvt);\n this.localShow = false;\n },\n onDisabled: function onDisabled(bvEvt) {\n // Prevent possible endless loop if user mistakenly\n // fires `disabled` instead of `disable`\n if (bvEvt && bvEvt.type === 'disabled') {\n this.$emit('update:disabled', true);\n this.$emit('disabled', bvEvt);\n }\n },\n onEnabled: function onEnabled(bvEvt) {\n // Prevent possible endless loop if user mistakenly\n // fires `enabled` instead of `enable`\n if (bvEvt && bvEvt.type === 'enabled') {\n this.$emit('update:disabled', false);\n this.$emit('enabled', bvEvt);\n }\n },\n // --- Local event listeners ---\n doOpen: function doOpen() {\n !this.localShow && this.$_toolpop && this.$_toolpop.show();\n },\n doClose: function doClose() {\n this.localShow && this.$_toolpop && this.$_toolpop.hide();\n },\n doDisable: function doDisable() {\n this.$_toolpop && this.$_toolpop.disable();\n },\n doEnable: function doEnable() {\n this.$_toolpop && this.$_toolpop.enable();\n }\n },\n render: function render(h) {\n // Always renders a comment node\n // TODO:\n // Future: Possibly render a target slot (single root element)\n // which we can apply the listeners to (pass `this.$el` to BVTooltip)\n return h();\n }\n });\n \n var NAME$E = 'BVPopoverTemplate'; // @vue/component\n \n var BVPopoverTemplate = /*#__PURE__*/Vue.extend({\n name: NAME$E,\n extends: BVTooltipTemplate,\n computed: {\n templateType: function templateType() {\n return 'popover';\n }\n },\n methods: {\n renderTemplate: function renderTemplate(h) {\n // Title and content could be a scoped slot function\n var $title = isFunction(this.title) ? this.title({}) : this.title;\n var $content = isFunction(this.content) ? this.content({}) : this.content; // Directive usage only\n \n var titleDomProps = this.html && !isFunction(this.title) ? {\n innerHTML: this.title\n } : {};\n var contentDomProps = this.html && !isFunction(this.content) ? {\n innerHTML: this.content\n } : {};\n return h('div', {\n staticClass: 'popover b-popover',\n class: this.templateClasses,\n attrs: this.templateAttributes,\n on: this.templateListeners\n }, [h('div', {\n ref: 'arrow',\n staticClass: 'arrow'\n }), isUndefinedOrNull($title) || $title === '' ?\n /* istanbul ignore next */\n h() : h('h3', {\n staticClass: 'popover-header',\n domProps: titleDomProps\n }, [$title]), isUndefinedOrNull($content) || $content === '' ?\n /* istanbul ignore next */\n h() : h('div', {\n staticClass: 'popover-body',\n domProps: contentDomProps\n }, [$content])]);\n }\n }\n });\n \n // Popover \"Class\" (Built as a renderless Vue instance)\n var NAME$F = 'BVPopover'; // @vue/component\n \n var BVPopover = /*#__PURE__*/Vue.extend({\n name: NAME$F,\n extends: BVTooltip,\n computed: {\n // Overwrites BVTooltip\n templateType: function templateType() {\n return 'popover';\n }\n },\n methods: {\n getTemplate: function getTemplate() {\n // Overwrites BVTooltip\n return BVPopoverTemplate;\n }\n }\n });\n \n var NAME$G = 'BPopover';\n var BPopover = /*#__PURE__*/Vue.extend({\n name: NAME$G,\n extends: BTooltip,\n inheritAttrs: false,\n props: {\n title: {\n type: String // default: undefined\n \n },\n content: {\n type: String // default: undefined\n \n },\n triggers: {\n type: [String, Array],\n default: 'click'\n },\n placement: {\n type: String,\n default: 'right'\n },\n variant: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$G, 'variant');\n }\n },\n customClass: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$G, 'customClass');\n }\n },\n delay: {\n type: [Number, Object, String],\n default: function _default() {\n return getComponentConfig(NAME$G, 'delay');\n }\n },\n boundary: {\n // String: scrollParent, window, or viewport\n // Element: element reference\n // Object: Vue component\n type: [String, HTMLElement, Object],\n default: function _default() {\n return getComponentConfig(NAME$G, 'boundary');\n }\n },\n boundaryPadding: {\n type: [Number, String],\n default: function _default() {\n return getComponentConfig(NAME$G, 'boundaryPadding');\n }\n }\n },\n methods: {\n getComponent: function getComponent() {\n // Overridden by BPopover\n return BVPopover;\n },\n updateContent: function updateContent() {\n // Tooltip: Default slot is `title`\n // Popover: Default slot is `content`, `title` slot is title\n // We pass a scoped slot function references by default (Vue v2.6x)\n // And pass the title prop as a fallback\n this.setContent(this.$scopedSlots.default || this.content);\n this.setTitle(this.$scopedSlots.title || this.title);\n }\n } // Render function provided by BTooltip\n \n });\n \n var BV_POPOVER = '__BV_Popover__'; // Default trigger\n \n var DefaultTrigger = 'click'; // Valid event triggers\n \n var validTriggers = {\n focus: true,\n hover: true,\n click: true,\n blur: true,\n manual: true\n }; // Directive modifier test regular expressions. Pre-compile for performance\n \n var htmlRE = /^html$/i;\n var noFadeRE = /^nofade$/i;\n var placementRE = /^(auto|top(left|right)?|bottom(left|right)?|left(top|bottom)?|right(top|bottom)?)$/i;\n var boundaryRE = /^(window|viewport|scrollParent)$/i;\n var delayRE = /^d\\d+$/i;\n var delayShowRE = /^ds\\d+$/i;\n var delayHideRE = /^dh\\d+$/i;\n var offsetRE = /^o-?\\d+$/i;\n var variantRE = /^v-.+$/i;\n var spacesRE = /\\s+/; // Build a Popover config based on bindings (if any)\n // Arguments and modifiers take precedence over passed value config object\n \n var parseBindings = function parseBindings(bindings, vnode)\n /* istanbul ignore next: not easy to test */\n {\n // We start out with a basic config\n var NAME = 'BPopover';\n var config = {\n title: undefined,\n content: undefined,\n trigger: '',\n // Default set below if needed\n placement: 'right',\n fallbackPlacement: 'flip',\n container: false,\n // Default of body\n animation: true,\n offset: 0,\n disabled: false,\n id: null,\n html: false,\n delay: getComponentConfig(NAME, 'delay'),\n boundary: String(getComponentConfig(NAME, 'boundary')),\n boundaryPadding: toInteger(getComponentConfig(NAME, 'boundaryPadding'), 0),\n variant: getComponentConfig(NAME, 'variant'),\n customClass: getComponentConfig(NAME, 'customClass')\n }; // Process `bindings.value`\n \n if (isString(bindings.value) || isNumber(bindings.value)) {\n // Value is popover content (html optionally supported)\n config.content = bindings.value;\n } else if (isFunction(bindings.value)) {\n // Content generator function\n config.content = bindings.value;\n } else if (isPlainObject(bindings.value)) {\n // Value is config object, so merge\n config = _objectSpread2(_objectSpread2({}, config), bindings.value);\n } // If argument, assume element ID of container element\n \n \n if (bindings.arg) {\n // Element ID specified as arg\n // We must prepend '#' to become a CSS selector\n config.container = \"#\".concat(bindings.arg);\n } // If title is not provided, try title attribute\n \n \n if (isUndefined(config.title)) {\n // Try attribute\n var data = vnode.data || {};\n config.title = data.attrs && !isUndefinedOrNull(data.attrs.title) ? data.attrs.title : undefined;\n } // Normalize delay\n \n \n if (!isPlainObject(config.delay)) {\n config.delay = {\n show: toInteger(config.delay, 0),\n hide: toInteger(config.delay, 0)\n };\n } // Process modifiers\n \n \n keys(bindings.modifiers).forEach(function (mod) {\n if (htmlRE.test(mod)) {\n // Title/content allows HTML\n config.html = true;\n } else if (noFadeRE.test(mod)) {\n // No animation\n config.animation = false;\n } else if (placementRE.test(mod)) {\n // Placement of popover\n config.placement = mod;\n } else if (boundaryRE.test(mod)) {\n // Boundary of popover\n mod = mod === 'scrollparent' ? 'scrollParent' : mod;\n config.boundary = mod;\n } else if (delayRE.test(mod)) {\n // Delay value\n var delay = toInteger(mod.slice(1), 0);\n config.delay.show = delay;\n config.delay.hide = delay;\n } else if (delayShowRE.test(mod)) {\n // Delay show value\n config.delay.show = toInteger(mod.slice(2), 0);\n } else if (delayHideRE.test(mod)) {\n // Delay hide value\n config.delay.hide = toInteger(mod.slice(2), 0);\n } else if (offsetRE.test(mod)) {\n // Offset value, negative allowed\n config.offset = toInteger(mod.slice(1), 0);\n } else if (variantRE.test(mod)) {\n // Variant\n config.variant = mod.slice(2) || null;\n }\n }); // Special handling of event trigger modifiers trigger is\n // a space separated list\n \n var selectedTriggers = {}; // Parse current config object trigger\n \n concat(config.trigger || '').filter(identity).join(' ').trim().toLowerCase().split(spacesRE).forEach(function (trigger) {\n if (validTriggers[trigger]) {\n selectedTriggers[trigger] = true;\n }\n }); // Parse modifiers for triggers\n \n keys(bindings.modifiers).forEach(function (mod) {\n mod = mod.toLowerCase();\n \n if (validTriggers[mod]) {\n // If modifier is a valid trigger\n selectedTriggers[mod] = true;\n }\n }); // Sanitize triggers\n \n config.trigger = keys(selectedTriggers).join(' ');\n \n if (config.trigger === 'blur') {\n // Blur by itself is useless, so convert it to 'focus'\n config.trigger = 'focus';\n }\n \n if (!config.trigger) {\n // Use default trigger\n config.trigger = DefaultTrigger;\n }\n \n return config;\n }; // Add or update Popover on our element\n \n \n var applyPopover = function applyPopover(el, bindings, vnode) {\n if (!isBrowser) {\n /* istanbul ignore next */\n return;\n }\n \n var config = parseBindings(bindings, vnode);\n \n if (!el[BV_POPOVER]) {\n var $parent = vnode.context;\n el[BV_POPOVER] = new BVPopover({\n parent: $parent,\n // Add the parent's scoped style attribute data\n _scopeId: getScopeId($parent, undefined)\n });\n el[BV_POPOVER].__bv_prev_data__ = {};\n el[BV_POPOVER].$on('show', function ()\n /* istanbul ignore next: for now */\n {\n // Before showing the popover, we update the title\n // and content if they are functions\n var data = {};\n \n if (isFunction(config.title)) {\n data.title = config.title(el);\n }\n \n if (isFunction(config.content)) {\n data.content = config.content(el);\n }\n \n if (keys(data).length > 0) {\n el[BV_POPOVER].updateData(data);\n }\n });\n }\n \n var data = {\n title: config.title,\n content: config.content,\n triggers: config.trigger,\n placement: config.placement,\n fallbackPlacement: config.fallbackPlacement,\n variant: config.variant,\n customClass: config.customClass,\n container: config.container,\n boundary: config.boundary,\n delay: config.delay,\n offset: config.offset,\n noFade: !config.animation,\n id: config.id,\n disabled: config.disabled,\n html: config.html\n };\n var oldData = el[BV_POPOVER].__bv_prev_data__;\n el[BV_POPOVER].__bv_prev_data__ = data;\n \n if (!looseEqual(data, oldData)) {\n // We only update the instance if data has changed\n var newData = {\n target: el\n };\n keys(data).forEach(function (prop) {\n // We only pass data properties that have changed\n if (data[prop] !== oldData[prop]) {\n // If title/content is a function, we execute it here\n newData[prop] = (prop === 'title' || prop === 'content') && isFunction(data[prop]) ?\n /* istanbul ignore next */\n data[prop](el) : data[prop];\n }\n });\n el[BV_POPOVER].updateData(newData);\n }\n }; // Remove Popover from our element\n \n \n var removePopover = function removePopover(el) {\n if (el[BV_POPOVER]) {\n el[BV_POPOVER].$destroy();\n el[BV_POPOVER] = null;\n }\n \n delete el[BV_POPOVER];\n }; // Export our directive\n \n \n var VBPopover = {\n bind: function bind(el, bindings, vnode) {\n applyPopover(el, bindings, vnode);\n },\n // We use `componentUpdated` here instead of `update`, as the former\n // waits until the containing component and children have finished updating\n componentUpdated: function componentUpdated(el, bindings, vnode) {\n // Performed in a `$nextTick()` to prevent endless render/update loops\n vnode.context.$nextTick(function () {\n applyPopover(el, bindings, vnode);\n });\n },\n unbind: function unbind(el) {\n removePopover(el);\n }\n };\n \n var VBPopoverPlugin = /*#__PURE__*/pluginFactory({\n directives: {\n VBPopover: VBPopover\n }\n });\n \n var PopoverPlugin = /*#__PURE__*/pluginFactory({\n components: {\n BPopover: BPopover\n },\n plugins: {\n VBPopoverPlugin: VBPopoverPlugin\n }\n });\n \n var NAME$H = 'BProgressBar'; // --- Main component ---\n // @vue/component\n \n var BProgressBar = /*#__PURE__*/Vue.extend({\n name: NAME$H,\n mixins: [normalizeSlotMixin],\n inject: {\n bvProgress: {\n default: function _default()\n /* istanbul ignore next */\n {\n return {};\n }\n }\n },\n props: {\n value: {\n type: [Number, String],\n default: 0\n },\n label: {\n type: String // default: null\n \n },\n labelHtml: {\n type: String\n },\n // $parent (this.bvProgress) prop values may take precedence over the following props\n // Which is why they are defaulted to null\n max: {\n type: [Number, String],\n default: null\n },\n precision: {\n type: [Number, String],\n default: null\n },\n variant: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$H, 'variant');\n }\n },\n striped: {\n type: Boolean,\n default: null\n },\n animated: {\n type: Boolean,\n default: null\n },\n showProgress: {\n type: Boolean,\n default: null\n },\n showValue: {\n type: Boolean,\n default: null\n }\n },\n computed: {\n progressBarClasses: function progressBarClasses() {\n return [this.computedVariant ? \"bg-\".concat(this.computedVariant) : '', this.computedStriped || this.computedAnimated ? 'progress-bar-striped' : '', this.computedAnimated ? 'progress-bar-animated' : ''];\n },\n progressBarStyles: function progressBarStyles() {\n return {\n width: 100 * (this.computedValue / this.computedMax) + '%'\n };\n },\n computedValue: function computedValue() {\n return toFloat(this.value, 0);\n },\n computedMax: function computedMax() {\n // Prefer our max over parent setting\n // Default to `100` for invalid values (`-x`, `0`, `NaN`)\n var max = toFloat(this.max) || toFloat(this.bvProgress.max, 0);\n return max > 0 ? max : 100;\n },\n computedPrecision: function computedPrecision() {\n // Prefer our precision over parent setting\n // Default to `0` for invalid values (`-x`, `NaN`)\n return mathMax(toInteger(this.precision, toInteger(this.bvProgress.precision, 0)), 0);\n },\n computedProgress: function computedProgress() {\n var precision = this.computedPrecision;\n var p = mathPow(10, precision);\n return toFixed(100 * p * this.computedValue / this.computedMax / p, precision);\n },\n computedVariant: function computedVariant() {\n // Prefer our variant over parent setting\n return this.variant || this.bvProgress.variant;\n },\n computedStriped: function computedStriped() {\n // Prefer our striped over parent setting\n return isBoolean(this.striped) ? this.striped : this.bvProgress.striped || false;\n },\n computedAnimated: function computedAnimated() {\n // Prefer our animated over parent setting\n return isBoolean(this.animated) ? this.animated : this.bvProgress.animated || false;\n },\n computedShowProgress: function computedShowProgress() {\n // Prefer our showProgress over parent setting\n return isBoolean(this.showProgress) ? this.showProgress : this.bvProgress.showProgress || false;\n },\n computedShowValue: function computedShowValue() {\n // Prefer our showValue over parent setting\n return isBoolean(this.showValue) ? this.showValue : this.bvProgress.showValue || false;\n }\n },\n render: function render(h) {\n var label = this.label,\n labelHtml = this.labelHtml,\n computedValue = this.computedValue,\n computedPrecision = this.computedPrecision;\n var $content = h();\n var domProps = {};\n \n if (this.hasNormalizedSlot('default')) {\n $content = this.normalizeSlot('default');\n } else if (label || labelHtml) {\n domProps = htmlOrText(labelHtml, label);\n } else if (this.computedShowProgress) {\n $content = this.computedProgress;\n } else if (this.computedShowValue) {\n $content = toFixed(computedValue, computedPrecision);\n }\n \n return h('div', {\n staticClass: 'progress-bar',\n class: this.progressBarClasses,\n style: this.progressBarStyles,\n attrs: {\n role: 'progressbar',\n 'aria-valuemin': '0',\n 'aria-valuemax': toString$1(this.computedMax),\n 'aria-valuenow': toFixed(computedValue, computedPrecision)\n },\n domProps: domProps\n }, [$content]);\n }\n });\n \n var NAME$I = 'BProgress'; // @vue/component\n \n var BProgress = /*#__PURE__*/Vue.extend({\n name: NAME$I,\n mixins: [normalizeSlotMixin],\n provide: function provide() {\n return {\n bvProgress: this\n };\n },\n props: {\n // These props can be inherited via the child b-progress-bar(s)\n variant: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$I, 'variant');\n }\n },\n striped: {\n type: Boolean,\n default: false\n },\n animated: {\n type: Boolean,\n default: false\n },\n height: {\n type: String // default: null\n \n },\n precision: {\n type: [Number, String],\n default: 0\n },\n showProgress: {\n type: Boolean,\n default: false\n },\n showValue: {\n type: Boolean,\n default: false\n },\n max: {\n type: [Number, String],\n default: 100\n },\n // This prop is not inherited by child b-progress-bar(s)\n value: {\n type: [Number, String],\n default: 0\n }\n },\n computed: {\n progressHeight: function progressHeight() {\n return {\n height: this.height || null\n };\n }\n },\n render: function render(h) {\n var childNodes = this.normalizeSlot('default');\n \n if (!childNodes) {\n childNodes = h(BProgressBar, {\n props: {\n value: this.value,\n max: this.max,\n precision: this.precision,\n variant: this.variant,\n animated: this.animated,\n striped: this.striped,\n showProgress: this.showProgress,\n showValue: this.showValue\n }\n });\n }\n \n return h('div', {\n class: ['progress'],\n style: this.progressHeight\n }, [childNodes]);\n }\n });\n \n var ProgressPlugin = /*#__PURE__*/pluginFactory({\n components: {\n BProgress: BProgress,\n BProgressBar: BProgressBar\n }\n });\n \n var NAME$J = 'BSidebar';\n var CLASS_NAME$3 = 'b-sidebar'; // --- Render methods ---\n \n var renderHeaderTitle = function renderHeaderTitle(h, ctx) {\n var title = ctx.normalizeSlot('title', ctx.slotScope) || toString$1(ctx.title) || null; // Render a empty `<span>` when to title was provided\n \n if (!title) {\n return h('span');\n }\n \n return h('strong', {\n attrs: {\n id: ctx.safeId('__title__')\n }\n }, [title]);\n };\n \n var renderHeaderClose = function renderHeaderClose(h, ctx) {\n if (ctx.noHeaderClose) {\n return h();\n }\n \n var closeLabel = ctx.closeLabel,\n textVariant = ctx.textVariant,\n hide = ctx.hide;\n return h(BButtonClose, {\n ref: 'close-button',\n props: {\n ariaLabel: closeLabel,\n textVariant: textVariant\n },\n on: {\n click: hide\n }\n }, [ctx.normalizeSlot('header-close') || h(BIconX)]);\n };\n \n var renderHeader = function renderHeader(h, ctx) {\n if (ctx.noHeader) {\n return h();\n }\n \n var $title = renderHeaderTitle(h, ctx);\n var $close = renderHeaderClose(h, ctx);\n return h('header', {\n key: 'header',\n staticClass: \"\".concat(CLASS_NAME$3, \"-header\"),\n class: ctx.headerClass\n }, ctx.right ? [$close, $title] : [$title, $close]);\n };\n \n var renderBody = function renderBody(h, ctx) {\n return h('div', {\n key: 'body',\n staticClass: \"\".concat(CLASS_NAME$3, \"-body\"),\n class: ctx.bodyClass\n }, [ctx.normalizeSlot('default', ctx.slotScope)]);\n };\n \n var renderFooter = function renderFooter(h, ctx) {\n var $footer = ctx.normalizeSlot('footer', ctx.slotScope);\n \n if (!$footer) {\n return h();\n }\n \n return h('footer', {\n key: 'footer',\n staticClass: \"\".concat(CLASS_NAME$3, \"-footer\"),\n class: ctx.footerClass\n }, [$footer]);\n };\n \n var renderContent = function renderContent(h, ctx) {\n // We render the header even if `lazy` is enabled as it\n // acts as the accessible label for the sidebar\n var $header = renderHeader(h, ctx);\n \n if (ctx.lazy && !ctx.isOpen) {\n return $header;\n }\n \n return [$header, renderBody(h, ctx), renderFooter(h, ctx)];\n };\n \n var renderBackdrop = function renderBackdrop(h, ctx) {\n if (!ctx.backdrop) {\n return h();\n }\n \n var backdropVariant = ctx.backdropVariant;\n return h('div', {\n directives: [{\n name: 'show',\n value: ctx.localShow\n }],\n staticClass: 'b-sidebar-backdrop',\n class: _defineProperty({}, \"bg-\".concat(backdropVariant), !!backdropVariant),\n on: {\n click: ctx.onBackdropClick\n }\n });\n }; // --- Main component ---\n // @vue/component\n \n \n var BSidebar = /*#__PURE__*/Vue.extend({\n name: NAME$J,\n // Mixin order is important!\n mixins: [attrsMixin, idMixin, listenOnRootMixin, normalizeSlotMixin],\n inheritAttrs: false,\n model: {\n prop: 'visible',\n event: 'change'\n },\n props: {\n title: {\n type: String // default: null\n \n },\n right: {\n type: Boolean,\n default: false\n },\n bgVariant: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$J, 'bgVariant');\n }\n },\n textVariant: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$J, 'textVariant');\n }\n },\n shadow: {\n type: [Boolean, String],\n default: function _default() {\n return getComponentConfig(NAME$J, 'shadow');\n }\n },\n width: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$J, 'width');\n }\n },\n zIndex: {\n type: [Number, String] // default: null\n \n },\n ariaLabel: {\n type: String // default: null\n \n },\n ariaLabelledby: {\n type: String // default: null\n \n },\n closeLabel: {\n // `aria-label` for close button\n // Defaults to 'Close'\n type: String // default: undefined\n \n },\n tag: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$J, 'tag');\n }\n },\n sidebarClass: {\n type: [String, Array, Object] // default: null\n \n },\n headerClass: {\n type: [String, Array, Object] // default: null\n \n },\n bodyClass: {\n type: [String, Array, Object] // default: null\n \n },\n footerClass: {\n type: [String, Array, Object] // default: null\n \n },\n backdrop: {\n // If `true`, shows a basic backdrop\n type: Boolean,\n default: false\n },\n backdropVariant: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$J, 'backdropVariant');\n }\n },\n noSlide: {\n type: Boolean,\n default: false\n },\n noHeader: {\n type: Boolean,\n default: false\n },\n noHeaderClose: {\n type: Boolean,\n default: false\n },\n noCloseOnEsc: {\n type: Boolean,\n default: false\n },\n noCloseOnBackdrop: {\n type: Boolean,\n default: false\n },\n noCloseOnRouteChange: {\n type: Boolean,\n default: false\n },\n lazy: {\n type: Boolean,\n default: false\n },\n visible: {\n type: Boolean,\n default: false\n }\n },\n data: function data() {\n return {\n // Internal `v-model` state\n localShow: !!this.visible,\n // For lazy render triggering\n isOpen: !!this.visible\n };\n },\n computed: {\n transitionProps: function transitionProps() {\n return this.noSlide ?\n /* istanbul ignore next */\n {\n css: true\n } : {\n css: true,\n enterClass: '',\n enterActiveClass: 'slide',\n enterToClass: 'show',\n leaveClass: 'show',\n leaveActiveClass: 'slide',\n leaveToClass: ''\n };\n },\n slotScope: function slotScope() {\n return {\n visible: this.localShow,\n right: this.right,\n hide: this.hide\n };\n },\n computedTile: function computedTile() {\n return this.normalizeSlot('title', this.slotScope) || toString$1(this.title) || null;\n },\n titleId: function titleId() {\n return this.computedTile ? this.safeId('__title__') : null;\n },\n computedAttrs: function computedAttrs() {\n return _objectSpread2(_objectSpread2({}, this.bvAttrs), {}, {\n id: this.safeId(),\n tabindex: '-1',\n role: 'dialog',\n 'aria-modal': this.backdrop ? 'true' : 'false',\n 'aria-hidden': this.localShow ? null : 'true',\n 'aria-label': this.ariaLabel || null,\n 'aria-labelledby': this.ariaLabelledby || this.titleId || null\n });\n }\n },\n watch: {\n visible: function visible(newVal, oldVal) {\n if (newVal !== oldVal) {\n this.localShow = newVal;\n }\n },\n localShow: function localShow(newVal, oldVal) {\n if (newVal !== oldVal) {\n this.emitState(newVal);\n this.$emit('change', newVal);\n }\n },\n \n /* istanbul ignore next */\n $route: function $route()\n /* istanbul ignore next: pain to mock */\n {\n var newVal = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var oldVal = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n \n if (!this.noCloseOnRouteChange && newVal.fullPath !== oldVal.fullPath) {\n this.hide();\n }\n }\n },\n created: function created() {\n // Define non-reactive properties\n this.$_returnFocusEl = null;\n },\n mounted: function mounted() {\n var _this = this;\n \n // Add `$root` listeners\n this.listenOnRoot(EVENT_TOGGLE, this.handleToggle);\n this.listenOnRoot(EVENT_STATE_REQUEST, this.handleSync); // Send out a gratuitous state event to ensure toggle button is synced\n \n this.$nextTick(function () {\n _this.emitState(_this.localShow);\n });\n },\n \n /* istanbul ignore next */\n activated: function activated()\n /* istanbul ignore next */\n {\n this.emitSync();\n },\n beforeDestroy: function beforeDestroy() {\n this.localShow = false;\n this.$_returnFocusEl = null;\n },\n methods: {\n hide: function hide() {\n this.localShow = false;\n },\n emitState: function emitState() {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.localShow;\n this.emitOnRoot(EVENT_STATE, this.safeId(), state);\n },\n emitSync: function emitSync() {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.localShow;\n this.emitOnRoot(EVENT_STATE_SYNC, this.safeId(), state);\n },\n handleToggle: function handleToggle(id) {\n // Note `safeId()` can be null until after mount\n if (id && id === this.safeId()) {\n this.localShow = !this.localShow;\n }\n },\n handleSync: function handleSync(id) {\n var _this2 = this;\n \n // Note `safeId()` can be null until after mount\n if (id && id === this.safeId()) {\n this.$nextTick(function () {\n _this2.emitSync(_this2.localShow);\n });\n }\n },\n onKeydown: function onKeydown(evt) {\n var keyCode = evt.keyCode;\n \n if (!this.noCloseOnEsc && keyCode === KEY_CODES.ESC && this.localShow) {\n this.hide();\n }\n },\n onBackdropClick: function onBackdropClick() {\n if (this.localShow && !this.noCloseOnBackdrop) {\n this.hide();\n }\n },\n \n /* istanbul ignore next */\n onTopTrapFocus: function onTopTrapFocus()\n /* istanbul ignore next */\n {\n var tabables = getTabables(this.$refs.content);\n attemptFocus(tabables.reverse()[0]);\n },\n \n /* istanbul ignore next */\n onBottomTrapFocus: function onBottomTrapFocus()\n /* istanbul ignore next */\n {\n var tabables = getTabables(this.$refs.content);\n attemptFocus(tabables[0]);\n },\n onBeforeEnter: function onBeforeEnter() {\n // Returning focus to `document.body` may cause unwanted scrolls,\n // so we exclude setting focus on body\n this.$_returnFocusEl = getActiveElement(isBrowser ? [document.body] : []); // Trigger lazy render\n \n this.isOpen = true;\n },\n onAfterEnter: function onAfterEnter(el) {\n if (!contains(el, getActiveElement())) {\n attemptFocus(el);\n }\n \n this.$emit('shown');\n },\n onAfterLeave: function onAfterLeave() {\n attemptFocus(this.$_returnFocusEl);\n this.$_returnFocusEl = null; // Trigger lazy render\n \n this.isOpen = false;\n this.$emit('hidden');\n }\n },\n render: function render(h) {\n var _ref;\n \n var localShow = this.localShow;\n var shadow = this.shadow === '' ? true : this.shadow;\n var $sidebar = h(this.tag, {\n ref: 'content',\n directives: [{\n name: 'show',\n value: localShow\n }],\n staticClass: CLASS_NAME$3,\n class: [(_ref = {\n shadow: shadow === true\n }, _defineProperty(_ref, \"shadow-\".concat(shadow), shadow && shadow !== true), _defineProperty(_ref, \"\".concat(CLASS_NAME$3, \"-right\"), this.right), _defineProperty(_ref, \"bg-\".concat(this.bgVariant), !!this.bgVariant), _defineProperty(_ref, \"text-\".concat(this.textVariant), !!this.textVariant), _ref), this.sidebarClass],\n attrs: this.computedAttrs,\n style: {\n width: this.width\n }\n }, [renderContent(h, this)]);\n $sidebar = h('transition', {\n props: this.transitionProps,\n on: {\n beforeEnter: this.onBeforeEnter,\n afterEnter: this.onAfterEnter,\n afterLeave: this.onAfterLeave\n }\n }, [$sidebar]);\n var $backdrop = h(BVTransition, {\n props: {\n noFade: this.noSlide\n }\n }, [renderBackdrop(h, this)]);\n var $tabTrapTop = h();\n var $tabTrapBottom = h();\n \n if (this.backdrop && this.localShow) {\n $tabTrapTop = h('div', {\n attrs: {\n tabindex: '0'\n },\n on: {\n focus: this.onTopTrapFocus\n }\n });\n $tabTrapBottom = h('div', {\n attrs: {\n tabindex: '0'\n },\n on: {\n focus: this.onBottomTrapFocus\n }\n });\n }\n \n return h('div', {\n staticClass: 'b-sidebar-outer',\n style: {\n zIndex: this.zIndex\n },\n attrs: {\n tabindex: '-1'\n },\n on: {\n keydown: this.onKeydown\n }\n }, [$tabTrapTop, $sidebar, $tabTrapBottom, $backdrop]);\n }\n });\n \n var SidebarPlugin = /*#__PURE__*/pluginFactory({\n components: {\n BSidebar: BSidebar\n },\n plugins: {\n VBTogglePlugin: VBTogglePlugin\n }\n });\n \n var SpinnerPlugin = /*#__PURE__*/pluginFactory({\n components: {\n BSpinner: BSpinner\n }\n });\n \n // Mixin to determine if an event listener has been registered\n \n var hasListenerMixin = {\n methods: {\n hasListener: function hasListener(name) {\n // Only includes listeners registered via `v-on:name`\n var $listeners = this.$listeners || {}; // Includes `v-on:name` and `this.$on('name')` registered listeners\n // Note this property is not part of the public Vue API, but it is\n // the only way to determine if a listener was added via `vm.$on`\n \n var $events = this._events || {}; // Registered listeners in `this._events` are always an array,\n // but might be zero length\n \n return !isUndefined($listeners[name]) || isArray($events[name]) && $events[name].length > 0;\n }\n }\n };\n \n /**\n * Converts a string, including strings in camelCase or snake_case, into Start Case (a variant\n * of Title Case where all words start with a capital letter), it keeps original single quote\n * and hyphen in the word.\n *\n * Copyright (c) 2017 Compass (MIT)\n * https://github.com/UrbanCompass/to-start-case\n * @author Zhuoyuan Zhang <https://github.com/drawyan>\n * @author Wei Wang <https://github.com/onlywei>\n *\n *\n * 'management_companies' to 'Management Companies'\n * 'managementCompanies' to 'Management Companies'\n * `hell's kitchen` to `Hell's Kitchen`\n * `co-op` to `Co-op`\n *\n * @param {String} str\n * @returns {String}\n */\n // Precompile regular expressions for performance\n var RX_UNDERSCORE = /_/g;\n var RX_LOWER_UPPER = /([a-z])([A-Z])/g;\n var RX_START_SPACE_WORD = /(\\s|^)(\\w)/g;\n \n var startCase = function startCase(str) {\n return str.replace(RX_UNDERSCORE, ' ').replace(RX_LOWER_UPPER, function (str, $1, $2) {\n return $1 + ' ' + $2;\n }).replace(RX_START_SPACE_WORD, function (str, $1, $2) {\n return $1 + $2.toUpperCase();\n });\n };\n \n // Constants used by table helpers\n // Object of item keys that should be ignored for headers and\n // stringification and filter events\n var IGNORED_FIELD_KEYS = {\n _rowVariant: true,\n _cellVariants: true,\n _showDetails: true\n }; // Filter CSS selector for click/dblclick/etc. events\n // If any of these selectors match the clicked element, we ignore the event\n \n var EVENT_FILTER = ['a', 'a *', // Include content inside links\n 'button', 'button *', // Include content inside buttons\n 'input:not(.disabled):not([disabled])', 'select:not(.disabled):not([disabled])', 'textarea:not(.disabled):not([disabled])', '[role=\"link\"]', '[role=\"link\"] *', '[role=\"button\"]', '[role=\"button\"] *', '[tabindex]:not(.disabled):not([disabled])'].join(',');\n \n var processField = function processField(key, value) {\n var field = null;\n \n if (isString(value)) {\n // Label shortcut\n field = {\n key: key,\n label: value\n };\n } else if (isFunction(value)) {\n // Formatter shortcut\n field = {\n key: key,\n formatter: value\n };\n } else if (isObject(value)) {\n field = clone(value);\n field.key = field.key || key;\n } else if (value !== false) {\n // Fallback to just key\n \n /* istanbul ignore next */\n field = {\n key: key\n };\n }\n \n return field;\n }; // We normalize fields into an array of objects\n // [ { key:..., label:..., ...}, {...}, ..., {..}]\n \n \n var normalizeFields = function normalizeFields(origFields, items) {\n var fields = [];\n \n if (isArray(origFields)) {\n // Normalize array Form\n origFields.filter(identity).forEach(function (f) {\n if (isString(f)) {\n fields.push({\n key: f,\n label: startCase(f)\n });\n } else if (isObject(f) && f.key && isString(f.key)) {\n // Full object definition. We use assign so that we don't mutate the original\n fields.push(clone(f));\n } else if (isObject(f) && keys(f).length === 1) {\n // Shortcut object (i.e. { 'foo_bar': 'This is Foo Bar' }\n var key = keys(f)[0];\n var field = processField(key, f[key]);\n \n if (field) {\n fields.push(field);\n }\n }\n });\n } // If no field provided, take a sample from first record (if exits)\n \n \n if (fields.length === 0 && isArray(items) && items.length > 0) {\n var sample = items[0];\n keys(sample).forEach(function (k) {\n if (!IGNORED_FIELD_KEYS[k]) {\n fields.push({\n key: k,\n label: startCase(k)\n });\n }\n });\n } // Ensure we have a unique array of fields and that they have String labels\n \n \n var memo = {};\n return fields.filter(function (f) {\n if (!memo[f.key]) {\n memo[f.key] = true;\n f.label = isString(f.label) ? f.label : startCase(f.key);\n return true;\n }\n \n return false;\n });\n };\n \n var itemsMixin = {\n props: {\n items: {\n // Provider mixin adds in `Function` type\n type: Array,\n \n /* istanbul ignore next */\n default: function _default()\n /* istanbul ignore next */\n {\n return [];\n }\n },\n fields: {\n type: Array,\n default: null\n },\n primaryKey: {\n // Primary key for record\n // If provided the value in each row must be unique!\n type: String // default: null\n \n },\n value: {\n // `v-model` for retrieving the current displayed rows\n type: Array,\n default: function _default() {\n return [];\n }\n }\n },\n data: function data() {\n return {\n // Our local copy of the items\n // Must be an array\n localItems: isArray(this.items) ? this.items.slice() : []\n };\n },\n computed: {\n computedFields: function computedFields() {\n // We normalize fields into an array of objects\n // `[ { key:..., label:..., ...}, {...}, ..., {..}]`\n return normalizeFields(this.fields, this.localItems);\n },\n computedFieldsObj: function computedFieldsObj() {\n // Fields as a simple lookup hash object\n // Mainly for formatter lookup and use in `scopedSlots` for convenience\n // If the field has a formatter, it normalizes formatter to a\n // function ref or `undefined` if no formatter\n var parent = this.$parent;\n return this.computedFields.reduce(function (obj, f) {\n // We use object spread here so we don't mutate the original field object\n obj[f.key] = clone(f);\n \n if (f.formatter) {\n // Normalize formatter to a function ref or `undefined`\n var formatter = f.formatter;\n \n if (isString(formatter) && isFunction(parent[formatter])) {\n formatter = parent[formatter];\n } else if (!isFunction(formatter)) {\n /* istanbul ignore next */\n formatter = undefined;\n } // Return formatter function or `undefined` if none\n \n \n obj[f.key].formatter = formatter;\n }\n \n return obj;\n }, {});\n },\n computedItems: function computedItems() {\n // Fallback if various mixins not provided\n return (this.paginatedItems || this.sortedItems || this.filteredItems || this.localItems ||\n /* istanbul ignore next */\n []).slice();\n },\n context: function context() {\n // Current state of sorting, filtering and pagination props/values\n return {\n filter: this.localFilter,\n sortBy: this.localSortBy,\n sortDesc: this.localSortDesc,\n perPage: mathMax(toInteger(this.perPage, 0), 0),\n currentPage: mathMax(toInteger(this.currentPage, 0), 1),\n apiUrl: this.apiUrl\n };\n }\n },\n watch: {\n items: function items(newItems) {\n /* istanbul ignore else */\n if (isArray(newItems)) {\n // Set `localItems`/`filteredItems` to a copy of the provided array\n this.localItems = newItems.slice();\n } else if (isUndefinedOrNull(newItems)) {\n /* istanbul ignore next */\n this.localItems = [];\n }\n },\n // Watch for changes on `computedItems` and update the `v-model`\n computedItems: function computedItems(newVal, oldVal) {\n if (!looseEqual(newVal, oldVal)) {\n this.$emit('input', newVal);\n }\n },\n // Watch for context changes\n context: function context(newVal, oldVal) {\n // Emit context information for external paging/filtering/sorting handling\n if (!looseEqual(newVal, oldVal)) {\n this.$emit('context-changed', newVal);\n }\n }\n },\n mounted: function mounted() {\n // Initially update the `v-model` of displayed items\n this.$emit('input', this.computedItems);\n },\n methods: {\n // Method to get the formatter method for a given field key\n getFieldFormatter: function getFieldFormatter(key) {\n var field = this.computedFieldsObj[key]; // `this.computedFieldsObj` has pre-normalized the formatter to a\n // function ref if present, otherwise `undefined`\n \n return field ? field.formatter : undefined;\n }\n }\n };\n \n // Mixin for providing stacked tables\n var stackedMixin = {\n props: {\n stacked: {\n type: [Boolean, String],\n default: false\n }\n },\n computed: {\n isStacked: function isStacked() {\n // `true` when always stacked, or returns breakpoint specified\n return this.stacked === '' ? true : this.stacked;\n },\n isStackedAlways: function isStackedAlways() {\n return this.isStacked === true;\n },\n stackedTableClasses: function stackedTableClasses() {\n return _defineProperty({\n 'b-table-stacked': this.isStackedAlways\n }, \"b-table-stacked-\".concat(this.stacked), !this.isStackedAlways && this.isStacked);\n }\n }\n };\n \n var sanitizeRow = function sanitizeRow(row, ignoreFields, includeFields) {\n var fieldsObj = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n return keys(row).reduce(function (obj, key) {\n // Ignore special fields that start with `_`\n // Ignore fields in the `ignoreFields` array\n // Include only fields in the `includeFields` array\n if (!IGNORED_FIELD_KEYS[key] && !(ignoreFields && ignoreFields.length > 0 && arrayIncludes(ignoreFields, key)) && !(includeFields && includeFields.length > 0 && !arrayIncludes(includeFields, key))) {\n var f = fieldsObj[key] || {};\n var val = row[key]; // `f.filterByFormatted` will either be a function or boolean\n // `f.formater` will have already been noramlized into a function ref\n \n var filterByFormatted = f.filterByFormatted;\n var formatter = isFunction(filterByFormatted) ?\n /* istanbul ignore next */\n filterByFormatted : filterByFormatted ?\n /* istanbul ignore next */\n f.formatter : null;\n obj[key] = isFunction(formatter) ? formatter(val, key, row) : val;\n }\n \n return obj;\n }, {});\n };\n \n // SSR safe deterministic way (keys are sorted before stringification)\n //\n // ex:\n // { b: 3, c: { z: 'zzz', d: null, e: 2 }, d: [10, 12, 11], a: 'one' }\n // becomes\n // 'one 3 2 zzz 10 12 11'\n //\n // Primitives (numbers/strings) are returned as-is\n // Null and undefined values are filtered out\n // Dates are converted to their native string format\n \n var stringifyObjectValues = function stringifyObjectValues(val) {\n if (isUndefinedOrNull(val)) {\n /* istanbul ignore next */\n return '';\n } // Arrays are also object, and keys just returns the array indexes\n // Date objects we convert to strings\n \n \n if (isObject(val) && !isDate(val)) {\n return keys(val).sort() // Sort to prevent SSR issues on pre-rendered sorted tables\n .filter(function (v) {\n return !isUndefinedOrNull(v);\n }) // Ignore undefined/null values\n .map(function (k) {\n return stringifyObjectValues(val[k]);\n }).join(' ');\n }\n \n return toString$1(val);\n };\n \n // TODO: Add option to stringify `scopedSlot` items\n \n var stringifyRecordValues = function stringifyRecordValues(row, ignoreFields, includeFields, fieldsObj) {\n return isObject(row) ? stringifyObjectValues(sanitizeRow(row, ignoreFields, includeFields, fieldsObj)) :\n /* istanbul ignore next */\n '';\n };\n \n var DEBOUNCE_DEPRECATED_MSG = 'Prop \"filter-debounce\" is deprecated. Use the debounce feature of \"<b-form-input>\" instead.';\n var RX_SPACES$1 = /[\\s\\uFEFF\\xA0]+/g;\n var filteringMixin = {\n props: {\n filter: {\n type: [String, RegExp, Object, Array],\n default: null\n },\n filterFunction: {\n type: Function // default: null\n \n },\n filterIgnoredFields: {\n type: Array // default: undefined\n \n },\n filterIncludedFields: {\n type: Array // default: undefined\n \n },\n filterDebounce: {\n type: [Number, String],\n deprecated: DEBOUNCE_DEPRECATED_MSG,\n default: 0,\n validator: function validator(val) {\n return /^\\d+/.test(String(val));\n }\n }\n },\n data: function data() {\n return {\n // Flag for displaying which empty slot to show and some event triggering\n isFiltered: false,\n // Where we store the copy of the filter criteria after debouncing\n // We pre-set it with the sanitized filter value\n localFilter: this.filterSanitize(this.filter)\n };\n },\n computed: {\n computedFilterIgnored: function computedFilterIgnored() {\n return this.filterIgnoredFields ? concat(this.filterIgnoredFields).filter(identity) : null;\n },\n computedFilterIncluded: function computedFilterIncluded() {\n return this.filterIncludedFields ? concat(this.filterIncludedFields).filter(identity) : null;\n },\n computedFilterDebounce: function computedFilterDebounce() {\n var ms = toInteger(this.filterDebounce, 0);\n /* istanbul ignore next */\n \n if (ms > 0) {\n warn(DEBOUNCE_DEPRECATED_MSG, 'BTable');\n }\n \n return ms;\n },\n localFiltering: function localFiltering() {\n return this.hasProvider ? !!this.noProviderFiltering : true;\n },\n // For watching changes to `filteredItems` vs `localItems`\n filteredCheck: function filteredCheck() {\n return {\n filteredItems: this.filteredItems,\n localItems: this.localItems,\n localFilter: this.localFilter\n };\n },\n // Sanitized/normalize filter-function prop\n localFilterFn: function localFilterFn() {\n // Return `null` to signal to use internal filter function\n return isFunction(this.filterFunction) ? this.filterFunction : null;\n },\n // Returns the records in `localItems` that match the filter criteria\n // Returns the original `localItems` array if not sorting\n filteredItems: function filteredItems() {\n var items = this.localItems || []; // Note the criteria is debounced and sanitized\n \n var criteria = this.localFilter; // Resolve the filtering function, when requested\n // We prefer the provided filtering function and fallback to the internal one\n // When no filtering criteria is specified the filtering factories will return `null`\n \n var filterFn = this.localFiltering ? this.filterFnFactory(this.localFilterFn, criteria) || this.defaultFilterFnFactory(criteria) : null; // We only do local filtering when requested and there are records to filter\n \n return filterFn && items.length > 0 ? items.filter(filterFn) : items;\n }\n },\n watch: {\n // Watch for debounce being set to 0\n computedFilterDebounce: function computedFilterDebounce(newVal) {\n if (!newVal && this.$_filterTimer) {\n this.clearFilterTimer();\n this.localFilter = this.filterSanitize(this.filter);\n }\n },\n // Watch for changes to the filter criteria, and debounce if necessary\n filter: {\n // We need a deep watcher in case the user passes\n // an object when using `filter-function`\n deep: true,\n handler: function handler(newCriteria) {\n var _this = this;\n \n var timeout = this.computedFilterDebounce;\n this.clearFilterTimer();\n \n if (timeout && timeout > 0) {\n // If we have a debounce time, delay the update of `localFilter`\n this.$_filterTimer = setTimeout(function () {\n _this.localFilter = _this.filterSanitize(newCriteria);\n }, timeout);\n } else {\n // Otherwise, immediately update `localFilter` with `newFilter` value\n this.localFilter = this.filterSanitize(newCriteria);\n }\n }\n },\n // Watch for changes to the filter criteria and filtered items vs `localItems`\n // Set visual state and emit events as required\n filteredCheck: function filteredCheck(_ref) {\n var filteredItems = _ref.filteredItems,\n localFilter = _ref.localFilter;\n // Determine if the dataset is filtered or not\n var isFiltered = false;\n \n if (!localFilter) {\n // If filter criteria is falsey\n isFiltered = false;\n } else if (looseEqual(localFilter, []) || looseEqual(localFilter, {})) {\n // If filter criteria is an empty array or object\n isFiltered = false;\n } else if (localFilter) {\n // If filter criteria is truthy\n isFiltered = true;\n }\n \n if (isFiltered) {\n this.$emit('filtered', filteredItems, filteredItems.length);\n }\n \n this.isFiltered = isFiltered;\n },\n isFiltered: function isFiltered(newVal, oldVal) {\n if (newVal === false && oldVal === true) {\n // We need to emit a filtered event if isFiltered transitions from true to\n // false so that users can update their pagination controls.\n this.$emit('filtered', this.localItems, this.localItems.length);\n }\n }\n },\n created: function created() {\n var _this2 = this;\n \n // Create private non-reactive props\n this.$_filterTimer = null; // If filter is \"pre-set\", set the criteria\n // This will trigger any watchers/dependents\n // this.localFilter = this.filterSanitize(this.filter)\n // Set the initial filtered state in a `$nextTick()` so that\n // we trigger a filtered event if needed\n \n this.$nextTick(function () {\n _this2.isFiltered = Boolean(_this2.localFilter);\n });\n },\n beforeDestroy: function beforeDestroy()\n /* istanbul ignore next */\n {\n this.clearFilterTimer();\n },\n methods: {\n clearFilterTimer: function clearFilterTimer() {\n clearTimeout(this.$_filterTimer);\n this.$_filterTimer = null;\n },\n filterSanitize: function filterSanitize(criteria) {\n // Sanitizes filter criteria based on internal or external filtering\n if (this.localFiltering && !this.localFilterFn && !(isString(criteria) || isRegExp(criteria))) {\n // If using internal filter function, which only accepts string or RegExp,\n // return '' to signify no filter\n return '';\n } // Could be a string, object or array, as needed by external filter function\n // We use `cloneDeep` to ensure we have a new copy of an object or array\n // without Vue's reactive observers\n \n \n return cloneDeep(criteria);\n },\n // Filter Function factories\n filterFnFactory: function filterFnFactory(filterFn, criteria) {\n // Wrapper factory for external filter functions\n // Wrap the provided filter-function and return a new function\n // Returns `null` if no filter-function defined or if criteria is falsey\n // Rather than directly grabbing `this.computedLocalFilterFn` or `this.filterFunction`\n // we have it passed, so that the caller computed prop will be reactive to changes\n // in the original filter-function (as this routine is a method)\n if (!filterFn || !isFunction(filterFn) || !criteria || looseEqual(criteria, []) || looseEqual(criteria, {})) {\n return null;\n } // Build the wrapped filter test function, passing the criteria to the provided function\n \n \n var fn = function fn(item) {\n // Generated function returns true if the criteria matches part\n // of the serialized data, otherwise false\n return filterFn(item, criteria);\n }; // Return the wrapped function\n \n \n return fn;\n },\n defaultFilterFnFactory: function defaultFilterFnFactory(criteria) {\n var _this3 = this;\n \n // Generates the default filter function, using the given filter criteria\n // Returns `null` if no criteria or criteria format not supported\n if (!criteria || !(isString(criteria) || isRegExp(criteria))) {\n // Built in filter can only support strings or RegExp criteria (at the moment)\n return null;\n } // Build the RegExp needed for filtering\n \n \n var regExp = criteria;\n \n if (isString(regExp)) {\n // Escape special RegExp characters in the string and convert contiguous\n // whitespace to \\s+ matches\n var pattern = escapeRegExp(criteria).replace(RX_SPACES$1, '\\\\s+'); // Build the RegExp (no need for global flag, as we only need\n // to find the value once in the string)\n \n regExp = new RegExp(\".*\".concat(pattern, \".*\"), 'i');\n } // Generate the wrapped filter test function to use\n \n \n var fn = function fn(item) {\n // This searches all row values (and sub property values) in the entire (excluding\n // special `_` prefixed keys), because we convert the record to a space-separated\n // string containing all the value properties (recursively), even ones that are\n // not visible (not specified in this.fields)\n // Users can ignore filtering on specific fields, or on only certain fields,\n // and can optionall specify searching results of fields with formatter\n //\n // TODO: Enable searching on scoped slots (optional, as it will be SLOW)\n //\n // Generated function returns true if the criteria matches part of\n // the serialized data, otherwise false\n //\n // We set `lastIndex = 0` on the `RegExp` in case someone specifies the `/g` global flag\n regExp.lastIndex = 0;\n return regExp.test(stringifyRecordValues(item, _this3.computedFilterIgnored, _this3.computedFilterIncluded, _this3.computedFieldsObj));\n }; // Return the generated function\n \n \n return fn;\n }\n }\n };\n \n /*\n * Consistent and stable sort function across JavaScript platforms\n *\n * Inconsistent sorts can cause SSR problems between client and server\n * such as in <b-table> if sortBy is applied to the data on server side render.\n * Chrome and V8 native sorts are inconsistent/unstable\n *\n * This function uses native sort with fallback to index compare when the a and b\n * compare returns 0\n *\n * Algorithm based on:\n * https://stackoverflow.com/questions/1427608/fast-stable-sorting-algorithm-implementation-in-javascript/45422645#45422645\n *\n * @param {array} array to sort\n * @param {function} sort compare function\n * @return {array}\n */\n var stableSort = function stableSort(array, compareFn) {\n // Using `.bind(compareFn)` on the wrapped anonymous function improves\n // performance by avoiding the function call setup. We don't use an arrow\n // function here as it binds `this` to the `stableSort` context rather than\n // the `compareFn` context, which wouldn't give us the performance increase.\n return array.map(function (a, index) {\n return [index, a];\n }).sort(function (a, b) {\n return this(a[1], b[1]) || a[0] - b[0];\n }.bind(compareFn)).map(function (e) {\n return e[1];\n });\n };\n \n //\n // TODO: Add option to sort by multiple columns (tri-state per column,\n // plus order of columns in sort) where sortBy could be an array\n // of objects `[ {key: 'foo', sortDir: 'asc'}, {key:'bar', sortDir: 'desc'} ...]`\n // or an array of arrays `[ ['foo','asc'], ['bar','desc'] ]`\n // Multisort will most likely be handled in mixin-sort.js by\n // calling this method for each sortBy\n \n var defaultSortCompare = function defaultSortCompare(a, b, sortBy, sortDesc, formatter, localeOpts, locale, nullLast) {\n var aa = get(a, sortBy, null);\n var bb = get(b, sortBy, null);\n \n if (isFunction(formatter)) {\n aa = formatter(aa, sortBy, a);\n bb = formatter(bb, sortBy, b);\n }\n \n aa = isUndefinedOrNull(aa) ? '' : aa;\n bb = isUndefinedOrNull(bb) ? '' : bb;\n \n if (isDate(aa) && isDate(bb) || isNumber(aa) && isNumber(bb)) {\n // Special case for comparing dates and numbers\n // Internally dates are compared via their epoch number values\n return aa < bb ? -1 : aa > bb ? 1 : 0;\n } else if (nullLast && aa === '' && bb !== '') {\n // Special case when sorting null/undefined/empty string last\n return 1;\n } else if (nullLast && aa !== '' && bb === '') {\n // Special case when sorting null/undefined/empty string last\n return -1;\n } // Do localized string comparison\n \n \n return stringifyObjectValues(aa).localeCompare(stringifyObjectValues(bb), locale, localeOpts);\n };\n \n var sortingMixin = {\n props: {\n sortBy: {\n type: String,\n default: ''\n },\n sortDesc: {\n // TODO: Make this tri-state: true, false, null\n type: Boolean,\n default: false\n },\n sortDirection: {\n // This prop is named incorrectly\n // It should be `initialSortDirection` as it is a bit misleading\n // (not to mention it screws up the ARIA label on the headers)\n type: String,\n default: 'asc',\n validator: function validator(direction) {\n return arrayIncludes(['asc', 'desc', 'last'], direction);\n }\n },\n sortCompare: {\n type: Function // default: null\n \n },\n sortCompareOptions: {\n // Supported localCompare options, see `options` section of:\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/localeCompare\n type: Object,\n default: function _default() {\n return {\n numeric: true\n };\n }\n },\n sortCompareLocale: {\n // String: locale code\n // Array: array of Locale strings\n type: [String, Array] // default: undefined\n \n },\n sortNullLast: {\n // Sort null and undefined to appear last\n type: Boolean,\n default: false\n },\n noSortReset: {\n // Another prop that should have had a better name.\n // It should be noSortClear (on non-sortable headers).\n // We will need to make sure the documentation is clear on what\n // this prop does (as well as in the code for future reference)\n type: Boolean,\n default: false\n },\n labelSortAsc: {\n type: String,\n default: 'Click to sort Ascending'\n },\n labelSortDesc: {\n type: String,\n default: 'Click to sort Descending'\n },\n labelSortClear: {\n type: String,\n default: 'Click to clear sorting'\n },\n noLocalSorting: {\n type: Boolean,\n default: false\n },\n noFooterSorting: {\n type: Boolean,\n default: false\n },\n sortIconLeft: {\n // Place the sorting icon on the left of the header cells\n type: Boolean,\n default: false\n }\n },\n data: function data() {\n return {\n localSortBy: this.sortBy || '',\n localSortDesc: this.sortDesc || false\n };\n },\n computed: {\n localSorting: function localSorting() {\n return this.hasProvider ? !!this.noProviderSorting : !this.noLocalSorting;\n },\n isSortable: function isSortable() {\n return this.computedFields.some(function (f) {\n return f.sortable;\n });\n },\n sortedItems: function sortedItems() {\n // Sorts the filtered items and returns a new array of the sorted items\n // or the original items array if not sorted.\n var items = (this.filteredItems || this.localItems || []).slice();\n var sortBy = this.localSortBy;\n var sortDesc = this.localSortDesc;\n var sortCompare = this.sortCompare;\n var localSorting = this.localSorting;\n \n var sortOptions = _objectSpread2(_objectSpread2({}, this.sortCompareOptions), {}, {\n usage: 'sort'\n });\n \n var sortLocale = this.sortCompareLocale || undefined;\n var nullLast = this.sortNullLast;\n \n if (sortBy && localSorting) {\n var field = this.computedFieldsObj[sortBy] || {};\n var sortByFormatted = field.sortByFormatted;\n var formatter = isFunction(sortByFormatted) ?\n /* istanbul ignore next */\n sortByFormatted : sortByFormatted ? this.getFieldFormatter(sortBy) : undefined; // `stableSort` returns a new array, and leaves the original array intact\n \n return stableSort(items, function (a, b) {\n var result = null;\n \n if (isFunction(sortCompare)) {\n // Call user provided sortCompare routine\n result = sortCompare(a, b, sortBy, sortDesc, formatter, sortOptions, sortLocale);\n }\n \n if (isUndefinedOrNull(result) || result === false) {\n // Fallback to built-in defaultSortCompare if sortCompare\n // is not defined or returns null/false\n result = defaultSortCompare(a, b, sortBy, sortDesc, formatter, sortOptions, sortLocale, nullLast);\n } // Negate result if sorting in descending order\n \n \n return (result || 0) * (sortDesc ? -1 : 1);\n });\n }\n \n return items;\n }\n },\n watch: {\n /* istanbul ignore next: pain in the butt to test */\n isSortable: function isSortable(newVal)\n /* istanbul ignore next: pain in the butt to test */\n {\n if (newVal) {\n if (this.isSortable) {\n this.$on('head-clicked', this.handleSort);\n }\n } else {\n this.$off('head-clicked', this.handleSort);\n }\n },\n sortDesc: function sortDesc(newVal) {\n if (newVal === this.localSortDesc) {\n /* istanbul ignore next */\n return;\n }\n \n this.localSortDesc = newVal || false;\n },\n sortBy: function sortBy(newVal) {\n if (newVal === this.localSortBy) {\n /* istanbul ignore next */\n return;\n }\n \n this.localSortBy = newVal || '';\n },\n // Update .sync props\n localSortDesc: function localSortDesc(newVal, oldVal) {\n // Emit update to sort-desc.sync\n if (newVal !== oldVal) {\n this.$emit('update:sortDesc', newVal);\n }\n },\n localSortBy: function localSortBy(newVal, oldVal) {\n if (newVal !== oldVal) {\n this.$emit('update:sortBy', newVal);\n }\n }\n },\n created: function created() {\n if (this.isSortable) {\n this.$on('head-clicked', this.handleSort);\n }\n },\n methods: {\n // Handlers\n // Need to move from thead-mixin\n handleSort: function handleSort(key, field, evt, isFoot) {\n var _this = this;\n \n if (!this.isSortable) {\n /* istanbul ignore next */\n return;\n }\n \n if (isFoot && this.noFooterSorting) {\n return;\n } // TODO: make this tri-state sorting\n // cycle desc => asc => none => desc => ...\n \n \n var sortChanged = false;\n \n var toggleLocalSortDesc = function toggleLocalSortDesc() {\n var sortDirection = field.sortDirection || _this.sortDirection;\n \n if (sortDirection === 'asc') {\n _this.localSortDesc = false;\n } else if (sortDirection === 'desc') {\n _this.localSortDesc = true;\n }\n };\n \n if (field.sortable) {\n if (key === this.localSortBy) {\n // Change sorting direction on current column\n this.localSortDesc = !this.localSortDesc;\n } else {\n // Start sorting this column ascending\n this.localSortBy = key; // this.localSortDesc = false\n \n toggleLocalSortDesc();\n }\n \n sortChanged = true;\n } else if (this.localSortBy && !this.noSortReset) {\n this.localSortBy = '';\n toggleLocalSortDesc();\n sortChanged = true;\n }\n \n if (sortChanged) {\n // Sorting parameters changed\n this.$emit('sort-changed', this.context);\n }\n },\n // methods to compute classes and attrs for thead>th cells\n sortTheadThClasses: function sortTheadThClasses(key, field, isFoot) {\n return {\n // If sortable and sortIconLeft are true, then place sort icon on the left\n 'b-table-sort-icon-left': field.sortable && this.sortIconLeft && !(isFoot && this.noFooterSorting)\n };\n },\n sortTheadThAttrs: function sortTheadThAttrs(key, field, isFoot) {\n if (!this.isSortable || isFoot && this.noFooterSorting) {\n // No attributes if not a sortable table\n return {};\n }\n \n var sortable = field.sortable; // Assemble the aria-sort attribute value\n \n var ariaSort = sortable && this.localSortBy === key ? this.localSortDesc ? 'descending' : 'ascending' : sortable ? 'none' : null; // Return the attribute\n \n return {\n 'aria-sort': ariaSort\n };\n },\n sortTheadThLabel: function sortTheadThLabel(key, field, isFoot) {\n // A label to be placed in an `.sr-only` element in the header cell\n if (!this.isSortable || isFoot && this.noFooterSorting) {\n // No label if not a sortable table\n return null;\n }\n \n var sortable = field.sortable; // The correctness of these labels is very important for screen-reader users.\n \n var labelSorting = '';\n \n if (sortable) {\n if (this.localSortBy === key) {\n // currently sorted sortable column.\n labelSorting = this.localSortDesc ? this.labelSortAsc : this.labelSortDesc;\n } else {\n // Not currently sorted sortable column.\n // Not using nested ternary's here for clarity/readability\n // Default for ariaLabel\n labelSorting = this.localSortDesc ? this.labelSortDesc : this.labelSortAsc; // Handle sortDirection setting\n \n var sortDirection = this.sortDirection || field.sortDirection;\n \n if (sortDirection === 'asc') {\n labelSorting = this.labelSortAsc;\n } else if (sortDirection === 'desc') {\n labelSorting = this.labelSortDesc;\n }\n }\n } else if (!this.noSortReset) {\n // Non sortable column\n labelSorting = this.localSortBy ? this.labelSortClear : '';\n } // Return the sr-only sort label or null if no label\n \n \n return trim(labelSorting) || null;\n }\n }\n };\n \n var paginationMixin$1 = {\n props: {\n perPage: {\n type: [Number, String],\n default: 0\n },\n currentPage: {\n type: [Number, String],\n default: 1\n }\n },\n computed: {\n localPaging: function localPaging() {\n return this.hasProvider ? !!this.noProviderPaging : true;\n },\n paginatedItems: function paginatedItems() {\n var items = this.sortedItems || this.filteredItems || this.localItems || [];\n var currentPage = mathMax(toInteger(this.currentPage, 1), 1);\n var perPage = mathMax(toInteger(this.perPage, 0), 0); // Apply local pagination\n \n if (this.localPaging && !!perPage) {\n // Grab the current page of data (which may be past filtered items limit)\n items = items.slice((currentPage - 1) * perPage, currentPage * perPage);\n } // Return the items to display in the table\n \n \n return items;\n }\n }\n };\n \n var captionMixin = {\n props: {\n // `caption-top` is part of table-render mixin (styling)\n // captionTop: {\n // type: Boolean,\n // default: false\n // },\n caption: {\n type: String // default: null\n \n },\n captionHtml: {\n type: String\n }\n },\n computed: {\n captionId: function captionId() {\n // Even though `this.safeId` looks like a method, it is a computed prop\n // that returns a new function if the underlying ID changes\n return this.isStacked ? this.safeId('_caption_') : null;\n }\n },\n methods: {\n renderCaption: function renderCaption() {\n var caption = this.caption,\n captionHtml = this.captionHtml;\n var h = this.$createElement;\n var $caption = h();\n var hasCaptionSlot = this.hasNormalizedSlot('table-caption');\n \n if (hasCaptionSlot || caption || captionHtml) {\n $caption = h('caption', {\n key: 'caption',\n attrs: {\n id: this.captionId\n },\n domProps: hasCaptionSlot ? {} : htmlOrText(captionHtml, caption)\n }, this.normalizeSlot('table-caption'));\n }\n \n return $caption;\n }\n }\n };\n \n var colgroupMixin = {\n methods: {\n renderColgroup: function renderColgroup() {\n var h = this.$createElement;\n var fields = this.computedFields;\n var $colgroup = h();\n \n if (this.hasNormalizedSlot('table-colgroup')) {\n $colgroup = h('colgroup', {\n key: 'colgroup'\n }, [this.normalizeSlot('table-colgroup', {\n columns: fields.length,\n fields: fields\n })]);\n }\n \n return $colgroup;\n }\n }\n };\n \n var TABLE_TAG_NAMES = ['TD', 'TH', 'TR']; // Returns `true` if we should ignore the click/double-click/keypress event\n // Avoids having the user need to use `@click.stop` on the form control\n \n var filterEvent = function filterEvent(evt) {\n // Exit early when we don't have a target element\n if (!evt || !evt.target) {\n /* istanbul ignore next */\n return false;\n }\n \n var el = evt.target; // Exit early when element is disabled or a table element\n \n if (el.disabled || TABLE_TAG_NAMES.indexOf(el.tagName) !== -1) {\n return false;\n } // Ignore the click when it was inside a dropdown menu\n \n \n if (closest('.dropdown-menu', el)) {\n return true;\n }\n \n var label = el.tagName === 'LABEL' ? el : closest('label', el); // If the label's form control is not disabled then we don't propagate event\n // Modern browsers have `label.control` that references the associated input, but IE 11\n // does not have this property on the label element, so we resort to DOM lookups\n \n if (label) {\n var labelFor = getAttr(label, 'for');\n var input = labelFor ? getById(labelFor) : select('input, select, textarea', label);\n \n if (input && !input.disabled) {\n return true;\n }\n } // Otherwise check if the event target matches one of the selectors in the\n // event filter (i.e. anchors, non disabled inputs, etc.)\n // Return `true` if we should ignore the event\n \n \n return matches(el, EVENT_FILTER);\n };\n \n // Used to filter out click events caused by the mouse up at end of selection\n //\n // Accepts an element as only argument to test to see if selection overlaps or is\n // contained within the element\n \n var textSelectionActive = function textSelectionActive() {\n var el = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : document;\n var sel = getSel();\n return sel && sel.toString().trim() !== '' && sel.containsNode && isElement(el) ?\n /* istanbul ignore next */\n sel.containsNode(el, true) : false;\n };\n \n var props$V = {\n headVariant: {\n // Also sniffed by <b-tr> / <b-td> / <b-th>\n type: String,\n // Supported values: 'lite', 'dark', or null\n default: null\n }\n }; // TODO:\n // In Bootstrap v5, we won't need \"sniffing\" as table element variants properly inherit\n // to the child elements, so this can be converted to a functional component\n // @vue/component\n \n var BThead = /*#__PURE__*/Vue.extend({\n name: 'BThead',\n // Mixin order is important!\n mixins: [attrsMixin, listenersMixin, normalizeSlotMixin],\n inheritAttrs: false,\n provide: function provide() {\n return {\n bvTableRowGroup: this\n };\n },\n inject: {\n bvTable: {\n // Sniffed by <b-tr> / <b-td> / <b-th>\n \n /* istanbul ignore next */\n default: function _default()\n /* istanbul ignore next */\n {\n return {};\n }\n }\n },\n props: props$V,\n computed: {\n isThead: function isThead() {\n // Sniffed by <b-tr> / <b-td> / <b-th>\n return true;\n },\n isDark: function isDark() {\n // Sniffed by <b-tr> / <b-td> / <b-th>\n return this.bvTable.dark;\n },\n isStacked: function isStacked() {\n // Sniffed by <b-tr> / <b-td> / <b-th>\n return this.bvTable.isStacked;\n },\n isResponsive: function isResponsive() {\n // Sniffed by <b-tr> / <b-td> / <b-th>\n return this.bvTable.isResponsive;\n },\n isStickyHeader: function isStickyHeader() {\n // Sniffed by <b-tr> / <b-td> / <b-th>\n // Needed to handle header background classes, due to lack of\n // background color inheritance with Bootstrap v4 table CSS\n // Sticky headers only apply to cells in table `thead`\n return !this.isStacked && this.bvTable.stickyHeader;\n },\n hasStickyHeader: function hasStickyHeader() {\n // Sniffed by <b-tr> / <b-td> / <b-th>\n // Needed to handle header background classes, due to lack of\n // background color inheritance with Bootstrap v4 table CSS\n return !this.isStacked && this.bvTable.stickyHeader;\n },\n tableVariant: function tableVariant() {\n // Sniffed by <b-tr> / <b-td> / <b-th>\n return this.bvTable.tableVariant;\n },\n theadClasses: function theadClasses() {\n return [this.headVariant ? \"thead-\".concat(this.headVariant) : null];\n },\n theadAttrs: function theadAttrs() {\n return _objectSpread2({\n role: 'rowgroup'\n }, this.bvAttrs);\n }\n },\n render: function render(h) {\n return h('thead', {\n class: this.theadClasses,\n attrs: this.theadAttrs,\n // Pass down any native listeners\n on: this.bvListeners\n }, this.normalizeSlot('default'));\n }\n });\n \n var props$W = {\n footVariant: {\n type: String,\n // Supported values: 'lite', 'dark', or null\n default: null\n }\n }; // TODO:\n // In Bootstrap v5, we won't need \"sniffing\" as table element variants properly inherit\n // to the child elements, so this can be converted to a functional component\n // @vue/component\n \n var BTfoot = /*#__PURE__*/Vue.extend({\n name: 'BTfoot',\n // Mixin order is important!\n mixins: [attrsMixin, listenersMixin, normalizeSlotMixin],\n inheritAttrs: false,\n provide: function provide() {\n return {\n bvTableRowGroup: this\n };\n },\n inject: {\n bvTable: {\n // Sniffed by <b-tr> / <b-td> / <b-th>\n \n /* istanbul ignore next */\n default: function _default()\n /* istanbul ignore next */\n {\n return {};\n }\n }\n },\n props: props$W,\n computed: {\n isTfoot: function isTfoot() {\n // Sniffed by <b-tr> / <b-td> / <b-th>\n return true;\n },\n isDark: function isDark() {\n // Sniffed by <b-tr> / <b-td> / <b-th>\n return this.bvTable.dark;\n },\n isStacked: function isStacked() {\n // Sniffed by <b-tr> / <b-td> / <b-th>\n return this.bvTable.isStacked;\n },\n isResponsive: function isResponsive() {\n // Sniffed by <b-tr> / <b-td> / <b-th>\n return this.bvTable.isResponsive;\n },\n isStickyHeader: function isStickyHeader() {\n // Sniffed by <b-tr> / <b-td> / <b-th>\n // Sticky headers are only supported in thead\n return false;\n },\n hasStickyHeader: function hasStickyHeader() {\n // Sniffed by <b-tr> / <b-td> / <b-th>\n // Needed to handle header background classes, due to lack of\n // background color inheritance with Bootstrap v4 table CSS\n return !this.isStacked && this.bvTable.stickyHeader;\n },\n tableVariant: function tableVariant() {\n // Sniffed by <b-tr> / <b-td> / <b-th>\n return this.bvTable.tableVariant;\n },\n tfootClasses: function tfootClasses() {\n return [this.footVariant ? \"thead-\".concat(this.footVariant) : null];\n },\n tfootAttrs: function tfootAttrs() {\n return _objectSpread2({\n role: 'rowgroup'\n }, this.bvAttrs);\n }\n },\n render: function render(h) {\n return h('tfoot', {\n class: this.tfootClasses,\n attrs: this.tfootAttrs,\n // Pass down any native listeners\n on: this.bvListeners\n }, this.normalizeSlot('default'));\n }\n });\n \n var props$X = {\n variant: {\n type: String,\n default: null\n }\n };\n var LIGHT = 'light';\n var DARK = 'dark'; // TODO:\n // In Bootstrap v5, we won't need \"sniffing\" as table element variants properly inherit\n // to the child elements, so this can be converted to a functional component\n // @vue/component\n \n var BTr = /*#__PURE__*/Vue.extend({\n name: 'BTr',\n // Mixin order is important!\n mixins: [attrsMixin, listenersMixin, normalizeSlotMixin],\n inheritAttrs: false,\n provide: function provide() {\n return {\n bvTableTr: this\n };\n },\n inject: {\n bvTableRowGroup: {\n /* istanbul ignore next */\n default: function _default()\n /* istanbul ignore next */\n {\n return {};\n }\n }\n },\n props: props$X,\n computed: {\n inTbody: function inTbody() {\n // Sniffed by <b-td> / <b-th>\n return this.bvTableRowGroup.isTbody;\n },\n inThead: function inThead() {\n // Sniffed by <b-td> / <b-th>\n return this.bvTableRowGroup.isThead;\n },\n inTfoot: function inTfoot() {\n // Sniffed by <b-td> / <b-th>\n return this.bvTableRowGroup.isTfoot;\n },\n isDark: function isDark() {\n // Sniffed by <b-td> / <b-th>\n return this.bvTableRowGroup.isDark;\n },\n isStacked: function isStacked() {\n // Sniffed by <b-td> / <b-th>\n return this.bvTableRowGroup.isStacked;\n },\n isResponsive: function isResponsive() {\n // Sniffed by <b-td> / <b-th>\n return this.bvTableRowGroup.isResponsive;\n },\n isStickyHeader: function isStickyHeader() {\n // Sniffed by <b-td> / <b-th>\n // Sticky headers are only supported in thead\n return this.bvTableRowGroup.isStickyHeader;\n },\n hasStickyHeader: function hasStickyHeader() {\n // Sniffed by <b-tr> / <b-td> / <b-th>\n // Needed to handle header background classes, due to lack of\n // background color inheritance with Bootstrap v4 table CSS\n return !this.isStacked && this.bvTableRowGroup.hasStickyHeader;\n },\n tableVariant: function tableVariant() {\n // Sniffed by <b-td> / <b-th>\n return this.bvTableRowGroup.tableVariant;\n },\n headVariant: function headVariant() {\n // Sniffed by <b-td> / <b-th>\n return this.inThead ? this.bvTableRowGroup.headVariant : null;\n },\n footVariant: function footVariant() {\n // Sniffed by <b-td> / <b-th>\n return this.inTfoot ? this.bvTableRowGroup.footVariant : null;\n },\n isRowDark: function isRowDark() {\n return this.headVariant === LIGHT || this.footVariant === LIGHT ?\n /* istanbul ignore next */\n false : this.headVariant === DARK || this.footVariant === DARK ?\n /* istanbul ignore next */\n true : this.isDark;\n },\n trClasses: function trClasses() {\n return [this.variant ? \"\".concat(this.isRowDark ? 'bg' : 'table', \"-\").concat(this.variant) : null];\n },\n trAttrs: function trAttrs() {\n return _objectSpread2({\n role: 'row'\n }, this.bvAttrs);\n }\n },\n render: function render(h) {\n return h('tr', {\n class: this.trClasses,\n attrs: this.trAttrs,\n // Pass native listeners to child\n on: this.bvListeners\n }, this.normalizeSlot('default'));\n }\n });\n \n // Parse a rowspan or colspan into a digit (or `null` if < `1` )\n \n var parseSpan = function parseSpan(value) {\n value = toInteger(value, 0);\n return value > 0 ? value : null;\n };\n /* istanbul ignore next */\n \n \n var spanValidator = function spanValidator(val) {\n return isUndefinedOrNull(val) || parseSpan(val) > 0;\n }; // --- Props ---\n \n \n var props$Y = {\n variant: {\n type: String,\n default: null\n },\n colspan: {\n type: [Number, String],\n default: null,\n validator: spanValidator\n },\n rowspan: {\n type: [Number, String],\n default: null,\n validator: spanValidator\n },\n stackedHeading: {\n type: String,\n default: null\n },\n stickyColumn: {\n type: Boolean,\n default: false\n }\n }; // --- Main component ---\n // TODO:\n // In Bootstrap v5, we won't need \"sniffing\" as table element variants properly inherit\n // to the child elements, so this can be converted to a functional component\n // @vue/component\n \n var BTd = /*#__PURE__*/Vue.extend({\n name: 'BTableCell',\n // Mixin order is important!\n mixins: [attrsMixin, listenersMixin, normalizeSlotMixin],\n inheritAttrs: false,\n inject: {\n bvTableTr: {\n /* istanbul ignore next */\n default: function _default()\n /* istanbul ignore next */\n {\n return {};\n }\n }\n },\n props: props$Y,\n computed: {\n tag: function tag() {\n // Overridden by <b-th>\n return 'td';\n },\n inTbody: function inTbody() {\n return this.bvTableTr.inTbody;\n },\n inThead: function inThead() {\n return this.bvTableTr.inThead;\n },\n inTfoot: function inTfoot() {\n return this.bvTableTr.inTfoot;\n },\n isDark: function isDark() {\n return this.bvTableTr.isDark;\n },\n isStacked: function isStacked() {\n return this.bvTableTr.isStacked;\n },\n isStackedCell: function isStackedCell() {\n // We only support stacked-heading in tbody in stacked mode\n return this.inTbody && this.isStacked;\n },\n isResponsive: function isResponsive() {\n return this.bvTableTr.isResponsive;\n },\n isStickyHeader: function isStickyHeader() {\n // Needed to handle header background classes, due to lack of\n // background color inheritance with Bootstrap v4 table CSS\n // Sticky headers only apply to cells in table `thead`\n return this.bvTableTr.isStickyHeader;\n },\n hasStickyHeader: function hasStickyHeader() {\n // Needed to handle header background classes, due to lack of\n // background color inheritance with Bootstrap v4 table CSS\n return this.bvTableTr.hasStickyHeader;\n },\n isStickyColumn: function isStickyColumn() {\n // Needed to handle background classes, due to lack of\n // background color inheritance with Bootstrap v4 table CSS\n // Sticky column cells are only available in responsive\n // mode (horizontal scrolling) or when sticky header mode\n // Applies to cells in `thead`, `tbody` and `tfoot`\n return !this.isStacked && (this.isResponsive || this.hasStickyHeader) && this.stickyColumn;\n },\n rowVariant: function rowVariant() {\n return this.bvTableTr.variant;\n },\n headVariant: function headVariant() {\n return this.bvTableTr.headVariant;\n },\n footVariant: function footVariant() {\n return this.bvTableTr.footVariant;\n },\n tableVariant: function tableVariant() {\n return this.bvTableTr.tableVariant;\n },\n computedColspan: function computedColspan() {\n return parseSpan(this.colspan);\n },\n computedRowspan: function computedRowspan() {\n return parseSpan(this.rowspan);\n },\n cellClasses: function cellClasses() {\n // We use computed props here for improved performance by caching\n // the results of the string interpolation\n var variant = this.variant;\n \n if (!variant && this.isStickyHeader && !this.headVariant || !variant && this.isStickyColumn && this.inTfoot && !this.footVariant || !variant && this.isStickyColumn && this.inThead && !this.headVariant || !variant && this.isStickyColumn && this.inTbody) {\n // Needed for sticky-header mode as Bootstrap v4 table cells do\n // not inherit parent's background-color. Boo!\n variant = this.rowVariant || this.tableVariant || 'b-table-default';\n }\n \n return [variant ? \"\".concat(this.isDark ? 'bg' : 'table', \"-\").concat(variant) : null, this.isStickyColumn ? 'b-table-sticky-column' : null];\n },\n cellAttrs: function cellAttrs() {\n // We use computed props here for improved performance by caching\n // the results of the object spread (Object.assign)\n var headOrFoot = this.inThead || this.inTfoot; // Make sure col/rowspan's are > 0 or null\n \n var colspan = this.computedColspan;\n var rowspan = this.computedRowspan; // Default role and scope\n \n var role = 'cell';\n var scope = null; // Compute role and scope\n // We only add scopes with an explicit span of 1 or greater\n \n if (headOrFoot) {\n // Header or footer cells\n role = 'columnheader';\n scope = colspan > 0 ? 'colspan' : 'col';\n } else if (isTag(this.tag, 'th')) {\n // th's in tbody\n role = 'rowheader';\n scope = rowspan > 0 ? 'rowgroup' : 'row';\n }\n \n return _objectSpread2(_objectSpread2({\n colspan: colspan,\n rowspan: rowspan,\n role: role,\n scope: scope\n }, this.bvAttrs), {}, {\n // Add in the stacked cell label data-attribute if in\n // stacked mode (if a stacked heading label is provided)\n 'data-label': this.isStackedCell && !isUndefinedOrNull(this.stackedHeading) ?\n /* istanbul ignore next */\n toString$1(this.stackedHeading) : null\n });\n }\n },\n render: function render(h) {\n var content = [this.normalizeSlot('default')];\n return h(this.tag, {\n class: this.cellClasses,\n attrs: this.cellAttrs,\n // Transfer any native listeners\n on: this.bvListeners\n }, [this.isStackedCell ? h('div', [content]) : content]);\n }\n });\n \n // In Bootstrap v5, we won't need \"sniffing\" as table element variants properly inherit\n // to the child elements, so this can be converted to a functional component\n // @vue/component\n \n var BTh = /*#__PURE__*/Vue.extend({\n name: 'BTh',\n extends: BTd,\n computed: {\n tag: function tag() {\n return 'th';\n }\n }\n });\n \n var theadMixin = {\n props: {\n headVariant: {\n type: String,\n // 'light', 'dark' or `null` (or custom)\n default: function _default() {\n return getComponentConfig('BTable', 'headVariant');\n }\n },\n headRowVariant: {\n // Any Bootstrap theme variant (or custom)\n type: String // default: null\n \n },\n theadClass: {\n type: [String, Array, Object] // default: undefined\n \n },\n theadTrClass: {\n type: [String, Array, Object] // default: undefined\n \n }\n },\n methods: {\n fieldClasses: function fieldClasses(field) {\n // Header field (<th>) classes\n return [field.class ? field.class : '', field.thClass ? field.thClass : ''];\n },\n headClicked: function headClicked(evt, field, isFoot) {\n if (this.stopIfBusy && this.stopIfBusy(evt)) {\n // If table is busy (via provider) then don't propagate\n return;\n } else if (filterEvent(evt)) {\n // Clicked on a non-disabled control so ignore\n return;\n } else if (textSelectionActive(this.$el)) {\n // User is selecting text, so ignore\n \n /* istanbul ignore next: JSDOM doesn't support getSelection() */\n return;\n }\n \n evt.stopPropagation();\n evt.preventDefault();\n this.$emit('head-clicked', field.key, field, evt, isFoot);\n },\n renderThead: function renderThead() {\n var _this = this;\n \n var isFoot = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var h = this.$createElement;\n var fields = this.computedFields || []; // In always stacked mode, we don't bother rendering the head/foot\n // Or if no field headings (empty table)\n \n if (this.isStackedAlways || fields.length === 0) {\n return h();\n }\n \n var isSortable = this.isSortable,\n isSelectable = this.isSelectable,\n headVariant = this.headVariant,\n footVariant = this.footVariant,\n headRowVariant = this.headRowVariant,\n footRowVariant = this.footRowVariant;\n var hasHeadClickListener = isSortable || this.hasListener('head-clicked'); // Reference to `selectAllRows` and `clearSelected()`, if table is selectable\n \n var selectAllRows = isSelectable ? this.selectAllRows : noop;\n var clearSelected = isSelectable ? this.clearSelected : noop; // Helper function to generate a field <th> cell\n \n var makeCell = function makeCell(field, colIndex) {\n var label = field.label,\n labelHtml = field.labelHtml,\n variant = field.variant,\n stickyColumn = field.stickyColumn,\n key = field.key;\n var ariaLabel = null;\n \n if (!field.label.trim() && !field.headerTitle) {\n // In case field's label and title are empty/blank\n // We need to add a hint about what the column is about for non-sighted users\n \n /* istanbul ignore next */\n ariaLabel = startCase(field.key);\n }\n \n var on = {};\n \n if (hasHeadClickListener) {\n on.click = function (evt) {\n _this.headClicked(evt, field, isFoot);\n };\n \n on.keydown = function (evt) {\n var keyCode = evt.keyCode;\n \n if (keyCode === KEY_CODES.ENTER || keyCode === KEY_CODES.SPACE) {\n _this.headClicked(evt, field, isFoot);\n }\n };\n }\n \n var sortAttrs = isSortable ? _this.sortTheadThAttrs(key, field, isFoot) : {};\n var sortClass = isSortable ? _this.sortTheadThClasses(key, field, isFoot) : null;\n var sortLabel = isSortable ? _this.sortTheadThLabel(key, field, isFoot) : null;\n var data = {\n class: [_this.fieldClasses(field), sortClass],\n props: {\n variant: variant,\n stickyColumn: stickyColumn\n },\n style: field.thStyle || {},\n attrs: _objectSpread2(_objectSpread2({\n // We only add a tabindex of 0 if there is a head-clicked listener\n tabindex: hasHeadClickListener ? '0' : null,\n abbr: field.headerAbbr || null,\n title: field.headerTitle || null,\n 'aria-colindex': colIndex + 1,\n 'aria-label': ariaLabel\n }, _this.getThValues(null, key, field.thAttr, isFoot ? 'foot' : 'head', {})), sortAttrs),\n on: on,\n key: key\n }; // Handle edge case where in-document templates are used with new\n // `v-slot:name` syntax where the browser lower-cases the v-slot's\n // name (attributes become lower cased when parsed by the browser)\n // We have replaced the square bracket syntax with round brackets\n // to prevent confusion with dynamic slot names\n \n var slotNames = [\"head(\".concat(key, \")\"), \"head(\".concat(key.toLowerCase(), \")\"), 'head()']; // Footer will fallback to header slot names\n \n if (isFoot) {\n slotNames = [\"foot(\".concat(key, \")\"), \"foot(\".concat(key.toLowerCase(), \")\"), 'foot()'].concat(_toConsumableArray(slotNames));\n }\n \n var scope = {\n label: label,\n column: key,\n field: field,\n isFoot: isFoot,\n // Add in row select methods\n selectAllRows: selectAllRows,\n clearSelected: clearSelected\n };\n var $content = _this.normalizeSlot(slotNames, scope) || h('div', {\n domProps: htmlOrText(labelHtml, label)\n });\n var $srLabel = sortLabel ? h('span', {\n staticClass: 'sr-only'\n }, \" (\".concat(sortLabel, \")\")) : null; // Return the header cell\n \n return h(BTh, data, [$content, $srLabel].filter(identity));\n }; // Generate the array of <th> cells\n \n \n var $cells = fields.map(makeCell).filter(identity); // Generate the row(s)\n \n var $trs = [];\n \n if (isFoot) {\n $trs.push(h(BTr, {\n class: this.tfootTrClass,\n props: {\n variant: isUndefinedOrNull(footRowVariant) ? headRowVariant :\n /* istanbul ignore next */\n footRowVariant\n }\n }, $cells));\n } else {\n var scope = {\n columns: fields.length,\n fields: fields,\n // Add in row select methods\n selectAllRows: selectAllRows,\n clearSelected: clearSelected\n };\n $trs.push(this.normalizeSlot('thead-top', scope) || h());\n $trs.push(h(BTr, {\n class: this.theadTrClass,\n props: {\n variant: headRowVariant\n }\n }, $cells));\n }\n \n return h(isFoot ? BTfoot : BThead, {\n key: isFoot ? 'bv-tfoot' : 'bv-thead',\n class: (isFoot ? this.tfootClass : this.theadClass) || null,\n props: isFoot ? {\n footVariant: footVariant || headVariant || null\n } : {\n headVariant: headVariant || null\n }\n }, $trs);\n }\n }\n };\n \n var tfootMixin = {\n props: {\n footClone: {\n type: Boolean,\n default: false\n },\n footVariant: {\n type: String,\n // 'dark', 'light', or `null` (or custom)\n default: function _default() {\n return getComponentConfig('BTable', 'footVariant');\n }\n },\n footRowVariant: {\n // Any Bootstrap theme variant (or custom). Falls back to `headRowVariant`\n type: String // default: null\n \n },\n tfootClass: {\n type: [String, Array, Object] // default: null\n \n },\n tfootTrClass: {\n type: [String, Array, Object] // default: null\n \n }\n },\n methods: {\n renderTFootCustom: function renderTFootCustom() {\n var h = this.$createElement;\n \n if (this.hasNormalizedSlot('custom-foot')) {\n return h(BTfoot, {\n key: 'bv-tfoot-custom',\n class: this.tfootClass || null,\n props: {\n footVariant: this.footVariant || this.headVariant || null\n }\n }, this.normalizeSlot('custom-foot', {\n items: this.computedItems.slice(),\n fields: this.computedFields.slice(),\n columns: this.computedFields.length\n }));\n } else {\n return h();\n }\n },\n renderTfoot: function renderTfoot() {\n // Passing true to renderThead will make it render a tfoot\n return this.footClone ? this.renderThead(true) : this.renderTFootCustom();\n }\n }\n };\n \n var props$Z = {\n tbodyTransitionProps: {\n type: Object // default: undefined\n \n },\n tbodyTransitionHandlers: {\n type: Object // default: undefined\n \n }\n }; // TODO:\n // In Bootstrap v5, we won't need \"sniffing\" as table element variants properly inherit\n // to the child elements, so this can be converted to a functional component\n // @vue/component\n \n var BTbody = /*#__PURE__*/Vue.extend({\n name: 'BTbody',\n // Mixin order is important!\n mixins: [attrsMixin, listenersMixin, normalizeSlotMixin],\n inheritAttrs: false,\n provide: function provide() {\n return {\n bvTableRowGroup: this\n };\n },\n inject: {\n bvTable: {\n // Sniffed by <b-tr> / <b-td> / <b-th>\n \n /* istanbul ignore next */\n default: function _default()\n /* istanbul ignore next */\n {\n return {};\n }\n }\n },\n props: props$Z,\n computed: {\n isTbody: function isTbody() {\n // Sniffed by <b-tr> / <b-td> / <b-th>\n return true;\n },\n isDark: function isDark() {\n // Sniffed by <b-tr> / <b-td> / <b-th>\n return this.bvTable.dark;\n },\n isStacked: function isStacked() {\n // Sniffed by <b-tr> / <b-td> / <b-th>\n return this.bvTable.isStacked;\n },\n isResponsive: function isResponsive() {\n // Sniffed by <b-tr> / <b-td> / <b-th>\n return this.bvTable.isResponsive;\n },\n isStickyHeader: function isStickyHeader() {\n // Sniffed by <b-tr> / <b-td> / <b-th>\n // Sticky headers are only supported in thead\n return false;\n },\n hasStickyHeader: function hasStickyHeader() {\n // Sniffed by <b-tr> / <b-td> / <b-th>\n // Needed to handle header background classes, due to lack of\n // background color inheritance with Bootstrap v4 table CSS\n return !this.isStacked && this.bvTable.stickyHeader;\n },\n tableVariant: function tableVariant() {\n // Sniffed by <b-tr> / <b-td> / <b-th>\n return this.bvTable.tableVariant;\n },\n isTransitionGroup: function isTransitionGroup() {\n return this.tbodyTransitionProps || this.tbodyTransitionHandlers;\n },\n tbodyAttrs: function tbodyAttrs() {\n return _objectSpread2({\n role: 'rowgroup'\n }, this.bvAttrs);\n },\n tbodyProps: function tbodyProps() {\n return this.tbodyTransitionProps ? _objectSpread2(_objectSpread2({}, this.tbodyTransitionProps), {}, {\n tag: 'tbody'\n }) : {};\n }\n },\n render: function render(h) {\n var data = {\n props: this.tbodyProps,\n attrs: this.tbodyAttrs\n };\n \n if (this.isTransitionGroup) {\n // We use native listeners if a transition group for any delegated events\n data.on = this.tbodyTransitionHandlers || {};\n data.nativeOn = this.bvListeners;\n } else {\n // Otherwise we place any listeners on the tbody element\n data.on = this.bvListeners;\n }\n \n return h(this.isTransitionGroup ? 'transition-group' : 'tbody', data, this.normalizeSlot('default'));\n }\n });\n \n var detailsSlotName = 'row-details';\n var tbodyRowMixin = {\n props: {\n tbodyTrClass: {\n type: [String, Array, Object, Function] // default: null\n \n },\n tbodyTrAttr: {\n type: [Object, Function] // default: null\n \n },\n detailsTdClass: {\n type: [String, Array, Object] // default: null\n \n }\n },\n methods: {\n // Methods for computing classes, attributes and styles for table cells\n getTdValues: function getTdValues(item, key, tdValue, defValue) {\n var parent = this.$parent;\n \n if (tdValue) {\n var value = get(item, key, '');\n \n if (isFunction(tdValue)) {\n return tdValue(value, key, item);\n } else if (isString(tdValue) && isFunction(parent[tdValue])) {\n return parent[tdValue](value, key, item);\n }\n \n return tdValue;\n }\n \n return defValue;\n },\n getThValues: function getThValues(item, key, thValue, type, defValue) {\n var parent = this.$parent;\n \n if (thValue) {\n var value = get(item, key, '');\n \n if (isFunction(thValue)) {\n return thValue(value, key, item, type);\n } else if (isString(thValue) && isFunction(parent[thValue])) {\n return parent[thValue](value, key, item, type);\n }\n \n return thValue;\n }\n \n return defValue;\n },\n // Method to get the value for a field\n getFormattedValue: function getFormattedValue(item, field) {\n var key = field.key;\n var formatter = this.getFieldFormatter(key);\n var value = get(item, key, null);\n \n if (isFunction(formatter)) {\n value = formatter(value, key, item);\n }\n \n return isUndefinedOrNull(value) ? '' : value;\n },\n // Factory function methods\n toggleDetailsFactory: function toggleDetailsFactory(hasDetailsSlot, item) {\n var _this = this;\n \n // Returns a function to toggle a row's details slot\n return function () {\n if (hasDetailsSlot) {\n _this.$set(item, '_showDetails', !item._showDetails);\n }\n };\n },\n // Row event handlers\n rowHovered: function rowHovered(evt) {\n // `mouseenter` handler (non-bubbling)\n // `this.tbodyRowEvtStopped` from tbody mixin\n if (!this.tbodyRowEvtStopped(evt)) {\n // `this.emitTbodyRowEvent` from tbody mixin\n this.emitTbodyRowEvent('row-hovered', evt);\n }\n },\n rowUnhovered: function rowUnhovered(evt) {\n // `mouseleave` handler (non-bubbling)\n // `this.tbodyRowEvtStopped` from tbody mixin\n if (!this.tbodyRowEvtStopped(evt)) {\n // `this.emitTbodyRowEvent` from tbody mixin\n this.emitTbodyRowEvent('row-unhovered', evt);\n }\n },\n // Render helpers\n renderTbodyRowCell: function renderTbodyRowCell(field, colIndex, item, rowIndex) {\n var _this2 = this;\n \n // Renders a TD or TH for a row's field\n var h = this.$createElement;\n var hasDetailsSlot = this.hasNormalizedSlot(detailsSlotName);\n var formatted = this.getFormattedValue(item, field);\n var key = field.key;\n var stickyColumn = !this.isStacked && (this.isResponsive || this.stickyHeader) && field.stickyColumn; // We only uses the helper components for sticky columns to\n // improve performance of BTable/BTableLite by reducing the\n // total number of vue instances created during render\n \n var cellTag = stickyColumn ? field.isRowHeader ? BTh : BTd : field.isRowHeader ? 'th' : 'td';\n var cellVariant = item._cellVariants && item._cellVariants[key] ? item._cellVariants[key] : field.variant || null;\n var data = {\n // For the Vue key, we concatenate the column index and\n // field key (as field keys could be duplicated)\n // TODO: Although we do prevent duplicate field keys...\n // So we could change this to: `row-${rowIndex}-cell-${key}`\n key: \"row-\".concat(rowIndex, \"-cell-\").concat(colIndex, \"-\").concat(key),\n class: [field.class ? field.class : '', this.getTdValues(item, key, field.tdClass, '')],\n props: {},\n attrs: _objectSpread2({\n 'aria-colindex': String(colIndex + 1)\n }, field.isRowHeader ? this.getThValues(item, key, field.thAttr, 'row', {}) : this.getTdValues(item, key, field.tdAttr, {}))\n };\n \n if (stickyColumn) {\n // We are using the helper BTd or BTh\n data.props = {\n stackedHeading: this.isStacked ? field.label : null,\n stickyColumn: true,\n variant: cellVariant\n };\n } else {\n // Using native TD or TH element, so we need to\n // add in the attributes and variant class\n data.attrs['data-label'] = this.isStacked && !isUndefinedOrNull(field.label) ? toString$1(field.label) : null;\n data.attrs.role = field.isRowHeader ? 'rowheader' : 'cell';\n data.attrs.scope = field.isRowHeader ? 'row' : null; // Add in the variant class\n \n if (cellVariant) {\n data.class.push(\"\".concat(this.dark ? 'bg' : 'table', \"-\").concat(cellVariant));\n }\n }\n \n var slotScope = {\n item: item,\n index: rowIndex,\n field: field,\n unformatted: get(item, key, ''),\n value: formatted,\n toggleDetails: this.toggleDetailsFactory(hasDetailsSlot, item),\n detailsShowing: Boolean(item._showDetails)\n }; // If table supports selectable mode, then add in the following scope\n // this.supportsSelectableRows will be undefined if mixin isn't loaded\n \n if (this.supportsSelectableRows) {\n slotScope.rowSelected = this.isRowSelected(rowIndex);\n \n slotScope.selectRow = function () {\n return _this2.selectRow(rowIndex);\n };\n \n slotScope.unselectRow = function () {\n return _this2.unselectRow(rowIndex);\n };\n } // The new `v-slot` syntax doesn't like a slot name starting with\n // a square bracket and if using in-document HTML templates, the\n // v-slot attributes are lower-cased by the browser.\n // Switched to round bracket syntax to prevent confusion with\n // dynamic slot name syntax.\n // We look for slots in this order: `cell(${key})`, `cell(${key.toLowerCase()})`, 'cell()'\n // Slot names are now cached by mixin tbody in `this.$_bodyFieldSlotNameCache`\n // Will be `null` if no slot (or fallback slot) exists\n \n \n var slotName = this.$_bodyFieldSlotNameCache[key];\n var $childNodes = slotName ? this.normalizeSlot(slotName, slotScope) : toString$1(formatted);\n \n if (this.isStacked) {\n // We wrap in a DIV to ensure rendered as a single cell when visually stacked!\n $childNodes = [h('div', [$childNodes])];\n } // Render either a td or th cell\n \n \n return h(cellTag, data, [$childNodes]);\n },\n renderTbodyRow: function renderTbodyRow(item, rowIndex) {\n var _this3 = this;\n \n // Renders an item's row (or rows if details supported)\n var h = this.$createElement;\n var fields = this.computedFields;\n var tableStriped = this.striped;\n var hasDetailsSlot = this.hasNormalizedSlot(detailsSlotName);\n var rowShowDetails = item._showDetails && hasDetailsSlot;\n var hasRowClickHandler = this.$listeners['row-clicked'] || this.hasSelectableRowClick; // We can return more than one TR if rowDetails enabled\n \n var $rows = []; // Details ID needed for `aria-details` when details showing\n // We set it to `null` when not showing so that attribute\n // does not appear on the element\n \n var detailsId = rowShowDetails ? this.safeId(\"_details_\".concat(rowIndex, \"_\")) : null; // For each item data field in row\n \n var $tds = fields.map(function (field, colIndex) {\n return _this3.renderTbodyRowCell(field, colIndex, item, rowIndex);\n }); // Calculate the row number in the dataset (indexed from 1)\n \n var ariaRowIndex = null;\n \n if (this.currentPage && this.perPage && this.perPage > 0) {\n ariaRowIndex = String((this.currentPage - 1) * this.perPage + rowIndex + 1);\n } // Create a unique :key to help ensure that sub components are re-rendered rather than\n // re-used, which can cause issues. If a primary key is not provided we use the rendered\n // rows index within the tbody.\n // See: https://github.com/bootstrap-vue/bootstrap-vue/issues/2410\n \n \n var primaryKey = this.primaryKey;\n var primaryKeyValue = toString$1(get(item, primaryKey)) || null;\n var rowKey = primaryKeyValue || toString$1(rowIndex); // If primary key is provided, use it to generate a unique ID on each tbody > tr\n // In the format of '{tableId}__row_{primaryKeyValue}'\n \n var rowId = primaryKeyValue ? this.safeId(\"_row_\".concat(primaryKeyValue)) : null; // Selectable classes and attributes\n \n var selectableClasses = this.selectableRowClasses ? this.selectableRowClasses(rowIndex) : {};\n var selectableAttrs = this.selectableRowAttrs ? this.selectableRowAttrs(rowIndex) : {}; // Additional classes and attributes\n \n var userTrClasses = isFunction(this.tbodyTrClass) ? this.tbodyTrClass(item, 'row') : this.tbodyTrClass;\n var userTrAttrs = isFunction(this.tbodyTrAttr) ?\n /* istanbul ignore next */\n this.tbodyTrAttr(item, 'row') : this.tbodyTrAttr; // Add the item row\n \n $rows.push(h(BTr, {\n key: \"__b-table-row-\".concat(rowKey, \"__\"),\n ref: 'itemRows',\n refInFor: true,\n class: [userTrClasses, selectableClasses, rowShowDetails ? 'b-table-has-details' : ''],\n props: {\n variant: item._rowVariant || null\n },\n attrs: _objectSpread2(_objectSpread2({\n id: rowId\n }, userTrAttrs), {}, {\n // Users cannot override the following attributes\n tabindex: hasRowClickHandler ? '0' : null,\n 'data-pk': primaryKeyValue || null,\n 'aria-details': detailsId,\n 'aria-owns': detailsId,\n 'aria-rowindex': ariaRowIndex\n }, selectableAttrs),\n on: {\n // Note: These events are not A11Y friendly!\n mouseenter: this.rowHovered,\n mouseleave: this.rowUnhovered\n }\n }, $tds)); // Row Details slot\n \n if (rowShowDetails) {\n var detailsScope = {\n item: item,\n index: rowIndex,\n fields: fields,\n toggleDetails: this.toggleDetailsFactory(hasDetailsSlot, item)\n }; // If table supports selectable mode, then add in the following scope\n // this.supportsSelectableRows will be undefined if mixin isn't loaded\n \n if (this.supportsSelectableRows) {\n detailsScope.rowSelected = this.isRowSelected(rowIndex);\n \n detailsScope.selectRow = function () {\n return _this3.selectRow(rowIndex);\n };\n \n detailsScope.unselectRow = function () {\n return _this3.unselectRow(rowIndex);\n };\n } // Render the details slot in a TD\n \n \n var $details = h(BTd, {\n props: {\n colspan: fields.length\n },\n class: this.detailsTdClass\n }, [this.normalizeSlot(detailsSlotName, detailsScope)]); // Add a hidden row to keep table row striping consistent when details showing\n // Only added if the table is striped\n \n if (tableStriped) {\n $rows.push( // We don't use `BTr` here as we don't need the extra functionality\n h('tr', {\n key: \"__b-table-details-stripe__\".concat(rowKey),\n staticClass: 'd-none',\n attrs: {\n 'aria-hidden': 'true',\n role: 'presentation'\n }\n }));\n } // Add the actual details row\n \n \n var userDetailsTrClasses = isFunction(this.tbodyTrClass) ?\n /* istanbul ignore next */\n this.tbodyTrClass(item, detailsSlotName) : this.tbodyTrClass;\n var userDetailsTrAttrs = isFunction(this.tbodyTrAttr) ?\n /* istanbul ignore next */\n this.tbodyTrAttr(item, detailsSlotName) : this.tbodyTrAttr;\n $rows.push(h(BTr, {\n key: \"__b-table-details__\".concat(rowKey),\n staticClass: 'b-table-details',\n class: [userDetailsTrClasses],\n props: {\n variant: item._rowVariant || null\n },\n attrs: _objectSpread2(_objectSpread2({}, userDetailsTrAttrs), {}, {\n // Users cannot override the following attributes\n id: detailsId,\n tabindex: '-1'\n })\n }, [$details]));\n } else if (hasDetailsSlot) {\n // Only add the placeholder if a the table has a row-details slot defined (but not shown)\n $rows.push(h());\n \n if (tableStriped) {\n // Add extra placeholder if table is striped\n $rows.push(h());\n }\n } // Return the row(s)\n \n \n return $rows;\n }\n }\n };\n \n var props$_ = _objectSpread2(_objectSpread2({}, props$Z), {}, {\n tbodyClass: {\n type: [String, Array, Object] // default: undefined\n \n }\n });\n \n var tbodyMixin = {\n mixins: [tbodyRowMixin],\n props: props$_,\n beforeDestroy: function beforeDestroy() {\n this.$_bodyFieldSlotNameCache = null;\n },\n methods: {\n // Helper methods\n getTbodyTrs: function getTbodyTrs() {\n // Returns all the item TR elements (excludes detail and spacer rows)\n // `this.$refs.itemRows` is an array of item TR components/elements\n // Rows should all be B-TR components, but we map to TR elements\n // Also note that `this.$refs.itemRows` may not always be in document order\n var refs = this.$refs || {};\n var tbody = refs.tbody ? refs.tbody.$el || refs.tbody : null;\n var trs = (refs.itemRows || []).map(function (tr) {\n return tr.$el || tr;\n });\n return tbody && tbody.children && tbody.children.length > 0 && trs && trs.length > 0 ? from(tbody.children).filter(function (tr) {\n return arrayIncludes(trs, tr);\n }) :\n /* istanbul ignore next */\n [];\n },\n getTbodyTrIndex: function getTbodyTrIndex(el) {\n // Returns index of a particular TBODY item TR\n // We set `true` on closest to include self in result\n \n /* istanbul ignore next: should not normally happen */\n if (!isElement(el)) {\n return -1;\n }\n \n var tr = el.tagName === 'TR' ? el : closest('tr', el, true);\n return tr ? this.getTbodyTrs().indexOf(tr) : -1;\n },\n emitTbodyRowEvent: function emitTbodyRowEvent(type, evt) {\n // Emits a row event, with the item object, row index and original event\n if (type && this.hasListener(type) && evt && evt.target) {\n var rowIndex = this.getTbodyTrIndex(evt.target);\n \n if (rowIndex > -1) {\n // The array of TRs correlate to the `computedItems` array\n var item = this.computedItems[rowIndex];\n this.$emit(type, item, rowIndex, evt);\n }\n }\n },\n tbodyRowEvtStopped: function tbodyRowEvtStopped(evt) {\n return this.stopIfBusy && this.stopIfBusy(evt);\n },\n // Delegated row event handlers\n onTbodyRowKeydown: function onTbodyRowKeydown(evt) {\n // Keyboard navigation and row click emulation\n var target = evt.target;\n \n if (this.tbodyRowEvtStopped(evt) || target.tagName !== 'TR' || !isActiveElement(target) || target.tabIndex !== 0) {\n // Early exit if not an item row TR\n return;\n }\n \n var keyCode = evt.keyCode;\n \n if (arrayIncludes([KEY_CODES.ENTER, KEY_CODES.SPACE], keyCode)) {\n // Emulated click for keyboard users, transfer to click handler\n evt.stopPropagation();\n evt.preventDefault();\n this.onTBodyRowClicked(evt);\n } else if (arrayIncludes([KEY_CODES.UP, KEY_CODES.DOWN, KEY_CODES.HOME, KEY_CODES.END], keyCode)) {\n // Keyboard navigation\n var rowIndex = this.getTbodyTrIndex(target);\n \n if (rowIndex > -1) {\n evt.stopPropagation();\n evt.preventDefault();\n var trs = this.getTbodyTrs();\n var shift = evt.shiftKey;\n \n if (keyCode === KEY_CODES.HOME || shift && keyCode === KEY_CODES.UP) {\n // Focus first row\n attemptFocus(trs[0]);\n } else if (keyCode === KEY_CODES.END || shift && keyCode === KEY_CODES.DOWN) {\n // Focus last row\n attemptFocus(trs[trs.length - 1]);\n } else if (keyCode === KEY_CODES.UP && rowIndex > 0) {\n // Focus previous row\n attemptFocus(trs[rowIndex - 1]);\n } else if (keyCode === KEY_CODES.DOWN && rowIndex < trs.length - 1) {\n // Focus next row\n attemptFocus(trs[rowIndex + 1]);\n }\n }\n }\n },\n onTBodyRowClicked: function onTBodyRowClicked(evt) {\n if (this.tbodyRowEvtStopped(evt)) {\n // If table is busy, then don't propagate\n return;\n } else if (filterEvent(evt) || textSelectionActive(this.$el)) {\n // Clicked on a non-disabled control so ignore\n // Or user is selecting text, so ignore\n return;\n }\n \n this.emitTbodyRowEvent('row-clicked', evt);\n },\n onTbodyRowMiddleMouseRowClicked: function onTbodyRowMiddleMouseRowClicked(evt) {\n if (!this.tbodyRowEvtStopped(evt) && evt.which === 2) {\n this.emitTbodyRowEvent('row-middle-clicked', evt);\n }\n },\n onTbodyRowContextmenu: function onTbodyRowContextmenu(evt) {\n if (!this.tbodyRowEvtStopped(evt)) {\n this.emitTbodyRowEvent('row-contextmenu', evt);\n }\n },\n onTbodyRowDblClicked: function onTbodyRowDblClicked(evt) {\n if (!this.tbodyRowEvtStopped(evt) && !filterEvent(evt)) {\n this.emitTbodyRowEvent('row-dblclicked', evt);\n }\n },\n // Note: Row hover handlers are handled by the tbody-row mixin\n // As mouseenter/mouseleave events do not bubble\n //\n // Render Helper\n renderTbody: function renderTbody() {\n var _this = this;\n \n // Render the tbody element and children\n var items = this.computedItems; // Shortcut to `createElement` (could use `this._c()` instead)\n \n var h = this.$createElement;\n var hasRowClickHandler = this.hasListener('row-clicked') || this.hasSelectableRowClick; // Prepare the tbody rows\n \n var $rows = []; // Add the item data rows or the busy slot\n \n var $busy = this.renderBusy ? this.renderBusy() : null;\n \n if ($busy) {\n // If table is busy and a busy slot, then return only the busy \"row\" indicator\n $rows.push($busy);\n } else {\n // Table isn't busy, or we don't have a busy slot\n // Create a slot cache for improved performance when looking up cell slot names\n // Values will be keyed by the field's `key` and will store the slot's name\n // Slots could be dynamic (i.e. `v-if`), so we must compute on each render\n // Used by tbody-row mixin render helper\n var cache = {};\n var defaultSlotName = this.hasNormalizedSlot('cell()') ? 'cell()' : null;\n this.computedFields.forEach(function (field) {\n var key = field.key;\n var fullName = \"cell(\".concat(key, \")\");\n var lowerName = \"cell(\".concat(key.toLowerCase(), \")\");\n cache[key] = _this.hasNormalizedSlot(fullName) ? fullName : _this.hasNormalizedSlot(lowerName) ?\n /* istanbul ignore next */\n lowerName : defaultSlotName;\n }); // Created as a non-reactive property so to not trigger component updates\n // Must be a fresh object each render\n \n this.$_bodyFieldSlotNameCache = cache; // Add static top row slot (hidden in visibly stacked mode\n // as we can't control `data-label` attr)\n \n $rows.push(this.renderTopRow ? this.renderTopRow() : h()); // Render the rows\n \n items.forEach(function (item, rowIndex) {\n // Render the individual item row (rows if details slot)\n $rows.push(_this.renderTbodyRow(item, rowIndex));\n }); // Empty items / empty filtered row slot (only shows if `items.length < 1`)\n \n $rows.push(this.renderEmpty ? this.renderEmpty() : h()); // Static bottom row slot (hidden in visibly stacked mode\n // as we can't control `data-label` attr)\n \n $rows.push(this.renderBottomRow ? this.renderBottomRow() : h());\n } // Note: these events will only emit if a listener is registered\n \n \n var handlers = {\n auxclick: this.onTbodyRowMiddleMouseRowClicked,\n // TODO:\n // Perhaps we do want to automatically prevent the\n // default context menu from showing if there is a\n // `row-contextmenu` listener registered\n contextmenu: this.onTbodyRowContextmenu,\n // The following event(s) is not considered A11Y friendly\n dblclick: this.onTbodyRowDblClicked // Hover events (`mouseenter`/`mouseleave`) are handled by `tbody-row` mixin\n \n }; // Add in click/keydown listeners if needed\n \n if (hasRowClickHandler) {\n handlers.click = this.onTBodyRowClicked;\n handlers.keydown = this.onTbodyRowKeydown;\n } // Assemble rows into the tbody\n \n \n var $tbody = h(BTbody, {\n ref: 'tbody',\n class: this.tbodyClass || null,\n props: {\n tbodyTransitionProps: this.tbodyTransitionProps,\n tbodyTransitionHandlers: this.tbodyTransitionHandlers\n },\n // BTbody transfers all native event listeners to the root element\n // TODO: Only set the handlers if the table is not busy\n on: handlers\n }, $rows); // Return the assembled tbody\n \n return $tbody;\n }\n }\n };\n \n var emptyMixin = {\n props: {\n showEmpty: {\n type: Boolean,\n default: false\n },\n emptyText: {\n type: String,\n default: 'There are no records to show'\n },\n emptyHtml: {\n type: String\n },\n emptyFilteredText: {\n type: String,\n default: 'There are no records matching your request'\n },\n emptyFilteredHtml: {\n type: String\n }\n },\n methods: {\n renderEmpty: function renderEmpty() {\n var h = this.$createElement;\n var items = this.computedItems;\n var $empty = h();\n \n if (this.showEmpty && (!items || items.length === 0) && !(this.computedBusy && this.hasNormalizedSlot('table-busy'))) {\n var isFiltered = this.isFiltered,\n emptyText = this.emptyText,\n emptyHtml = this.emptyHtml,\n emptyFilteredText = this.emptyFilteredText,\n emptyFilteredHtml = this.emptyFilteredHtml,\n computedFields = this.computedFields,\n tbodyTrClass = this.tbodyTrClass,\n tbodyTrAttr = this.tbodyTrAttr;\n $empty = this.normalizeSlot(this.isFiltered ? 'emptyfiltered' : 'empty', {\n emptyFilteredHtml: emptyFilteredHtml,\n emptyFilteredText: emptyFilteredText,\n emptyHtml: emptyHtml,\n emptyText: emptyText,\n fields: computedFields,\n // Not sure why this is included, as it will always be an empty array\n items: this.computedItems\n });\n \n if (!$empty) {\n $empty = h('div', {\n class: ['text-center', 'my-2'],\n domProps: isFiltered ? htmlOrText(emptyFilteredHtml, emptyFilteredText) : htmlOrText(emptyHtml, emptyText)\n });\n }\n \n $empty = h(BTd, {\n props: {\n colspan: computedFields.length || null\n }\n }, [h('div', {\n attrs: {\n role: 'alert',\n 'aria-live': 'polite'\n }\n }, [$empty])]);\n $empty = h(BTr, {\n staticClass: 'b-table-empty-row',\n class: [isFunction(tbodyTrClass) ?\n /* istanbul ignore next */\n this.tbodyTrClass(null, 'row-empty') : tbodyTrClass],\n attrs: isFunction(tbodyTrAttr) ?\n /* istanbul ignore next */\n this.tbodyTrAttr(null, 'row-empty') : tbodyTrAttr,\n key: isFiltered ? 'b-empty-filtered-row' : 'b-empty-row'\n }, [$empty]);\n }\n \n return $empty;\n }\n }\n };\n \n var slotName = 'top-row';\n var topRowMixin = {\n methods: {\n renderTopRow: function renderTopRow() {\n var h = this.$createElement; // Add static Top Row slot (hidden in visibly stacked mode as we can't control the data-label)\n // If in *always* stacked mode, we don't bother rendering the row\n \n if (!this.hasNormalizedSlot(slotName) || this.stacked === true || this.stacked === '') {\n return h();\n }\n \n var fields = this.computedFields;\n return h(BTr, {\n key: 'b-top-row',\n staticClass: 'b-table-top-row',\n class: [isFunction(this.tbodyTrClass) ? this.tbodyTrClass(null, 'row-top') : this.tbodyTrClass],\n attrs: isFunction(this.tbodyTrAttr) ? this.tbodyTrAttr(null, 'row-top') : this.tbodyTrAttr\n }, [this.normalizeSlot(slotName, {\n columns: fields.length,\n fields: fields\n })]);\n }\n }\n };\n \n var slotName$1 = 'bottom-row';\n var bottomRowMixin = {\n methods: {\n renderBottomRow: function renderBottomRow() {\n var h = this.$createElement; // Static bottom row slot (hidden in visibly stacked mode as we can't control the data-label)\n // If in *always* stacked mode, we don't bother rendering the row\n \n if (!this.hasNormalizedSlot(slotName$1) || this.stacked === true || this.stacked === '') {\n return h();\n }\n \n var fields = this.computedFields;\n return h(BTr, {\n key: 'b-bottom-row',\n staticClass: 'b-table-bottom-row',\n class: [isFunction(this.tbodyTrClass) ?\n /* istanbul ignore next */\n this.tbodyTrClass(null, 'row-bottom') : this.tbodyTrClass],\n attrs: isFunction(this.tbodyTrAttr) ?\n /* istanbul ignore next */\n this.tbodyTrAttr(null, 'row-bottom') : this.tbodyTrAttr\n }, this.normalizeSlot(slotName$1, {\n columns: fields.length,\n fields: fields\n }));\n }\n }\n };\n \n var busySlotName = 'table-busy';\n var busyMixin = {\n props: {\n busy: {\n type: Boolean,\n default: false\n }\n },\n data: function data() {\n return {\n localBusy: false\n };\n },\n computed: {\n computedBusy: function computedBusy() {\n return this.busy || this.localBusy;\n }\n },\n watch: {\n localBusy: function localBusy(newVal, oldVal) {\n if (newVal !== oldVal) {\n this.$emit('update:busy', newVal);\n }\n }\n },\n methods: {\n // Event handler helper\n stopIfBusy: function stopIfBusy(evt) {\n if (this.computedBusy) {\n // If table is busy (via provider) then don't propagate\n evt.preventDefault();\n evt.stopPropagation();\n return true;\n }\n \n return false;\n },\n // Render the busy indicator or return `null` if not busy\n renderBusy: function renderBusy() {\n var h = this.$createElement; // Return a busy indicator row, or `null` if not busy\n \n if (this.computedBusy && this.hasNormalizedSlot(busySlotName)) {\n // Show the busy slot\n return h(BTr, {\n key: 'table-busy-slot',\n staticClass: 'b-table-busy-slot',\n class: [isFunction(this.tbodyTrClass) ?\n /* istanbul ignore next */\n this.tbodyTrClass(null, busySlotName) : this.tbodyTrClass],\n attrs: isFunction(this.tbodyTrAttr) ?\n /* istanbul ignore next */\n this.tbodyTrAttr(null, busySlotName) : this.tbodyTrAttr\n }, [h(BTd, {\n props: {\n colspan: this.computedFields.length || null\n }\n }, [this.normalizeSlot(busySlotName)])]);\n } else {\n // We return `null` here so that we can determine if we need to\n // render the table items rows or not\n return null;\n }\n }\n }\n };\n \n var selectableMixin = {\n props: {\n selectable: {\n type: Boolean,\n default: false\n },\n selectMode: {\n type: String,\n default: 'multi',\n validator: function validator(val) {\n return arrayIncludes(['range', 'multi', 'single'], val);\n }\n },\n selectedVariant: {\n type: String,\n default: function _default() {\n return getComponentConfig('BTable', 'selectedVariant');\n }\n },\n noSelectOnClick: {\n // Disable use of click handlers for row selection\n type: Boolean,\n default: false\n }\n },\n data: function data() {\n return {\n selectedRows: [],\n selectedLastRow: -1\n };\n },\n computed: {\n isSelectable: function isSelectable() {\n return this.selectable && this.selectMode;\n },\n hasSelectableRowClick: function hasSelectableRowClick() {\n return this.isSelectable && !this.noSelectOnClick;\n },\n supportsSelectableRows: function supportsSelectableRows() {\n return true;\n },\n selectableHasSelection: function selectableHasSelection() {\n return this.isSelectable && this.selectedRows && this.selectedRows.length > 0 && this.selectedRows.some(identity);\n },\n selectableIsMultiSelect: function selectableIsMultiSelect() {\n return this.isSelectable && arrayIncludes(['range', 'multi'], this.selectMode);\n },\n selectableTableClasses: function selectableTableClasses() {\n var _ref;\n \n return _ref = {\n 'b-table-selectable': this.isSelectable\n }, _defineProperty(_ref, \"b-table-select-\".concat(this.selectMode), this.isSelectable), _defineProperty(_ref, 'b-table-selecting', this.selectableHasSelection), _defineProperty(_ref, 'b-table-selectable-no-click', this.isSelectable && !this.hasSelectableRowClick), _ref;\n },\n selectableTableAttrs: function selectableTableAttrs() {\n return {\n // TODO:\n // Should this attribute not be included when no-select-on-click is set\n // since this attribute implies keyboard navigation?\n 'aria-multiselectable': !this.isSelectable ? null : this.selectableIsMultiSelect ? 'true' : 'false'\n };\n }\n },\n watch: {\n computedItems: function computedItems(newVal, oldVal) {\n // Reset for selectable\n var equal = false;\n \n if (this.isSelectable && this.selectedRows.length > 0) {\n // Quick check against array length\n equal = isArray(newVal) && isArray(oldVal) && newVal.length === oldVal.length;\n \n for (var i = 0; equal && i < newVal.length; i++) {\n // Look for the first non-loosely equal row, after ignoring reserved fields\n equal = looseEqual(sanitizeRow(newVal[i]), sanitizeRow(oldVal[i]));\n }\n }\n \n if (!equal) {\n this.clearSelected();\n }\n },\n selectable: function selectable(newVal) {\n this.clearSelected();\n this.setSelectionHandlers(newVal);\n },\n selectMode: function selectMode() {\n this.clearSelected();\n },\n hasSelectableRowClick: function hasSelectableRowClick(newVal) {\n this.clearSelected();\n this.setSelectionHandlers(!newVal);\n },\n selectedRows: function selectedRows(_selectedRows, oldVal) {\n var _this = this;\n \n if (this.isSelectable && !looseEqual(_selectedRows, oldVal)) {\n var items = []; // `.forEach()` skips over non-existent indices (on sparse arrays)\n \n _selectedRows.forEach(function (v, idx) {\n if (v) {\n items.push(_this.computedItems[idx]);\n }\n });\n \n this.$emit('row-selected', items);\n }\n }\n },\n beforeMount: function beforeMount() {\n // Set up handlers if needed\n if (this.isSelectable) {\n this.setSelectionHandlers(true);\n }\n },\n methods: {\n // Public methods\n selectRow: function selectRow(index) {\n // Select a particular row (indexed based on computedItems)\n if (this.isSelectable && isNumber(index) && index >= 0 && index < this.computedItems.length && !this.isRowSelected(index)) {\n var selectedRows = this.selectableIsMultiSelect ? this.selectedRows.slice() : [];\n selectedRows[index] = true;\n this.selectedLastClicked = -1;\n this.selectedRows = selectedRows;\n }\n },\n unselectRow: function unselectRow(index) {\n // Un-select a particular row (indexed based on `computedItems`)\n if (this.isSelectable && isNumber(index) && this.isRowSelected(index)) {\n var selectedRows = this.selectedRows.slice();\n selectedRows[index] = false;\n this.selectedLastClicked = -1;\n this.selectedRows = selectedRows;\n }\n },\n selectAllRows: function selectAllRows() {\n var length = this.computedItems.length;\n \n if (this.isSelectable && length > 0) {\n this.selectedLastClicked = -1;\n this.selectedRows = this.selectableIsMultiSelect ? range(length).map(function () {\n return true;\n }) : [true];\n }\n },\n isRowSelected: function isRowSelected(index) {\n // Determine if a row is selected (indexed based on `computedItems`)\n return !!(isNumber(index) && this.selectedRows[index]);\n },\n clearSelected: function clearSelected() {\n // Clear any active selected row(s)\n this.selectedLastClicked = -1;\n this.selectedRows = [];\n },\n // Internal private methods\n selectableRowClasses: function selectableRowClasses(index) {\n if (this.isSelectable && this.isRowSelected(index)) {\n var variant = this.selectedVariant;\n return _defineProperty({\n 'b-table-row-selected': true\n }, \"\".concat(this.dark ? 'bg' : 'table', \"-\").concat(variant), variant);\n } else {\n return {};\n }\n },\n selectableRowAttrs: function selectableRowAttrs(index) {\n return {\n 'aria-selected': !this.isSelectable ? null : this.isRowSelected(index) ? 'true' : 'false'\n };\n },\n setSelectionHandlers: function setSelectionHandlers(on) {\n var method = on && !this.noSelectOnClick ? '$on' : '$off'; // Handle row-clicked event\n \n this[method]('row-clicked', this.selectionHandler); // Clear selection on filter, pagination, and sort changes\n \n this[method]('filtered', this.clearSelected);\n this[method]('context-changed', this.clearSelected);\n },\n selectionHandler: function selectionHandler(item, index, evt) {\n /* istanbul ignore if: should never happen */\n if (!this.isSelectable || this.noSelectOnClick) {\n // Don't do anything if table is not in selectable mode\n this.clearSelected();\n return;\n }\n \n var selectMode = this.selectMode;\n var selectedRows = this.selectedRows.slice();\n var selected = !selectedRows[index]; // Note 'multi' mode needs no special event handling\n \n if (selectMode === 'single') {\n selectedRows = [];\n } else if (selectMode === 'range') {\n if (this.selectedLastRow > -1 && evt.shiftKey) {\n // range\n for (var idx = mathMin(this.selectedLastRow, index); idx <= mathMax(this.selectedLastRow, index); idx++) {\n selectedRows[idx] = true;\n }\n \n selected = true;\n } else {\n if (!(evt.ctrlKey || evt.metaKey)) {\n // Clear range selection if any\n selectedRows = [];\n selected = true;\n }\n \n this.selectedLastRow = selected ? index : -1;\n }\n }\n \n selectedRows[index] = selected;\n this.selectedRows = selectedRows;\n }\n }\n };\n \n var providerMixin = {\n mixins: [listenOnRootMixin],\n props: {\n // Prop override(s)\n items: {\n // Adds in 'Function' support\n type: [Array, Function],\n \n /* istanbul ignore next */\n default: function _default()\n /* istanbul ignore next */\n {\n return [];\n }\n },\n // Additional props\n noProviderPaging: {\n type: Boolean,\n default: false\n },\n noProviderSorting: {\n type: Boolean,\n default: false\n },\n noProviderFiltering: {\n type: Boolean,\n default: false\n },\n apiUrl: {\n // Passthrough prop. Passed to the context object. Not used by b-table directly\n type: String,\n default: ''\n }\n },\n computed: {\n hasProvider: function hasProvider() {\n return isFunction(this.items);\n },\n providerTriggerContext: function providerTriggerContext() {\n // Used to trigger the provider function via a watcher. Only the fields that\n // are needed for triggering a provider update are included. Note that the\n // regular this.context is sent to the provider during fetches though, as they\n // may need all the prop info.\n var ctx = {\n apiUrl: this.apiUrl,\n filter: null,\n sortBy: null,\n sortDesc: null,\n perPage: null,\n currentPage: null\n };\n \n if (!this.noProviderFiltering) {\n // Either a string, or could be an object or array.\n ctx.filter = this.localFilter;\n }\n \n if (!this.noProviderSorting) {\n ctx.sortBy = this.localSortBy;\n ctx.sortDesc = this.localSortDesc;\n }\n \n if (!this.noProviderPaging) {\n ctx.perPage = this.perPage;\n ctx.currentPage = this.currentPage;\n }\n \n return clone(ctx);\n }\n },\n watch: {\n // Provider update triggering\n items: function items(newVal) {\n // If a new provider has been specified, trigger an update\n if (this.hasProvider || isFunction(newVal)) {\n this.$nextTick(this._providerUpdate);\n }\n },\n providerTriggerContext: function providerTriggerContext(newVal, oldVal) {\n // Trigger the provider to update as the relevant context values have changed.\n if (!looseEqual(newVal, oldVal)) {\n this.$nextTick(this._providerUpdate);\n }\n }\n },\n mounted: function mounted() {\n var _this = this;\n \n // Call the items provider if necessary\n if (this.hasProvider && (!this.localItems || this.localItems.length === 0)) {\n // Fetch on mount if localItems is empty\n this._providerUpdate();\n } // Listen for global messages to tell us to force refresh the table\n \n \n this.listenOnRoot('bv::refresh::table', function (id) {\n if (id === _this.id || id === _this) {\n _this.refresh();\n }\n });\n },\n methods: {\n refresh: function refresh() {\n // Public Method: Force a refresh of the provider function\n this.$off('refreshed', this.refresh);\n \n if (this.computedBusy) {\n // Can't force an update when forced busy by user (busy prop === true)\n if (this.localBusy && this.hasProvider) {\n // But if provider running (localBusy), re-schedule refresh once `refreshed` emitted\n this.$on('refreshed', this.refresh);\n }\n } else {\n this.clearSelected();\n \n if (this.hasProvider) {\n this.$nextTick(this._providerUpdate);\n } else {\n /* istanbul ignore next */\n this.localItems = isArray(this.items) ? this.items.slice() : [];\n }\n }\n },\n // Provider related methods\n _providerSetLocal: function _providerSetLocal(items) {\n this.localItems = isArray(items) ? items.slice() : [];\n this.localBusy = false;\n this.$emit('refreshed'); // New root emit\n \n if (this.id) {\n this.emitOnRoot('bv::table::refreshed', this.id);\n }\n },\n _providerUpdate: function _providerUpdate() {\n var _this2 = this;\n \n // Refresh the provider function items.\n if (!this.hasProvider) {\n // Do nothing if no provider\n return;\n } // If table is busy, wait until refreshed before calling again\n \n \n if (this.computedBusy) {\n // Schedule a new refresh once `refreshed` is emitted\n this.$nextTick(this.refresh);\n return;\n } // Set internal busy state\n \n \n this.localBusy = true; // Call provider function with context and optional callback after DOM is fully updated\n \n this.$nextTick(function () {\n try {\n // Call provider function passing it the context and optional callback\n var data = _this2.items(_this2.context, _this2._providerSetLocal);\n \n if (isPromise(data)) {\n // Provider returned Promise\n data.then(function (items) {\n // Provider resolved with items\n _this2._providerSetLocal(items);\n });\n } else if (isArray(data)) {\n // Provider returned Array data\n _this2._providerSetLocal(data);\n } else {\n /* istanbul ignore if */\n if (_this2.items.length !== 2) {\n // Check number of arguments provider function requested\n // Provider not using callback (didn't request second argument), so we clear\n // busy state as most likely there was an error in the provider function\n \n /* istanbul ignore next */\n warn(\"Provider function didn't request callback and did not return a promise or data.\", 'BTable');\n _this2.localBusy = false;\n }\n }\n } catch (e)\n /* istanbul ignore next */\n {\n // Provider function borked on us, so we spew out a warning\n // and clear the busy state\n warn(\"Provider function error [\".concat(e.name, \"] \").concat(e.message, \".\"), 'BTable');\n _this2.localBusy = false;\n \n _this2.$off('refreshed', _this2.refresh);\n }\n });\n }\n }\n };\n \n // Includes all main table styling options\n \n var tableRendererMixin = {\n // Don't place attributes on root element automatically,\n // as table could be wrapped in responsive `<div>`\n inheritAttrs: false,\n // Mixin order is important!\n mixins: [attrsMixin],\n provide: function provide() {\n return {\n bvTable: this\n };\n },\n props: {\n striped: {\n type: Boolean,\n default: false\n },\n bordered: {\n type: Boolean,\n default: false\n },\n borderless: {\n type: Boolean,\n default: false\n },\n outlined: {\n type: Boolean,\n default: false\n },\n dark: {\n type: Boolean,\n default: false\n },\n hover: {\n type: Boolean,\n default: false\n },\n small: {\n type: Boolean,\n default: false\n },\n fixed: {\n type: Boolean,\n default: false\n },\n responsive: {\n type: [Boolean, String],\n default: false\n },\n stickyHeader: {\n // If a string, it is assumed to be the table `max-height` value\n type: [Boolean, String],\n default: false\n },\n noBorderCollapse: {\n type: Boolean,\n default: false\n },\n captionTop: {\n type: Boolean,\n default: false\n },\n tableVariant: {\n type: String // default: null\n \n },\n tableClass: {\n type: [String, Array, Object] // default: null\n \n }\n },\n computed: {\n // Layout related computed props\n isResponsive: function isResponsive() {\n var responsive = this.responsive === '' ? true : this.responsive;\n return this.isStacked ? false : responsive;\n },\n isStickyHeader: function isStickyHeader() {\n var stickyHeader = this.stickyHeader === '' ? true : this.stickyHeader;\n return this.isStacked ? false : stickyHeader;\n },\n wrapperClasses: function wrapperClasses() {\n return [this.isStickyHeader ? 'b-table-sticky-header' : '', this.isResponsive === true ? 'table-responsive' : this.isResponsive ? \"table-responsive-\".concat(this.responsive) : ''].filter(identity);\n },\n wrapperStyles: function wrapperStyles() {\n return this.isStickyHeader && !isBoolean(this.isStickyHeader) ? {\n maxHeight: this.isStickyHeader\n } : {};\n },\n tableClasses: function tableClasses() {\n var hover = this.isTableSimple ? this.hover : this.hover && this.computedItems.length > 0 && !this.computedBusy;\n return [// User supplied classes\n this.tableClass, // Styling classes\n {\n 'table-striped': this.striped,\n 'table-hover': hover,\n 'table-dark': this.dark,\n 'table-bordered': this.bordered,\n 'table-borderless': this.borderless,\n 'table-sm': this.small,\n // The following are b-table custom styles\n border: this.outlined,\n 'b-table-fixed': this.fixed,\n 'b-table-caption-top': this.captionTop,\n 'b-table-no-border-collapse': this.noBorderCollapse\n }, this.tableVariant ? \"\".concat(this.dark ? 'bg' : 'table', \"-\").concat(this.tableVariant) : '', // Stacked table classes\n this.stackedTableClasses, // Selectable classes\n this.selectableTableClasses];\n },\n tableAttrs: function tableAttrs() {\n // Preserve user supplied aria-describedby, if provided in `$attrs`\n var adb = [(this.bvAttrs || {})['aria-describedby'], this.captionId].filter(identity).join(' ') || null;\n var items = this.computedItems;\n var filteredItems = this.filteredItems;\n var fields = this.computedFields;\n var selectableAttrs = this.selectableTableAttrs || {};\n var ariaAttrs = this.isTableSimple ? {} : {\n 'aria-busy': this.computedBusy ? 'true' : 'false',\n 'aria-colcount': toString$1(fields.length),\n 'aria-describedby': adb\n };\n var rowCount = items && filteredItems && filteredItems.length > items.length ? toString$1(filteredItems.length) : null;\n return _objectSpread2(_objectSpread2(_objectSpread2({\n // We set `aria-rowcount` before merging in `$attrs`,\n // in case user has supplied their own\n 'aria-rowcount': rowCount\n }, this.bvAttrs), {}, {\n // Now we can override any `$attrs` here\n id: this.safeId(),\n role: 'table'\n }, ariaAttrs), selectableAttrs);\n }\n },\n render: function render(h) {\n var $content = [];\n \n if (this.isTableSimple) {\n $content.push(this.normalizeSlot('default'));\n } else {\n // Build the `<caption>` (from caption mixin)\n $content.push(this.renderCaption ? this.renderCaption() : null); // Build the `<colgroup>`\n \n $content.push(this.renderColgroup ? this.renderColgroup() : null); // Build the `<thead>`\n \n $content.push(this.renderThead ? this.renderThead() : null); // Build the `<tbody>`\n \n $content.push(this.renderTbody ? this.renderTbody() : null); // Build the `<tfoot>`\n \n $content.push(this.renderTfoot ? this.renderTfoot() : null);\n } // Assemble `<table>`\n \n \n var $table = h('table', {\n key: 'b-table',\n staticClass: 'table b-table',\n class: this.tableClasses,\n attrs: this.tableAttrs\n }, $content.filter(identity)); // Add responsive/sticky wrapper if needed and return table\n \n return this.wrapperClasses.length > 0 ? h('div', {\n key: 'wrap',\n class: this.wrapperClasses,\n style: this.wrapperStyles\n }, [$table]) : $table;\n }\n };\n \n // @vue/component\n \n var BTable = /*#__PURE__*/Vue.extend({\n name: 'BTable',\n // Order of mixins is important!\n // They are merged from first to last, followed by this component\n mixins: [// General mixins\n attrsMixin, hasListenerMixin, idMixin, normalizeSlotMixin, // Required table mixins\n itemsMixin, tableRendererMixin, stackedMixin, theadMixin, tfootMixin, tbodyMixin, // Table features mixins\n stackedMixin, filteringMixin, sortingMixin, paginationMixin$1, captionMixin, colgroupMixin, selectableMixin, emptyMixin, topRowMixin, bottomRowMixin, busyMixin, providerMixin] // Render function is provided by table-renderer mixin\n \n });\n \n // @vue/component\n \n var BTableLite = /*#__PURE__*/Vue.extend({\n name: 'BTableLite',\n // Order of mixins is important!\n // They are merged from first to last, followed by this component.\n mixins: [// Required mixins\n hasListenerMixin, idMixin, normalizeSlotMixin, itemsMixin, tableRendererMixin, stackedMixin, theadMixin, tfootMixin, tbodyMixin, // Features Mixins\n // These are pretty lightweight, and are useful for lightweight tables\n captionMixin, colgroupMixin] // render function provided by table-renderer mixin\n \n });\n \n // @vue/component\n \n var BTableSimple = /*#__PURE__*/Vue.extend({\n name: 'BTableSimple',\n // Order of mixins is important!\n // They are merged from first to last, followed by this component.\n mixins: [// Required mixins\n idMixin, normalizeSlotMixin, tableRendererMixin, // feature mixin\n // Stacked requires extra handling by users via\n // the table cell `stacked-heading` prop\n stackedMixin],\n computed: {\n isTableSimple: function isTableSimple() {\n return true;\n }\n } // render function provided by table-renderer mixin\n \n });\n \n var TableLitePlugin = /*#__PURE__*/pluginFactory({\n components: {\n BTableLite: BTableLite\n }\n });\n var TableSimplePlugin = /*#__PURE__*/pluginFactory({\n components: {\n BTableSimple: BTableSimple,\n BTbody: BTbody,\n BThead: BThead,\n BTfoot: BTfoot,\n BTr: BTr,\n BTd: BTd,\n BTh: BTh\n }\n });\n var TablePlugin = /*#__PURE__*/pluginFactory({\n components: {\n BTable: BTable\n },\n plugins: {\n TableLitePlugin: TableLitePlugin,\n TableSimplePlugin: TableSimplePlugin\n }\n });\n \n var navProps = omit(props$K, ['tabs', 'isNavBar', 'cardHeader']); // -- Utils --\n // Filter function to filter out disabled tabs\n \n var notDisabled = function notDisabled(tab) {\n return !tab.disabled;\n }; // --- Helper components ---\n // @vue/component\n \n \n var BTabButtonHelper = /*#__PURE__*/Vue.extend({\n name: 'BTabButtonHelper',\n inject: {\n bvTabs: {\n /* istanbul ignore next */\n default: function _default()\n /* istanbul ignore next */\n {\n return {};\n }\n }\n },\n props: {\n // Reference to the child <b-tab> instance\n tab: {\n default: null\n },\n tabs: {\n type: Array,\n \n /* istanbul ignore next */\n default: function _default()\n /* istanbul ignore next */\n {\n return [];\n }\n },\n id: {\n type: String,\n default: null\n },\n controls: {\n type: String,\n default: null\n },\n tabIndex: {\n type: Number,\n default: null\n },\n posInSet: {\n type: Number,\n default: null\n },\n setSize: {\n type: Number,\n default: null\n },\n noKeyNav: {\n type: Boolean,\n default: false\n }\n },\n methods: {\n focus: function focus() {\n attemptFocus(this.$refs.link);\n },\n handleEvt: function handleEvt(evt) {\n var stop = function stop() {\n evt.preventDefault();\n evt.stopPropagation();\n };\n \n if (this.tab.disabled) {\n /* istanbul ignore next */\n return;\n }\n \n var type = evt.type;\n var key = evt.keyCode;\n var shift = evt.shiftKey;\n \n if (type === 'click') {\n stop();\n this.$emit('click', evt);\n } else if (type === 'keydown' && key === KEY_CODES.SPACE) {\n // For ARIA tabs the SPACE key will also trigger a click/select\n // Even with keyboard navigation disabled, SPACE should \"click\" the button\n // See: https://github.com/bootstrap-vue/bootstrap-vue/issues/4323\n stop();\n this.$emit('click', evt);\n } else if (type === 'keydown' && !this.noKeyNav) {\n // For keyboard navigation\n if (key === KEY_CODES.UP || key === KEY_CODES.LEFT || key === KEY_CODES.HOME) {\n stop();\n \n if (shift || key === KEY_CODES.HOME) {\n this.$emit('first', evt);\n } else {\n this.$emit('prev', evt);\n }\n } else if (key === KEY_CODES.DOWN || key === KEY_CODES.RIGHT || key === KEY_CODES.END) {\n stop();\n \n if (shift || key === KEY_CODES.END) {\n this.$emit('last', evt);\n } else {\n this.$emit('next', evt);\n }\n }\n }\n }\n },\n render: function render(h) {\n var link = h(BLink, {\n ref: 'link',\n staticClass: 'nav-link',\n class: [{\n active: this.tab.localActive && !this.tab.disabled,\n disabled: this.tab.disabled\n }, this.tab.titleLinkClass, // Apply <b-tabs> `activeNavItemClass` styles when the tab is active\n this.tab.localActive ? this.bvTabs.activeNavItemClass : null],\n props: {\n disabled: this.tab.disabled\n },\n attrs: _objectSpread2(_objectSpread2({}, this.tab.titleLinkAttributes), {}, {\n role: 'tab',\n id: this.id,\n // Roving tab index when keynav enabled\n tabindex: this.tabIndex,\n 'aria-selected': this.tab.localActive && !this.tab.disabled ? 'true' : 'false',\n 'aria-setsize': this.setSize,\n 'aria-posinset': this.posInSet,\n 'aria-controls': this.controls\n }),\n on: {\n click: this.handleEvt,\n keydown: this.handleEvt\n }\n }, [this.tab.normalizeSlot('title') || this.tab.title]);\n return h('li', {\n staticClass: 'nav-item',\n class: [this.tab.titleItemClass],\n attrs: {\n role: 'presentation'\n }\n }, [link]);\n }\n }); // @vue/component\n \n var BTabs = /*#__PURE__*/Vue.extend({\n name: 'BTabs',\n mixins: [idMixin, normalizeSlotMixin],\n provide: function provide() {\n return {\n bvTabs: this\n };\n },\n model: {\n prop: 'value',\n event: 'input'\n },\n props: _objectSpread2(_objectSpread2({}, navProps), {}, {\n tag: {\n type: String,\n default: 'div'\n },\n card: {\n type: Boolean,\n default: false\n },\n end: {\n // Synonym for 'bottom'\n type: Boolean,\n default: false\n },\n noFade: {\n type: Boolean,\n default: false\n },\n noNavStyle: {\n type: Boolean,\n default: false\n },\n noKeyNav: {\n type: Boolean,\n default: false\n },\n lazy: {\n // This prop is sniffed by the <b-tab> child\n type: Boolean,\n default: false\n },\n contentClass: {\n type: [String, Array, Object] // default: null\n \n },\n navClass: {\n type: [String, Array, Object] // default: null\n \n },\n navWrapperClass: {\n type: [String, Array, Object] // default: null\n \n },\n activeNavItemClass: {\n // Only applied to the currently active <b-nav-item>\n type: [String, Array, Object] // default: null\n \n },\n activeTabClass: {\n // Only applied to the currently active <b-tab>\n // This prop is sniffed by the <b-tab> child\n type: [String, Array, Object] // default: null\n \n },\n value: {\n // v-model\n type: Number,\n default: null\n }\n }),\n data: function data() {\n return {\n // Index of current tab\n currentTab: toInteger(this.value, -1),\n // Array of direct child <b-tab> instances, in DOM order\n tabs: [],\n // Array of child instances registered (for triggering reactive updates)\n registeredTabs: [],\n // Flag to know if we are mounted or not\n isMounted: false\n };\n },\n computed: {\n fade: function fade() {\n // This computed prop is sniffed by the tab child\n return !this.noFade;\n },\n localNavClass: function localNavClass() {\n var classes = [];\n \n if (this.card && this.vertical) {\n classes.push('card-header', 'h-100', 'border-bottom-0', 'rounded-0');\n }\n \n return [].concat(classes, [this.navClass]);\n }\n },\n watch: {\n currentTab: function currentTab(newVal) {\n var index = -1; // Ensure only one tab is active at most\n \n this.tabs.forEach(function (tab, idx) {\n if (newVal === idx && !tab.disabled) {\n tab.localActive = true;\n index = idx;\n } else {\n tab.localActive = false;\n }\n }); // Update the v-model\n \n this.$emit('input', index);\n },\n value: function value(newVal, oldVal) {\n if (newVal !== oldVal) {\n newVal = toInteger(newVal, -1);\n oldVal = toInteger(oldVal, 0);\n var tabs = this.tabs;\n \n if (tabs[newVal] && !tabs[newVal].disabled) {\n this.activateTab(tabs[newVal]);\n } else {\n // Try next or prev tabs\n if (newVal < oldVal) {\n this.previousTab();\n } else {\n this.nextTab();\n }\n }\n }\n },\n registeredTabs: function registeredTabs() {\n var _this = this;\n \n // Each b-tab will register/unregister itself.\n // We use this to detect when tabs are added/removed\n // to trigger the update of the tabs.\n this.$nextTick(function () {\n requestAF(function () {\n _this.updateTabs();\n });\n });\n },\n tabs: function tabs(newVal, oldVal) {\n var _this2 = this;\n \n // If tabs added, removed, or re-ordered, we emit a `changed` event.\n // We use `tab._uid` instead of `tab.safeId()`, as the later is changed\n // in a nextTick if no explicit ID is provided, causing duplicate emits.\n if (!looseEqual(newVal.map(function (t) {\n return t._uid;\n }), oldVal.map(function (t) {\n return t._uid;\n }))) {\n // In a nextTick to ensure currentTab has been set first.\n this.$nextTick(function () {\n // We emit shallow copies of the new and old arrays of tabs, to\n // prevent users from potentially mutating the internal arrays.\n _this2.$emit('changed', newVal.slice(), oldVal.slice());\n });\n }\n },\n isMounted: function isMounted(newVal) {\n var _this3 = this;\n \n // Trigger an update after mounted. Needed for tabs inside lazy modals.\n if (newVal) {\n requestAF(function () {\n _this3.updateTabs();\n });\n } // Enable or disable the observer\n \n \n this.setObserver(newVal);\n }\n },\n created: function created() {\n var _this4 = this;\n \n // Create private non-reactive props\n this.$_observer = null;\n this.currentTab = toInteger(this.value, -1); // For SSR and to make sure only a single tab is shown on mount\n // We wrap this in a `$nextTick()` to ensure the child tabs have been created\n \n this.$nextTick(function () {\n _this4.updateTabs();\n });\n },\n mounted: function mounted() {\n var _this5 = this;\n \n // Call `updateTabs()` just in case...\n this.updateTabs();\n this.$nextTick(function () {\n // Flag we are now mounted and to switch to DOM for tab probing.\n // As this.$slots.default appears to lie about component instances\n // after b-tabs is destroyed and re-instantiated.\n // And this.$children does not respect DOM order.\n _this5.isMounted = true;\n });\n },\n \n /* istanbul ignore next */\n deactivated: function deactivated()\n /* istanbul ignore next */\n {\n this.isMounted = false;\n },\n \n /* istanbul ignore next */\n activated: function activated()\n /* istanbul ignore next */\n {\n var _this6 = this;\n \n this.currentTab = toInteger(this.value, -1);\n this.$nextTick(function () {\n _this6.updateTabs();\n \n _this6.isMounted = true;\n });\n },\n beforeDestroy: function beforeDestroy() {\n this.isMounted = false;\n },\n destroyed: function destroyed() {\n // Ensure no references to child instances exist\n this.tabs = [];\n },\n methods: {\n registerTab: function registerTab(tab) {\n var _this7 = this;\n \n if (!arrayIncludes(this.registeredTabs, tab)) {\n this.registeredTabs.push(tab);\n tab.$once('hook:destroyed', function () {\n _this7.unregisterTab(tab);\n });\n }\n },\n unregisterTab: function unregisterTab(tab) {\n this.registeredTabs = this.registeredTabs.slice().filter(function (t) {\n return t !== tab;\n });\n },\n // DOM observer is needed to detect changes in order of tabs\n setObserver: function setObserver(on) {\n this.$_observer && this.$_observer.disconnect();\n this.$_observer = null;\n \n if (on) {\n var self = this;\n /* istanbul ignore next: difficult to test mutation observer in JSDOM */\n \n var handler = function handler() {\n // We delay the update to ensure that `tab.safeId()` has\n // updated with the final ID value.\n self.$nextTick(function () {\n requestAF(function () {\n self.updateTabs();\n });\n });\n }; // Watch for changes to <b-tab> sub components\n \n \n this.$_observer = observeDom(this.$refs.tabsContainer, handler, {\n childList: true,\n subtree: false,\n attributes: true,\n attributeFilter: ['id']\n });\n }\n },\n getTabs: function getTabs() {\n // We use registeredTabs as the source of truth for child tab components. And we\n // filter out any BTab components that are extended BTab with a root child BTab.\n // https://github.com/bootstrap-vue/bootstrap-vue/issues/3260\n var tabs = this.registeredTabs.filter(function (tab) {\n return tab.$children.filter(function (t) {\n return t._isTab;\n }).length === 0;\n }); // DOM Order of Tabs\n \n var order = [];\n \n if (this.isMounted && tabs.length > 0) {\n // We rely on the DOM when mounted to get the 'true' order of the b-tab children.\n // querySelectorAll(...) always returns elements in document order, regardless of\n // order specified in the selector.\n var selector = tabs.map(function (tab) {\n return \"#\".concat(tab.safeId());\n }).join(', ');\n order = selectAll(selector, this.$el).map(function (el) {\n return el.id;\n }).filter(identity);\n } // Stable sort keeps the original order if not found in the\n // `order` array, which will be an empty array before mount.\n \n \n return stableSort(tabs, function (a, b) {\n return order.indexOf(a.safeId()) - order.indexOf(b.safeId());\n });\n },\n // Update list of <b-tab> children\n updateTabs: function updateTabs() {\n // Probe tabs\n var tabs = this.getTabs(); // Find *last* active non-disabled tab in current tabs\n // We trust tab state over currentTab, in case tabs were added/removed/re-ordered\n \n var tabIndex = tabs.indexOf(tabs.slice().reverse().find(function (tab) {\n return tab.localActive && !tab.disabled;\n })); // Else try setting to currentTab\n \n if (tabIndex < 0) {\n var currentTab = this.currentTab;\n \n if (currentTab >= tabs.length) {\n // Handle last tab being removed, so find the last non-disabled tab\n tabIndex = tabs.indexOf(tabs.slice().reverse().find(notDisabled));\n } else if (tabs[currentTab] && !tabs[currentTab].disabled) {\n // Current tab is not disabled\n tabIndex = currentTab;\n }\n } // Else find *first* non-disabled tab in current tabs\n \n \n if (tabIndex < 0) {\n tabIndex = tabs.indexOf(tabs.find(notDisabled));\n } // Set the current tab state to active\n \n \n tabs.forEach(function (tab) {\n // tab.localActive = idx === tabIndex && !tab.disabled\n tab.localActive = false;\n });\n \n if (tabs[tabIndex]) {\n tabs[tabIndex].localActive = true;\n } // Update the array of tab children\n \n \n this.tabs = tabs; // Set the currentTab index (can be -1 if no non-disabled tabs)\n \n this.currentTab = tabIndex;\n },\n // Find a button that controls a tab, given the tab reference\n // Returns the button vm instance\n getButtonForTab: function getButtonForTab(tab) {\n return (this.$refs.buttons || []).find(function (btn) {\n return btn.tab === tab;\n });\n },\n // Force a button to re-render its content, given a <b-tab> instance\n // Called by <b-tab> on `update()`\n updateButton: function updateButton(tab) {\n var button = this.getButtonForTab(tab);\n \n if (button && button.$forceUpdate) {\n button.$forceUpdate();\n }\n },\n // Activate a tab given a <b-tab> instance\n // Also accessed by <b-tab>\n activateTab: function activateTab(tab) {\n var result = false;\n \n if (tab) {\n var index = this.tabs.indexOf(tab);\n \n if (!tab.disabled && index > -1 && index !== this.currentTab) {\n var tabEvt = new BvEvent('activate-tab', {\n cancelable: true,\n vueTarget: this,\n componentId: this.safeId()\n });\n this.$emit(tabEvt.type, index, this.currentTab, tabEvt);\n \n if (!tabEvt.defaultPrevented) {\n result = true;\n this.currentTab = index;\n }\n }\n } // Couldn't set tab, so ensure v-model is set to `this.currentTab`\n \n /* istanbul ignore next: should rarely happen */\n \n \n if (!result && this.currentTab !== this.value) {\n this.$emit('input', this.currentTab);\n }\n \n return result;\n },\n // Deactivate a tab given a <b-tab> instance\n // Accessed by <b-tab>\n deactivateTab: function deactivateTab(tab) {\n if (tab) {\n // Find first non-disabled tab that isn't the one being deactivated\n // If no tabs are available, then don't deactivate current tab\n return this.activateTab(this.tabs.filter(function (t) {\n return t !== tab;\n }).find(notDisabled));\n }\n /* istanbul ignore next: should never/rarely happen */\n \n \n return false;\n },\n // Focus a tab button given its <b-tab> instance\n focusButton: function focusButton(tab) {\n var _this8 = this;\n \n // Wrap in `$nextTick()` to ensure DOM has completed rendering/updating before focusing\n this.$nextTick(function () {\n attemptFocus(_this8.getButtonForTab(tab));\n });\n },\n // Emit a click event on a specified <b-tab> component instance\n emitTabClick: function emitTabClick(tab, evt) {\n if (isEvent(evt) && tab && tab.$emit && !tab.disabled) {\n tab.$emit('click', evt);\n }\n },\n // Click handler\n clickTab: function clickTab(tab, evt) {\n this.activateTab(tab);\n this.emitTabClick(tab, evt);\n },\n // Move to first non-disabled tab\n firstTab: function firstTab(focus) {\n var tab = this.tabs.find(notDisabled);\n \n if (this.activateTab(tab) && focus) {\n this.focusButton(tab);\n this.emitTabClick(tab, focus);\n }\n },\n // Move to previous non-disabled tab\n previousTab: function previousTab(focus) {\n var currentIndex = mathMax(this.currentTab, 0);\n var tab = this.tabs.slice(0, currentIndex).reverse().find(notDisabled);\n \n if (this.activateTab(tab) && focus) {\n this.focusButton(tab);\n this.emitTabClick(tab, focus);\n }\n },\n // Move to next non-disabled tab\n nextTab: function nextTab(focus) {\n var currentIndex = mathMax(this.currentTab, -1);\n var tab = this.tabs.slice(currentIndex + 1).find(notDisabled);\n \n if (this.activateTab(tab) && focus) {\n this.focusButton(tab);\n this.emitTabClick(tab, focus);\n }\n },\n // Move to last non-disabled tab\n lastTab: function lastTab(focus) {\n var tab = this.tabs.slice().reverse().find(notDisabled);\n \n if (this.activateTab(tab) && focus) {\n this.focusButton(tab);\n this.emitTabClick(tab, focus);\n }\n }\n },\n render: function render(h) {\n var _this9 = this;\n \n var tabs = this.tabs; // Currently active tab\n \n var activeTab = tabs.find(function (tab) {\n return tab.localActive && !tab.disabled;\n }); // Tab button to allow focusing when no active tab found (keynav only)\n \n var fallbackTab = tabs.find(function (tab) {\n return !tab.disabled;\n }); // For each <b-tab> found create the tab buttons\n \n var buttons = tabs.map(function (tab, index) {\n var tabIndex = null; // Ensure at least one tab button is focusable when keynav enabled (if possible)\n \n if (!_this9.noKeyNav) {\n // Buttons are not in tab index unless active, or a fallback tab\n tabIndex = -1;\n \n if (activeTab === tab || !activeTab && fallbackTab === tab) {\n // Place tab button in tab sequence\n tabIndex = null;\n }\n }\n \n return h(BTabButtonHelper, {\n key: tab._uid || index,\n ref: 'buttons',\n // Needed to make `this.$refs.buttons` an array\n refInFor: true,\n props: {\n tab: tab,\n tabs: tabs,\n id: tab.controlledBy || (tab.safeId ? tab.safeId(\"_BV_tab_button_\") : null),\n controls: tab.safeId ? tab.safeId() : null,\n tabIndex: tabIndex,\n setSize: tabs.length,\n posInSet: index + 1,\n noKeyNav: _this9.noKeyNav\n },\n on: {\n click: function click(evt) {\n _this9.clickTab(tab, evt);\n },\n first: _this9.firstTab,\n prev: _this9.previousTab,\n next: _this9.nextTab,\n last: _this9.lastTab\n }\n });\n }); // Nav\n \n var nav = h(BNav, {\n ref: 'nav',\n class: this.localNavClass,\n attrs: {\n role: 'tablist',\n id: this.safeId('_BV_tab_controls_')\n },\n props: {\n fill: this.fill,\n justified: this.justified,\n align: this.align,\n tabs: !this.noNavStyle && !this.pills,\n pills: !this.noNavStyle && this.pills,\n vertical: this.vertical,\n small: this.small,\n cardHeader: this.card && !this.vertical\n }\n }, [this.normalizeSlot('tabs-start') || h(), buttons, this.normalizeSlot('tabs-end') || h()]);\n nav = h('div', {\n key: 'bv-tabs-nav',\n class: [{\n 'card-header': this.card && !this.vertical && !this.end,\n 'card-footer': this.card && !this.vertical && this.end,\n 'col-auto': this.vertical\n }, this.navWrapperClass]\n }, [nav]);\n var empty = h();\n \n if (!tabs || tabs.length === 0) {\n empty = h('div', {\n key: 'bv-empty-tab',\n class: ['tab-pane', 'active', {\n 'card-body': this.card\n }]\n }, this.normalizeSlot('empty'));\n } // Main content section\n \n \n var content = h('div', {\n ref: 'tabsContainer',\n key: 'bv-tabs-container',\n staticClass: 'tab-content',\n class: [{\n col: this.vertical\n }, this.contentClass],\n attrs: {\n id: this.safeId('_BV_tab_container_')\n }\n }, concat(this.normalizeSlot('default'), empty)); // Render final output\n \n return h(this.tag, {\n staticClass: 'tabs',\n class: {\n row: this.vertical,\n 'no-gutters': this.vertical && this.card\n },\n attrs: {\n id: this.safeId()\n }\n }, [this.end ? content : h(), [nav], this.end ? h() : content]);\n }\n });\n \n var BTab = /*#__PURE__*/Vue.extend({\n name: 'BTab',\n mixins: [idMixin, normalizeSlotMixin],\n inject: {\n bvTabs: {\n default: function _default() {\n return {};\n }\n }\n },\n props: {\n active: {\n type: Boolean,\n default: false\n },\n tag: {\n type: String,\n default: 'div'\n },\n buttonId: {\n type: String // default: ''\n \n },\n title: {\n type: String,\n default: ''\n },\n titleItemClass: {\n // Sniffed by tabs.js and added to nav 'li.nav-item'\n type: [String, Array, Object] // default: null\n \n },\n titleLinkClass: {\n // Sniffed by tabs.js and added to nav 'a.nav-link'\n type: [String, Array, Object] // default: null\n \n },\n titleLinkAttributes: {\n type: Object // default: null\n \n },\n disabled: {\n type: Boolean,\n default: false\n },\n noBody: {\n type: Boolean,\n default: false\n },\n lazy: {\n type: Boolean,\n default: false\n }\n },\n data: function data() {\n return {\n localActive: this.active && !this.disabled,\n show: false\n };\n },\n computed: {\n tabClasses: function tabClasses() {\n return [{\n active: this.localActive,\n disabled: this.disabled,\n 'card-body': this.bvTabs.card && !this.noBody\n }, // Apply <b-tabs> `activeTabClass` styles when this tab is active\n this.localActive ? this.bvTabs.activeTabClass : null];\n },\n controlledBy: function controlledBy() {\n return this.buttonId || this.safeId('__BV_tab_button__');\n },\n computedNoFade: function computedNoFade() {\n return !(this.bvTabs.fade || false);\n },\n computedLazy: function computedLazy() {\n return this.bvTabs.lazy || this.lazy;\n },\n _isTab: function _isTab() {\n // For parent sniffing of child\n return true;\n }\n },\n watch: {\n localActive: function localActive(newVal) {\n // Make 'active' prop work with `.sync` modifier\n this.$emit('update:active', newVal);\n },\n active: function active(newVal, oldVal) {\n if (newVal !== oldVal) {\n if (newVal) {\n // If activated post mount\n this.activate();\n } else {\n /* istanbul ignore next */\n if (!this.deactivate()) {\n // Tab couldn't be deactivated, so we reset the synced active prop\n // Deactivation will fail if no other tabs to activate\n this.$emit('update:active', this.localActive);\n }\n }\n }\n },\n disabled: function disabled(newVal, oldVal) {\n if (newVal !== oldVal) {\n if (newVal && this.localActive && this.bvTabs.firstTab) {\n this.localActive = false;\n this.bvTabs.firstTab();\n }\n }\n }\n },\n mounted: function mounted() {\n // Inform b-tabs of our presence\n this.registerTab(); // Initially show on mount if active and not disabled\n \n this.show = this.localActive;\n },\n updated: function updated() {\n // Force the tab button content to update (since slots are not reactive)\n // Only done if we have a title slot, as the title prop is reactive\n if (this.hasNormalizedSlot('title') && this.bvTabs.updateButton) {\n this.bvTabs.updateButton(this);\n }\n },\n destroyed: function destroyed() {\n // inform b-tabs of our departure\n this.unregisterTab();\n },\n methods: {\n // Private methods\n registerTab: function registerTab() {\n // Inform `b-tabs` of our presence\n this.bvTabs.registerTab && this.bvTabs.registerTab(this);\n },\n unregisterTab: function unregisterTab() {\n // Inform `b-tabs` of our departure\n this.bvTabs.unregisterTab && this.bvTabs.unregisterTab(this);\n },\n // Public methods\n activate: function activate() {\n if (this.bvTabs.activateTab && !this.disabled) {\n return this.bvTabs.activateTab(this);\n } else {\n // Not inside a <b-tabs> component or tab is disabled\n return false;\n }\n },\n deactivate: function deactivate() {\n if (this.bvTabs.deactivateTab && this.localActive) {\n return this.bvTabs.deactivateTab(this);\n } else {\n // Not inside a <b-tabs> component or not active to begin with\n return false;\n }\n }\n },\n render: function render(h) {\n var content = h(this.tag, {\n ref: 'panel',\n staticClass: 'tab-pane',\n class: this.tabClasses,\n directives: [{\n name: 'show',\n rawName: 'v-show',\n value: this.localActive,\n expression: 'localActive'\n }],\n attrs: {\n role: 'tabpanel',\n id: this.safeId(),\n 'aria-hidden': this.localActive ? 'false' : 'true',\n 'aria-labelledby': this.controlledBy || null\n }\n }, // Render content lazily if requested\n [this.localActive || !this.computedLazy ? this.normalizeSlot('default') : h()]);\n return h(BVTransition, {\n props: {\n mode: 'out-in',\n noFade: this.computedNoFade\n }\n }, [content]);\n }\n });\n \n var TabsPlugin = /*#__PURE__*/pluginFactory({\n components: {\n BTabs: BTabs,\n BTab: BTab\n }\n });\n \n var TimePlugin = /*#__PURE__*/pluginFactory({\n components: {\n BTime: BTime\n }\n });\n \n function _typeof$1(obj) {\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof$1 = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof$1 = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n \n return _typeof$1(obj);\n }\n \n function _toConsumableArray$1(arr) {\n return _arrayWithoutHoles$1(arr) || _iterableToArray$1(arr) || _nonIterableSpread$1();\n }\n \n function _arrayWithoutHoles$1(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n \n return arr2;\n }\n }\n \n function _iterableToArray$1(iter) {\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n }\n \n function _nonIterableSpread$1() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n }\n \n var inBrowser = typeof window !== 'undefined';\n function freeze$1(item) {\n if (Array.isArray(item) || _typeof$1(item) === 'object') {\n return Object.freeze(item);\n }\n \n return item;\n }\n function combinePassengers(transports) {\n var slotProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return transports.reduce(function (passengers, transport) {\n var temp = transport.passengers[0];\n var newPassengers = typeof temp === 'function' ? temp(slotProps) : transport.passengers;\n return passengers.concat(newPassengers);\n }, []);\n }\n function stableSort$1(array, compareFn) {\n return array.map(function (v, idx) {\n return [idx, v];\n }).sort(function (a, b) {\n return compareFn(a[1], b[1]) || a[0] - b[0];\n }).map(function (c) {\n return c[1];\n });\n }\n function pick$1(obj, keys) {\n return keys.reduce(function (acc, key) {\n if (obj.hasOwnProperty(key)) {\n acc[key] = obj[key];\n }\n \n return acc;\n }, {});\n }\n \n var transports = {};\n var targets = {};\n var sources = {};\n var Wormhole = Vue.extend({\n data: function data() {\n return {\n transports: transports,\n targets: targets,\n sources: sources,\n trackInstances: inBrowser\n };\n },\n methods: {\n open: function open(transport) {\n if (!inBrowser) return;\n var to = transport.to,\n from = transport.from,\n passengers = transport.passengers,\n _transport$order = transport.order,\n order = _transport$order === void 0 ? Infinity : _transport$order;\n if (!to || !from || !passengers) return;\n var newTransport = {\n to: to,\n from: from,\n passengers: freeze$1(passengers),\n order: order\n };\n var keys = Object.keys(this.transports);\n \n if (keys.indexOf(to) === -1) {\n Vue.set(this.transports, to, []);\n }\n \n var currentIndex = this.$_getTransportIndex(newTransport); // Copying the array here so that the PortalTarget change event will actually contain two distinct arrays\n \n var newTransports = this.transports[to].slice(0);\n \n if (currentIndex === -1) {\n newTransports.push(newTransport);\n } else {\n newTransports[currentIndex] = newTransport;\n }\n \n this.transports[to] = stableSort$1(newTransports, function (a, b) {\n return a.order - b.order;\n });\n },\n close: function close(transport) {\n var force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var to = transport.to,\n from = transport.from;\n if (!to || !from && force === false) return;\n \n if (!this.transports[to]) {\n return;\n }\n \n if (force) {\n this.transports[to] = [];\n } else {\n var index = this.$_getTransportIndex(transport);\n \n if (index >= 0) {\n // Copying the array here so that the PortalTarget change event will actually contain two distinct arrays\n var newTransports = this.transports[to].slice(0);\n newTransports.splice(index, 1);\n this.transports[to] = newTransports;\n }\n }\n },\n registerTarget: function registerTarget(target, vm, force) {\n if (!inBrowser) return;\n \n if (this.trackInstances && !force && this.targets[target]) {\n console.warn(\"[portal-vue]: Target \".concat(target, \" already exists\"));\n }\n \n this.$set(this.targets, target, Object.freeze([vm]));\n },\n unregisterTarget: function unregisterTarget(target) {\n this.$delete(this.targets, target);\n },\n registerSource: function registerSource(source, vm, force) {\n if (!inBrowser) return;\n \n if (this.trackInstances && !force && this.sources[source]) {\n console.warn(\"[portal-vue]: source \".concat(source, \" already exists\"));\n }\n \n this.$set(this.sources, source, Object.freeze([vm]));\n },\n unregisterSource: function unregisterSource(source) {\n this.$delete(this.sources, source);\n },\n hasTarget: function hasTarget(to) {\n return !!(this.targets[to] && this.targets[to][0]);\n },\n hasSource: function hasSource(to) {\n return !!(this.sources[to] && this.sources[to][0]);\n },\n hasContentFor: function hasContentFor(to) {\n return !!this.transports[to] && !!this.transports[to].length;\n },\n // Internal\n $_getTransportIndex: function $_getTransportIndex(_ref) {\n var to = _ref.to,\n from = _ref.from;\n \n for (var i in this.transports[to]) {\n if (this.transports[to][i].from === from) {\n return +i;\n }\n }\n \n return -1;\n }\n }\n });\n var wormhole = new Wormhole(transports);\n \n var _id = 1;\n var Portal = Vue.extend({\n name: 'portal',\n props: {\n disabled: {\n type: Boolean\n },\n name: {\n type: String,\n default: function _default() {\n return String(_id++);\n }\n },\n order: {\n type: Number,\n default: 0\n },\n slim: {\n type: Boolean\n },\n slotProps: {\n type: Object,\n default: function _default() {\n return {};\n }\n },\n tag: {\n type: String,\n default: 'DIV'\n },\n to: {\n type: String,\n default: function _default() {\n return String(Math.round(Math.random() * 10000000));\n }\n }\n },\n created: function created() {\n var _this = this;\n \n this.$nextTick(function () {\n wormhole.registerSource(_this.name, _this);\n });\n },\n mounted: function mounted() {\n if (!this.disabled) {\n this.sendUpdate();\n }\n },\n updated: function updated() {\n if (this.disabled) {\n this.clear();\n } else {\n this.sendUpdate();\n }\n },\n beforeDestroy: function beforeDestroy() {\n wormhole.unregisterSource(this.name);\n this.clear();\n },\n watch: {\n to: function to(newValue, oldValue) {\n oldValue && oldValue !== newValue && this.clear(oldValue);\n this.sendUpdate();\n }\n },\n methods: {\n clear: function clear(target) {\n var closer = {\n from: this.name,\n to: target || this.to\n };\n wormhole.close(closer);\n },\n normalizeSlots: function normalizeSlots() {\n return this.$scopedSlots.default ? [this.$scopedSlots.default] : this.$slots.default;\n },\n normalizeOwnChildren: function normalizeOwnChildren(children) {\n return typeof children === 'function' ? children(this.slotProps) : children;\n },\n sendUpdate: function sendUpdate() {\n var slotContent = this.normalizeSlots();\n \n if (slotContent) {\n var transport = {\n from: this.name,\n to: this.to,\n passengers: _toConsumableArray$1(slotContent),\n order: this.order\n };\n wormhole.open(transport);\n } else {\n this.clear();\n }\n }\n },\n render: function render(h) {\n var children = this.$slots.default || this.$scopedSlots.default || [];\n var Tag = this.tag;\n \n if (children && this.disabled) {\n return children.length <= 1 && this.slim ? this.normalizeOwnChildren(children)[0] : h(Tag, [this.normalizeOwnChildren(children)]);\n } else {\n return this.slim ? h() : h(Tag, {\n class: {\n 'v-portal': true\n },\n style: {\n display: 'none'\n },\n key: 'v-portal-placeholder'\n });\n }\n }\n });\n \n var PortalTarget = Vue.extend({\n name: 'portalTarget',\n props: {\n multiple: {\n type: Boolean,\n default: false\n },\n name: {\n type: String,\n required: true\n },\n slim: {\n type: Boolean,\n default: false\n },\n slotProps: {\n type: Object,\n default: function _default() {\n return {};\n }\n },\n tag: {\n type: String,\n default: 'div'\n },\n transition: {\n type: [String, Object, Function]\n }\n },\n data: function data() {\n return {\n transports: wormhole.transports,\n firstRender: true\n };\n },\n created: function created() {\n var _this = this;\n \n this.$nextTick(function () {\n wormhole.registerTarget(_this.name, _this);\n });\n },\n watch: {\n ownTransports: function ownTransports() {\n this.$emit('change', this.children().length > 0);\n },\n name: function name(newVal, oldVal) {\n /**\n * TODO\n * This should warn as well ...\n */\n wormhole.unregisterTarget(oldVal);\n wormhole.registerTarget(newVal, this);\n }\n },\n mounted: function mounted() {\n var _this2 = this;\n \n if (this.transition) {\n this.$nextTick(function () {\n // only when we have a transition, because it causes a re-render\n _this2.firstRender = false;\n });\n }\n },\n beforeDestroy: function beforeDestroy() {\n wormhole.unregisterTarget(this.name);\n },\n computed: {\n ownTransports: function ownTransports() {\n var transports = this.transports[this.name] || [];\n \n if (this.multiple) {\n return transports;\n }\n \n return transports.length === 0 ? [] : [transports[transports.length - 1]];\n },\n passengers: function passengers() {\n return combinePassengers(this.ownTransports, this.slotProps);\n }\n },\n methods: {\n // can't be a computed prop because it has to \"react\" to $slot changes.\n children: function children() {\n return this.passengers.length !== 0 ? this.passengers : this.$scopedSlots.default ? this.$scopedSlots.default(this.slotProps) : this.$slots.default || [];\n },\n // can't be a computed prop because it has to \"react\" to this.children().\n noWrapper: function noWrapper() {\n var noWrapper = this.slim && !this.transition;\n \n if (noWrapper && this.children().length > 1) {\n console.warn('[portal-vue]: PortalTarget with `slim` option received more than one child element.');\n }\n \n return noWrapper;\n }\n },\n render: function render(h) {\n var noWrapper = this.noWrapper();\n var children = this.children();\n var Tag = this.transition || this.tag;\n return noWrapper ? children[0] : this.slim && !Tag ? h() : h(Tag, {\n props: {\n // if we have a transition component, pass the tag if it exists\n tag: this.transition && this.tag ? this.tag : undefined\n },\n class: {\n 'vue-portal-target': true\n }\n }, children);\n }\n });\n \n var _id$1 = 0;\n var portalProps = ['disabled', 'name', 'order', 'slim', 'slotProps', 'tag', 'to'];\n var targetProps = ['multiple', 'transition'];\n var MountingPortal = Vue.extend({\n name: 'MountingPortal',\n inheritAttrs: false,\n props: {\n append: {\n type: [Boolean, String]\n },\n bail: {\n type: Boolean\n },\n mountTo: {\n type: String,\n required: true\n },\n // Portal\n disabled: {\n type: Boolean\n },\n // name for the portal\n name: {\n type: String,\n default: function _default() {\n return 'mounted_' + String(_id$1++);\n }\n },\n order: {\n type: Number,\n default: 0\n },\n slim: {\n type: Boolean\n },\n slotProps: {\n type: Object,\n default: function _default() {\n return {};\n }\n },\n tag: {\n type: String,\n default: 'DIV'\n },\n // name for the target\n to: {\n type: String,\n default: function _default() {\n return String(Math.round(Math.random() * 10000000));\n }\n },\n // Target\n multiple: {\n type: Boolean,\n default: false\n },\n targetSlim: {\n type: Boolean\n },\n targetSlotProps: {\n type: Object,\n default: function _default() {\n return {};\n }\n },\n targetTag: {\n type: String,\n default: 'div'\n },\n transition: {\n type: [String, Object, Function]\n }\n },\n created: function created() {\n if (typeof document === 'undefined') return;\n var el = document.querySelector(this.mountTo);\n \n if (!el) {\n console.error(\"[portal-vue]: Mount Point '\".concat(this.mountTo, \"' not found in document\"));\n return;\n }\n \n var props = this.$props; // Target already exists\n \n if (wormhole.targets[props.name]) {\n if (props.bail) {\n console.warn(\"[portal-vue]: Target \".concat(props.name, \" is already mounted.\\n Aborting because 'bail: true' is set\"));\n } else {\n this.portalTarget = wormhole.targets[props.name];\n }\n \n return;\n }\n \n var append = props.append;\n \n if (append) {\n var type = typeof append === 'string' ? append : 'DIV';\n var mountEl = document.createElement(type);\n el.appendChild(mountEl);\n el = mountEl;\n } // get props for target from $props\n // we have to rename a few of them\n \n \n var _props = pick$1(this.$props, targetProps);\n \n _props.slim = this.targetSlim;\n _props.tag = this.targetTag;\n _props.slotProps = this.targetSlotProps;\n _props.name = this.to;\n this.portalTarget = new PortalTarget({\n el: el,\n parent: this.$parent || this,\n propsData: _props\n });\n },\n beforeDestroy: function beforeDestroy() {\n var target = this.portalTarget;\n \n if (this.append) {\n var el = target.$el;\n el.parentNode.removeChild(el);\n }\n \n target.$destroy();\n },\n render: function render(h) {\n if (!this.portalTarget) {\n console.warn(\"[portal-vue] Target wasn't mounted\");\n return h();\n } // if there's no \"manual\" scoped slot, so we create a <Portal> ourselves\n \n \n if (!this.$scopedSlots.manual) {\n var props = pick$1(this.$props, portalProps);\n return h(Portal, {\n props: props,\n attrs: this.$attrs,\n on: this.$listeners,\n scopedSlots: this.$scopedSlots\n }, this.$slots.default);\n } // else, we render the scoped slot\n \n \n var content = this.$scopedSlots.manual({\n to: this.to\n }); // if user used <template> for the scoped slot\n // content will be an array\n \n if (Array.isArray(content)) {\n content = content[0];\n }\n \n if (!content) return h();\n return content;\n }\n });\n \n var NAME$K = 'BToaster';\n var props$$ = {\n name: {\n type: String,\n required: true\n },\n ariaLive: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$K, 'ariaLive');\n }\n },\n ariaAtomic: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$K, 'ariaAtomic');\n } // Allowed: 'true' or 'false' or null\n \n },\n role: {\n // Aria role\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$K, 'role');\n }\n }\n /*\n transition: {\n type: [Boolean, String, Object],\n default: false\n }\n */\n \n }; // @vue/component\n \n var DefaultTransition = /*#__PURE__*/Vue.extend({\n data: function data() {\n return {\n // Transition classes base name\n name: 'b-toaster'\n };\n },\n methods: {\n onAfterEnter: function onAfterEnter(el) {\n var _this = this;\n \n // Handle bug where enter-to class is not removed.\n // Bug is related to portal-vue and transition-groups.\n requestAF(function () {\n removeClass(el, \"\".concat(_this.name, \"-enter-to\")); // The *-move class is also stuck on elements that moved,\n // but there are no javascript hooks to handle after move.\n });\n }\n },\n render: function render(h) {\n return h('transition-group', {\n props: {\n tag: 'div',\n name: this.name\n },\n on: {\n afterEnter: this.onAfterEnter\n }\n }, this.$slots.default);\n }\n }); // @vue/component\n \n var BToaster = /*#__PURE__*/Vue.extend({\n name: NAME$K,\n props: props$$,\n data: function data() {\n return {\n // We don't render on SSR or if a an existing target found\n doRender: false,\n dead: false,\n // Toaster names cannot change once created\n staticName: this.name\n };\n },\n beforeMount: function beforeMount() {\n var _this2 = this;\n \n this.staticName = this.name;\n /* istanbul ignore if */\n \n if (wormhole.hasTarget(this.staticName)) {\n warn(\"A \\\"<portal-target>\\\" with name \\\"\".concat(this.name, \"\\\" already exists in the document.\"), 'BToaster');\n this.dead = true;\n } else {\n this.doRender = true;\n this.$once('hook:beforeDestroy', function () {\n // Let toasts made with `this.$bvToast.toast()` know that this toaster\n // is being destroyed and should should also destroy/hide themselves\n _this2.$root.$emit('bv::toaster::destroyed', _this2.staticName);\n });\n }\n },\n destroyed: function destroyed() {\n // Remove from DOM if needed\n \n /* istanbul ignore next: difficult to test */\n if (this.$el && this.$el.parentNode) {\n this.$el.parentNode.removeChild(this.$el);\n }\n },\n render: function render(h) {\n var $toaster = h('div', {\n class: ['d-none', {\n 'b-dead-toaster': this.dead\n }]\n });\n \n if (this.doRender) {\n var $target = h(PortalTarget, {\n staticClass: 'b-toaster-slot',\n props: {\n name: this.staticName,\n multiple: true,\n tag: 'div',\n slim: false,\n // transition: this.transition || DefaultTransition\n transition: DefaultTransition\n }\n });\n $toaster = h('div', {\n staticClass: 'b-toaster',\n class: [this.staticName],\n attrs: {\n id: this.staticName,\n role: this.role || null,\n // Fallback to null to make sure attribute doesn't exist\n 'aria-live': this.ariaLive,\n 'aria-atomic': this.ariaAtomic\n }\n }, [$target]);\n }\n \n return $toaster;\n }\n });\n \n var NAME$L = 'BToast';\n var MIN_DURATION = 1000; // --- Props ---\n \n var linkProps$5 = pick(props$1, ['href', 'to']);\n var props$10 = _objectSpread2({\n id: {\n // Even though the ID prop is provided by idMixin, we\n // add it here for $bvToast props filtering\n type: String // default: null\n \n },\n title: {\n type: String // default: null\n \n },\n toaster: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$L, 'toaster');\n }\n },\n visible: {\n type: Boolean,\n default: false\n },\n variant: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME$L, 'variant');\n }\n },\n isStatus: {\n // Switches role to 'status' and aria-live to 'polite'\n type: Boolean,\n default: false\n },\n appendToast: {\n type: Boolean,\n default: false\n },\n noAutoHide: {\n type: Boolean,\n default: false\n },\n autoHideDelay: {\n type: [Number, String],\n default: function _default() {\n return getComponentConfig(NAME$L, 'autoHideDelay');\n }\n },\n noCloseButton: {\n type: Boolean,\n default: false\n },\n noFade: {\n type: Boolean,\n default: false\n },\n noHoverPause: {\n type: Boolean,\n default: false\n },\n solid: {\n type: Boolean,\n default: false\n },\n toastClass: {\n type: [String, Object, Array],\n default: function _default() {\n return getComponentConfig(NAME$L, 'toastClass');\n }\n },\n headerClass: {\n type: [String, Object, Array],\n default: function _default() {\n return getComponentConfig(NAME$L, 'headerClass');\n }\n },\n bodyClass: {\n type: [String, Object, Array],\n default: function _default() {\n return getComponentConfig(NAME$L, 'bodyClass');\n }\n },\n static: {\n // Render the toast in place, rather than in a portal-target\n type: Boolean,\n default: false\n }\n }, linkProps$5); // @vue/component\n \n var BToast = /*#__PURE__*/Vue.extend({\n name: NAME$L,\n mixins: [attrsMixin, idMixin, listenOnRootMixin, normalizeSlotMixin, scopedStyleAttrsMixin],\n inheritAttrs: false,\n model: {\n prop: 'visible',\n event: 'change'\n },\n props: props$10,\n data: function data() {\n return {\n isMounted: false,\n doRender: false,\n localShow: false,\n isTransitioning: false,\n isHiding: false,\n order: 0,\n timer: null,\n dismissStarted: 0,\n resumeDismiss: 0\n };\n },\n computed: {\n bToastClasses: function bToastClasses() {\n return _defineProperty({\n 'b-toast-solid': this.solid,\n 'b-toast-append': this.appendToast,\n 'b-toast-prepend': !this.appendToast\n }, \"b-toast-\".concat(this.variant), this.variant);\n },\n slotScope: function slotScope() {\n return {\n hide: this.hide\n };\n },\n computedDuration: function computedDuration() {\n // Minimum supported duration is 1 second\n return mathMax(toInteger(this.autoHideDelay, 0), MIN_DURATION);\n },\n computedToaster: function computedToaster() {\n return String(this.toaster);\n },\n transitionHandlers: function transitionHandlers() {\n return {\n beforeEnter: this.onBeforeEnter,\n afterEnter: this.onAfterEnter,\n beforeLeave: this.onBeforeLeave,\n afterLeave: this.onAfterLeave\n };\n },\n computedAttrs: function computedAttrs() {\n return _objectSpread2(_objectSpread2({}, this.bvAttrs), {}, {\n id: this.safeId(),\n tabindex: '0'\n });\n }\n },\n watch: {\n visible: function visible(newVal) {\n newVal ? this.show() : this.hide();\n },\n localShow: function localShow(newVal) {\n if (newVal !== this.visible) {\n this.$emit('change', newVal);\n }\n },\n \n /* istanbul ignore next */\n toaster: function toaster()\n /* istanbul ignore next */\n {\n // If toaster target changed, make sure toaster exists\n this.$nextTick(this.ensureToaster);\n },\n \n /* istanbul ignore next */\n static: function _static(newVal)\n /* istanbul ignore next */\n {\n // If static changes to true, and the toast is showing,\n // ensure the toaster target exists\n if (newVal && this.localShow) {\n this.ensureToaster();\n }\n }\n },\n mounted: function mounted() {\n var _this = this;\n \n this.isMounted = true;\n this.$nextTick(function () {\n if (_this.visible) {\n requestAF(function () {\n _this.show();\n });\n }\n }); // Listen for global $root show events\n \n this.listenOnRoot('bv::show::toast', function (id) {\n if (id === _this.safeId()) {\n _this.show();\n }\n }); // Listen for global $root hide events\n \n this.listenOnRoot('bv::hide::toast', function (id) {\n if (!id || id === _this.safeId()) {\n _this.hide();\n }\n }); // Make sure we hide when toaster is destroyed\n \n /* istanbul ignore next: difficult to test */\n \n this.listenOnRoot('bv::toaster::destroyed', function (toaster) {\n /* istanbul ignore next */\n if (toaster === _this.computedToaster) {\n /* istanbul ignore next */\n _this.hide();\n }\n });\n },\n beforeDestroy: function beforeDestroy() {\n this.clearDismissTimer();\n },\n methods: {\n show: function show() {\n var _this2 = this;\n \n if (!this.localShow) {\n this.ensureToaster();\n var showEvt = this.buildEvent('show');\n this.emitEvent(showEvt);\n this.dismissStarted = this.resumeDismiss = 0;\n this.order = Date.now() * (this.appendToast ? 1 : -1);\n this.isHiding = false;\n this.doRender = true;\n this.$nextTick(function () {\n // We show the toast after we have rendered the portal and b-toast wrapper\n // so that screen readers will properly announce the toast\n requestAF(function () {\n _this2.localShow = true;\n });\n });\n }\n },\n hide: function hide() {\n var _this3 = this;\n \n if (this.localShow) {\n var hideEvt = this.buildEvent('hide');\n this.emitEvent(hideEvt);\n this.setHoverHandler(false);\n this.dismissStarted = this.resumeDismiss = 0;\n this.clearDismissTimer();\n this.isHiding = true;\n requestAF(function () {\n _this3.localShow = false;\n });\n }\n },\n buildEvent: function buildEvent(type) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return new BvEvent(type, _objectSpread2(_objectSpread2({\n cancelable: false,\n target: this.$el || null,\n relatedTarget: null\n }, options), {}, {\n vueTarget: this,\n componentId: this.safeId()\n }));\n },\n emitEvent: function emitEvent(bvEvt) {\n var type = bvEvt.type;\n this.emitOnRoot(\"bv::toast:\".concat(type), bvEvt);\n this.$emit(type, bvEvt);\n },\n ensureToaster: function ensureToaster() {\n if (this.static) {\n return;\n }\n \n if (!wormhole.hasTarget(this.computedToaster)) {\n var div = document.createElement('div');\n document.body.appendChild(div);\n var toaster = new BToaster({\n parent: this.$root,\n propsData: {\n name: this.computedToaster\n }\n });\n toaster.$mount(div);\n }\n },\n startDismissTimer: function startDismissTimer() {\n this.clearDismissTimer();\n \n if (!this.noAutoHide) {\n this.timer = setTimeout(this.hide, this.resumeDismiss || this.computedDuration);\n this.dismissStarted = Date.now();\n this.resumeDismiss = 0;\n }\n },\n clearDismissTimer: function clearDismissTimer() {\n clearTimeout(this.timer);\n this.timer = null;\n },\n setHoverHandler: function setHoverHandler(on) {\n var el = this.$refs['b-toast'];\n eventOnOff(on, el, 'mouseenter', this.onPause, EVENT_OPTIONS_NO_CAPTURE);\n eventOnOff(on, el, 'mouseleave', this.onUnPause, EVENT_OPTIONS_NO_CAPTURE);\n },\n onPause: function onPause() {\n // Determine time remaining, and then pause timer\n if (this.noAutoHide || this.noHoverPause || !this.timer || this.resumeDismiss) {\n return;\n }\n \n var passed = Date.now() - this.dismissStarted;\n \n if (passed > 0) {\n this.clearDismissTimer();\n this.resumeDismiss = mathMax(this.computedDuration - passed, MIN_DURATION);\n }\n },\n onUnPause: function onUnPause() {\n // Restart timer with max of time remaining or 1 second\n if (this.noAutoHide || this.noHoverPause || !this.resumeDismiss) {\n this.resumeDismiss = this.dismissStarted = 0;\n return;\n }\n \n this.startDismissTimer();\n },\n onLinkClick: function onLinkClick() {\n var _this4 = this;\n \n // We delay the close to allow time for the\n // browser to process the link click\n this.$nextTick(function () {\n requestAF(function () {\n _this4.hide();\n });\n });\n },\n onBeforeEnter: function onBeforeEnter() {\n this.isTransitioning = true;\n },\n onAfterEnter: function onAfterEnter() {\n this.isTransitioning = false;\n var hiddenEvt = this.buildEvent('shown');\n this.emitEvent(hiddenEvt);\n this.startDismissTimer();\n this.setHoverHandler(true);\n },\n onBeforeLeave: function onBeforeLeave() {\n this.isTransitioning = true;\n },\n onAfterLeave: function onAfterLeave() {\n this.isTransitioning = false;\n this.order = 0;\n this.resumeDismiss = this.dismissStarted = 0;\n var hiddenEvt = this.buildEvent('hidden');\n this.emitEvent(hiddenEvt);\n this.doRender = false;\n },\n makeToast: function makeToast(h) {\n var _this5 = this;\n \n // Render helper for generating the toast\n // Assemble the header content\n var $headerContent = [];\n var $title = this.normalizeSlot('toast-title', this.slotScope);\n \n if ($title) {\n $headerContent.push($title);\n } else if (this.title) {\n $headerContent.push(h('strong', {\n staticClass: 'mr-2'\n }, this.title));\n }\n \n if (!this.noCloseButton) {\n $headerContent.push(h(BButtonClose, {\n staticClass: 'ml-auto mb-1',\n on: {\n click: function click() {\n _this5.hide();\n }\n }\n }));\n } // Assemble the header (if needed)\n \n \n var $header = h();\n \n if ($headerContent.length > 0) {\n $header = h('header', {\n staticClass: 'toast-header',\n class: this.headerClass\n }, $headerContent);\n } // Toast body\n \n \n var link = isLink(this);\n var $body = h(link ? BLink : 'div', {\n staticClass: 'toast-body',\n class: this.bodyClass,\n props: link ? pluckProps(linkProps$5, this) : {},\n on: link ? {\n click: this.onLinkClick\n } : {}\n }, [this.normalizeSlot('default', this.slotScope) || h()]); // Build the toast\n \n var $toast = h('div', {\n key: \"toast-\".concat(this._uid),\n ref: 'toast',\n staticClass: 'toast',\n class: this.toastClass,\n attrs: this.computedAttrs\n }, [$header, $body]);\n return $toast;\n }\n },\n render: function render(h) {\n if (!this.doRender || !this.isMounted) {\n return h();\n }\n \n var name = \"b-toast-\".concat(this._uid); // If scoped styles are applied and the toast is not static,\n // make sure the scoped style data attribute is applied\n \n var scopedStyleAttrs = !this.static ? this.scopedStyleAttrs : {};\n return h(Portal, {\n props: {\n name: name,\n to: this.computedToaster,\n order: this.order,\n slim: true,\n disabled: this.static\n }\n }, [h('div', {\n key: name,\n ref: 'b-toast',\n staticClass: 'b-toast',\n class: this.bToastClasses,\n attrs: _objectSpread2(_objectSpread2({}, scopedStyleAttrs), {}, {\n id: this.safeId('_toast_outer'),\n role: this.isHiding ? null : this.isStatus ? 'status' : 'alert',\n 'aria-live': this.isHiding ? null : this.isStatus ? 'polite' : 'assertive',\n 'aria-atomic': this.isHiding ? null : 'true'\n })\n }, [h(BVTransition, {\n props: {\n noFade: this.noFade\n },\n on: this.transitionHandlers\n }, [this.localShow ? this.makeToast(h) : h()])])]);\n }\n });\n \n var PROP_NAME$3 = '$bvToast';\n var PROP_NAME_PRIV$1 = '_bv__toast'; // Base toast props that are allowed\n // Some may be ignored or overridden on some message boxes\n // Prop ID is allowed, but really only should be used for testing\n // We need to add it in explicitly as it comes from the `idMixin`\n \n var BASE_PROPS$1 = ['id'].concat(_toConsumableArray(keys(omit(props$10, ['static', 'visible'])))); // Map prop names to toast slot names\n \n var propsToSlots$1 = {\n toastContent: 'default',\n title: 'toast-title'\n }; // --- Utility methods ---\n // Method to filter only recognized props that are not undefined\n \n var filterOptions$1 = function filterOptions(options) {\n return BASE_PROPS$1.reduce(function (memo, key) {\n if (!isUndefined(options[key])) {\n memo[key] = options[key];\n }\n \n return memo;\n }, {});\n }; // Method to install `$bvToast` VM injection\n \n \n var plugin$1 = function plugin(Vue) {\n // Create a private sub-component constructor that\n // extends BToast and self-destructs after hidden\n // @vue/component\n var BToastPop = Vue.extend({\n name: 'BToastPop',\n extends: BToast,\n destroyed: function destroyed() {\n // Make sure we not in document any more\n if (this.$el && this.$el.parentNode) {\n this.$el.parentNode.removeChild(this.$el);\n }\n },\n mounted: function mounted() {\n var self = this; // Self destruct handler\n \n var handleDestroy = function handleDestroy() {\n // Ensure the toast has been force hidden\n self.localShow = false;\n self.doRender = false;\n self.$nextTick(function () {\n self.$nextTick(function () {\n // In a `requestAF()` to release control back to application\n // and to allow the portal-target time to remove the content\n requestAF(function () {\n self.$destroy();\n });\n });\n });\n }; // Self destruct if parent destroyed\n \n \n this.$parent.$once('hook:destroyed', handleDestroy); // Self destruct after hidden\n \n this.$once('hidden', handleDestroy); // Self destruct when toaster is destroyed\n \n this.listenOnRoot('bv::toaster::destroyed', function (toaster) {\n /* istanbul ignore next: hard to test */\n if (toaster === self.toaster) {\n handleDestroy();\n }\n });\n }\n }); // Private method to generate the on-demand toast\n \n var makeToast = function makeToast(props, $parent) {\n if (warnNotClient(PROP_NAME$3)) {\n /* istanbul ignore next */\n return;\n } // Create an instance of `BToastPop` component\n \n \n var toast = new BToastPop({\n // We set parent as the local VM so these toasts can emit events on the\n // app `$root`, and it ensures `BToast` is destroyed when parent is destroyed\n parent: $parent,\n propsData: _objectSpread2(_objectSpread2(_objectSpread2({}, filterOptions$1(getComponentConfig('BToast') || {})), omit(props, keys(propsToSlots$1))), {}, {\n // Props that can't be overridden\n static: false,\n visible: true\n })\n }); // Convert certain props to slots\n \n keys(propsToSlots$1).forEach(function (prop) {\n var value = props[prop];\n \n if (!isUndefined(value)) {\n // Can be a string, or array of VNodes\n if (prop === 'title' && isString(value)) {\n // Special case for title if it is a string, we wrap in a <strong>\n value = [$parent.$createElement('strong', {\n class: 'mr-2'\n }, value)];\n }\n \n toast.$slots[propsToSlots$1[prop]] = concat(value);\n }\n }); // Create a mount point (a DIV) and mount it (which triggers the show)\n \n var div = document.createElement('div');\n document.body.appendChild(div);\n toast.$mount(div);\n }; // Declare BvToast instance property class\n \n \n var BvToast = /*#__PURE__*/function () {\n function BvToast(vm) {\n _classCallCheck(this, BvToast);\n \n // Assign the new properties to this instance\n assign(this, {\n _vm: vm,\n _root: vm.$root\n }); // Set these properties as read-only and non-enumerable\n \n defineProperties(this, {\n _vm: readonlyDescriptor(),\n _root: readonlyDescriptor()\n });\n } // --- Public Instance methods ---\n // Opens a user defined toast and returns immediately\n \n \n _createClass(BvToast, [{\n key: \"toast\",\n value: function toast(content) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n \n if (!content || warnNotClient(PROP_NAME$3)) {\n /* istanbul ignore next */\n return;\n }\n \n makeToast(_objectSpread2(_objectSpread2({}, filterOptions$1(options)), {}, {\n toastContent: content\n }), this._vm);\n } // shows a `<b-toast>` component with the specified ID\n \n }, {\n key: \"show\",\n value: function show(id) {\n if (id) {\n this._root.$emit('bv::show::toast', id);\n }\n } // Hide a toast with specified ID, or if not ID all toasts\n \n }, {\n key: \"hide\",\n value: function hide() {\n var id = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n \n this._root.$emit('bv::hide::toast', id);\n }\n }]);\n \n return BvToast;\n }(); // Add our instance mixin\n \n \n Vue.mixin({\n beforeCreate: function beforeCreate() {\n // Because we need access to `$root` for `$emits`, and VM for parenting,\n // we have to create a fresh instance of `BvToast` for each VM\n this[PROP_NAME_PRIV$1] = new BvToast(this);\n }\n }); // Define our read-only `$bvToast` instance property\n // Placed in an if just in case in HMR mode\n \n if (!hasOwnProperty(Vue.prototype, PROP_NAME$3)) {\n defineProperty(Vue.prototype, PROP_NAME$3, {\n get: function get() {\n /* istanbul ignore next */\n if (!this || !this[PROP_NAME_PRIV$1]) {\n warn(\"\\\"\".concat(PROP_NAME$3, \"\\\" must be accessed from a Vue instance \\\"this\\\" context.\"), 'BToast');\n }\n \n return this[PROP_NAME_PRIV$1];\n }\n });\n }\n };\n \n var BVToastPlugin = /*#__PURE__*/pluginFactory({\n plugins: {\n plugin: plugin$1\n }\n });\n \n var ToastPlugin = /*#__PURE__*/pluginFactory({\n components: {\n BToast: BToast,\n BToaster: BToaster\n },\n // $bvToast injection\n plugins: {\n BVToastPlugin: BVToastPlugin\n }\n });\n \n var BV_TOOLTIP = '__BV_Tooltip__'; // Default trigger\n \n var DefaultTrigger$1 = 'hover focus'; // Valid event triggers\n \n var validTriggers$1 = {\n focus: true,\n hover: true,\n click: true,\n blur: true,\n manual: true\n }; // Directive modifier test regular expressions. Pre-compile for performance\n \n var htmlRE$1 = /^html$/i;\n var noninteractiveRE = /^noninteractive$/i;\n var noFadeRE$1 = /^nofade$/i;\n var placementRE$1 = /^(auto|top(left|right)?|bottom(left|right)?|left(top|bottom)?|right(top|bottom)?)$/i;\n var boundaryRE$1 = /^(window|viewport|scrollParent)$/i;\n var delayRE$1 = /^d\\d+$/i;\n var delayShowRE$1 = /^ds\\d+$/i;\n var delayHideRE$1 = /^dh\\d+$/i;\n var offsetRE$1 = /^o-?\\d+$/i;\n var variantRE$1 = /^v-.+$/i;\n var spacesRE$1 = /\\s+/; // Build a Tooltip config based on bindings (if any)\n // Arguments and modifiers take precedence over passed value config object\n \n var parseBindings$1 = function parseBindings(bindings, vnode)\n /* istanbul ignore next: not easy to test */\n {\n // We start out with a basic config\n var NAME = 'BTooltip'; // Default config\n \n var config = {\n title: undefined,\n trigger: '',\n // Default set below if needed\n placement: 'top',\n fallbackPlacement: 'flip',\n container: false,\n // Default of body\n animation: true,\n offset: 0,\n id: null,\n html: false,\n interactive: true,\n disabled: false,\n delay: getComponentConfig(NAME, 'delay'),\n boundary: String(getComponentConfig(NAME, 'boundary')),\n boundaryPadding: toInteger(getComponentConfig(NAME, 'boundaryPadding'), 0),\n variant: getComponentConfig(NAME, 'variant'),\n customClass: getComponentConfig(NAME, 'customClass')\n }; // Process `bindings.value`\n \n if (isString(bindings.value) || isNumber(bindings.value)) {\n // Value is tooltip content (HTML optionally supported)\n config.title = bindings.value;\n } else if (isFunction(bindings.value)) {\n // Title generator function\n config.title = bindings.value;\n } else if (isPlainObject(bindings.value)) {\n // Value is config object, so merge\n config = _objectSpread2(_objectSpread2({}, config), bindings.value);\n } // If title is not provided, try title attribute\n \n \n if (isUndefined(config.title)) {\n // Try attribute\n var data = vnode.data || {};\n config.title = data.attrs && !isUndefinedOrNull(data.attrs.title) ? data.attrs.title : undefined;\n } // Normalize delay\n \n \n if (!isPlainObject(config.delay)) {\n config.delay = {\n show: toInteger(config.delay, 0),\n hide: toInteger(config.delay, 0)\n };\n } // If argument, assume element ID of container element\n \n \n if (bindings.arg) {\n // Element ID specified as arg\n // We must prepend '#' to become a CSS selector\n config.container = \"#\".concat(bindings.arg);\n } // Process modifiers\n \n \n keys(bindings.modifiers).forEach(function (mod) {\n if (htmlRE$1.test(mod)) {\n // Title allows HTML\n config.html = true;\n } else if (noninteractiveRE.test(mod)) {\n // Noninteractive\n config.interactive = false;\n } else if (noFadeRE$1.test(mod)) {\n // No animation\n config.animation = false;\n } else if (placementRE$1.test(mod)) {\n // Placement of tooltip\n config.placement = mod;\n } else if (boundaryRE$1.test(mod)) {\n // Boundary of tooltip\n mod = mod === 'scrollparent' ? 'scrollParent' : mod;\n config.boundary = mod;\n } else if (delayRE$1.test(mod)) {\n // Delay value\n var delay = toInteger(mod.slice(1), 0);\n config.delay.show = delay;\n config.delay.hide = delay;\n } else if (delayShowRE$1.test(mod)) {\n // Delay show value\n config.delay.show = toInteger(mod.slice(2), 0);\n } else if (delayHideRE$1.test(mod)) {\n // Delay hide value\n config.delay.hide = toInteger(mod.slice(2), 0);\n } else if (offsetRE$1.test(mod)) {\n // Offset value, negative allowed\n config.offset = toInteger(mod.slice(1), 0);\n } else if (variantRE$1.test(mod)) {\n // Variant\n config.variant = mod.slice(2) || null;\n }\n }); // Special handling of event trigger modifiers trigger is\n // a space separated list\n \n var selectedTriggers = {}; // Parse current config object trigger\n \n concat(config.trigger || '').filter(identity).join(' ').trim().toLowerCase().split(spacesRE$1).forEach(function (trigger) {\n if (validTriggers$1[trigger]) {\n selectedTriggers[trigger] = true;\n }\n }); // Parse modifiers for triggers\n \n keys(bindings.modifiers).forEach(function (mod) {\n mod = mod.toLowerCase();\n \n if (validTriggers$1[mod]) {\n // If modifier is a valid trigger\n selectedTriggers[mod] = true;\n }\n }); // Sanitize triggers\n \n config.trigger = keys(selectedTriggers).join(' ');\n \n if (config.trigger === 'blur') {\n // Blur by itself is useless, so convert it to 'focus'\n config.trigger = 'focus';\n }\n \n if (!config.trigger) {\n // Use default trigger\n config.trigger = DefaultTrigger$1;\n } // Return the config\n \n \n return config;\n }; // Add/update Tooltip on our element\n \n \n var applyTooltip = function applyTooltip(el, bindings, vnode) {\n if (!isBrowser) {\n /* istanbul ignore next */\n return;\n }\n \n var config = parseBindings$1(bindings, vnode);\n \n if (!el[BV_TOOLTIP]) {\n var $parent = vnode.context;\n el[BV_TOOLTIP] = new BVTooltip({\n parent: $parent,\n // Add the parent's scoped style attribute data\n _scopeId: getScopeId($parent, undefined)\n });\n el[BV_TOOLTIP].__bv_prev_data__ = {};\n el[BV_TOOLTIP].$on('show', function ()\n /* istanbul ignore next: for now */\n {\n // Before showing the tooltip, we update the title if it is a function\n if (isFunction(config.title)) {\n el[BV_TOOLTIP].updateData({\n title: config.title(el)\n });\n }\n });\n }\n \n var data = {\n title: config.title,\n triggers: config.trigger,\n placement: config.placement,\n fallbackPlacement: config.fallbackPlacement,\n variant: config.variant,\n customClass: config.customClass,\n container: config.container,\n boundary: config.boundary,\n delay: config.delay,\n offset: config.offset,\n noFade: !config.animation,\n id: config.id,\n interactive: config.interactive,\n disabled: config.disabled,\n html: config.html\n };\n var oldData = el[BV_TOOLTIP].__bv_prev_data__;\n el[BV_TOOLTIP].__bv_prev_data__ = data;\n \n if (!looseEqual(data, oldData)) {\n // We only update the instance if data has changed\n var newData = {\n target: el\n };\n keys(data).forEach(function (prop) {\n // We only pass data properties that have changed\n if (data[prop] !== oldData[prop]) {\n // if title is a function, we execute it here\n newData[prop] = prop === 'title' && isFunction(data[prop]) ? data[prop](el) : data[prop];\n }\n });\n el[BV_TOOLTIP].updateData(newData);\n }\n }; // Remove Tooltip on our element\n \n \n var removeTooltip = function removeTooltip(el) {\n if (el[BV_TOOLTIP]) {\n el[BV_TOOLTIP].$destroy();\n el[BV_TOOLTIP] = null;\n }\n \n delete el[BV_TOOLTIP];\n }; // Export our directive\n \n \n var VBTooltip = {\n bind: function bind(el, bindings, vnode) {\n applyTooltip(el, bindings, vnode);\n },\n // We use `componentUpdated` here instead of `update`, as the former\n // waits until the containing component and children have finished updating\n componentUpdated: function componentUpdated(el, bindings, vnode) {\n // Performed in a `$nextTick()` to prevent render update loops\n vnode.context.$nextTick(function () {\n applyTooltip(el, bindings, vnode);\n });\n },\n unbind: function unbind(el) {\n removeTooltip(el);\n }\n };\n \n var VBTooltipPlugin = /*#__PURE__*/pluginFactory({\n directives: {\n VBTooltip: VBTooltip\n }\n });\n \n var TooltipPlugin = /*#__PURE__*/pluginFactory({\n components: {\n BTooltip: BTooltip\n },\n plugins: {\n VBTooltipPlugin: VBTooltipPlugin\n }\n });\n \n var componentsPlugin = /*#__PURE__*/pluginFactory({\n plugins: {\n AlertPlugin: AlertPlugin,\n AspectPlugin: AspectPlugin,\n AvatarPlugin: AvatarPlugin,\n BadgePlugin: BadgePlugin,\n BreadcrumbPlugin: BreadcrumbPlugin,\n ButtonPlugin: ButtonPlugin,\n ButtonGroupPlugin: ButtonGroupPlugin,\n ButtonToolbarPlugin: ButtonToolbarPlugin,\n CalendarPlugin: CalendarPlugin,\n CardPlugin: CardPlugin,\n CarouselPlugin: CarouselPlugin,\n CollapsePlugin: CollapsePlugin,\n DropdownPlugin: DropdownPlugin,\n EmbedPlugin: EmbedPlugin,\n FormPlugin: FormPlugin,\n FormCheckboxPlugin: FormCheckboxPlugin,\n FormDatepickerPlugin: FormDatepickerPlugin,\n FormFilePlugin: FormFilePlugin,\n FormGroupPlugin: FormGroupPlugin,\n FormInputPlugin: FormInputPlugin,\n FormRadioPlugin: FormRadioPlugin,\n FormRatingPlugin: FormRatingPlugin,\n FormSelectPlugin: FormSelectPlugin,\n FormSpinbuttonPlugin: FormSpinbuttonPlugin,\n FormTagsPlugin: FormTagsPlugin,\n FormTextareaPlugin: FormTextareaPlugin,\n FormTimepickerPlugin: FormTimepickerPlugin,\n ImagePlugin: ImagePlugin,\n InputGroupPlugin: InputGroupPlugin,\n JumbotronPlugin: JumbotronPlugin,\n LayoutPlugin: LayoutPlugin,\n LinkPlugin: LinkPlugin,\n ListGroupPlugin: ListGroupPlugin,\n MediaPlugin: MediaPlugin,\n ModalPlugin: ModalPlugin,\n NavPlugin: NavPlugin,\n NavbarPlugin: NavbarPlugin,\n OverlayPlugin: OverlayPlugin,\n PaginationPlugin: PaginationPlugin,\n PaginationNavPlugin: PaginationNavPlugin,\n PopoverPlugin: PopoverPlugin,\n ProgressPlugin: ProgressPlugin,\n SidebarPlugin: SidebarPlugin,\n SpinnerPlugin: SpinnerPlugin,\n TablePlugin: TablePlugin,\n TabsPlugin: TabsPlugin,\n TimePlugin: TimePlugin,\n ToastPlugin: ToastPlugin,\n TooltipPlugin: TooltipPlugin\n }\n });\n \n var VBHoverPlugin = /*#__PURE__*/pluginFactory({\n directives: {\n VBHover: VBHover\n }\n });\n \n var VBModalPlugin = /*#__PURE__*/pluginFactory({\n directives: {\n VBModal: VBModal\n }\n });\n \n /*\n * Constants / Defaults\n */\n \n var NAME$M = 'v-b-scrollspy';\n var ACTIVATE_EVENT = 'bv::scrollspy::activate';\n var Default = {\n element: 'body',\n offset: 10,\n method: 'auto',\n throttle: 75\n };\n var DefaultType = {\n element: '(string|element|component)',\n offset: 'number',\n method: 'string',\n throttle: 'number'\n };\n var ClassName = {\n DROPDOWN_ITEM: 'dropdown-item',\n ACTIVE: 'active'\n };\n var Selector$2 = {\n ACTIVE: '.active',\n NAV_LIST_GROUP: '.nav, .list-group',\n NAV_LINKS: '.nav-link',\n NAV_ITEMS: '.nav-item',\n LIST_ITEMS: '.list-group-item',\n DROPDOWN: '.dropdown, .dropup',\n DROPDOWN_ITEMS: '.dropdown-item',\n DROPDOWN_TOGGLE: '.dropdown-toggle'\n };\n var OffsetMethod = {\n OFFSET: 'offset',\n POSITION: 'position'\n }; // HREFs must end with a hash followed by at least one non-hash character.\n // HREFs in the links are assumed to point to non-external links.\n // Comparison to the current page base URL is not performed!\n \n var HREF_REGEX = /^.*(#[^#]+)$/; // Transition Events\n \n var TransitionEndEvents$1 = ['webkitTransitionEnd', 'transitionend', 'otransitionend', 'oTransitionEnd'];\n /*\n * Utility Methods\n */\n // Better var type detection\n \n var toType$1 = function toType(obj)\n /* istanbul ignore next: not easy to test */\n {\n return toString(obj).match(/\\s([a-zA-Z]+)/)[1].toLowerCase();\n }; // Check config properties for expected types\n \n /* istanbul ignore next */\n \n \n var typeCheckConfig = function typeCheckConfig(componentName, config, configTypes)\n /* istanbul ignore next: not easy to test */\n {\n for (var property in configTypes) {\n if (hasOwnProperty(configTypes, property)) {\n var expectedTypes = configTypes[property];\n var value = config[property];\n var valueType = value && isElement(value) ? 'element' : toType$1(value); // handle Vue instances\n \n valueType = value && value._isVue ? 'component' : valueType;\n \n if (!new RegExp(expectedTypes).test(valueType)) {\n /* istanbul ignore next */\n warn(\"\".concat(componentName, \": Option \\\"\").concat(property, \"\\\" provided type \\\"\").concat(valueType, \"\\\" but expected type \\\"\").concat(expectedTypes, \"\\\"\"));\n }\n }\n }\n };\n /*\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n \n /* istanbul ignore next: not easy to test */\n \n \n var ScrollSpy\n /* istanbul ignore next: not easy to test */\n = /*#__PURE__*/function () {\n function ScrollSpy(element, config, $root) {\n _classCallCheck(this, ScrollSpy);\n \n // The element we activate links in\n this.$el = element;\n this.$scroller = null;\n this.$selector = [Selector$2.NAV_LINKS, Selector$2.LIST_ITEMS, Selector$2.DROPDOWN_ITEMS].join(',');\n this.$offsets = [];\n this.$targets = [];\n this.$activeTarget = null;\n this.$scrollHeight = 0;\n this.$resizeTimeout = null;\n this.$scrollerObserver = null;\n this.$targetsObserver = null;\n this.$root = $root || null;\n this.$config = null;\n this.updateConfig(config);\n }\n \n _createClass(ScrollSpy, [{\n key: \"updateConfig\",\n value: function updateConfig(config, $root) {\n if (this.$scroller) {\n // Just in case out scroll element has changed\n this.unlisten();\n this.$scroller = null;\n }\n \n var cfg = _objectSpread2(_objectSpread2({}, this.constructor.Default), config);\n \n if ($root) {\n this.$root = $root;\n }\n \n typeCheckConfig(this.constructor.Name, cfg, this.constructor.DefaultType);\n this.$config = cfg;\n \n if (this.$root) {\n var self = this;\n this.$root.$nextTick(function () {\n self.listen();\n });\n } else {\n this.listen();\n }\n }\n }, {\n key: \"dispose\",\n value: function dispose() {\n this.unlisten();\n clearTimeout(this.$resizeTimeout);\n this.$resizeTimeout = null;\n this.$el = null;\n this.$config = null;\n this.$scroller = null;\n this.$selector = null;\n this.$offsets = null;\n this.$targets = null;\n this.$activeTarget = null;\n this.$scrollHeight = null;\n }\n }, {\n key: \"listen\",\n value: function listen() {\n var _this = this;\n \n var scroller = this.getScroller();\n \n if (scroller && scroller.tagName !== 'BODY') {\n eventOn(scroller, 'scroll', this, EVENT_OPTIONS_NO_CAPTURE);\n }\n \n eventOn(window, 'scroll', this, EVENT_OPTIONS_NO_CAPTURE);\n eventOn(window, 'resize', this, EVENT_OPTIONS_NO_CAPTURE);\n eventOn(window, 'orientationchange', this, EVENT_OPTIONS_NO_CAPTURE);\n TransitionEndEvents$1.forEach(function (evtName) {\n eventOn(window, evtName, _this, EVENT_OPTIONS_NO_CAPTURE);\n });\n this.setObservers(true); // Schedule a refresh\n \n this.handleEvent('refresh');\n }\n }, {\n key: \"unlisten\",\n value: function unlisten() {\n var _this2 = this;\n \n var scroller = this.getScroller();\n this.setObservers(false);\n \n if (scroller && scroller.tagName !== 'BODY') {\n eventOff(scroller, 'scroll', this, EVENT_OPTIONS_NO_CAPTURE);\n }\n \n eventOff(window, 'scroll', this, EVENT_OPTIONS_NO_CAPTURE);\n eventOff(window, 'resize', this, EVENT_OPTIONS_NO_CAPTURE);\n eventOff(window, 'orientationchange', this, EVENT_OPTIONS_NO_CAPTURE);\n TransitionEndEvents$1.forEach(function (evtName) {\n eventOff(window, evtName, _this2, EVENT_OPTIONS_NO_CAPTURE);\n });\n }\n }, {\n key: \"setObservers\",\n value: function setObservers(on) {\n var _this3 = this;\n \n // We observe both the scroller for content changes, and the target links\n this.$scrollerObserver && this.$scrollerObserver.disconnect();\n this.$targetsObserver && this.$targetsObserver.disconnect();\n this.$scrollerObserver = null;\n this.$targetsObserver = null;\n \n if (on) {\n this.$targetsObserver = observeDom(this.$el, function () {\n _this3.handleEvent('mutation');\n }, {\n subtree: true,\n childList: true,\n attributes: true,\n attributeFilter: ['href']\n });\n this.$scrollerObserver = observeDom(this.getScroller(), function () {\n _this3.handleEvent('mutation');\n }, {\n subtree: true,\n childList: true,\n characterData: true,\n attributes: true,\n attributeFilter: ['id', 'style', 'class']\n });\n }\n } // General event handler\n \n }, {\n key: \"handleEvent\",\n value: function handleEvent(evt) {\n var type = isString(evt) ? evt : evt.type;\n var self = this;\n \n var resizeThrottle = function resizeThrottle() {\n if (!self.$resizeTimeout) {\n self.$resizeTimeout = setTimeout(function () {\n self.refresh();\n self.process();\n self.$resizeTimeout = null;\n }, self.$config.throttle);\n }\n };\n \n if (type === 'scroll') {\n if (!this.$scrollerObserver) {\n // Just in case we are added to the DOM before the scroll target is\n // We re-instantiate our listeners, just in case\n this.listen();\n }\n \n this.process();\n } else if (/(resize|orientationchange|mutation|refresh)/.test(type)) {\n // Postpone these events by throttle time\n resizeThrottle();\n }\n } // Refresh the list of target links on the element we are applied to\n \n }, {\n key: \"refresh\",\n value: function refresh() {\n var _this4 = this;\n \n var scroller = this.getScroller();\n \n if (!scroller) {\n return;\n }\n \n var autoMethod = scroller !== scroller.window ? OffsetMethod.POSITION : OffsetMethod.OFFSET;\n var method = this.$config.method === 'auto' ? autoMethod : this.$config.method;\n var methodFn = method === OffsetMethod.POSITION ? position : offset;\n var offsetBase = method === OffsetMethod.POSITION ? this.getScrollTop() : 0;\n this.$offsets = [];\n this.$targets = [];\n this.$scrollHeight = this.getScrollHeight(); // Find all the unique link HREFs that we will control\n \n selectAll(this.$selector, this.$el) // Get HREF value\n .map(function (link) {\n return getAttr(link, 'href');\n }) // Filter out HREFs that do not match our RegExp\n .filter(function (href) {\n return href && HREF_REGEX.test(href || '');\n }) // Find all elements with ID that match HREF hash\n .map(function (href) {\n // Convert HREF into an ID (including # at beginning)\n var id = href.replace(HREF_REGEX, '$1').trim();\n \n if (!id) {\n return null;\n } // Find the element with the ID specified by id\n \n \n var el = select(id, scroller);\n \n if (el && isVisible(el)) {\n return {\n offset: toInteger(methodFn(el).top, 0) + offsetBase,\n target: id\n };\n }\n \n return null;\n }).filter(Boolean) // Sort them by their offsets (smallest first)\n .sort(function (a, b) {\n return a.offset - b.offset;\n }) // record only unique targets/offsets\n .reduce(function (memo, item) {\n if (!memo[item.target]) {\n _this4.$offsets.push(item.offset);\n \n _this4.$targets.push(item.target);\n \n memo[item.target] = true;\n }\n \n return memo;\n }, {}); // Return this for easy chaining\n \n return this;\n } // Handle activating/clearing\n \n }, {\n key: \"process\",\n value: function process() {\n var scrollTop = this.getScrollTop() + this.$config.offset;\n var scrollHeight = this.getScrollHeight();\n var maxScroll = this.$config.offset + scrollHeight - this.getOffsetHeight();\n \n if (this.$scrollHeight !== scrollHeight) {\n this.refresh();\n }\n \n if (scrollTop >= maxScroll) {\n var target = this.$targets[this.$targets.length - 1];\n \n if (this.$activeTarget !== target) {\n this.activate(target);\n }\n \n return;\n }\n \n if (this.$activeTarget && scrollTop < this.$offsets[0] && this.$offsets[0] > 0) {\n this.$activeTarget = null;\n this.clear();\n return;\n }\n \n for (var i = this.$offsets.length; i--;) {\n var isActiveTarget = this.$activeTarget !== this.$targets[i] && scrollTop >= this.$offsets[i] && (isUndefined(this.$offsets[i + 1]) || scrollTop < this.$offsets[i + 1]);\n \n if (isActiveTarget) {\n this.activate(this.$targets[i]);\n }\n }\n }\n }, {\n key: \"getScroller\",\n value: function getScroller() {\n if (this.$scroller) {\n return this.$scroller;\n }\n \n var scroller = this.$config.element;\n \n if (!scroller) {\n return null;\n } else if (isElement(scroller.$el)) {\n scroller = scroller.$el;\n } else if (isString(scroller)) {\n scroller = select(scroller);\n }\n \n if (!scroller) {\n return null;\n }\n \n this.$scroller = scroller.tagName === 'BODY' ? window : scroller;\n return this.$scroller;\n }\n }, {\n key: \"getScrollTop\",\n value: function getScrollTop() {\n var scroller = this.getScroller();\n return scroller === window ? scroller.pageYOffset : scroller.scrollTop;\n }\n }, {\n key: \"getScrollHeight\",\n value: function getScrollHeight() {\n return this.getScroller().scrollHeight || mathMax(document.body.scrollHeight, document.documentElement.scrollHeight);\n }\n }, {\n key: \"getOffsetHeight\",\n value: function getOffsetHeight() {\n var scroller = this.getScroller();\n return scroller === window ? window.innerHeight : getBCR(scroller).height;\n }\n }, {\n key: \"activate\",\n value: function activate(target) {\n var _this5 = this;\n \n this.$activeTarget = target;\n this.clear(); // Grab the list of target links (<a href=\"{$target}\">)\n \n var links = selectAll(this.$selector // Split out the base selectors\n .split(',') // Map to a selector that matches links with HREF ending in the ID (including '#')\n .map(function (selector) {\n return \"\".concat(selector, \"[href$=\\\"\").concat(target, \"\\\"]\");\n }) // Join back into a single selector string\n .join(','), this.$el);\n links.forEach(function (link) {\n if (hasClass(link, ClassName.DROPDOWN_ITEM)) {\n // This is a dropdown item, so find the .dropdown-toggle and set its state\n var dropdown = closest(Selector$2.DROPDOWN, link);\n \n if (dropdown) {\n _this5.setActiveState(select(Selector$2.DROPDOWN_TOGGLE, dropdown), true);\n } // Also set this link's state\n \n \n _this5.setActiveState(link, true);\n } else {\n // Set triggered link as active\n _this5.setActiveState(link, true);\n \n if (matches(link.parentElement, Selector$2.NAV_ITEMS)) {\n // Handle nav-link inside nav-item, and set nav-item active\n _this5.setActiveState(link.parentElement, true);\n } // Set triggered links parents as active\n // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n \n \n var el = link;\n \n while (el) {\n el = closest(Selector$2.NAV_LIST_GROUP, el);\n var sibling = el ? el.previousElementSibling : null;\n \n if (sibling && matches(sibling, \"\".concat(Selector$2.NAV_LINKS, \", \").concat(Selector$2.LIST_ITEMS))) {\n _this5.setActiveState(sibling, true);\n } // Handle special case where nav-link is inside a nav-item\n \n \n if (sibling && matches(sibling, Selector$2.NAV_ITEMS)) {\n _this5.setActiveState(select(Selector$2.NAV_LINKS, sibling), true); // Add active state to nav-item as well\n \n \n _this5.setActiveState(sibling, true);\n }\n }\n }\n }); // Signal event to via $root, passing ID of activated target and reference to array of links\n \n if (links && links.length > 0 && this.$root) {\n this.$root.$emit(ACTIVATE_EVENT, target, links);\n }\n }\n }, {\n key: \"clear\",\n value: function clear() {\n var _this6 = this;\n \n selectAll(\"\".concat(this.$selector, \", \").concat(Selector$2.NAV_ITEMS), this.$el).filter(function (el) {\n return hasClass(el, ClassName.ACTIVE);\n }).forEach(function (el) {\n return _this6.setActiveState(el, false);\n });\n }\n }, {\n key: \"setActiveState\",\n value: function setActiveState(el, active) {\n if (!el) {\n return;\n }\n \n if (active) {\n addClass(el, ClassName.ACTIVE);\n } else {\n removeClass(el, ClassName.ACTIVE);\n }\n }\n }], [{\n key: \"Name\",\n get: function get() {\n return NAME$M;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default;\n }\n }, {\n key: \"DefaultType\",\n get: function get() {\n return DefaultType;\n }\n }]);\n \n return ScrollSpy;\n }();\n \n var BV_SCROLLSPY = '__BV_ScrollSpy__'; // Pre-compiled regular expressions\n \n var onlyDigitsRE = /^\\d+$/;\n var offsetRE$2 = /^(auto|position|offset)$/; // Build a ScrollSpy config based on bindings (if any)\n // Arguments and modifiers take precedence over passed value config object\n \n /* istanbul ignore next: not easy to test */\n \n var parseBindings$2 = function parseBindings(bindings)\n /* istanbul ignore next: not easy to test */\n {\n var config = {}; // If argument, assume element ID\n \n if (bindings.arg) {\n // Element ID specified as arg\n // We must prepend '#' to become a CSS selector\n config.element = \"#\".concat(bindings.arg);\n } // Process modifiers\n \n \n keys(bindings.modifiers).forEach(function (mod) {\n if (onlyDigitsRE.test(mod)) {\n // Offset value\n config.offset = toInteger(mod, 0);\n } else if (offsetRE$2.test(mod)) {\n // Offset method\n config.method = mod;\n }\n }); // Process value\n \n if (isString(bindings.value)) {\n // Value is a CSS ID or selector\n config.element = bindings.value;\n } else if (isNumber(bindings.value)) {\n // Value is offset\n config.offset = mathRound(bindings.value);\n } else if (isObject(bindings.value)) {\n // Value is config object\n // Filter the object based on our supported config options\n keys(bindings.value).filter(function (k) {\n return !!ScrollSpy.DefaultType[k];\n }).forEach(function (k) {\n config[k] = bindings.value[k];\n });\n }\n \n return config;\n }; // Add or update ScrollSpy on our element\n \n \n var applyScrollspy = function applyScrollspy(el, bindings, vnode)\n /* istanbul ignore next: not easy to test */\n {\n if (!isBrowser) {\n /* istanbul ignore next */\n return;\n }\n \n var config = parseBindings$2(bindings);\n \n if (el[BV_SCROLLSPY]) {\n el[BV_SCROLLSPY].updateConfig(config, vnode.context.$root);\n } else {\n el[BV_SCROLLSPY] = new ScrollSpy(el, config, vnode.context.$root);\n }\n }; // Remove ScrollSpy on our element\n \n /* istanbul ignore next: not easy to test */\n \n \n var removeScrollspy = function removeScrollspy(el)\n /* istanbul ignore next: not easy to test */\n {\n if (el[BV_SCROLLSPY]) {\n el[BV_SCROLLSPY].dispose();\n el[BV_SCROLLSPY] = null;\n delete el[BV_SCROLLSPY];\n }\n };\n /*\n * Export our directive\n */\n \n \n var VBScrollspy = {\n /* istanbul ignore next: not easy to test */\n bind: function bind(el, bindings, vnode)\n /* istanbul ignore next: not easy to test */\n {\n applyScrollspy(el, bindings, vnode);\n },\n \n /* istanbul ignore next: not easy to test */\n inserted: function inserted(el, bindings, vnode)\n /* istanbul ignore next: not easy to test */\n {\n applyScrollspy(el, bindings, vnode);\n },\n \n /* istanbul ignore next: not easy to test */\n update: function update(el, bindings, vnode)\n /* istanbul ignore next: not easy to test */\n {\n if (bindings.value !== bindings.oldValue) {\n applyScrollspy(el, bindings, vnode);\n }\n },\n \n /* istanbul ignore next: not easy to test */\n componentUpdated: function componentUpdated(el, bindings, vnode)\n /* istanbul ignore next: not easy to test */\n {\n if (bindings.value !== bindings.oldValue) {\n applyScrollspy(el, bindings, vnode);\n }\n },\n \n /* istanbul ignore next: not easy to test */\n unbind: function unbind(el)\n /* istanbul ignore next: not easy to test */\n {\n removeScrollspy(el);\n }\n };\n \n var VBScrollspyPlugin = /*#__PURE__*/pluginFactory({\n directives: {\n VBScrollspy: VBScrollspy\n }\n });\n \n var VBVisiblePlugin = /*#__PURE__*/pluginFactory({\n directives: {\n VBVisible: VBVisible\n }\n });\n \n var directivesPlugin = /*#__PURE__*/pluginFactory({\n plugins: {\n VBHoverPlugin: VBHoverPlugin,\n VBModalPlugin: VBModalPlugin,\n VBPopoverPlugin: VBPopoverPlugin,\n VBScrollspyPlugin: VBScrollspyPlugin,\n VBTogglePlugin: VBTogglePlugin,\n VBTooltipPlugin: VBTooltipPlugin,\n VBVisiblePlugin: VBVisiblePlugin\n }\n });\n \n var BIconstack = /*#__PURE__*/Vue.extend({\n name: 'BIconstack',\n functional: true,\n props: _objectSpread2({}, commonIconProps),\n render: function render(h, _ref) {\n var data = _ref.data,\n props = _ref.props,\n children = _ref.children;\n return h(BVIconBase, a(data, {\n staticClass: 'b-iconstack',\n props: _objectSpread2(_objectSpread2({}, props), {}, {\n stacked: false\n })\n }), children);\n }\n });\n \n var NAME$N = 'BootstrapVue'; // --- BootstrapVue installer ---\n \n var install = /*#__PURE__*/installFactory({\n plugins: {\n componentsPlugin: componentsPlugin,\n directivesPlugin: directivesPlugin\n }\n }); // --- BootstrapVue plugin ---\n \n var BootstrapVue = /*#__PURE__*/{\n install: install,\n NAME: NAME$N\n }; // --- Named exports for BvConfigPlugin ---\n \n // Main entry point for the browser build\n \n vueUse(BootstrapVue);\n \n return BootstrapVue;\n \n })));\n //# sourceMappingURL=bootstrap-vue.js.map\n "],"names":["global","factory","exports","module","require","define","amd","globalThis","self","bootstrapVue","Vue","this","_typeof","obj","Symbol","iterator","constructor","prototype","_classCallCheck","instance","Constructor","TypeError","_defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","_createClass","protoProps","staticProps","_defineProperty","value","ownKeys","object","enumerableOnly","keys","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","push","apply","_objectSpread2","arguments","source","forEach","getOwnPropertyDescriptors","defineProperties","_inherits","subClass","superClass","create","_setPrototypeOf","_getPrototypeOf","o","setPrototypeOf","getPrototypeOf","__proto__","p","_isNativeReflectConstruct","Reflect","construct","sham","Proxy","Date","toString","call","e","_construct","Parent","args","Class","a","Function","bind","_wrapNativeSuper","_cache","Map","undefined","fn","indexOf","has","get","set","Wrapper","_assertThisInitialized","ReferenceError","_createSuper","Derived","hasNativeReflectConstruct","result","Super","NewTarget","_typeof2","_possibleConstructorReturn","_get","property","receiver","base","hasOwnProperty","_superPropBase","desc","_slicedToArray","arr","Array","isArray","_arrayWithHoles","_arr","_n","_d","_e","_s","_i","next","done","err","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","_toConsumableArray","_arrayLikeToArray","_arrayWithoutHoles","iter","from","_iterableToArray","_nonIterableSpread","minLen","n","slice","name","test","len","arr2","checkMultipleVueWarned","MULTIPLE_VUE_WARNING","val","arrayIncludes","array","concat","_len","_key","assign","proto","optionalProps","prop","freeze","getOwnPropertyNames","isObject","isPlainObject","clone","pick","reduce","omit","hasWindowSupport","window","hasDocumentSupport","document","hasNavigatorSupport","navigator","hasPromiseSupport","Promise","hasMutationObserverSupport","MutationObserver","WebKitMutationObserver","MozMutationObserver","isBrowser","userAgent","toLowerCase","isJSDOM","hasPassiveEventSupport","passiveEventSupported","options","passive","addEventListener","removeEventListener","hasTouchSupport","documentElement","maxTouchPoints","hasPointerEventSupport","Boolean","PointerEvent","MSPointerEvent","hasIntersectionObserverSupport","IntersectionObserverEntry","getNoWarn","fallback","env","process","getEnv","w","Element$1","Element","_Object","_super","HTMLElement","_Element","_super2","SVGElement","_Element2","_super3","File","_Object2","_super4","toType","isUndefined","isNull","isUndefinedOrNull","isFunction","isBoolean","isString","isNumber","isDate","isEvent","Event","isRegExp","toRawType","cloneDeep","defaultValue","identity","x","RX_ARRAY_NOTATION","getRaw","path","join","steps","String","replace","split","every","step","warn","message","console","warnNotClient","warnNoPromiseSupport","DEFAULTS","deepFreeze","breakpoints","formControls","size","BAlert","dismissLabel","variant","BAvatar","badgeVariant","BBadge","BButton","BButtonClose","content","textVariant","ariaLabel","BCalendar","labelPrevDecade","labelPrevYear","labelPrevMonth","labelCurrentMonth","labelNextMonth","labelNextYear","labelNextDecade","labelToday","labelSelected","labelNoDateSelected","labelCalendar","labelNav","labelHelp","BCardSubTitle","subTitleTextVariant","BCarousel","labelPrev","labelNext","labelGotoSlide","labelIndicators","BDropdown","toggleText","splitVariant","BFormDatepicker","labelTodayButton","labelResetButton","labelCloseButton","BFormFile","browseText","placeholder","dropPlaceholder","BFormRating","color","BFormTag","removeLabel","BFormTags","addButtonText","addButtonVariant","duplicateTagText","invalidTagText","tagRemoveLabel","tagRemovedLabel","tagVariant","BFormText","BFormTimepicker","labelNoTimeSelected","labelHours","labelMinutes","labelSeconds","labelAmpm","labelAm","labelPm","labelDecrement","labelIncrement","labelNowButton","BFormSpinbutton","BImg","blankColor","BImgLazy","BInputGroup","BJumbotron","bgVariant","borderVariant","BLink","routerComponentName","BListGroupItem","BModal","titleTag","headerBgVariant","headerBorderVariant","headerTextVariant","headerCloseVariant","bodyBgVariant","bodyTextVariant","footerBgVariant","footerBorderVariant","footerTextVariant","cancelTitle","cancelVariant","okTitle","okVariant","headerCloseContent","headerCloseLabel","BNavbar","BNavbarToggle","label","BPagination","BPaginationNav","BPopover","boundary","boundaryPadding","customClass","delay","BProgress","BProgressBar","BSpinner","BSidebar","shadow","width","tag","backdropVariant","BTable","selectedVariant","headVariant","footVariant","BTime","BToast","toaster","autoHideDelay","toastClass","headerClass","bodyClass","BToaster","ariaLive","ariaAtomic","role","BTooltip","NAME","BvConfig","$_config","$_cachedBreakpoints","defaults","_this","config","cmpName","cmpConfig","some","b","setConfig","Vue$1","checkMultipleVue","installFactory","_ref","components","directives","plugins","install","installed","registerComponents","registerDirectives","registerPlugins","pluginFactory","plugin","use","registerComponent","def","component","registerDirective","directive","memoize","cache","argsKey","JSON","stringify","VueProto","getConfigValue","getComponentConfig","getBreakpoints","_getBreakpointsCached","getBreakpointsUpCached","toInteger","NaN","integer","parseInt","isNaN","toFloat","float","parseFloat","toFixed","precision","RX_TRIM_LEFT","RX_REGEXP_REPLACE","RX_UN_KEBAB","RX_HYPHENATE","kebabCase","str","pascalCase","_","c","toUpperCase","charAt","upperFirst","trim","escapeRegExp","toString$1","spaces","lowerCase","TABABLE_SELECTOR","map","s","w$1","d","elProto","matchesEl","matches","msMatchesSelector","webkitMatchesSelector","closestEl","closest","sel","el","parentElement","parentNode","nodeType","Node","ELEMENT_NODE","requestAF","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","msRequestAnimationFrame","oRequestAnimationFrame","cb","setTimeout","MutationObs","isElement","getActiveElement","excludes","activeElement","isTag","isActiveElement","isVisible","contains","body","style","display","bcr","getBCR","height","isDisabled","disabled","hasAttr","hasClass","reflow","offsetHeight","selectAll","selector","root","querySelectorAll","select","querySelector","includeRoot","parent","child","getById","id","getElementById","addClass","className","classList","add","removeClass","remove","setAttr","attr","setAttribute","removeAttr","removeAttribute","getAttr","getAttribute","hasAttribute","getBoundingClientRect","getCS","getComputedStyle","offset","_offset","top","left","getClientRects","win","ownerDocument","defaultView","pageYOffset","pageXOffset","position","parentOffset","elStyles","doc","offsetParent","offsetParentStyles","borderTopWidth","borderLeftWidth","marginTop","marginLeft","getTabables","rootEl","tabIndex","attemptFocus","focus","_unused","attemptBlur","blur","_unused2","t","r","kebab","styleProp","styleList","l","y","f","NO_FADE_PROPS","enterClass","enterActiveClass","enterToClass","leaveClass","leaveActiveClass","leaveToClass","FADE_PROPS","BVTransition","extend","functional","noFade","type","default","appear","mode","transProps","render","h","children","data","appearClass","appearActiveClass","appearToClass","css","hasNormalizedSlot","names","$scopedSlots","$slots","normalizeSlot","slot","scope","normalizeSlotMixin","methods","vNodes","NAME$1","slots","scopedSlots","componentData","staticClass","class","attrs","on","click","evt","stopPropagation","preventDefault","domProps","innerHTML","parseCountDown","show","parseShow","isNumericLike","AlertPlugin","mixins","model","event","dismissible","Number","fade","countDown","countDownTimeout","localShow","watch","newVal","clearCountDownInterval","$emit","$nextTick","created","mounted","beforeDestroy","dismiss","clearTimeout","$alert","$dismissBtn","_uid","mathMin","Math","min","mathMax","max","mathAbs","abs","mathCeil","ceil","mathFloor","floor","mathPow","pow","mathRound","round","RX_ASPECT","RX_SEPARATOR","AspectPlugin","BAspect","aspect","computed","padding","ratio","_aspect$split$map2","v","$sizer","paddingBottom","$content","prefixPropName","prefix","unprefixPropName","suffixPropName","suffix","copyProps","transformFn","copied","pluckProps","keysToPluck","objToPluck","memo","commaRE","encodeReserveRE","plusRE","queryStartRE","encodeReserveReplacer","charCodeAt","encode","encodeURIComponent","decode","decodeURIComponent","parseQuery","query","parsed","param","parts","shift","isLink","href","to","isRouterLink","computeHref","_ref3","toFallback","hash","results","val2","stringifyQueryObj","KEY_CODES","SPACE","ENTER","ESC","LEFT","UP","RIGHT","DOWN","PAGEUP","PAGEDOWN","HOME","END","TAB","SHIFT","CTRL","BACKSPACE","ALT","PAUSE","BREAK","INSERT","INS","DELETE","makePropWatcher","propName","handler","oldVal","$delete","$data","$set","makePropCacheMixin","proxyPropName","attrsMixin","listenersMixin","routerLinkProps","append","activeClass","exact","exactActiveClass","routerTag","nuxtLinkProps","prefetch","noPrefetch","props$1","rel","active","inheritAttrs","computedTag","thisOrParent","hasRouter","$router","$nuxt","computeTag","computedRel","_ref2","computeRel","computedHref","computedProps","computedAttrs","bvAttrs","tabindex","computedListeners","bvListeners","onClick","_arguments","evtIsEvent","suppliedHandler","stopImmediatePropagation","currentTarget","__vue__","$root","$el","linkProps","props$2","block","pill","squared","pressed","handleFocus","isLink$1","isToggle","isButton","isNonStandardTag","computeClass","computeLinkProps","computeAttrs","button","link","toggle","nonStandardTag","hashLink","autocomplete","listeners","keydown","keyCode","focusin","focusout","commonIconProps","fontScale","scale","rotate","flipH","flipV","shiftH","shiftV","animation","baseAttrs","viewBox","focusable","stackedAttrs","BVIconBase","stacked","_class","hasScale","hasTransforms","hasShift","transforms","isStacked","hasContent","$inner","transform","fontSize","xmlns","fill","makeIcon","kebabName","iconName","iconNameClass","svgContent","BIconBlank","BIconCalendar","BIconCalendarFill","BIconChevronBarLeft","BIconChevronDoubleLeft","BIconChevronDown","BIconChevronLeft","BIconChevronUp","BIconCircleFill","BIconClock","BIconClockFill","BIconDash","BIconPersonFill","BIconPlus","BIconStar","BIconStarFill","BIconStarHalf","BIconX","RX_ICON_PREFIX","BIcon","icon","$options","RX_NUMBER","DEFAULT_SIZES","sm","md","lg","linkProps$1","props$3","src","text","alt","square","rounded","buttonType","badge","badgeTop","badgeLeft","badgeOffset","computeSize","inject","bvAvatarGroup","localSrc","computedSize","computedVariant","avatarGroup","computedRounded","fontStyle","marginStyle","overlapScale","marginRight","badgeStyle","FONT_SIZE_SCALE","bottom","right","newSrc","oldSrc","onImgError","_class2","error","$badge","hasBadgeSlot","badgeText","AvatarPlugin","BAvatarGroup","provide","overlap","paddingStyle","paddingLeft","paddingRight","linkProps$2","props$4","BadgePlugin","RX_HTML_TAGS","stripTags","htmlOrText","textContent","props$5","html","ariaCurrent","BBreadcrumbLink","suppliedProps","BBreadcrumbItem","props$6","items","BBreadcrumb","childNodes","activeDefined","item","idx","BreadcrumbPlugin","ButtonPlugin","BBtn","BBtnClose","props$7","vertical","ariaRole","BButtonGroup","ButtonGroupPlugin","BBtnGroup","ITEM_SELECTOR","BButtonToolbar","justify","keyNav","getItems","onFocusin","focusFirst","stop","onKeydown","shiftKey","focusPrev","focusLast","focusNext","index","reverse","ButtonToolbarPlugin","BBtnToolbar","compareArrays","equal","looseEqual","aValidType","bValidType","getTime","aHasKey","bHasKey","RX_DATE","RX_DATE_SPLIT","createDate","parseYMD","date","_date$split$map2","year","month","day","getFullYear","getMonth","getDate","formatYMD","createDateFormatter","locale","Intl","DateTimeFormat","format","datesEqual","date1","date2","firstDateOfMonth","setDate","lastDateOfMonth","setMonth","addYears","numberOfYears","setFullYear","oneMonthAgo","oneMonthAhead","oneYearAgo","oneYearAhead","oneDecadeAgo","oneDecadeAhead","constrainDate","RTL_LANGS","RX_STRIP_MODS","isLocaleRTL","locale1","locale2","idMixin","localId_","safeId","NAME$a","valueAsDate","initialDate","readonly","dateDisabledFn","startWeekday","direction","todayVariant","noHighlightToday","dateInfoFn","hideHeader","showDecadeNav","hidden","ariaControls","roleDescription","dateFormatOptions","weekday","weekdayHeaderFormat","validator","selected","selectedYMD","activeYMD","getToday","gridHasFocus","isLive","valueId","widgetId","navId","gridId","gridCaptionId","gridHelpId","activeId","selectedDate","activeDate","computedMin","computedMax","computedWeekStarts","computedLocale","locales","calendar","resolvedOptions","resolveLocale","calendarLocale","fmt","calendarYear","calendarMonth","calendarFirstDay","calendarDaysInMonth","computedTodayVariant","isRTL","dir","context","selectedFormatted","formatDateString","activeFormatted","dateDisabled","rtl","dateOutOfRange","rangeFn","disabledFn","ymd","hour","minute","second","formatYearMonth","formatWeekdayName","formatWeekdayNameShort","formatDay","nf","NumberFormat","minimumIntegerDigits","minimumFractionDigits","maximumFractionDigits","notation","prevDecadeDisabled","prevYearDisabled","prevMonthDisabled","thisMonthDisabled","nextMonthDisabled","nextYearDisabled","nextDecadeDisabled","matrix","firstDay","daysInMonth","startIndex","getDay","weekOffset","currentDay","week","j","dayYMD","dayDisabled","dateInfo","isThisMonth","info","calendarHeadings","old","newYMD","oldYMD","setLive","_this2","activated","deactivated","$refs","grid","_this3","emitSelected","_this4","setGridFocusFlag","onKeydownWrapper","altKey","ctrlKey","checkDate","constrainedToday","onKeydownGrid","onClickDay","clickedDate","gotoPrevDecade","gotoPrevYear","gotoPrevMonth","gotoCurrentMonth","gotoNextMonth","gotoNextYear","gotoNextDecade","onHeaderClick","_this5","hideDecadeNav","todayYMD","highlightToday","$header","for","title","labelSelectedDate","navScope","navProps","navPrevProps","navNextProps","$prevDecadeIcon","$prevYearIcon","$prevMonthIcon","$thisMonthIcon","$nextMonthIcon","$nextYearIcon","$nextDecadeIcon","makeNavBtn","btnDisabled","shortcut","$nav","$gridCaption","$gridWeekDays","$gridBody","$cells","dIndex","isSelected","isActive","isToday","idCell","$btn","pointerEvents","$gridHelp","$grid","ref","$slot","$widget","lang","CalendarPlugin","cardMixin","props$8","BCardTitle","props$9","subTitle","subTitleTag","props$a","overlay","BCardBody","cardTitle","cardSubTitle","cardContent","bodyTag","bodyBorderVariant","props$b","header","headerHtml","BCardHeader","headerTag","props$c","footer","footerHtml","footerClass","BCardFooter","footerTag","props$d","required","start","end","BCardImg","baseClass","cardImgProps","imgSrc","props$e","align","noBody","BCard","imgLeft","imgRight","imgStart","imgEnd","slotScope","$imgFirst","$imgLast","$img","imgBottom","hasHeaderSlot","$footer","OBSERVER_PROP_NAME","RX_ONLY_DIGITS","VisibilityObserver","vnode","callback","margin","once","observer","visible","doneOnce","createObserver","IntersectionObserver","rootMargin","threshold","observe","entries","entry","isIntersecting","intersectionRatio","disconnect","destroy","modifiers","mod","_prevModifiers","VBVisible","componentUpdated","oldValue","unbind","BLANK_TEMPLATE","props$f","srcset","sizes","fluid","fluidGrow","thumbnail","center","blank","makeBlankImgSrc","props$g","blankSrc","blankWidth","blankHeight","bVisible","isShown","computedSrc","computedBlank","computedWidth","computedHeight","computedSrcset","computedSizes","updateShowProp","doShow","_modifiers","props$h","BCardImgLazy","lazyProps","props$i","textTag","BCardText","props$j","deck","columns","BCardGroup","CardPlugin","noop","observeDom","obs","mutations","changed","mutation","TEXT_NODE","addedNodes","removedNodes","childList","subtree","EVENT_OPTIONS_PASSIVE","EVENT_OPTIONS_NO_CAPTURE","capture","parseEventOptions","eventOn","evtName","eventOff","eventOnOff","method","NAME$e","DIRECTION","dirClass","overlayClass","prev","PointerType","TOUCH","PEN","TransitionEndEvents","WebkitTransition","MozTransition","OTransition","transition","bvCarousel","interval","indicators","controls","noAnimation","noWrap","noTouch","noHoverPause","imgWidth","imgHeight","background","isSliding","transitionEndEvent","slides","isPaused","touchStartX","touchDeltaX","numSlides","setSlide","pause","doSlide","$_interval","$_animationTimeout","$_touchTimeout","$_observer","getTransitionEndEvent","updateSlides","setObserver","clearInterval","clearAnimationTimeout","clearTouchTimeout","_clearInterval","inner","attributes","attributeFilter","slide","visibilityState","$once","setInterval","restart","isCycling","calcDirection","currentSlide","nextSlide","called","onceTransEnd","handleClick","handleSwipe","absDeltaX","touchStart","pointerType","clientX","touches","touchMove","touchEnd","prevHandler","nextHandler","rawName","expression","mouseenter","mouseleave","tagName","imgProps","imgAlt","imgBlank","imgBlankColor","props$k","contentVisibleUp","contentTag","caption","captionHtml","captionTag","textHtml","CarouselPlugin","BCarouselSlide","contentClasses","dragstart","$props","$contentChildren","$child","TRANSITION_PROPS","TRANSITION_HANDLERS","enter","scrollHeight","afterEnter","leave","afterLeave","BVCollapse","listenOnRootMixin","listenOnRoot","$on","$off","listenOnRootOnce","emitOnRoot","_this$$root","ENTER$1","SPACE$1","BV_BASE","BV_TOGGLE_ROOT_HANDLER","BV_TOGGLE_CLICK_HANDLER","BV_TOGGLE_STATE","BV_TOGGLE_TARGETS","EVENT_STATE","EVENT_STATE_SYNC","KEYDOWN_KEY_CODES","RX_HASH","RX_HASH_ID","RX_SPLIT_SEPARATOR","isNonStandardTag$1","removeClickListener","removeRootListeners","setToggleState","state","resetProp","handleUpdate","binding","targets","arg","getTargets","addClickListener","VBToggle","addRootListeners","updated","BCollapse","isNav","accordion","transitioning","classObject","collapse","emitState","handleToggleEvt","handleAccordionEvt","setWindowEvents","handleResize","emitSync","onEnter","onAfterEnter","onLeave","onAfterLeave","checkDisplayBlock","restore","isBlock","clickHandler","openedId","close","VBTogglePlugin","CollapsePlugin","isBrowser$1","timeoutDuration","longerTimeoutBrowsers","debounce","resolve","then","scheduled","isFunction$1","functionToCheck","getStyleComputedProperty","element","getParentNode","nodeName","host","getScrollParent","_getStyleComputedProp","overflow","overflowX","overflowY","getReferenceNode","reference","referenceNode","isIE11","MSInputMethodContext","documentMode","isIE10","isIE$1","version","getOffsetParent","noOffsetParent","nextElementSibling","getRoot","node","findCommonOffsetParent","element1","element2","order","compareDocumentPosition","DOCUMENT_POSITION_FOLLOWING","range","createRange","setStart","setEnd","commonAncestorContainer","firstElementChild","element1root","getScroll","upperSide","scrollingElement","getBordersSize","styles","axis","sideA","sideB","getSize","computedStyle","getWindowSizes","createClass","defineProperty$1","_extends","getClientRect","offsets","rect","scrollTop","scrollLeft","clientWidth","clientHeight","horizScrollbar","offsetWidth","vertScrollbar","getOffsetRectRelativeToArbitraryNode","fixedPosition","isHTML","childrenRect","parentRect","scrollParent","subtract","modifier","includeScroll","isFixed","getFixedPositionOffsetParent","getBoundaries","popper","boundariesElement","boundaries","excludeScroll","relativeOffset","innerWidth","innerHeight","getViewportOffsetRectRelativeToArtbitraryNode","boundariesNode","_getWindowSizes","isPaddingNumber","computeAutoPlacement","placement","refRect","rects","sortedAreas","area","sort","filteredAreas","computedPlacement","variation","getReferenceOffsets","getOuterSizes","marginBottom","getOppositePlacement","matched","getPopperOffsets","referenceOffsets","popperRect","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","find","check","runModifiers","ends","findIndex","cur","match","enabled","update","isDestroyed","arrowStyles","flipped","positionFixed","flip","originalPlacement","isCreated","onUpdate","onCreate","isModifierEnabled","modifierName","getSupportedPropertyName","prefixes","upperProp","toCheck","destroy$1","willChange","disableEventListeners","removeOnDestroy","removeChild","getWindow","attachToScrollParents","scrollParents","isBody","setupEventListeners","updateBound","scrollElement","eventsEnabled","enableEventListeners","scheduleUpdate","cancelAnimationFrame","isNumeric","isFinite","setStyles","unit","isFirefox","isModifierRequired","requestingName","requestedName","requesting","isRequired","_requesting","requested","placements","validPlacements","clockwise","counter","BEHAVIORS","parseOffset","basePlacement","useHeight","fragments","frag","divider","search","splitRegex","ops","op","mergeWithPrevious","toValue","index2","shiftvariation","_data$offsets","isVertical","side","shiftOffsets","preventOverflow","transformProp","popperStyles","priority","primary","escapeWithReference","secondary","keepTogether","opSide","arrow","_data$offsets$arrow","arrowElement","sideCapitalized","altSide","arrowElementSize","popperMarginSide","popperBorderSide","sideValue","placementOpposite","flipOrder","behavior","refOffsets","overlapsRef","overflowsLeft","overflowsRight","overflowsTop","overflowsBottom","overflowsBoundaries","flippedVariationByRef","flipVariations","flippedVariationByContent","flipVariationsByContent","flippedVariation","getOppositeVariation","subtractLength","hide","bound","computeStyle","legacyGpuAccelerationOption","gpuAcceleration","offsetParentRect","shouldRound","noRound","referenceWidth","popperWidth","isVariation","horizontalToInteger","verticalToInteger","getRoundedOffsets","devicePixelRatio","prefixedProperty","invertTop","invertLeft","applyStyle","onLoad","modifierOptions","Defaults","Popper","classCallCheck","jquery","Utils","PopperUtils","BvEvent","eventInit","cancelable","nativeEvent","relatedTarget","vueTarget","componentId","defaultPrevented","clickOutMixin","listenForClickOut","newValue","clickOutElement","clickOutEventName","_clickOutHandler","beforeCreate","isClickOut","clickOutHandler","focusInMixin","listenForFocusIn","focusInElement","_focusInHandler","focusInHandler","ROOT_DROPDOWN_SHOWN","ROOT_DROPDOWN_HIDDEN","Selector","FORM_CHILD","AttachmentMap","commonProps","dropup","dropright","dropleft","noFlip","popperOpts","dropdownMixin","bvDropdown","bvNavbar","visibleChangePrevented","inNavbar","toggler","directionClass","bvEvt","menu","emitEvent","focusToggler","showMenu","hideMenu","$_popper","whileOpenListen","destroyPopper","createPopper","focusMenu","getPopperConfig","updatePopper","popperConfig","isOpen","rootCloseListener","vm","refocus","_evt","onMousedown","onEsc","onSplitClick","hideHandler","up","focusItem","NAME$f","props$l","menuClass","toggleTag","toggleClass","noCaret","splitHref","splitTo","splitClass","splitButtonType","lazy","dropdownClasses","menuClasses","toggleClasses","$buttonContent","buttonContentProps","$split","btnProps","$toggle","mousedown","$menu","props$m","BDropdownItem","linkClass","closeDropdown","props$n","buttonClass","BDropdownItemButton","props$o","BDropdownHeader","$attrs","props$p","BDropdownDivider","props$q","inline","novalidate","validated","BForm","BDropdownForm","formClass","$listeners","BDropdownText","props$r","headerVariant","headerClasses","ariaDescribedby","BDropdownGroup","headerId","adb","ariaDescribedBy","DropdownPlugin","BDd","BDdItem","BDropdownItemBtn","BDdItemButton","BDdItemBtn","BDdHeader","BDdDivider","BDdForm","BDdText","BDdGroup","props$s","BEmbed","EmbedPlugin","formOptionsMixin","valueField","textField","htmlField","disabledField","formOptions","normalizeOptions","normalizeOption","option","BFormDatalist","props$t","props$u","tooltip","forceShow","BFormInvalidFeedback","props$v","BFormValidFeedback","props$w","BFormRow","FormPlugin","BDatalist","BFormFeedback","looseIndexOf","formMixin","form","autofocus","handleAutofocus","formRadioCheckMixin","checked","plain","buttonVariant","ariaLabelledby","localChecked","isGroup","bvGroup","hasFocus","computedLocalChecked","isBtnMode","buttons","isPlain","isCustom","isSwitch","isRadio","switches","switch","isInline","getName","groupName","getForm","getState","computedState","getButtonVariant","buttonClasses","isChecked","input","defaultSlot","change","handleChange","isCheck","formSizeMixin","sizeFormClass","sizeBtnClass","formStateMixin","stateClass","BFormCheckbox","uncheckedValue","indeterminate","setIndeterminate","_ref$target","isArr","BFormRadio","formRadioCheckGroupMixin","ariaInvalid","groupClasses","computedAriaInvalid","$inputs","isRadioGroup","props$x","BFormCheckboxGroup","bvCheckGroup","FormCheckboxPlugin","BCheckbox","BCheck","BCheckboxGroup","BCheckGroup","PROP","updateListeners","listener","_ref$value","hasListener","handlerChanged","createListener","VBHover","dropdownProps","BVFormBtnLabelControl","BHover","formattedValue","buttonOnly","isHovered","idButton","idLabel","idMenu","idWrapper","computedDir","setFocus","handleHover","hovered","stopEvent","btnScope","opened","$button","$hidden","$label","NAME$h","getConfigFallback","propsMixin","resetValue","noCloseOnSelect","calendarWidth","todayButton","todayButtonVariant","resetButton","resetButtonVariant","closeButton","closeButtonVariant","dark","localYMD","localLocale","calendarYM","calendarProps","computedLang","computedResetValue","control","setAndClose","onSelected","onInput","onContext","ctx","onTodayButton","onResetButton","onCloseButton","onShow","onShown","onHidden","defaultButtonFn","$createElement","_label","_label2","$calendar","shown","FormDatepickerPlugin","BDatepicker","formCustomMixin","custom","NAME$i","isValidValue","accept","multiple","directory","noTraverse","noDrop","fileNameFormatter","selectedFile","dragging","selectLabel","files","file","webkitdirectory","reset","focusHandler","$input","onFileChange","dataTransfer","setFiles","queue","webkitGetAsEntry","traverseFileTree","all","filesArr","filesArray","onReset","onDragover","dropEffect","onDragleave","onDrop","isFile","$path","isDirectory","createReader","readEntries","dragover","dragleave","drop","FormFilePlugin","BFile","escapeChar","cssEscape","firstCharCode","char","charCode","RX_COL_CLASS","strNum","computeBreakpointClass","breakpoint","breakpointPropMap","generateProps","breakpointCol","propMap","breakpointOffset","breakpointOrder","col","cols","alignSelf","BCol","_classList$push","_keys","hasColClasses","renderInvalidFeedback","invalidFeedback","invalidFeedbackId","feedbackAriaLive","renderValidFeedback","validFeedback","validFeedbackId","renderHelpText","description","descriptionId","makePropName","BFormGroup","BREAKPOINTS","bpLabelColProps","bpLabelAlignProps","labelFor","labelSize","labelSrOnly","labelClass","labelColProps","propVal","bColPropName","labelAlignClasses","classes","isHorizontal","labelId","hasInvalidFeedback","hasValidFeedback","describedByIds","setInputDescribedBy","legendClick","inputs","ids","isFieldset","isLegend","labelTag","renderLabel","FormGroupPlugin","BFormFieldset","formSelectionMixin","selectionStart","selectionEnd","selectionDirection","_this$$refs$input","setSelectionRange","_this$$refs$input2","setRangeText","_this$$refs$input3","formTextMixin","plaintext","formatter","lazyFormatter","number","localValue","vModelValue","computedClass","computedDebounce","hasFormatter","stringifyValue","clearDebounce","$_inputDebounceTimer","formatValue","force","modifyValue","updateValue","doUpdate","composing","onChange","onBlur","formValidityMixin","validity","validationMessage","willValidate","setCustomValidity","checkValidity","reportValidity","TYPES","BFormInput","noWheel","list","localType","setWheelStopper","onWheelFocus","onWheelBlur","stopWheel","FormInputPlugin","BInput","BFormRadioGroup","bvRadioGroup","FormRadioPlugin","BRadio","BRadioGroup","LEFT$1","RIGHT$1","UP$1","DOWN$1","BVFormRatingStar","rating","star","focused","hasClear","minStar","computeStars","stars","clampValue","showValue","showValueMax","noBorder","iconEmpty","iconHalf","iconFull","iconClear","showClear","computedStars","computedRating","isInteractive","formattedRating","formatOptions","toLocaleString","amountRtl","onFocus","renderIcon","iconEmptyFn","iconHalfFn","iconFullFn","iconClearFn","$icon","empty","half","full","FormRatingPlugin","BRating","optionsMixin","labelField","optionsField","props$z","BFormSelectOption","BFormSelectOptionGroup","BFormSelect","selectSize","computedSelectSize","inputClass","selectedVal","_value","FormSelectPlugin","BSelect","BSelectOption","BSelectOptionGroup","NAME$m","UP$2","DOWN$2","HOME$1","END$1","PAGEUP$1","PAGEDOWN$1","wrap","formatterFn","repeatDelay","repeatInterval","repeatThreshold","repeatStepMultiplier","spinId","computedInline","computedReadonly","computedRequired","computedStep","computedDelay","computedInterval","computedThreshold","computedStepMultiplier","computedPrecision","computedMultiplier","valueAsFixed","computedRTL","defaultFormatter","useGrouping","computedFormatter","computedSpinAttrs","hasValue","_disabled","clearRepeat","_readonly","$_autoDelayTimer","$_autoRepeatTimer","$_keyIsDown","spinner","emitChange","stepValue","multiplier","onFocusBlur","stepUp","stepDown","metaKey","resetTimers","handleStepRepeat","onKeyup","stepper","count","onMouseup","setMouseup","makeButton","IconCmp","keyRef","slotName","touchstart","$increment","$decrement","$spin","keyup","FormSpinbuttonPlugin","BSpinbutton","onDelete","tagId","tagLabelId","$remove","$tag","NAME$o","TYPES$1","RX_SPACES","ENTER$2","cleanTags","tags","processEventValue","inputId","inputType","inputAttrs","tagClass","tagPills","tagValidator","separator","removeOnDelete","addOnChange","noAddOnEnter","noOuterFocus","ignoreInputFocusSelector","newTag","removedTags","tagsState","valid","invalid","duplicate","computedInputId","computedInputType","computedInputAttrs","computedInputHandlers","onInputInput","onInputChange","onInputKeydown","computedSeparator","computedSeparatorRegExp","RegExp","computedJoiner","joiner","computeIgnoreInputFocusSelector","disableAddButton","splitTags","validateTag","duplicateTags","hasDuplicateTags","invalidTags","hasInvalidTags","addTag","parseTags","getInput","invalidAndDuplicates","removeTag","separatorRe","ignoreFocusSelector","onFocusout","defaultRender","inputHandlers","isInvalid","isDuplicate","$tags","duplicateFeedbackId","outline","minWidth","invisible","tagListId","$field","$ul","$feedback","$invalid","$duplicate","_this6","$output","$removed","FormTagsPlugin","BTags","BTag","BFormTextarea","rows","maxRows","noResize","noAutoShrink","heightInPx","resize","computedRows","computedMinRows","computedMaxRows","setHeight","visibleCallback","computeHeight","$isServer","lineHeight","border","borderBottomWidth","paddingTop","minHeight","oldHeight","contentRows","FormTextareaPlugin","BTextarea","LEFT$2","RIGHT$2","RE_TIME","getConfigFallback$1","padLeftZeros","num","parseHMS","hms","hh","mm","ss","_hms$split$map2","hours","minutes","seconds","ampm","showSeconds","hour12","secondsStep","minutesStep","modelHours","modelMinutes","modelSeconds","modelAmpm","computedHMS","requireSeconds","formatHMS","resolved","hourCycle","computedHourCycle","is12Hour","formatted","formattedTimeString","computedAriaLabelledby","timeFormatter","timeZone","numberFormatter","UTC","spinScopedSlots","increment","decrement","_parseHMS","newHours","oldHours","spinners","formatHours","formatMinutes","formatSeconds","formatAmpm","setHours","setMinutes","setSeconds","setAmpm","onSpinLeftRight","cmp","spinIds","makeSpinbutton","spinbuttonProps","refInFor","makeColon","$spinners","$value","NAME$q","getConfigFallback$2","propsMixin$1","nowButton","nowButtonVariant","noCloseButton","localHMS","timeProps","onNowButton","now","getHours","getMinutes","getSeconds","time","$time","FormTimepickerPlugin","BTimepicker","ImagePlugin","props$A","BInputGroupText","commonProps$1","isText","BInputGroupAddon","BInputGroupAppend","BInputGroupPrepend","props$B","prepend","prependHtml","appendHtml","$prepend","hasPrependSlot","$append","hasAppendSlot","InputGroupPlugin","props$C","BContainer","container","NAME$s","props$D","containerFluid","headerLevel","lead","leadHtml","leadTag","$lead","hasLeadSlot","$children","JumbotronPlugin","COMMON_ALIGNMENT","computeRowColsClass","computeRowColsBreakpoint","rowColsPropList","generateProps$2","rowColsProps","noGutters","alignV","alignH","alignContent","BRow","LayoutPlugin","LinkPlugin","props$E","flush","horizontal","BListGroup","actionTags","linkProps$3","props$F","action","itemProps","ListGroupPlugin","props$G","BMediaBody","props$H","verticalAlign","BMediaAside","props$I","rightAlign","BMedia","$aside","$default","MediaPlugin","BTransporterTargetSingle","abstract","nodes","updatedNodes","destroyed","BTransporterSingle","immediate","unmountTarget","mountTarget","$_defaultFn","$_target","beforeMount","updateTarget","getContainer","createElement","appendChild","propsData","defaultFn","$destroy","PROP$1","listenOnDocumentMixin","listenDocument","listenOnDocument","listenOffDocument","PROP$2","listenOnWindowMixin","listenWindow","listenOnWindow","listenOffWindow","getScopeId","_scopeId","scopedStyleAttrsMixin","scopedStyleAttrs","scopeId","$parent","Selector$1","modalManager","modals","baseZIndex","scrollbarWidth","isBodyOverflowing","modalCount","modalsAreOpen","newCount","oldCount","getScrollbarWidth","checkScrollbar","setScrollbar","resetScrollbar","updateModals","registerModal","modal","unregisterModal","splice","_isBeingDestroyed","_isDestroyed","resetModal","getBaseZIndex","div","zIndex","isTop","_getBCR","_paddingChangedForModal","_marginChangedForModal","actualPadding","actualMargin","BvModalEvent","_BvEvent","trigger","NAME$u","OBSERVER_CONFIG","characterData","props$J","centered","scrollable","buttonSize","noStacking","noCloseOnBackdrop","noCloseOnEsc","noEnforceFocus","ignoreEnforceFocusSelector","titleHtml","titleClass","titleSrOnly","modalClass","dialogClass","contentClass","hideFooter","hideHeaderClose","hideBackdrop","okOnly","okDisabled","cancelDisabled","returnFocus","cancelTitleHtml","okTitleHtml","busy","static","autoFocusButton","isHidden","isTransitioning","isShow","isOpening","isClosing","ignoreBackdropClick","isModalOverflowing","return_focus","modalId","modalOuterId","modalHeaderId","modalBodyId","modalTitleId","modalContentId","modalFooterId","modalBackdropId","modalClasses","modalStyles","sbWidth","dialogClasses","titleClasses","bodyClasses","footerClasses","_ref4","modalOuterStyle","ok","onOk","cancel","onCancel","onClose","computeIgnoreEnforceFocusSelector","computedModalAttrs","showHandler","toggleHandler","modalListener","checkModalOverflow","updateModel","buildEvent","showEvt","hideEvt","triggerEl","onBeforeEnter","setResizeEvent","setEnforceFocus","onBeforeLeave","returnFocusTo","bvModalEvt","onDialogMousedown","onceModalMouseup","onClickOut","tabables","_this$$refs","bottomTrap","topTrap","preventScroll","autoFocus","makeModal","$modalHeader","$closeButton","$body","$modalFooter","$cancelButton","$modalContent","$tabTrapTop","$tabTrapBottom","$modalDialog","$modal","beforeEnter","beforeLeave","$backdrop","PROPERTY","getTarget","_ref$modifiers","getTriggerElement","setRole","unbind$1","oldProp","componentUpdated$1","bind$1","VBModal","inserted","BASE_PROPS","defaultResolver","propsToSlots","msgBoxContent","filterOptions","BVModalPlugin","BMsgBox","extends","handleDestroy","$route","$watch","makeMsgBox","resolver","msgBox","reject","Error","$mount","asyncMsgBox","BvModal","_vm","_root","_this$_root","_this$_root2","_len2","_key2","mixin","ModalPlugin","props$K","justified","tabs","pills","small","cardHeader","BNav","props$L","BNavItem","linkAttrs","linkClasses","BNavText","props$N","BNavForm","_ref$listeners","$form","props$O","BNavItemDropdown","toggleId","NavPlugin","BNavItemDd","BNavDropdown","BNavDd","props$P","toggleable","fixed","sticky","print","breakpointClass","xs","props$Q","BNavbarNav","linkProps$4","props$R","BNavbarBrand","BToggle","toggleState","handleStateEvt","expanded","NavbarPlugin","BNavToggle","positionCover","OverlayPlugin","BOverlay","bgColor","opacity","noCenter","spinnerType","spinnerVariant","spinnerSmall","overlayTag","wrapTag","overlayScope","defaultOverlayFn","$overlay","$background","backgroundColor","backdropFilter","sanitizeLimit","limit","sanitizeCurrentPage","numberOfPages","page","onSpaceKey","paginationMixin","hideGotoEndButtons","labelFirstPage","firstText","firstNumber","firstClass","labelPrevPage","prevText","prevClass","labelNextPage","nextText","nextClass","labelLastPage","lastText","lastNumber","lastClass","labelPage","pageClass","hideEllipsis","ellipsisText","ellipsisClass","currentPage","localNumberOfPages","localLimit","btnSize","alignment","styleClass","computedCurrentPage","paginationParams","showFirstDots","showLastDots","numberOfLinks","startNumber","lastPageNumber","pageList","_this$paginationParam","pages","makePageArray","_i2","_i3","handleKeyNav","getButtons","btn","focusCurrent","_this7","pageNumbers","_this$paginationParam2","isActivePage","pageNumber","noCurrentPage","makeEndBtn","linkTo","btnSlot","btnText","btnClass","pageTest","$btnContent","makeEllipsis","isLast","makePageButton","btnContent","makePage","$firstPageBtn","$lastPageBtn","$pagination","props$T","perPage","totalRows","sanitizePerPage","sanitizeTotalRows","PaginationPlugin","pageSizeNumberOfPages","pageNum","NAME$z","_linkProps","props$U","baseUrl","useRouter","linkGen","pageGen","noPageDetect","computedValue","setNumberOfPages","guessCurrentPage","getPageInfo","_link","makeLink","resolveLink","_link2","pathname","resolveRoute","route","guess","currRoute","loc","location","currLink","PaginationNavPlugin","AttachmentMap$1","AUTO","TOP","BOTTOM","TOPLEFT","TOPRIGHT","RIGHTTOP","RIGHTBOTTOM","BOTTOMLEFT","BOTTOMRIGHT","LEFTTOP","LEFTBOTTOM","OffsetMap","BVPopper","fallbackPlacement","arrowPadding","attachment","getAttachment","templateType","getOffset","popperPlacementChange","popperCreate","arrowOffset","renderTemplate","BVTooltipTemplate","interactive","templateClasses","noninteractive","templateAttributes","templateListeners","$title","MODAL_SELECTOR","CONTAINER_SELECTOR","templateData","triggers","BVTooltip","activeTrigger","hover","computedId","computedTriggers","isWithActiveTrigger","computedTemplateData","newTriggers","oldTriggers","unListen","listen","handleTemplateUpdate","disable","enable","$_tip","$_hoverTimeout","$_hoverState","$_visibleInterval","$_enabled","$_noop","forceHide","setWhileOpenListeners","clearHoverTimeout","clearVisibilityInterval","destroyTemplate","getTemplate","updateData","titleUpdated","fixTitle","createTemplateAndShow","Template","$tip","getPlacementTarget","getBoundary","onTemplateShow","onTemplateShown","onTemplateHide","onTemplateHidden","handleEvent","hideTemplate","clearActiveTriggers","localPlacementTarget","removeAriaDescribedby","restoreTitle","getTemplateElement","dropdownOpen","addAriaDescribedby","prevHoverState","getTargetId","isInModal","isDropdown","setRootListener","doHide","doDisable","doEnable","setModalListener","setDropdownListener","visibleCheck","setOnTouchStartListener","_this8","tip","_this9","evtTarget","_this10","_this11","NAME$D","localTitle","localContent","templateTitleContent","_show","$_toolpop","updateContent","doOpen","doClose","Component","getComponent","$toolpop","onHide","onDisabled","onEnabled","setTitle","setContent","BVPopoverTemplate","titleDomProps","contentDomProps","BVPopover","NAME$G","BV_POPOVER","validTriggers","manual","htmlRE","noFadeRE","placementRE","boundaryRE","delayRE","delayShowRE","delayHideRE","offsetRE","variantRE","spacesRE","applyPopover","bindings","selectedTriggers","parseBindings","__bv_prev_data__","oldData","newData","VBPopoverPlugin","VBPopover","removePopover","PopoverPlugin","bvProgress","labelHtml","striped","animated","showProgress","progressBarClasses","computedStriped","computedAnimated","progressBarStyles","computedProgress","computedShowProgress","computedShowValue","ProgressPlugin","progressHeight","NAME$J","renderHeader","noHeader","renderHeaderTitle","$close","noHeaderClose","closeLabel","renderHeaderClose","renderBody","renderFooter","renderContent","renderBackdrop","backdrop","onBackdropClick","sidebarClass","noSlide","noCloseOnRouteChange","transitionProps","computedTile","titleId","fullPath","$_returnFocusEl","handleToggle","handleSync","onTopTrapFocus","onBottomTrapFocus","$sidebar","SidebarPlugin","SpinnerPlugin","hasListenerMixin","$events","_events","RX_UNDERSCORE","RX_LOWER_UPPER","RX_START_SPACE_WORD","startCase","$1","$2","IGNORED_FIELD_KEYS","_rowVariant","_cellVariants","_showDetails","EVENT_FILTER","normalizeFields","origFields","fields","field","processField","sample","k","itemsMixin","primaryKey","localItems","computedFields","computedFieldsObj","computedItems","paginatedItems","sortedItems","filteredItems","localFilter","sortBy","localSortBy","sortDesc","localSortDesc","apiUrl","newItems","getFieldFormatter","stackedMixin","isStackedAlways","stackedTableClasses","sanitizeRow","row","ignoreFields","includeFields","fieldsObj","filterByFormatted","stringifyObjectValues","DEBOUNCE_DEPRECATED_MSG","RX_SPACES$1","filteringMixin","filterFunction","filterIgnoredFields","filterIncludedFields","filterDebounce","deprecated","isFiltered","filterSanitize","computedFilterIgnored","computedFilterIncluded","computedFilterDebounce","ms","localFiltering","hasProvider","noProviderFiltering","filteredCheck","localFilterFn","criteria","filterFn","filterFnFactory","defaultFilterFnFactory","$_filterTimer","clearFilterTimer","deep","newCriteria","timeout","regExp","pattern","lastIndex","stableSort","compareFn","sortingMixin","sortDirection","sortCompare","sortCompareOptions","numeric","sortCompareLocale","sortNullLast","noSortReset","labelSortAsc","labelSortDesc","labelSortClear","noLocalSorting","noFooterSorting","sortIconLeft","localSorting","noProviderSorting","isSortable","sortable","sortOptions","usage","sortLocale","nullLast","sortByFormatted","localeOpts","aa","bb","localeCompare","defaultSortCompare","handleSort","isFoot","sortChanged","toggleLocalSortDesc","sortTheadThClasses","sortTheadThAttrs","sortTheadThLabel","labelSorting","paginationMixin$1","localPaging","noProviderPaging","captionMixin","captionId","renderCaption","$caption","hasCaptionSlot","colgroupMixin","renderColgroup","$colgroup","TABLE_TAG_NAMES","filterEvent","textSelectionActive","getSelection","containsNode","props$V","BThead","bvTableRowGroup","bvTable","isThead","isDark","isResponsive","isStickyHeader","stickyHeader","hasStickyHeader","tableVariant","theadClasses","theadAttrs","props$W","BTfoot","isTfoot","tfootClasses","tfootAttrs","props$X","BTr","bvTableTr","inTbody","isTbody","inThead","inTfoot","isRowDark","trClasses","trAttrs","parseSpan","spanValidator","props$Y","colspan","rowspan","stackedHeading","stickyColumn","BTd","isStackedCell","isStickyColumn","rowVariant","computedColspan","computedRowspan","cellClasses","cellAttrs","headOrFoot","BTh","theadMixin","headRowVariant","theadClass","theadTrClass","fieldClasses","thClass","headClicked","stopIfBusy","renderThead","isSelectable","footRowVariant","hasHeadClickListener","selectAllRows","clearSelected","colIndex","headerTitle","sortAttrs","sortClass","sortLabel","thStyle","abbr","headerAbbr","getThValues","thAttr","slotNames","column","$srLabel","$trs","tfootTrClass","tfootClass","tfootMixin","footClone","renderTFootCustom","renderTfoot","props$Z","tbodyTransitionProps","tbodyTransitionHandlers","BTbody","isTransitionGroup","tbodyAttrs","tbodyProps","nativeOn","tbodyRowMixin","tbodyTrClass","tbodyTrAttr","detailsTdClass","getTdValues","tdValue","defValue","thValue","getFormattedValue","toggleDetailsFactory","hasDetailsSlot","rowHovered","tbodyRowEvtStopped","emitTbodyRowEvent","rowUnhovered","renderTbodyRowCell","rowIndex","cellTag","isRowHeader","cellVariant","tdClass","tdAttr","unformatted","toggleDetails","detailsShowing","supportsSelectableRows","rowSelected","isRowSelected","selectRow","unselectRow","$_bodyFieldSlotNameCache","$childNodes","renderTbodyRow","tableStriped","rowShowDetails","hasRowClickHandler","hasSelectableRowClick","$rows","detailsId","$tds","ariaRowIndex","primaryKeyValue","rowKey","rowId","selectableClasses","selectableRowClasses","selectableAttrs","selectableRowAttrs","userTrClasses","userTrAttrs","detailsScope","$details","userDetailsTrClasses","userDetailsTrAttrs","tbodyMixin","tbodyClass","getTbodyTrs","refs","tbody","trs","itemRows","tr","getTbodyTrIndex","onTbodyRowKeydown","onTBodyRowClicked","onTbodyRowMiddleMouseRowClicked","which","onTbodyRowContextmenu","onTbodyRowDblClicked","renderTbody","$busy","renderBusy","defaultSlotName","fullName","lowerName","renderTopRow","renderEmpty","renderBottomRow","handlers","auxclick","contextmenu","dblclick","emptyMixin","showEmpty","emptyText","emptyHtml","emptyFilteredText","emptyFilteredHtml","$empty","computedBusy","topRowMixin","bottomRowMixin","busyMixin","localBusy","selectableMixin","selectable","selectMode","noSelectOnClick","selectedRows","selectedLastRow","selectableHasSelection","selectableIsMultiSelect","selectableTableClasses","selectableTableAttrs","setSelectionHandlers","_selectedRows","selectedLastClicked","selectionHandler","providerMixin","providerTriggerContext","_providerUpdate","refresh","_providerSetLocal","catch","tableRendererMixin","bordered","borderless","outlined","responsive","noBorderCollapse","captionTop","tableClass","wrapperClasses","wrapperStyles","maxHeight","tableClasses","isTableSimple","tableAttrs","ariaAttrs","$table","BTableLite","BTableSimple","TableLitePlugin","TableSimplePlugin","TablePlugin","notDisabled","tab","BTabButtonHelper","bvTabs","posInSet","setSize","noKeyNav","handleEvt","localActive","titleLinkClass","activeNavItemClass","titleLinkAttributes","titleItemClass","BTabs","card","noNavStyle","navClass","navWrapperClass","activeTabClass","currentTab","registeredTabs","isMounted","localNavClass","activateTab","previousTab","nextTab","updateTabs","registerTab","unregisterTab","tabsContainer","getTabs","_isTab","getButtonForTab","updateButton","$forceUpdate","tabEvt","deactivateTab","focusButton","emitTabClick","clickTab","firstTab","currentIndex","lastTab","activeTab","fallbackTab","controlledBy","first","last","nav","TabsPlugin","BTab","buttonId","tabClasses","computedNoFade","computedLazy","activate","deactivate","TimePlugin","_typeof$1","_toConsumableArray$1","_arrayWithoutHoles$1","_iterableToArray$1","_nonIterableSpread$1","inBrowser","pick$1","acc","VuePlugin","transports","sources","Wormhole","trackInstances","open","transport","passengers","_transport$order","Infinity","newTransport","$_getTransportIndex","newTransports","registerTarget","unregisterTarget","registerSource","unregisterSource","hasTarget","hasSource","hasContentFor","wormhole","_id","Portal","slim","slotProps","random","sendUpdate","clear","closer","normalizeSlots","normalizeOwnChildren","slotContent","Tag","PortalTarget","firstRender","ownTransports","temp","newPassengers","combinePassengers","noWrapper","_id$1","portalProps","targetProps","props$$","bail","mountTo","targetSlim","targetSlotProps","targetTag","portalTarget","mountEl","_props","DefaultTransition","doRender","dead","staticName","$toaster","$target","linkProps$5","props$10","isStatus","appendToast","noAutoHide","solid","isHiding","timer","dismissStarted","resumeDismiss","bToastClasses","computedDuration","computedToaster","transitionHandlers","ensureToaster","clearDismissTimer","setHoverHandler","startDismissTimer","onPause","onUnPause","passed","onLinkClick","hiddenEvt","makeToast","$headerContent","BASE_PROPS$1","propsToSlots$1","toastContent","filterOptions$1","BVToastPlugin","BToastPop","BvToast","toast","ToastPlugin","BV_TOOLTIP","validTriggers$1","htmlRE$1","noninteractiveRE","noFadeRE$1","placementRE$1","boundaryRE$1","delayRE$1","delayShowRE$1","delayHideRE$1","offsetRE$1","variantRE$1","spacesRE$1","applyTooltip","parseBindings$1","VBTooltipPlugin","VBTooltip","removeTooltip","TooltipPlugin","componentsPlugin","VBHoverPlugin","VBModalPlugin","Default","throttle","DefaultType","ClassName","Selector$2","ACTIVE","NAV_LIST_GROUP","NAV_LINKS","NAV_ITEMS","LIST_ITEMS","DROPDOWN","DROPDOWN_ITEMS","DROPDOWN_TOGGLE","OffsetMethod","HREF_REGEX","TransitionEndEvents$1","toType$1","ScrollSpy","$scroller","$selector","$offsets","$targets","$activeTarget","$scrollHeight","$resizeTimeout","$scrollerObserver","$targetsObserver","$config","updateConfig","unlisten","cfg","componentName","configTypes","expectedTypes","valueType","_isVue","typeCheckConfig","Name","scroller","getScroller","setObservers","autoMethod","methodFn","offsetBase","getScrollTop","getScrollHeight","maxScroll","getOffsetHeight","links","dropdown","setActiveState","sibling","previousElementSibling","BV_SCROLLSPY","onlyDigitsRE","offsetRE$2","applyScrollspy","parseBindings$2","VBScrollspyPlugin","VBScrollspy","dispose","removeScrollspy","VBVisiblePlugin","directivesPlugin","BootstrapVue"],"mappings":"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"} |