moodle_local_treestudyplan/amd/build/bootstrap-vue/bootstrap-vue.min.js.map
2023-12-02 23:22:00 +01:00

1 line
1.5 MiB
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{"version":3,"file":"bootstrap-vue.min.js","sources":["../../src/bootstrap-vue/bootstrap-vue.js"],"sourcesContent":["/*!\n * BootstrapVue 2.23.1\n *\n * @link https://bootstrap-vue.org\n * @source https://github.com/bootstrap-vue/bootstrap-vue\n * @copyright (c) 2016-2022 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/vue')) :\n typeof define === 'function' && define.amd ? define(['../vue/vue'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.bootstrapVue = factory(global.Vue));\n}(this, (function (Vue) { 'use strict';\n\n function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\n var Vue__default = /*#__PURE__*/_interopDefaultLegacy(Vue);\n\n function ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n enumerableOnly && (symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n })), keys.push.apply(keys, symbols);\n }\n\n return keys;\n }\n\n function _objectSpread2$3(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = null != arguments[i] ? arguments[i] : {};\n i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n\n return target;\n }\n\n function _typeof$1(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof$1 = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof$1(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 Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\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 _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 Object.defineProperty(subClass, \"prototype\", {\n value: Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n }),\n writable: false\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 Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], 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 _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n }\n\n function _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\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 } else if (call !== void 0) {\n throw new TypeError(\"Derived constructors may only return object or undefined\");\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() {\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(arguments.length < 3 ? target : receiver);\n }\n\n return desc.value;\n };\n }\n\n return _get.apply(this, arguments);\n }\n\n function _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n }\n\n function _toConsumableArray$1(arr) {\n return _arrayWithoutHoles$1(arr) || _iterableToArray$1(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread$1();\n }\n\n function _arrayWithoutHoles$1(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$1(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n }\n\n function _iterableToArrayLimit(arr, i) {\n var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n\n if (_i == null) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n\n var _s, _e;\n\n try {\n for (_i = _i.call(arr); !(_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$1() {\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 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 COMPONENT_UID_KEY = '_uid';\n var isVue3 = Vue__default['default'].version.startsWith('3');\n var REF_FOR_KEY = isVue3 ? 'ref_for' : 'refInFor';\n var ALLOWED_FIELDS_IN_DATA = ['class', 'staticClass', 'style', 'attrs', 'props', 'domProps', 'on', 'nativeOn', 'directives', 'scopedSlots', 'slot', 'key', 'ref', 'refInFor'];\n var extend = Vue__default['default'].extend.bind(Vue__default['default']);\n\n if (isVue3) {\n var originalExtend = Vue__default['default'].extend;\n var KNOWN_COMPONENTS = ['router-link', 'transition', 'transition-group'];\n var originalVModelDynamicCreated = Vue__default['default'].vModelDynamic.created;\n var originalVModelDynamicBeforeUpdate = Vue__default['default'].vModelDynamic.beforeUpdate; // See https://github.com/vuejs/vue-next/pull/4121 for details\n\n Vue__default['default'].vModelDynamic.created = function (el, binding, vnode) {\n originalVModelDynamicCreated.call(this, el, binding, vnode);\n\n if (!el._assign) {\n el._assign = function () {};\n }\n };\n\n Vue__default['default'].vModelDynamic.beforeUpdate = function (el, binding, vnode) {\n originalVModelDynamicBeforeUpdate.call(this, el, binding, vnode);\n\n if (!el._assign) {\n el._assign = function () {};\n }\n };\n\n extend = function patchedBootstrapVueExtend(definition) {\n if (_typeof$1(definition) === 'object' && definition.render && !definition.__alreadyPatched) {\n var originalRender = definition.render;\n definition.__alreadyPatched = true;\n\n definition.render = function (h) {\n var patchedH = function patchedH(tag, dataObjOrChildren, rawSlots) {\n var slots = rawSlots === undefined ? [] : [Array.isArray(rawSlots) ? rawSlots.filter(Boolean) : rawSlots];\n var isTag = typeof tag === 'string' && !KNOWN_COMPONENTS.includes(tag);\n var isSecondArgumentDataObject = dataObjOrChildren && _typeof$1(dataObjOrChildren) === 'object' && !Array.isArray(dataObjOrChildren);\n\n if (!isSecondArgumentDataObject) {\n return h.apply(void 0, [tag, dataObjOrChildren].concat(slots));\n }\n\n var attrs = dataObjOrChildren.attrs,\n props = dataObjOrChildren.props,\n restData = _objectWithoutProperties(dataObjOrChildren, [\"attrs\", \"props\"]);\n\n var normalizedData = _objectSpread2$3(_objectSpread2$3({}, restData), {}, {\n attrs: attrs,\n props: isTag ? {} : props\n });\n\n if (tag === 'router-link' && !normalizedData.slots && !normalizedData.scopedSlots) {\n // terrible workaround to fix router-link rendering with compat vue-router\n normalizedData.scopedSlots = {\n $hasNormal: function $hasNormal() {}\n };\n }\n\n return h.apply(void 0, [tag, normalizedData].concat(slots));\n };\n\n if (definition.functional) {\n var _ctx$children, _ctx$children$default;\n\n var ctx = arguments[1];\n\n var patchedCtx = _objectSpread2$3({}, ctx);\n\n patchedCtx.data = {\n attrs: _objectSpread2$3({}, ctx.data.attrs || {}),\n props: _objectSpread2$3({}, ctx.data.props || {})\n };\n Object.keys(ctx.data || {}).forEach(function (key) {\n if (ALLOWED_FIELDS_IN_DATA.includes(key)) {\n patchedCtx.data[key] = ctx.data[key];\n } else if (key in ctx.props) {\n patchedCtx.data.props[key] = ctx.data[key];\n } else if (!key.startsWith('on')) {\n patchedCtx.data.attrs[key] = ctx.data[key];\n }\n });\n var IGNORED_CHILDREN_KEYS = ['_ctx'];\n var children = ((_ctx$children = ctx.children) === null || _ctx$children === void 0 ? void 0 : (_ctx$children$default = _ctx$children.default) === null || _ctx$children$default === void 0 ? void 0 : _ctx$children$default.call(_ctx$children)) || ctx.children;\n\n if (children && Object.keys(patchedCtx.children).filter(function (k) {\n return !IGNORED_CHILDREN_KEYS.includes(k);\n }).length === 0) {\n delete patchedCtx.children;\n } else {\n patchedCtx.children = children;\n }\n\n patchedCtx.data.on = ctx.listeners;\n return originalRender.call(this, patchedH, patchedCtx);\n }\n\n return originalRender.call(this, patchedH);\n };\n }\n\n return originalExtend.call(this, definition);\n }.bind(Vue__default['default']);\n }\n\n var nextTick = Vue__default['default'].nextTick;\n\n var HAS_WINDOW_SUPPORT = typeof window !== 'undefined';\n var HAS_DOCUMENT_SUPPORT = typeof document !== 'undefined';\n var HAS_NAVIGATOR_SUPPORT = typeof navigator !== 'undefined';\n var HAS_PROMISE_SUPPORT = typeof Promise !== 'undefined';\n /* istanbul ignore next: JSDOM always returns false */\n\n var HAS_MUTATION_OBSERVER_SUPPORT = typeof MutationObserver !== 'undefined' || typeof WebKitMutationObserver !== 'undefined' || typeof MozMutationObserver !== 'undefined';\n var IS_BROWSER = HAS_WINDOW_SUPPORT && HAS_DOCUMENT_SUPPORT && HAS_NAVIGATOR_SUPPORT;\n var WINDOW = HAS_WINDOW_SUPPORT ? window : {};\n var DOCUMENT = HAS_DOCUMENT_SUPPORT ? document : {};\n var NAVIGATOR = HAS_NAVIGATOR_SUPPORT ? navigator : {};\n var USER_AGENT = (NAVIGATOR.userAgent || '').toLowerCase();\n var IS_JSDOM = USER_AGENT.indexOf('jsdom') > 0;\n /msie|trident/.test(USER_AGENT); // Determine if the browser supports the option passive for events\n\n var HAS_PASSIVE_EVENT_SUPPORT = function () {\n var passiveEventSupported = false;\n\n if (IS_BROWSER) {\n try {\n var options = {\n // This function will be called when the browser\n // attempts to access the passive property\n get passive() {\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 (_unused) {\n /* istanbul ignore next: will never be called in JSDOM */\n passiveEventSupported = false;\n }\n }\n\n return passiveEventSupported;\n }();\n var HAS_TOUCH_SUPPORT = IS_BROWSER && ('ontouchstart' in DOCUMENT.documentElement || NAVIGATOR.maxTouchPoints > 0);\n var HAS_POINTER_EVENT_SUPPORT = IS_BROWSER && Boolean(WINDOW.PointerEvent || WINDOW.MSPointerEvent);\n /* istanbul ignore next: JSDOM only checks for 'IntersectionObserver' */\n\n var HAS_INTERACTION_OBSERVER_SUPPORT = IS_BROWSER && '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;\n\n var NAME$2 = 'BvConfig';\n var PROP_NAME$2 = '$bvConfig';\n var DEFAULT_BREAKPOINT = ['xs', 'sm', 'md', 'lg', 'xl'];\n\n // --- General ---\n var RX_ARRAY_NOTATION = /\\[(\\d+)]/g;\n var RX_BV_PREFIX = /^(BV?)/;\n var RX_DIGITS = /^\\d+$/;\n var RX_EXTENSION = /^\\..+/;\n var RX_HASH = /^#/;\n var RX_HASH_ID = /^#[A-Za-z]+[\\w\\-:.]*$/;\n var RX_HTML_TAGS = /(<([^>]+)>)/gi;\n var RX_HYPHENATE = /\\B([A-Z])/g;\n var RX_LOWER_UPPER = /([a-z])([A-Z])/g;\n var RX_NUMBER = /^[0-9]*\\.?[0-9]+$/;\n var RX_PLUS = /\\+/g;\n var RX_REGEXP_REPLACE = /[-/\\\\^$*+?.()|[\\]{}]/g;\n var RX_SPACES = /[\\s\\uFEFF\\xA0]+/g;\n var RX_SPACE_SPLIT = /\\s+/;\n var RX_STAR = /\\/\\*$/;\n var RX_START_SPACE_WORD = /(\\s|^)(\\w)/g;\n var RX_TRIM_LEFT = /^\\s+/;\n var RX_UNDERSCORE = /_/g;\n var RX_UN_KEBAB = /-(\\w)/g; // --- Date ---\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/; // Time string RegEx (optional seconds)\n\n var RX_TIME = /^([0-1]?[0-9]|2[0-3]):[0-5]?[0-9](:[0-5]?[0-9])?$/; // --- URL ---\n // HREFs must end with a hash followed by at least one non-hash character\n\n var RX_HREF = /^.*(#[^#]+)$/;\n var RX_ENCODED_COMMA = /%2C/g;\n var RX_ENCODE_REVERSE = /[!'()*]/g;\n var RX_QUERY_START = /^(\\?|#|&)/; // --- Aspect ---\n\n var RX_ASPECT = /^\\d+(\\.\\d*)?[/:]\\d+(\\.\\d*)?$/;\n var RX_ASPECT_SEPARATOR = /[/:]/; // --- Grid ---\n\n var RX_COL_CLASS = /^col-/; // --- Icon ---\n\n var RX_ICON_PREFIX = /^BIcon/; // --- Locale ---\n\n var RX_STRIP_LOCALE_MODS = /-u-.+/;\n\n /* istanbul ignore next */\n\n var Element = HAS_WINDOW_SUPPORT ? WINDOW.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 /* istanbul ignore next */\n\n var HTMLElement = HAS_WINDOW_SUPPORT ? WINDOW.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);\n /* istanbul ignore next */\n\n var SVGElement = HAS_WINDOW_SUPPORT ? WINDOW.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);\n /* istanbul ignore next */\n\n var File = HAS_WINDOW_SUPPORT ? WINDOW.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$1 = function toType(value) {\n return _typeof$1(value);\n };\n var toRawType = function toRawType(value) {\n return Object.prototype.toString.call(value).slice(8, -1);\n };\n var isUndefined = function isUndefined(value) {\n return value === undefined;\n };\n var isNull = function isNull(value) {\n return value === null;\n };\n var isUndefinedOrNull = function isUndefinedOrNull(value) {\n return isUndefined(value) || isNull(value);\n };\n var isFunction$1 = function isFunction(value) {\n return toType$1(value) === 'function';\n };\n var isBoolean = function isBoolean(value) {\n return toType$1(value) === 'boolean';\n };\n var isString = function isString(value) {\n return toType$1(value) === 'string';\n };\n var isNumber = function isNumber(value) {\n return toType$1(value) === 'number';\n };\n var isNumeric$1 = function isNumeric(value) {\n return RX_NUMBER.test(String(value));\n };\n var isArray = function isArray(value) {\n return Array.isArray(value);\n }; // Quick object check\n // This is primarily used to tell Objects from primitive values\n // when we know the value is a JSON-compliant type\n // Note object could be a complex type like array, Date, etc.\n\n var isObject = function isObject(obj) {\n return obj !== null && _typeof$1(obj) === 'object';\n }; // Strict object type check\n // Only returns true for plain JavaScript objects\n\n var isPlainObject = function isPlainObject(obj) {\n return Object.prototype.toString.call(obj) === '[object Object]';\n };\n var isDate = function isDate(value) {\n return value instanceof Date;\n };\n var isEvent = function isEvent(value) {\n return value instanceof Event;\n };\n var isFile = function isFile(value) {\n return value instanceof File;\n };\n var isRegExp = function isRegExp(value) {\n return toRawType(value) === 'RegExp';\n };\n var isPromise = function isPromise(value) {\n return !isUndefinedOrNull(value) && isFunction$1(value.then) && isFunction$1(value.catch);\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$1 = function defineProperty(obj, prop, descriptor) {\n return Object.defineProperty(obj, prop, descriptor);\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$1 = function toString(obj) {\n return Object.prototype.toString.call(obj);\n }; // --- Utilities ---\n // Shallow copy an object\n\n var clone = function clone(obj) {\n return _objectSpread2$3({}, obj);\n }; // Return a shallow copy of object with the specified properties only\n // See: https://gist.github.com/bisubus/2da8af7e801ffd813fab7ac221aa7afc\n\n var pick$1 = 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$3(_objectSpread2$3({}, result), {}, _defineProperty({}, key, obj[key]));\n }, {});\n }; // Return a shallow copy of object with the specified properties omitted\n // See: https://gist.github.com/bisubus/2da8af7e801ffd813fab7ac221aa7afc\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$3(_objectSpread2$3({}, result), {}, _defineProperty({}, key, obj[key]));\n }, {});\n }; // Merges two object deeply together\n // See: https://gist.github.com/Salakar/1d7137de9cb8b704e48a\n\n var mergeDeep = function mergeDeep(target, source) {\n if (isObject(target) && isObject(source)) {\n keys(source).forEach(function (key) {\n if (isObject(source[key])) {\n if (!target[key] || !isObject(target[key])) {\n target[key] = source[key];\n }\n\n mergeDeep(target[key], source[key]);\n } else {\n assign(target, _defineProperty({}, key, source[key]));\n }\n });\n }\n\n return target;\n }; // Returns a shallow copy of the object with keys in sorted order\n\n var sortKeys = function sortKeys(obj) {\n return keys(obj).sort().reduce(function (result, key) {\n return _objectSpread2$3(_objectSpread2$3({}, result), {}, _defineProperty({}, key, obj[key]));\n }, {});\n }; // Convenience method to create a read-only descriptor\n\n var readonlyDescriptor = function readonlyDescriptor() {\n return {\n enumerable: true,\n configurable: false,\n writable: false\n };\n };\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$1(result), [cloneDeep(val, val)]);\n }, []);\n }\n\n if (isPlainObject(obj)) {\n return keys(obj).reduce(function (result, key) {\n return _objectSpread2$3(_objectSpread2$3({}, 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 /**\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 value = getRaw(obj, path);\n return isUndefinedOrNull(value) ? defaultValue : value;\n };\n\n /**\n * Utilities to get information about the current environment\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') || getEnv('NODE_ENV') === 'production';\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 (IS_BROWSER) {\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 (HAS_PROMISE_SUPPORT) {\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 (HAS_MUTATION_OBSERVER_SUPPORT) {\n return false;\n } else {\n warn(\"\".concat(source, \": Requires MutationObserver support.\"));\n return true;\n }\n };\n\n var BvConfig = /*#__PURE__*/function () {\n function BvConfig() {\n _classCallCheck(this, BvConfig);\n\n this.$_config = {};\n } // Method to merge in user config parameters\n\n\n _createClass(BvConfig, [{\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 /* istanbul ignore next */\n if (!isPlainObject(config)) {\n return;\n }\n\n var configKeys = getOwnPropertyNames(config);\n configKeys.forEach(function (key) {\n /* istanbul ignore next */\n var subConfig = config[key];\n\n if (key === 'breakpoints') {\n /* istanbul ignore if */\n if (!isArray(subConfig) || subConfig.length < 2 || subConfig.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$2);\n } else {\n _this.$_config[key] = cloneDeep(subConfig);\n }\n } else if (isPlainObject(subConfig)) {\n // Component prop defaults\n _this.$_config[key] = getOwnPropertyNames(subConfig).reduce(function (config, prop) {\n if (!isUndefined(subConfig[prop])) {\n config[prop] = cloneDeep(subConfig[prop]);\n }\n\n return config;\n }, _this.$_config[key] || {});\n }\n });\n } // Clear the config\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 } // Returns a deep copy of the config value\n\n }, {\n key: \"getConfigValue\",\n value: function getConfigValue(key) {\n var defaultValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;\n return cloneDeep(getRaw(this.$_config, key, defaultValue));\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 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Vue__default['default'];\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.prototype[PROP_NAME$2] = Vue__default['default'].prototype[PROP_NAME$2] = Vue.prototype[PROP_NAME$2] || Vue__default['default'].prototype[PROP_NAME$2] || new BvConfig(); // Apply the config values\n\n Vue.prototype[PROP_NAME$2].setConfig(config);\n }; // Method for resetting the user config\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) {\n /* istanbul ignore next */\n if (!checkMultipleVueWarned && Vue__default['default'] !== Vue && !IS_JSDOM) {\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$3(_objectSpread2$3({}, 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 (HAS_WINDOW_SUPPORT && window.Vue) {\n window.Vue.use(VuePlugin);\n }\n /* istanbul ignore next */\n\n\n if (HAS_WINDOW_SUPPORT && VuePlugin.NAME) {\n window[VuePlugin.NAME] = VuePlugin;\n }\n };\n\n // Component names\n var NAME_ALERT = 'BAlert';\n var NAME_ASPECT = 'BAspect';\n var NAME_AVATAR = 'BAvatar';\n var NAME_AVATAR_GROUP = 'BAvatarGroup';\n var NAME_BADGE = 'BBadge';\n var NAME_BREADCRUMB = 'BBreadcrumb';\n var NAME_BREADCRUMB_ITEM = 'BBreadcrumbItem';\n var NAME_BREADCRUMB_LINK = 'BBreadcrumbLink';\n var NAME_BUTTON = 'BButton';\n var NAME_BUTTON_CLOSE = 'BButtonClose';\n var NAME_BUTTON_GROUP = 'BButtonGroup';\n var NAME_BUTTON_TOOLBAR = 'BButtonToolbar';\n var NAME_CALENDAR = 'BCalendar';\n var NAME_CARD = 'BCard';\n var NAME_CARD_BODY = 'BCardBody';\n var NAME_CARD_FOOTER = 'BCardFooter';\n var NAME_CARD_GROUP = 'BCardGroup';\n var NAME_CARD_HEADER = 'BCardHeader';\n var NAME_CARD_IMG = 'BCardImg';\n var NAME_CARD_IMG_LAZY = 'BCardImgLazy';\n var NAME_CARD_SUB_TITLE = 'BCardSubTitle';\n var NAME_CARD_TEXT = 'BCardText';\n var NAME_CARD_TITLE = 'BCardTitle';\n var NAME_CAROUSEL = 'BCarousel';\n var NAME_CAROUSEL_SLIDE = 'BCarouselSlide';\n var NAME_COL = 'BCol';\n var NAME_COLLAPSE = 'BCollapse';\n var NAME_CONTAINER = 'BContainer';\n var NAME_DROPDOWN = 'BDropdown';\n var NAME_DROPDOWN_DIVIDER = 'BDropdownDivider';\n var NAME_DROPDOWN_FORM = 'BDropdownForm';\n var NAME_DROPDOWN_GROUP = 'BDropdownGroup';\n var NAME_DROPDOWN_HEADER = 'BDropdownHeader';\n var NAME_DROPDOWN_ITEM = 'BDropdownItem';\n var NAME_DROPDOWN_ITEM_BUTTON = 'BDropdownItemButton';\n var NAME_DROPDOWN_TEXT = 'BDropdownText';\n var NAME_EMBED = 'BEmbed';\n var NAME_FORM = 'BForm';\n var NAME_FORM_CHECKBOX = 'BFormCheckbox';\n var NAME_FORM_CHECKBOX_GROUP = 'BFormCheckboxGroup';\n var NAME_FORM_DATALIST = 'BFormDatalist';\n var NAME_FORM_DATEPICKER = 'BFormDatepicker';\n var NAME_FORM_FILE = 'BFormFile';\n var NAME_FORM_GROUP = 'BFormGroup';\n var NAME_FORM_INPUT = 'BFormInput';\n var NAME_FORM_INVALID_FEEDBACK = 'BFormInvalidFeedback';\n var NAME_FORM_RADIO = 'BFormRadio';\n var NAME_FORM_RADIO_GROUP = 'BFormRadioGroup';\n var NAME_FORM_RATING = 'BFormRating';\n var NAME_FORM_ROW = 'BFormRow';\n var NAME_FORM_SELECT = 'BFormSelect';\n var NAME_FORM_SELECT_OPTION = 'BFormSelectOption';\n var NAME_FORM_SELECT_OPTION_GROUP = 'BFormSelectOptionGroup';\n var NAME_FORM_SPINBUTTON = 'BFormSpinbutton';\n var NAME_FORM_TAG = 'BFormTag';\n var NAME_FORM_TAGS = 'BFormTags';\n var NAME_FORM_TEXT = 'BFormText';\n var NAME_FORM_TEXTAREA = 'BFormTextarea';\n var NAME_FORM_TIMEPICKER = 'BFormTimepicker';\n var NAME_FORM_VALID_FEEDBACK = 'BFormValidFeedback';\n var NAME_ICON = 'BIcon';\n var NAME_ICONSTACK = 'BIconstack';\n var NAME_ICON_BASE = 'BIconBase';\n var NAME_IMG = 'BImg';\n var NAME_IMG_LAZY = 'BImgLazy';\n var NAME_INPUT_GROUP = 'BInputGroup';\n var NAME_INPUT_GROUP_ADDON = 'BInputGroupAddon';\n var NAME_INPUT_GROUP_APPEND = 'BInputGroupAppend';\n var NAME_INPUT_GROUP_PREPEND = 'BInputGroupPrepend';\n var NAME_INPUT_GROUP_TEXT = 'BInputGroupText';\n var NAME_JUMBOTRON = 'BJumbotron';\n var NAME_LINK = 'BLink';\n var NAME_LIST_GROUP = 'BListGroup';\n var NAME_LIST_GROUP_ITEM = 'BListGroupItem';\n var NAME_MEDIA = 'BMedia';\n var NAME_MEDIA_ASIDE = 'BMediaAside';\n var NAME_MEDIA_BODY = 'BMediaBody';\n var NAME_MODAL = 'BModal';\n var NAME_MSG_BOX = 'BMsgBox';\n var NAME_NAV = 'BNav';\n var NAME_NAVBAR = 'BNavbar';\n var NAME_NAVBAR_BRAND = 'BNavbarBrand';\n var NAME_NAVBAR_NAV = 'BNavbarNav';\n var NAME_NAVBAR_TOGGLE = 'BNavbarToggle';\n var NAME_NAV_FORM = 'BNavForm';\n var NAME_NAV_ITEM = 'BNavItem';\n var NAME_NAV_ITEM_DROPDOWN = 'BNavItemDropdown';\n var NAME_NAV_TEXT = 'BNavText';\n var NAME_OVERLAY = 'BOverlay';\n var NAME_PAGINATION = 'BPagination';\n var NAME_PAGINATION_NAV = 'BPaginationNav';\n var NAME_POPOVER = 'BPopover';\n var NAME_PROGRESS = 'BProgress';\n var NAME_PROGRESS_BAR = 'BProgressBar';\n var NAME_ROW = 'BRow';\n var NAME_SIDEBAR = 'BSidebar';\n var NAME_SKELETON = 'BSkeleton';\n var NAME_SKELETON_ICON = 'BSkeletonIcon';\n var NAME_SKELETON_IMG = 'BSkeletonImg';\n var NAME_SKELETON_TABLE = 'BSkeletonTable';\n var NAME_SKELETON_WRAPPER = 'BSkeletonWrapper';\n var NAME_SPINNER = 'BSpinner';\n var NAME_TAB = 'BTab';\n var NAME_TABLE = 'BTable';\n var NAME_TABLE_CELL = 'BTableCell';\n var NAME_TABLE_LITE = 'BTableLite';\n var NAME_TABLE_SIMPLE = 'BTableSimple';\n var NAME_TABS = 'BTabs';\n var NAME_TBODY = 'BTbody';\n var NAME_TFOOT = 'BTfoot';\n var NAME_TH = 'BTh';\n var NAME_THEAD = 'BThead';\n var NAME_TIME = 'BTime';\n var NAME_TOAST = 'BToast';\n var NAME_TOASTER = 'BToaster';\n var NAME_TOOLTIP = 'BTooltip';\n var NAME_TR = 'BTr'; // Helper component names\n\n var NAME_COLLAPSE_HELPER = 'BVCollapse';\n var NAME_FORM_BUTTON_LABEL_CONTROL = 'BVFormBtnLabelControl';\n var NAME_FORM_RATING_STAR = 'BVFormRatingStar';\n var NAME_POPOVER_HELPER = 'BVPopover';\n var NAME_POPOVER_TEMPLATE = 'BVPopoverTemplate';\n var NAME_POPPER = 'BVPopper';\n var NAME_TAB_BUTTON_HELPER = 'BVTabButton';\n var NAME_TOAST_POP = 'BVToastPop';\n var NAME_TOOLTIP_HELPER = 'BVTooltip';\n var NAME_TOOLTIP_TEMPLATE = 'BVTooltipTemplate';\n var NAME_TRANSITION = 'BVTransition';\n var NAME_TRANSPORTER = 'BVTransporter';\n var NAME_TRANSPORTER_TARGET = 'BVTransporterTarget';\n\n var EVENT_NAME_ACTIVATE_TAB = 'activate-tab';\n var EVENT_NAME_BLUR = 'blur';\n var EVENT_NAME_CANCEL = 'cancel';\n var EVENT_NAME_CHANGE = 'change';\n var EVENT_NAME_CHANGED = 'changed';\n var EVENT_NAME_CLICK = 'click';\n var EVENT_NAME_CLOSE = 'close';\n var EVENT_NAME_CONTEXT = 'context';\n var EVENT_NAME_CONTEXT_CHANGED = 'context-changed';\n var EVENT_NAME_DESTROYED = 'destroyed';\n var EVENT_NAME_DISABLE = 'disable';\n var EVENT_NAME_DISABLED = 'disabled';\n var EVENT_NAME_DISMISSED = 'dismissed';\n var EVENT_NAME_DISMISS_COUNT_DOWN = 'dismiss-count-down';\n var EVENT_NAME_ENABLE = 'enable';\n var EVENT_NAME_ENABLED = 'enabled';\n var EVENT_NAME_FILTERED = 'filtered';\n var EVENT_NAME_FIRST = 'first';\n var EVENT_NAME_FOCUS = 'focus';\n var EVENT_NAME_FOCUSIN = 'focusin';\n var EVENT_NAME_FOCUSOUT = 'focusout';\n var EVENT_NAME_HEAD_CLICKED = 'head-clicked';\n var EVENT_NAME_HIDDEN = 'hidden';\n var EVENT_NAME_HIDE = 'hide';\n var EVENT_NAME_IMG_ERROR = 'img-error';\n var EVENT_NAME_INPUT = 'input';\n var EVENT_NAME_LAST = 'last';\n var EVENT_NAME_MOUSEENTER = 'mouseenter';\n var EVENT_NAME_MOUSELEAVE = 'mouseleave';\n var EVENT_NAME_NEXT = 'next';\n var EVENT_NAME_OK = 'ok';\n var EVENT_NAME_OPEN = 'open';\n var EVENT_NAME_PAGE_CLICK = 'page-click';\n var EVENT_NAME_PAUSED = 'paused';\n var EVENT_NAME_PREV = 'prev';\n var EVENT_NAME_REFRESH = 'refresh';\n var EVENT_NAME_REFRESHED = 'refreshed';\n var EVENT_NAME_REMOVE = 'remove';\n var EVENT_NAME_ROW_CLICKED = 'row-clicked';\n var EVENT_NAME_ROW_CONTEXTMENU = 'row-contextmenu';\n var EVENT_NAME_ROW_DBLCLICKED = 'row-dblclicked';\n var EVENT_NAME_ROW_HOVERED = 'row-hovered';\n var EVENT_NAME_ROW_MIDDLE_CLICKED = 'row-middle-clicked';\n var EVENT_NAME_ROW_SELECTED = 'row-selected';\n var EVENT_NAME_ROW_UNHOVERED = 'row-unhovered';\n var EVENT_NAME_SELECTED = 'selected';\n var EVENT_NAME_SHOW = 'show';\n var EVENT_NAME_SHOWN = 'shown';\n var EVENT_NAME_SLIDING_END = 'sliding-end';\n var EVENT_NAME_SLIDING_START = 'sliding-start';\n var EVENT_NAME_SORT_CHANGED = 'sort-changed';\n var EVENT_NAME_TAG_STATE = 'tag-state';\n var EVENT_NAME_TOGGLE = 'toggle';\n var EVENT_NAME_UNPAUSED = 'unpaused';\n var EVENT_NAME_UPDATE = 'update';\n var HOOK_EVENT_NAME_BEFORE_DESTROY = isVue3 ? 'vnodeBeforeUnmount' : 'hook:beforeDestroy';\n var HOOK_EVENT_NAME_DESTROYED = isVue3 ? 'vNodeUnmounted' : 'hook:destroyed';\n var MODEL_EVENT_NAME_PREFIX = 'update:';\n var ROOT_EVENT_NAME_PREFIX = 'bv';\n var ROOT_EVENT_NAME_SEPARATOR = '::';\n var EVENT_OPTIONS_PASSIVE = {\n passive: true\n };\n var EVENT_OPTIONS_NO_CAPTURE = {\n passive: true,\n capture: false\n };\n\n // General types\n var PROP_TYPE_ANY = undefined;\n var PROP_TYPE_ARRAY = Array;\n var PROP_TYPE_BOOLEAN = Boolean;\n var PROP_TYPE_DATE = Date;\n var PROP_TYPE_FUNCTION = Function;\n var PROP_TYPE_NUMBER = Number;\n var PROP_TYPE_OBJECT = Object;\n var PROP_TYPE_REG_EXP = RegExp;\n var PROP_TYPE_STRING = String; // Multiple types\n\n var PROP_TYPE_ARRAY_FUNCTION = [PROP_TYPE_ARRAY, PROP_TYPE_FUNCTION];\n var PROP_TYPE_ARRAY_OBJECT = [PROP_TYPE_ARRAY, PROP_TYPE_OBJECT];\n var PROP_TYPE_ARRAY_OBJECT_STRING = [PROP_TYPE_ARRAY, PROP_TYPE_OBJECT, PROP_TYPE_STRING];\n var PROP_TYPE_ARRAY_STRING = [PROP_TYPE_ARRAY, PROP_TYPE_STRING];\n var PROP_TYPE_BOOLEAN_NUMBER = [PROP_TYPE_BOOLEAN, PROP_TYPE_NUMBER];\n var PROP_TYPE_BOOLEAN_NUMBER_STRING = [PROP_TYPE_BOOLEAN, PROP_TYPE_NUMBER, PROP_TYPE_STRING];\n var PROP_TYPE_BOOLEAN_STRING = [PROP_TYPE_BOOLEAN, PROP_TYPE_STRING];\n var PROP_TYPE_DATE_STRING = [PROP_TYPE_DATE, PROP_TYPE_STRING];\n var PROP_TYPE_FUNCTION_STRING = [PROP_TYPE_FUNCTION, PROP_TYPE_STRING];\n var PROP_TYPE_NUMBER_STRING = [PROP_TYPE_NUMBER, PROP_TYPE_STRING];\n var PROP_TYPE_NUMBER_OBJECT_STRING = [PROP_TYPE_NUMBER, PROP_TYPE_OBJECT, PROP_TYPE_STRING];\n var PROP_TYPE_OBJECT_FUNCTION = [PROP_TYPE_OBJECT, PROP_TYPE_FUNCTION];\n var PROP_TYPE_OBJECT_STRING = [PROP_TYPE_OBJECT, PROP_TYPE_STRING];\n\n var SLOT_NAME_ADD_BUTTON_TEXT = 'add-button-text';\n var SLOT_NAME_APPEND = 'append';\n var SLOT_NAME_ASIDE = 'aside';\n var SLOT_NAME_BADGE = 'badge';\n var SLOT_NAME_BOTTOM_ROW = 'bottom-row';\n var SLOT_NAME_BUTTON_CONTENT = 'button-content';\n var SLOT_NAME_CUSTOM_FOOT = 'custom-foot';\n var SLOT_NAME_DECREMENT = 'decrement';\n var SLOT_NAME_DEFAULT = 'default';\n var SLOT_NAME_DESCRIPTION = 'description';\n var SLOT_NAME_DISMISS = 'dismiss';\n var SLOT_NAME_DROP_PLACEHOLDER = 'drop-placeholder';\n var SLOT_NAME_ELLIPSIS_TEXT = 'ellipsis-text';\n var SLOT_NAME_EMPTY = 'empty';\n var SLOT_NAME_EMPTYFILTERED = 'emptyfiltered';\n var SLOT_NAME_FILE_NAME = 'file-name';\n var SLOT_NAME_FIRST = 'first';\n var SLOT_NAME_FIRST_TEXT = 'first-text';\n var SLOT_NAME_FOOTER = 'footer';\n var SLOT_NAME_HEADER = 'header';\n var SLOT_NAME_HEADER_CLOSE = 'header-close';\n var SLOT_NAME_ICON_CLEAR = 'icon-clear';\n var SLOT_NAME_ICON_EMPTY = 'icon-empty';\n var SLOT_NAME_ICON_FULL = 'icon-full';\n var SLOT_NAME_ICON_HALF = 'icon-half';\n var SLOT_NAME_IMG = 'img';\n var SLOT_NAME_INCREMENT = 'increment';\n var SLOT_NAME_INVALID_FEEDBACK = 'invalid-feedback';\n var SLOT_NAME_LABEL = 'label';\n var SLOT_NAME_LAST_TEXT = 'last-text';\n var SLOT_NAME_LEAD = 'lead';\n var SLOT_NAME_LOADING = 'loading';\n var SLOT_NAME_MODAL_BACKDROP = 'modal-backdrop';\n var SLOT_NAME_MODAL_CANCEL = 'modal-cancel';\n var SLOT_NAME_MODAL_FOOTER = 'modal-footer';\n var SLOT_NAME_MODAL_HEADER = 'modal-header';\n var SLOT_NAME_MODAL_HEADER_CLOSE = 'modal-header-close';\n var SLOT_NAME_MODAL_OK = 'modal-ok';\n var SLOT_NAME_MODAL_TITLE = 'modal-title';\n var SLOT_NAME_NAV_NEXT_DECADE = 'nav-next-decade';\n var SLOT_NAME_NAV_NEXT_MONTH = 'nav-next-month';\n var SLOT_NAME_NAV_NEXT_YEAR = 'nav-next-year';\n var SLOT_NAME_NAV_PEV_DECADE = 'nav-prev-decade';\n var SLOT_NAME_NAV_PEV_MONTH = 'nav-prev-month';\n var SLOT_NAME_NAV_PEV_YEAR = 'nav-prev-year';\n var SLOT_NAME_NAV_THIS_MONTH = 'nav-this-month';\n var SLOT_NAME_NEXT_TEXT = 'next-text';\n var SLOT_NAME_OVERLAY = 'overlay';\n var SLOT_NAME_PAGE = 'page';\n var SLOT_NAME_PLACEHOLDER = 'placeholder';\n var SLOT_NAME_PREPEND = 'prepend';\n var SLOT_NAME_PREV_TEXT = 'prev-text';\n var SLOT_NAME_ROW_DETAILS = 'row-details';\n var SLOT_NAME_TABLE_BUSY = 'table-busy';\n var SLOT_NAME_TABLE_CAPTION = 'table-caption';\n var SLOT_NAME_TABLE_COLGROUP = 'table-colgroup';\n var SLOT_NAME_TABS_END = 'tabs-end';\n var SLOT_NAME_TABS_START = 'tabs-start';\n var SLOT_NAME_TEXT = 'text';\n var SLOT_NAME_THEAD_TOP = 'thead-top';\n var SLOT_NAME_TITLE = 'title';\n var SLOT_NAME_TOAST_TITLE = 'toast-title';\n var SLOT_NAME_TOP_ROW = 'top-row';\n var SLOT_NAME_VALID_FEEDBACK = 'valid-feedback';\n\n var from = function from() {\n return Array.from.apply(Array, arguments);\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 }; // --- Utilities ---\n\n var createArray = function createArray(length, fillFn) {\n var mapFn = isFunction$1(fillFn) ? fillFn : function () {\n return fillFn;\n };\n return Array.apply(null, {\n length: length\n }).map(mapFn);\n };\n var flatten = function flatten(array) {\n return array.reduce(function (result, item) {\n return concat(result, item);\n }, []);\n };\n var flattenDeep = function flattenDeep(array) {\n return array.reduce(function (result, item) {\n return concat(result, Array.isArray(item) ? flattenDeep(item) : item);\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 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$1(slot) ? slot(scope) : slot;\n };\n\n var normalizeSlotMixin = extend({\n methods: {\n // Returns `true` if the either a `$scopedSlot` or `$slot` exists with the specified name\n // `name` can be a string name or an array of names\n hasNormalizedSlot: function hasNormalizedSlot$1() {\n var name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : SLOT_NAME_DEFAULT;\n var scopedSlots = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.$scopedSlots;\n var slots = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.$slots;\n return hasNormalizedSlot(name, scopedSlots, slots);\n },\n // Returns an array of rendered VNodes if slot found, otherwise `undefined`\n // `name` can be a string name or an array of names\n normalizeSlot: function normalizeSlot$1() {\n var name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : SLOT_NAME_DEFAULT;\n var scope = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var scopedSlots = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.$scopedSlots;\n var slots = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : this.$slots;\n\n var vNodes = normalizeSlot(name, scope, scopedSlots, slots);\n\n return vNodes ? concat(vNodes) : vNodes;\n }\n }\n });\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 // 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 }; // Converts a string, including strings in camelCase or snake_case, into Start Case\n // It keeps original single quote and hyphen in the word\n // https://github.com/UrbanCompass/to-start-case\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 }; // 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 = 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(str).replace(RX_TRIM_LEFT, '');\n }; // Remove Trailing white space from a string\n\n var trim = function trim(str) {\n return toString(str).trim();\n }; // Lower case a string\n\n var lowerCase = function lowerCase(str) {\n return toString(str).toLowerCase();\n }; // Upper case a string\n\n var ELEMENT_PROTO = Element.prototype;\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(', '); // --- 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 = ELEMENT_PROTO.matches || ELEMENT_PROTO.msMatchesSelector || ELEMENT_PROTO.webkitMatchesSelector; // See: https://developer.mozilla.org/en-US/docs/Web/API/Element/closest\n\n /* istanbul ignore next */\n\n var closestEl = ELEMENT_PROTO.closest || function (sel) {\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 = (WINDOW.requestAnimationFrame || WINDOW.webkitRequestAnimationFrame || WINDOW.mozRequestAnimationFrame || WINDOW.msRequestAnimationFrame || WINDOW.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 }).bind(WINDOW);\n var MutationObs = WINDOW.MutationObserver || WINDOW.WebKitMutationObserver || WINDOW.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 = DOCUMENT.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(tag).toLowerCase() === toString(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(DOCUMENT.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 (getStyle(el, '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 : DOCUMENT).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 : DOCUMENT).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$1(parent.contains) ? parent.contains(child) : false;\n }; // Get an element given an ID\n\n var getById = function getById(id) {\n return DOCUMENT.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, value) {\n if (attr && isElement(el)) {\n el.setAttribute(attr, value);\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 }; // Set an style property on an element\n\n var setStyle = function setStyle(el, prop, value) {\n if (prop && isElement(el)) {\n el.style[prop] = value;\n }\n }; // Remove an style property from an element\n\n var removeStyle = function removeStyle(el, prop) {\n if (prop && isElement(el)) {\n el.style[prop] = '';\n }\n }; // Get an style property value from an element\n // Returns `null` if not found\n\n var getStyle = function getStyle(el, prop) {\n return prop && isElement(el) ? el.style[prop] || null : 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 var getComputedStyle = WINDOW.getComputedStyle;\n return getComputedStyle && isElement(el) ? 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 var getSelection = WINDOW.getSelection;\n return getSelection ? WINDOW.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$1 = 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$1(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$1(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 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 VueProto = Vue__default['default'].prototype; // --- Getter methods ---\n\n var getConfigValue = function getConfigValue(key) {\n var defaultValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;\n var bvConfig = VueProto[PROP_NAME$2];\n return bvConfig ? bvConfig.getConfigValue(key, defaultValue) : cloneDeep(defaultValue);\n }; // Method to grab a config value for a particular component\n\n var getComponentConfig = function getComponentConfig(key) {\n var propKey = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var defaultValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;\n // Return the particular config value for key if specified,\n // otherwise we return the full config (or an empty object if not found)\n return propKey ? getConfigValue(\"\".concat(key, \".\").concat(propKey), defaultValue) : getConfigValue(key, {});\n }; // Get all breakpoint names\n\n var getBreakpoints = function getBreakpoints() {\n return getConfigValue('breakpoints', DEFAULT_BREAKPOINT);\n }; // Private method for caching breakpoint names\n\n var _getBreakpointsCached = memoize(function () {\n return getBreakpoints();\n }); // Get all breakpoint names (cached)\n\n\n var getBreakpointsCached = function getBreakpointsCached() {\n return cloneDeep(_getBreakpointsCached());\n }; // Get breakpoints with the smallest breakpoint set as ''\n // Useful for components that create breakpoint specific props\n\n var getBreakpointsUpCached = memoize(function () {\n var breakpoints = getBreakpointsCached();\n breakpoints[0] = '';\n return breakpoints;\n }); // Get breakpoints with the largest breakpoint set as ''\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, value) {\n return value + (suffix ? upperFirst(suffix) : '');\n }; // Generates a prop object\n\n var makeProp = function makeProp() {\n var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : PROP_TYPE_ANY;\n var value = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;\n var requiredOrValidator = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;\n var validator = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : undefined;\n var required = requiredOrValidator === true;\n validator = required ? validator : requiredOrValidator;\n return _objectSpread2$3(_objectSpread2$3(_objectSpread2$3({}, type ? {\n type: type\n } : {}), required ? {\n required: required\n } : isUndefined(value) ? {} : {\n default: isObject(value) ? function () {\n return value;\n } : value\n }), isUndefined(validator) ? {} : {\n validator: validator\n });\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 }; // Make a prop object configurable by global configuration\n // Replaces the current `default` key of each prop with a `getComponentConfig()`\n // call that falls back to the current default value of the prop\n\n var makePropConfigurable = function makePropConfigurable(prop, key, componentKey) {\n return _objectSpread2$3(_objectSpread2$3({}, cloneDeep(prop)), {}, {\n default: function bvConfigurablePropDefault() {\n var value = getComponentConfig(componentKey, key, prop.default);\n return isFunction$1(value) ? value() : value;\n }\n });\n }; // Make a props object configurable by global configuration\n // Replaces the current `default` key of each prop with a `getComponentConfig()`\n // call that falls back to the current default value of the prop\n\n var makePropsConfigurable = function makePropsConfigurable(props, componentKey) {\n return keys(props).reduce(function (result, key) {\n return _objectSpread2$3(_objectSpread2$3({}, result), {}, _defineProperty({}, key, makePropConfigurable(props[key], key, componentKey)));\n }, {});\n }; // Get function name we use in `makePropConfigurable()`\n // for the prop default value override to compare\n // against in `hasPropFunction()`\n\n var configurablePropDefaultFnName = makePropConfigurable({}, '', '').default.name; // Detect wether the given value is currently a function\n // and isn't the props default function\n\n var hasPropFunction = function hasPropFunction(fn) {\n return isFunction$1(fn) && fn.name && fn.name !== configurablePropDefaultFnName;\n };\n\n var makeModelMixin = function makeModelMixin(prop) {\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref$type = _ref.type,\n type = _ref$type === void 0 ? PROP_TYPE_ANY : _ref$type,\n _ref$defaultValue = _ref.defaultValue,\n defaultValue = _ref$defaultValue === void 0 ? undefined : _ref$defaultValue,\n _ref$validator = _ref.validator,\n validator = _ref$validator === void 0 ? undefined : _ref$validator,\n _ref$event = _ref.event,\n event = _ref$event === void 0 ? EVENT_NAME_INPUT : _ref$event;\n\n var props = _defineProperty({}, prop, makeProp(type, defaultValue, validator)); // @vue/component\n\n\n var mixin = extend({\n model: {\n prop: prop,\n event: event\n },\n props: props\n });\n return {\n mixin: mixin,\n props: props,\n prop: prop,\n event: event\n };\n };\n\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 (HAS_PASSIVE_EVENT_SUPPORT) {\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, eventName, handler, options) {\n if (el && el.addEventListener) {\n el.addEventListener(eventName, handler, parseEventOptions(options));\n }\n }; // Remove an event listener from an element\n\n var eventOff = function eventOff(el, eventName, handler, options) {\n if (el && el.removeEventListener) {\n el.removeEventListener(eventName, 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 }; // Utility method to prevent the default event handling and propagation\n\n var stopEvent = function stopEvent(event) {\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref$preventDefault = _ref.preventDefault,\n preventDefault = _ref$preventDefault === void 0 ? true : _ref$preventDefault,\n _ref$propagation = _ref.propagation,\n propagation = _ref$propagation === void 0 ? true : _ref$propagation,\n _ref$immediatePropaga = _ref.immediatePropagation,\n immediatePropagation = _ref$immediatePropaga === void 0 ? false : _ref$immediatePropaga;\n\n if (preventDefault) {\n event.preventDefault();\n }\n\n if (propagation) {\n event.stopPropagation();\n }\n\n if (immediatePropagation) {\n event.stopImmediatePropagation();\n }\n }; // Helper method to convert a component/directive name to a base event name\n // `getBaseEventName('BNavigationItem')` => 'navigation-item'\n // `getBaseEventName('BVToggle')` => 'toggle'\n\n var getBaseEventName = function getBaseEventName(value) {\n return kebabCase(value.replace(RX_BV_PREFIX, ''));\n }; // Get a root event name by component/directive and event name\n // `getBaseEventName('BModal', 'show')` => 'bv::modal::show'\n\n\n var getRootEventName = function getRootEventName(name, eventName) {\n return [ROOT_EVENT_NAME_PREFIX, getBaseEventName(name), eventName].join(ROOT_EVENT_NAME_SEPARATOR);\n }; // Get a root action event name by component/directive and action name\n // `getRootActionEventName('BModal', 'show')` => 'bv::show::modal'\n\n var getRootActionEventName = function getRootActionEventName(name, actionName) {\n return [ROOT_EVENT_NAME_PREFIX, actionName, getBaseEventName(name)].join(ROOT_EVENT_NAME_SEPARATOR);\n };\n\n var props$2l = makePropsConfigurable({\n ariaLabel: makeProp(PROP_TYPE_STRING, 'Close'),\n content: makeProp(PROP_TYPE_STRING, '&times;'),\n disabled: makeProp(PROP_TYPE_BOOLEAN, false),\n textVariant: makeProp(PROP_TYPE_STRING)\n }, NAME_BUTTON_CLOSE); // --- Main component ---\n // @vue/component\n\n var BButtonClose = /*#__PURE__*/extend({\n name: NAME_BUTTON_CLOSE,\n functional: true,\n props: props$2l,\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(event) {\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(event)) {\n stopEvent(event);\n }\n }\n }\n }; // Careful not to override the default slot with innerHTML\n\n if (!hasNormalizedSlot(SLOT_NAME_DEFAULT, $scopedSlots, $slots)) {\n componentData.domProps = {\n innerHTML: props.content\n };\n }\n\n return h('button', a(data, componentData), normalizeSlot(SLOT_NAME_DEFAULT, {}, $scopedSlots, $slots));\n }\n });\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$3(_objectSpread2$3({}, NO_FADE_PROPS), {}, {\n enterActiveClass: 'fade',\n leaveActiveClass: 'fade'\n }); // --- Props ---\n\n\n var props$2k = {\n // Has no effect if `trans-props` provided\n appear: makeProp(PROP_TYPE_BOOLEAN, false),\n // Can be overridden by user supplied `trans-props`\n mode: makeProp(PROP_TYPE_STRING),\n // Only applicable to the built in transition\n // Has no effect if `trans-props` provided\n noFade: makeProp(PROP_TYPE_BOOLEAN, false),\n // For user supplied transitions (if needed)\n transProps: makeProp(PROP_TYPE_OBJECT)\n }; // --- Main component ---\n // @vue/component\n\n var BVTransition = /*#__PURE__*/extend({\n name: NAME_TRANSITION,\n functional: true,\n props: props$2k,\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$3(_objectSpread2$3({}, transProps), {}, {\n appear: true,\n appearClass: transProps.enterClass,\n appearActiveClass: transProps.enterActiveClass,\n appearToClass: transProps.enterToClass\n });\n }\n }\n\n transProps = _objectSpread2$3(_objectSpread2$3({\n mode: props.mode\n }, transProps), {}, {\n // We always need `css` true\n css: true\n });\n\n var dataCopy = _objectSpread2$3({}, data);\n\n delete dataCopy.props;\n return h('transition', // Any transition event listeners will get merged here\n a(dataCopy, {\n props: transProps\n }), children);\n }\n });\n\n var _watch$k;\n\n var _makeModelMixin$k = makeModelMixin('show', {\n type: PROP_TYPE_BOOLEAN_NUMBER_STRING,\n defaultValue: false\n }),\n modelMixin$j = _makeModelMixin$k.mixin,\n modelProps$j = _makeModelMixin$k.props,\n MODEL_PROP_NAME$j = _makeModelMixin$k.prop,\n MODEL_EVENT_NAME$j = _makeModelMixin$k.event; // --- Helper methods ---\n // Convert `show` value to a number\n\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 }; // --- Props ---\n\n\n var props$2j = makePropsConfigurable(sortKeys(_objectSpread2$3(_objectSpread2$3({}, modelProps$j), {}, {\n dismissLabel: makeProp(PROP_TYPE_STRING, 'Close'),\n dismissible: makeProp(PROP_TYPE_BOOLEAN, false),\n fade: makeProp(PROP_TYPE_BOOLEAN, false),\n variant: makeProp(PROP_TYPE_STRING, 'info')\n })), NAME_ALERT); // --- Main component ---\n // @vue/component\n\n var BAlert = /*#__PURE__*/extend({\n name: NAME_ALERT,\n mixins: [modelMixin$j, normalizeSlotMixin],\n props: props$2j,\n data: function data() {\n return {\n countDown: 0,\n // If initially shown, we need to set these for SSR\n localShow: parseShow(this[MODEL_PROP_NAME$j])\n };\n },\n watch: (_watch$k = {}, _defineProperty(_watch$k, MODEL_PROP_NAME$j, function (newValue) {\n this.countDown = parseCountDown(newValue);\n this.localShow = parseShow(newValue);\n }), _defineProperty(_watch$k, \"countDown\", function countDown(newValue) {\n var _this = this;\n\n this.clearCountDownInterval();\n var show = this[MODEL_PROP_NAME$j]; // Ignore if `show` transitions to a boolean value\n\n if (isNumeric$1(show)) {\n this.$emit(EVENT_NAME_DISMISS_COUNT_DOWN, newValue); // Update the v-model if needed\n\n if (show !== newValue) {\n this.$emit(MODEL_EVENT_NAME$j, newValue);\n }\n\n if (newValue > 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 }), _defineProperty(_watch$k, \"localShow\", function localShow(newValue) {\n var show = this[MODEL_PROP_NAME$j]; // Only emit dismissed events for dismissible or auto-dismissing alerts\n\n if (!newValue && (this.dismissible || isNumeric$1(show))) {\n this.$emit(EVENT_NAME_DISMISSED);\n } // Only emit booleans if we weren't passed a number via v-model\n\n\n if (!isNumeric$1(show) && show !== newValue) {\n this.$emit(MODEL_EVENT_NAME$j, newValue);\n }\n }), _watch$k),\n created: function created() {\n // Create private non-reactive props\n this.$_filterTimer = null;\n var show = this[MODEL_PROP_NAME$j];\n this.countDown = parseCountDown(show);\n this.localShow = parseShow(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 clearTimeout(this.$_countDownTimeout);\n this.$_countDownTimeout = null;\n }\n },\n render: function render(h) {\n var $alert = h();\n\n if (this.localShow) {\n var dismissible = this.dismissible,\n variant = this.variant;\n var $dismissButton = h();\n\n if (dismissible) {\n // Add dismiss button\n $dismissButton = h(BButtonClose, {\n attrs: {\n 'aria-label': this.dismissLabel\n },\n on: {\n click: this.dismiss\n }\n }, [this.normalizeSlot(SLOT_NAME_DISMISS)]);\n }\n\n $alert = h('div', {\n staticClass: 'alert',\n class: _defineProperty({\n 'alert-dismissible': dismissible\n }, \"alert-\".concat(variant), variant),\n attrs: {\n role: 'alert',\n 'aria-live': 'polite',\n 'aria-atomic': true\n },\n key: this[COMPONENT_UID_KEY]\n }, [$dismissButton, this.normalizeSlot()]);\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 CLASS_NAME$3 = 'b-aspect'; // --- Props ---\n\n var props$2i = makePropsConfigurable({\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 aspect: makeProp(PROP_TYPE_NUMBER_STRING, '1:1'),\n tag: makeProp(PROP_TYPE_STRING, 'div')\n }, NAME_ASPECT); // --- Main component ---\n // @vue/component\n\n var BAspect = /*#__PURE__*/extend({\n name: NAME_ASPECT,\n mixins: [normalizeSlotMixin],\n props: props$2i,\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_ASPECT_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$3, \"-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$3, \"-content flex-grow-1 w-100 mw-100\"),\n style: {\n marginLeft: '-100%'\n }\n }, this.normalizeSlot());\n return h(this.tag, {\n staticClass: \"\".concat(CLASS_NAME$3, \" d-flex\")\n }, [$sizer, $content]);\n }\n });\n\n var AspectPlugin = /*#__PURE__*/pluginFactory({\n components: {\n BAspect: BAspect\n }\n });\n\n function safeVueInstance(target) {\n if (!isVue3) {\n return target;\n }\n\n return new Proxy(target, {\n get: function get(target, prop) {\n return prop in target ? target[prop] : undefined;\n }\n });\n }\n\n var ANCHOR_TAG = 'a'; // 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(str)).replace(RX_ENCODE_REVERSE, encodeReserveReplacer).replace(RX_ENCODED_COMMA, ',');\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 value = obj[key];\n\n if (isUndefined(value)) {\n return '';\n } else if (isNull(value)) {\n return encode(key);\n } else if (isArray(value)) {\n return value.reduce(function (results, value2) {\n if (isNull(value2)) {\n results.push(encode(key));\n } else if (!isUndefined(value2)) {\n // Faster than string interpolation\n results.push(encode(key) + '=' + encode(value2));\n }\n\n return results;\n }, []).join('&');\n } // Faster than string interpolation\n\n\n return encode(key) + '=' + encode(value);\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(query).trim().replace(RX_QUERY_START, '');\n\n if (!query) {\n return parsed;\n }\n\n query.split('&').forEach(function (param) {\n var parts = param.replace(RX_PLUS, ' ').split('=');\n var key = decode(parts.shift());\n var value = parts.length > 0 ? decode(parts.join('=')) : null;\n\n if (isUndefined(parsed[key])) {\n parsed[key] = value;\n } else if (isArray(parsed[key])) {\n parsed[key].push(value);\n } else {\n parsed[key] = [parsed[key], value];\n }\n });\n return parsed;\n };\n var isLink$1 = function isLink(props) {\n return !!(props.href || props.to);\n };\n var isRouterLink = function isRouterLink(tag) {\n return !!(tag && !isTag(tag, 'a'));\n };\n var computeTag = function computeTag(_ref, thisOrParent) {\n var to = _ref.to,\n disabled = _ref.disabled,\n routerComponentName = _ref.routerComponentName;\n var hasRouter = !!safeVueInstance(thisOrParent).$router;\n var hasNuxt = !!safeVueInstance(thisOrParent).$nuxt;\n\n if (!hasRouter || hasRouter && (disabled || !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 || (hasNuxt ? '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 return target === '_blank' && isNull(rel) ? 'noopener' : 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 // Return `href` when explicitly provided\n if (href) {\n return href;\n } // We've checked for `$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\n\n if (isRouterLink(tag)) {\n return null;\n } // Fallback to `to` prop (if `to` is a string)\n\n\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(to.path);\n var query = stringifyQueryObj(to.query);\n var hash = toString(to.hash);\n hash = !hash || hash.charAt(0) === '#' ? hash : \"#\".concat(hash);\n return \"\".concat(path).concat(query).concat(hash) || toFallback;\n } // If nothing is provided return the fallback\n\n\n return fallback;\n };\n\n // Base attributes needed on all icons\n\n var BASE_ATTRS = {\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 STACKED_ATTRS = {\n width: null,\n height: null,\n focusable: null,\n role: null,\n 'aria-label': null\n }; // --- Props ---\n\n var props$2h = {\n animation: makeProp(PROP_TYPE_STRING),\n content: makeProp(PROP_TYPE_STRING),\n flipH: makeProp(PROP_TYPE_BOOLEAN, false),\n flipV: makeProp(PROP_TYPE_BOOLEAN, false),\n fontScale: makeProp(PROP_TYPE_NUMBER_STRING, 1),\n rotate: makeProp(PROP_TYPE_NUMBER_STRING, 0),\n scale: makeProp(PROP_TYPE_NUMBER_STRING, 1),\n shiftH: makeProp(PROP_TYPE_NUMBER_STRING, 0),\n shiftV: makeProp(PROP_TYPE_NUMBER_STRING, 0),\n stacked: makeProp(PROP_TYPE_BOOLEAN, false),\n title: makeProp(PROP_TYPE_STRING),\n variant: makeProp(PROP_TYPE_STRING)\n }; // --- Main component ---\n // Shared private base component to reduce bundle/runtime size\n // @vue/component\n\n var BVIconBase = /*#__PURE__*/extend({\n name: NAME_ICON_BASE,\n functional: true,\n props: props$2h,\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 animation = props.animation,\n content = props.content,\n flipH = props.flipH,\n flipV = props.flipV,\n stacked = props.stacked,\n title = props.title,\n variant = props.variant;\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); // 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 hasContent = !isUndefinedOrNull(content);\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); // 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: 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 } // Wrap in an additional `<g>` for proper animation handling if stacked\n\n\n if (stacked) {\n $inner = h('g', [$inner]);\n }\n\n var $title = title ? h('title', title) : null;\n var $content = [$title, $inner].filter(identity);\n return h('svg', a({\n staticClass: 'b-icon bi',\n class: (_class = {}, _defineProperty(_class, \"text-\".concat(variant), variant), _defineProperty(_class, \"b-icon-animation-\".concat(animation), animation), _class),\n attrs: BASE_ATTRS,\n style: stacked ? {} : {\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 stacked ? {\n attrs: STACKED_ATTRS\n } : {}, // These cannot be overridden by users\n {\n attrs: {\n xmlns: stacked ? null : 'http://www.w3.org/2000/svg',\n fill: 'currentColor'\n }\n }), $content);\n }\n });\n\n var iconProps$1 = omit(props$2h, ['content']);\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 iconTitle = kebabName.replace(/-/g, ' ');\n var svgContent = trim(content || '');\n return /*#__PURE__*/extend({\n name: iconName,\n functional: true,\n props: iconProps$1,\n render: function render(h, _ref) {\n var data = _ref.data,\n props = _ref.props;\n return h(BVIconBase, a( // Defaults\n {\n props: {\n title: iconTitle\n },\n attrs: {\n 'aria-label': iconTitle\n }\n }, // User data\n data, // Required data\n {\n staticClass: iconNameClass,\n props: _objectSpread2$3(_objectSpread2$3({}, props), {}, {\n content: svgContent\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 d=\"M3.5 0a.5.5 0 0 1 .5.5V1h8V.5a.5.5 0 0 1 1 0V1h1a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V3a2 2 0 0 1 2-2h1V.5a.5.5 0 0 1 .5-.5zM1 4v10a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V4H1z\"/>');// eslint-disable-next-line\n var BIconCalendarFill=/*#__PURE__*/makeIcon('CalendarFill','<path d=\"M3.5 0a.5.5 0 0 1 .5.5V1h8V.5a.5.5 0 0 1 1 0V1h1a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V5h16V4H0V3a2 2 0 0 1 2-2h1V.5a.5.5 0 0 1 .5-.5z\"/>');// 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 d=\"M8 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\"/><path d=\"M8 16A8 8 0 1 0 8 0a8 8 0 0 0 0 16zm7-8A7 7 0 1 1 1 8a7 7 0 0 1 14 0z\"/>');// eslint-disable-next-line\n var BIconClockFill=/*#__PURE__*/makeIcon('ClockFill','<path 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 d=\"M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8z\"/>');// eslint-disable-next-line\n var BIconPersonFill=/*#__PURE__*/makeIcon('PersonFill','<path 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 d=\"M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z\"/>');// eslint-disable-next-line\n var BIconStar=/*#__PURE__*/makeIcon('Star','<path 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.522-3.356c.33-.314.16-.888-.282-.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.767-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-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 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.282.95l-3.522 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 d=\"M5.354 5.119 7.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.548.548 0 0 1-.17.445l-3.523 3.356.83 4.73c.078.443-.36.79-.746.592L8 13.187l-4.389 2.256a.52.52 0 0 1-.146.05c-.342.06-.668-.254-.6-.642l.83-4.73L.173 6.765a.55.55 0 0 1-.172-.403.58.58 0 0 1 .085-.302.513.513 0 0 1 .37-.245l4.898-.696zM8 12.027a.5.5 0 0 1 .232.056l3.686 1.894-.694-3.957a.565.565 0 0 1 .162-.505l2.907-2.77-4.052-.576a.525.525 0 0 1-.393-.288L8.001 2.223 8 2.226v9.8z\"/>');// eslint-disable-next-line\n var BIconX=/*#__PURE__*/makeIcon('X','<path d=\"M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708z\"/>');// eslint-disable-next-line\n // --- END AUTO-GENERATED FILE ---\n\n var findIconComponent = function findIconComponent(ctx, iconName) {\n if (!ctx) {\n return Vue__default['default'].component(iconName);\n }\n\n var components = (ctx.$options || {}).components;\n var iconComponent = components && components[iconName];\n return iconComponent || findIconComponent(ctx.$parent, iconName);\n }; // --- Props ---\n\n\n var iconProps = omit(props$2h, ['content']);\n var props$2g = makePropsConfigurable(sortKeys(_objectSpread2$3(_objectSpread2$3({}, iconProps), {}, {\n icon: makeProp(PROP_TYPE_STRING)\n })), NAME_ICON); // --- Main component ---\n // Helper BIcon component\n // Requires the requested icon component to be installed\n // @vue/component\n\n var BIcon = /*#__PURE__*/extend({\n name: NAME_ICON,\n functional: true,\n props: props$2g,\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, ''); // 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 return h(icon ? findIconComponent(parent, \"BIcon\".concat(icon)) || BIconBlank : BIconBlank, a(data, {\n props: pluckProps(iconProps, props)\n }));\n }\n });\n\n var CODE_BACKSPACE = 8;\n var CODE_DELETE = 46;\n var CODE_DOWN = 40;\n var CODE_END = 35;\n var CODE_ENTER = 13;\n var CODE_ESC = 27;\n var CODE_HOME = 36;\n var CODE_LEFT = 37;\n var CODE_PAGEDOWN = 34;\n var CODE_PAGEUP = 33;\n var CODE_RIGHT = 39;\n var CODE_SPACE = 32;\n var CODE_UP = 38;\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 var isEmpty = function isEmpty(value) {\n return !value || keys(value).length === 0;\n };\n\n var makePropWatcher = function makePropWatcher(propName) {\n return {\n handler: function handler(newValue, oldValue) {\n if (looseEqual(newValue, oldValue)) {\n return;\n }\n\n if (isEmpty(newValue) || isEmpty(oldValue)) {\n this[propName] = cloneDeep(newValue);\n return;\n }\n\n for (var key in oldValue) {\n if (!hasOwnProperty(newValue, key)) {\n this.$delete(this.$data[propName], key);\n }\n }\n\n for (var _key in newValue) {\n this.$set(this.$data[propName], _key, newValue[_key]);\n }\n }\n };\n };\n var makePropCacheMixin = function makePropCacheMixin(propName, proxyPropName) {\n return extend({\n data: function data() {\n return _defineProperty({}, proxyPropName, cloneDeep(this[propName]));\n },\n watch: _defineProperty({}, propName, makePropWatcher(proxyPropName))\n });\n };\n\n var attrsMixinVue2 = makePropCacheMixin('$attrs', 'bvAttrs');\n var attrsMixinVue3 = extend({\n computed: {\n bvAttrs: function bvAttrs() {\n var bvAttrs = _objectSpread2$3({}, this.$attrs);\n\n Object.keys(bvAttrs).forEach(function (key) {\n if (bvAttrs[key] === undefined) {\n delete bvAttrs[key];\n }\n });\n return bvAttrs;\n }\n }\n });\n var attrsMixin = isVue3 ? attrsMixinVue3 : attrsMixinVue2;\n\n var getEventRoot = function getEventRoot(vm) {\n return vm.$root.$options.bvEventRoot || vm.$root;\n };\n\n var PROP$3 = '$_rootListeners'; // --- Mixin ---\n // @vue/component\n\n var listenOnRootMixin = extend({\n computed: {\n bvEventRoot: function bvEventRoot() {\n return getEventRoot(this);\n }\n },\n created: function created() {\n // Define non-reactive property\n // Object of arrays, keyed by event name,\n // where value is an array of callbacks\n this[PROP$3] = {};\n },\n beforeDestroy: function beforeDestroy() {\n var _this = this;\n\n // Unregister all registered listeners\n keys(this[PROP$3] || {}).forEach(function (event) {\n _this[PROP$3][event].forEach(function (callback) {\n _this.listenOffRoot(event, callback);\n });\n });\n this[PROP$3] = null;\n },\n methods: {\n registerRootListener: function registerRootListener(event, callback) {\n if (this[PROP$3]) {\n this[PROP$3][event] = this[PROP$3][event] || [];\n\n if (!arrayIncludes(this[PROP$3][event], callback)) {\n this[PROP$3][event].push(callback);\n }\n }\n },\n unregisterRootListener: function unregisterRootListener(event, callback) {\n if (this[PROP$3] && this[PROP$3][event]) {\n this[PROP$3][event] = this[PROP$3][event].filter(function (cb) {\n return cb !== callback;\n });\n }\n },\n\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, but the `$root`\n * does not clear the callback\n *\n * When registering a `$root` listener, it also registers the listener\n * to be removed in the component's `beforeDestroy()` hook\n *\n * @param {string} event\n * @param {function} callback\n */\n listenOnRoot: function listenOnRoot(event, callback) {\n if (this.bvEventRoot) {\n this.bvEventRoot.$on(event, callback);\n this.registerRootListener(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, but the `$root`\n * does not clear the callback\n *\n * When registering a `$root` listener, it also registers the listener\n * to be removed in the component's `beforeDestroy()` hook\n *\n * @param {string} event\n * @param {function} callback\n */\n listenOnRootOnce: function listenOnRootOnce(event, callback) {\n var _this2 = this;\n\n if (this.bvEventRoot) {\n var _callback = function _callback() {\n _this2.unregisterRootListener(_callback); // eslint-disable-next-line node/no-callback-literal\n\n\n callback.apply(void 0, arguments);\n };\n\n this.bvEventRoot.$once(event, _callback);\n this.registerRootListener(event, _callback);\n }\n },\n\n /**\n * Safely unregister event listeners from the root Vue node\n *\n * @param {string} event\n * @param {function} callback\n */\n listenOffRoot: function listenOffRoot(event, callback) {\n this.unregisterRootListener(event, callback);\n\n if (this.bvEventRoot) {\n this.bvEventRoot.$off(event, callback);\n }\n },\n\n /**\n * Convenience method for calling `vm.$emit()` on `$root`\n *\n * @param {string} event\n * @param {*} args\n */\n emitOnRoot: function emitOnRoot(event) {\n if (this.bvEventRoot) {\n var _this$bvEventRoot;\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$bvEventRoot = this.bvEventRoot).$emit.apply(_this$bvEventRoot, [event].concat(args));\n }\n }\n }\n });\n\n var listenersMixinVue2 = makePropCacheMixin('$listeners', 'bvListeners');\n var listenersMixinVue3 = extend({\n data: function data() {\n return {\n bvListeners: {}\n };\n },\n created: function created() {\n this.bvListeners = _objectSpread2$3({}, this.$listeners);\n },\n beforeUpdate: function beforeUpdate() {\n this.bvListeners = _objectSpread2$3({}, this.$listeners);\n }\n });\n var listenersMixin = isVue3 ? listenersMixinVue3 : listenersMixinVue2;\n\n var ROOT_EVENT_NAME_CLICKED = getRootEventName(NAME_LINK, 'clicked'); // --- Props ---\n // `<router-link>` specific props\n\n var routerLinkProps = {\n activeClass: makeProp(PROP_TYPE_STRING),\n append: makeProp(PROP_TYPE_BOOLEAN, false),\n event: makeProp(PROP_TYPE_ARRAY_STRING),\n exact: makeProp(PROP_TYPE_BOOLEAN, false),\n exactActiveClass: makeProp(PROP_TYPE_STRING),\n exactPath: makeProp(PROP_TYPE_BOOLEAN, false),\n exactPathActiveClass: makeProp(PROP_TYPE_STRING),\n replace: makeProp(PROP_TYPE_BOOLEAN, false),\n routerTag: makeProp(PROP_TYPE_STRING),\n to: makeProp(PROP_TYPE_OBJECT_STRING)\n }; // `<nuxt-link>` specific props\n\n var nuxtLinkProps = {\n noPrefetch: makeProp(PROP_TYPE_BOOLEAN, false),\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\n // Vue treats `undefined` as default of `false` for Boolean props,\n // so we must set it as `null` here to be a true tri-state prop\n prefetch: makeProp(PROP_TYPE_BOOLEAN, null)\n }; // All `<b-link>` props\n\n var props$2f = makePropsConfigurable(sortKeys(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3({}, nuxtLinkProps), routerLinkProps), {}, {\n active: makeProp(PROP_TYPE_BOOLEAN, false),\n disabled: makeProp(PROP_TYPE_BOOLEAN, false),\n href: makeProp(PROP_TYPE_STRING),\n // Must be `null` if no value provided\n rel: makeProp(PROP_TYPE_STRING, null),\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: makeProp(PROP_TYPE_STRING),\n target: makeProp(PROP_TYPE_STRING, '_self')\n })), NAME_LINK); // --- Main component ---\n // @vue/component\n\n var BLink = /*#__PURE__*/extend({\n name: NAME_LINK,\n // Mixin order is important!\n mixins: [attrsMixin, listenersMixin, listenOnRootMixin, normalizeSlotMixin],\n inheritAttrs: false,\n props: props$2f,\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 var target = this.target,\n rel = this.rel;\n return computeRel({\n target: target,\n rel: 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 var to = this.to,\n href = this.href;\n return computeHref({\n to: to,\n href: href\n }, this.computedTag);\n },\n computedProps: function computedProps() {\n var event = this.event,\n prefetch = this.prefetch,\n routerTag = this.routerTag;\n return this.isRouterLink ? _objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3({}, pluckProps(omit(_objectSpread2$3(_objectSpread2$3({}, routerLinkProps), this.computedTag === 'nuxt-link' ? nuxtLinkProps : {}), ['event', 'prefetch', 'routerTag']), this)), event ? {\n event: event\n } : {}), isBoolean(prefetch) ? {\n prefetch: prefetch\n } : {}), routerTag ? {\n tag: 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$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3({}, bvAttrs), href ? {\n href: href\n } : {}), isRouterLink && routerTag && !isTag(routerTag, 'a') ? {} : {\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$3(_objectSpread2$3({}, 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(event) {\n var _arguments = arguments;\n var eventIsEvent = isEvent(event);\n var isRouterLink = this.isRouterLink;\n var suppliedHandler = this.bvListeners.click;\n\n if (eventIsEvent && this.disabled) {\n // Stop event from bubbling up\n // Kill the event loop attached to this specific `EventTarget`\n // Needed to prevent `vue-router` for doing its thing\n stopEvent(event, {\n immediatePropagation: true\n });\n } else {\n // Router links do not emit instance `click` events, so we\n // add in an `$emit('click', event)` on its Vue instance\n //\n // seems not to be required for Vue3 compat build\n\n /* istanbul ignore next: difficult to test, but we know it works */\n if (isRouterLink) {\n var _event$currentTarget$;\n\n (_event$currentTarget$ = event.currentTarget.__vue__) === null || _event$currentTarget$ === void 0 ? void 0 : _event$currentTarget$.$emit(EVENT_NAME_CLICK, event);\n } // Call the suppliedHandler(s), if any provided\n\n\n concat(suppliedHandler).filter(function (h) {\n return isFunction$1(h);\n }).forEach(function (handler) {\n handler.apply(void 0, _toConsumableArray$1(_arguments));\n }); // Emit the global `$root` click event\n\n this.emitOnRoot(ROOT_EVENT_NAME_CLICKED, event); // TODO: Remove deprecated 'clicked::link' event with next major release\n\n this.emitOnRoot('clicked::link', event);\n } // Stop scroll-to-top behavior or navigation on\n // regular links when href is just '#'\n\n\n if (eventIsEvent && !isRouterLink && this.computedHref === '#') {\n stopEvent(event, {\n propagation: false\n });\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());\n }\n });\n\n var linkProps$7 = omit(props$2f, ['event', 'routerTag']);\n delete linkProps$7.href.default;\n delete linkProps$7.to.default;\n var props$2e = makePropsConfigurable(sortKeys(_objectSpread2$3(_objectSpread2$3({}, linkProps$7), {}, {\n block: makeProp(PROP_TYPE_BOOLEAN, false),\n disabled: makeProp(PROP_TYPE_BOOLEAN, false),\n pill: makeProp(PROP_TYPE_BOOLEAN, false),\n // Tri-state: `true`, `false` or `null`\n // => On, off, not a toggle\n pressed: makeProp(PROP_TYPE_BOOLEAN, null),\n size: makeProp(PROP_TYPE_STRING),\n squared: makeProp(PROP_TYPE_BOOLEAN, false),\n tag: makeProp(PROP_TYPE_STRING, 'button'),\n type: makeProp(PROP_TYPE_STRING, 'button'),\n variant: makeProp(PROP_TYPE_STRING, 'secondary')\n })), NAME_BUTTON); // --- Helper methods ---\n // Focus handler for toggle buttons\n // Needs class of 'focus' when focused\n\n var handleFocus = function handleFocus(event) {\n if (event.type === 'focusin') {\n addClass(event.target, 'focus');\n } else if (event.type === 'focusout') {\n removeClass(event.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 = function isLink(props) {\n return isLink$1(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(props) || props.tag && !isTag(props.tag, 'button'));\n }; // Is the requested tag not a button or link?\n\n\n var isNonStandardTag$1 = function isNonStandardTag(props) {\n return !isLink(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 || 'secondary'), (_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(props) ? pluckProps(linkProps$7, 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(props);\n var toggle = isToggle(props);\n var nonStandardTag = isNonStandardTag$1(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__*/extend({\n name: NAME_BUTTON,\n functional: true,\n props: props$2e,\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(props);\n var nonStandardTag = isNonStandardTag$1(props);\n var hashLink = link && props.href === '#';\n var on = {\n keydown: function keydown(event) {\n // When the link is a `href=\"#\"` or a non-standard tag (has `role=\"button\"`),\n // we add a keydown handlers for CODE_SPACE/CODE_ENTER\n\n /* istanbul ignore next */\n if (props.disabled || !(nonStandardTag || hashLink)) {\n return;\n }\n\n var keyCode = event.keyCode; // Add CODE_SPACE handler for `href=\"#\"` and CODE_ENTER handler for non-standard tags\n\n if (keyCode === CODE_SPACE || keyCode === CODE_ENTER && nonStandardTag) {\n var target = event.currentTarget || event.target;\n stopEvent(event, {\n propagation: false\n });\n target.click();\n }\n },\n click: function click(event) {\n /* istanbul ignore if: blink/button disabled should handle this */\n if (props.disabled && isEvent(event)) {\n stopEvent(event);\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$1(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(_objectSpread2$3(_objectSpread2$3({}, data), {}, {\n props: undefined\n }), componentData), children);\n }\n });\n\n var CLASS_NAME$2 = 'b-avatar';\n var SIZES = ['sm', null, 'lg'];\n var FONT_SIZE_SCALE = 0.4;\n var BADGE_FONT_SIZE_SCALE = FONT_SIZE_SCALE * 0.7; // --- Helper methods ---\n\n var computeSize = function computeSize(value) {\n // Parse to number when value is a float-like string\n value = isString(value) && isNumeric$1(value) ? toFloat(value, 0) : value; // Convert all numbers to pixel values\n\n return isNumber(value) ? \"\".concat(value, \"px\") : value || null;\n }; // --- Props ---\n\n var linkProps$6 = omit(props$2f, ['active', 'event', 'routerTag']);\n var props$2d = makePropsConfigurable(sortKeys(_objectSpread2$3(_objectSpread2$3({}, linkProps$6), {}, {\n alt: makeProp(PROP_TYPE_STRING, 'avatar'),\n ariaLabel: makeProp(PROP_TYPE_STRING),\n badge: makeProp(PROP_TYPE_BOOLEAN_STRING, false),\n badgeLeft: makeProp(PROP_TYPE_BOOLEAN, false),\n badgeOffset: makeProp(PROP_TYPE_STRING),\n badgeTop: makeProp(PROP_TYPE_BOOLEAN, false),\n badgeVariant: makeProp(PROP_TYPE_STRING, 'primary'),\n button: makeProp(PROP_TYPE_BOOLEAN, false),\n buttonType: makeProp(PROP_TYPE_STRING, 'button'),\n icon: makeProp(PROP_TYPE_STRING),\n rounded: makeProp(PROP_TYPE_BOOLEAN_STRING, false),\n size: makeProp(PROP_TYPE_NUMBER_STRING),\n square: makeProp(PROP_TYPE_BOOLEAN, false),\n src: makeProp(PROP_TYPE_STRING),\n text: makeProp(PROP_TYPE_STRING),\n variant: makeProp(PROP_TYPE_STRING, 'secondary')\n })), NAME_AVATAR); // --- Main component ---\n // @vue/component\n\n var BAvatar = /*#__PURE__*/extend({\n name: NAME_AVATAR,\n mixins: [normalizeSlotMixin],\n inject: {\n getBvAvatarGroup: {\n default: function _default() {\n return function () {\n return null;\n };\n }\n }\n },\n props: props$2d,\n data: function data() {\n return {\n localSrc: this.src || null\n };\n },\n computed: {\n bvAvatarGroup: function bvAvatarGroup() {\n return this.getBvAvatarGroup();\n },\n computedSize: function computedSize() {\n // Always use the avatar group size\n var bvAvatarGroup = this.bvAvatarGroup;\n return computeSize(bvAvatarGroup ? bvAvatarGroup.size : this.size);\n },\n computedVariant: function computedVariant() {\n var bvAvatarGroup = this.bvAvatarGroup;\n return bvAvatarGroup && bvAvatarGroup.variant ? bvAvatarGroup.variant : this.variant;\n },\n computedRounded: function computedRounded() {\n var bvAvatarGroup = this.bvAvatarGroup;\n var square = bvAvatarGroup && bvAvatarGroup.square ? true : this.square;\n var rounded = bvAvatarGroup && bvAvatarGroup.rounded ? bvAvatarGroup.rounded : this.rounded;\n return square ? '0' : rounded === '' ? true : rounded || 'circle';\n },\n fontStyle: function fontStyle() {\n var size = this.computedSize;\n var fontSize = SIZES.indexOf(size) === -1 ? \"calc(\".concat(size, \" * \").concat(FONT_SIZE_SCALE, \")\") : null;\n return fontSize ? {\n fontSize: fontSize\n } : {};\n },\n marginStyle: function marginStyle() {\n var size = this.computedSize,\n bvAvatarGroup = this.bvAvatarGroup;\n var overlapScale = bvAvatarGroup ? bvAvatarGroup.overlapScale : 0;\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: SIZES.indexOf(size) === -1 ? \"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(newValue, oldValue) {\n if (newValue !== oldValue) {\n this.localSrc = newValue || null;\n }\n }\n },\n methods: {\n onImgError: function onImgError(event) {\n this.localSrc = null;\n this.$emit(EVENT_NAME_IMG_ERROR, event);\n },\n onClick: function onClick(event) {\n this.$emit(EVENT_NAME_CLICK, event);\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$1(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()) {\n // Default slot overrides props\n $content = h('span', {\n staticClass: 'b-avatar-custom'\n }, [this.normalizeSlot()]);\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(SLOT_NAME_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(SLOT_NAME_BADGE) : badgeText]);\n }\n\n var componentData = {\n staticClass: CLASS_NAME$2,\n class: (_class2 = {}, _defineProperty(_class2, \"\".concat(CLASS_NAME$2, \"-\").concat(size), size && SIZES.indexOf(size) !== -1), _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$3(_objectSpread2$3({}, marginStyle), {}, {\n width: size,\n height: size\n }),\n attrs: {\n 'aria-label': ariaLabel || null\n },\n props: button ? {\n variant: variant,\n disabled: disabled,\n type: type\n } : link ? pluckProps(linkProps$6, this) : {},\n on: button || link ? {\n click: this.onClick\n } : {}\n };\n return h(tag, componentData, [$content, $badge]);\n }\n });\n\n var props$2c = makePropsConfigurable({\n overlap: makeProp(PROP_TYPE_NUMBER_STRING, 0.3),\n // Child avatars will prefer this prop (if set) over their own\n rounded: makeProp(PROP_TYPE_BOOLEAN_STRING, false),\n // Child avatars will always use this over their own size\n size: makeProp(PROP_TYPE_STRING),\n // Child avatars will prefer this prop (if set) over their own\n square: makeProp(PROP_TYPE_BOOLEAN, false),\n tag: makeProp(PROP_TYPE_STRING, 'div'),\n // Child avatars will prefer this variant over their own\n variant: makeProp(PROP_TYPE_STRING)\n }, NAME_AVATAR_GROUP); // --- Main component ---\n // @vue/component\n\n var BAvatarGroup = /*#__PURE__*/extend({\n name: NAME_AVATAR_GROUP,\n mixins: [normalizeSlotMixin],\n provide: function provide() {\n var _this = this;\n\n return {\n getBvAvatarGroup: function getBvAvatarGroup() {\n return _this;\n }\n };\n },\n props: props$2c,\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());\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 linkProps$5 = omit(props$2f, ['event', 'routerTag']);\n delete linkProps$5.href.default;\n delete linkProps$5.to.default;\n var props$2b = makePropsConfigurable(sortKeys(_objectSpread2$3(_objectSpread2$3({}, linkProps$5), {}, {\n pill: makeProp(PROP_TYPE_BOOLEAN, false),\n tag: makeProp(PROP_TYPE_STRING, 'span'),\n variant: makeProp(PROP_TYPE_STRING, 'secondary')\n })), NAME_BADGE); // --- Main component ---\n // @vue/component\n\n var BBadge = /*#__PURE__*/extend({\n name: NAME_BADGE,\n functional: true,\n props: props$2b,\n render: function render(h, _ref) {\n var props = _ref.props,\n data = _ref.data,\n children = _ref.children;\n var active = props.active,\n disabled = props.disabled;\n var link = isLink$1(props);\n var tag = link ? BLink : props.tag;\n var variant = props.variant || 'secondary';\n return h(tag, a(data, {\n staticClass: 'badge',\n class: [\"badge-\".concat(variant), {\n 'badge-pill': props.pill,\n active: active,\n disabled: disabled\n }],\n props: link ? pluckProps(linkProps$5, props) : {}\n }), children);\n }\n });\n\n var BadgePlugin = /*#__PURE__*/pluginFactory({\n components: {\n BBadge: BBadge\n }\n });\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$2a = makePropsConfigurable(sortKeys(_objectSpread2$3(_objectSpread2$3({}, omit(props$2f, ['event', 'routerTag'])), {}, {\n ariaCurrent: makeProp(PROP_TYPE_STRING, 'location'),\n html: makeProp(PROP_TYPE_STRING),\n text: makeProp(PROP_TYPE_STRING)\n })), NAME_BREADCRUMB_LINK); // --- Main component ---\n // @vue/component\n\n var BBreadcrumbLink = /*#__PURE__*/extend({\n name: NAME_BREADCRUMB_LINK,\n functional: true,\n props: props$2a,\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$2a, 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 props$29 = makePropsConfigurable(props$2a, NAME_BREADCRUMB_ITEM); // --- Main component ---\n // @vue/component\n\n var BBreadcrumbItem = /*#__PURE__*/extend({\n name: NAME_BREADCRUMB_ITEM,\n functional: true,\n props: props$29,\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$28 = makePropsConfigurable({\n items: makeProp(PROP_TYPE_ARRAY)\n }, NAME_BREADCRUMB); // --- Main component ---\n // @vue/component\n\n var BBreadcrumb = /*#__PURE__*/extend({\n name: NAME_BREADCRUMB,\n functional: true,\n props: props$28,\n render: function render(h, _ref) {\n var props = _ref.props,\n data = _ref.data,\n children = _ref.children;\n var items = props.items; // Build child nodes from items, if given\n\n var childNodes = children;\n\n if (isArray(items)) {\n var activeDefined = false;\n childNodes = items.map(function (item, idx) {\n if (!isObject(item)) {\n item = {\n text: toString(item)\n };\n } // Copy the value here so we can normalize it\n\n\n var _item = item,\n active = _item.active;\n\n if (active) {\n activeDefined = true;\n } // Auto-detect active by position in list\n\n\n if (!active && !activeDefined) {\n active = idx + 1 === items.length;\n }\n\n return h(BBreadcrumbItem, {\n props: _objectSpread2$3(_objectSpread2$3({}, 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 props$27 = makePropsConfigurable(sortKeys(_objectSpread2$3(_objectSpread2$3({}, pick$1(props$2e, ['size'])), {}, {\n ariaRole: makeProp(PROP_TYPE_STRING, 'group'),\n size: makeProp(PROP_TYPE_STRING),\n tag: makeProp(PROP_TYPE_STRING, 'div'),\n vertical: makeProp(PROP_TYPE_BOOLEAN, false)\n })), NAME_BUTTON_GROUP); // --- Main component ---\n // @vue/component\n\n var BButtonGroup = /*#__PURE__*/extend({\n name: NAME_BUTTON_GROUP,\n functional: true,\n props: props$27,\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(','); // --- Props ---\n\n var props$26 = makePropsConfigurable({\n justify: makeProp(PROP_TYPE_BOOLEAN, false),\n keyNav: makeProp(PROP_TYPE_BOOLEAN, false)\n }, NAME_BUTTON_TOOLBAR); // --- Main component ---\n // @vue/component\n\n var BButtonToolbar = /*#__PURE__*/extend({\n name: NAME_BUTTON_TOOLBAR,\n mixins: [normalizeSlotMixin],\n props: props$26,\n mounted: function mounted() {\n // Pre-set the tabindexes if the markup does not include\n // `tabindex=\"-1\"` on the toolbar items\n if (this.keyNav) {\n this.getItems();\n }\n },\n methods: {\n getItems: function getItems() {\n var items = selectAll(ITEM_SELECTOR, this.$el); // Ensure `tabindex=\"-1\"` is set on every item\n\n items.forEach(function (item) {\n item.tabIndex = -1;\n });\n return items.filter(function (el) {\n return isVisible(el);\n });\n },\n focusFirst: function focusFirst() {\n var items = this.getItems();\n attemptFocus(items[0]);\n },\n focusPrev: function focusPrev(event) {\n var items = this.getItems();\n var index = items.indexOf(event.target);\n\n if (index > -1) {\n items = items.slice(0, index).reverse();\n attemptFocus(items[0]);\n }\n },\n focusNext: function focusNext(event) {\n var items = this.getItems();\n var index = items.indexOf(event.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 onFocusin: function onFocusin(event) {\n var $el = this.$el;\n\n if (event.target === $el && !contains($el, event.relatedTarget)) {\n stopEvent(event);\n this.focusFirst(event);\n }\n },\n onKeydown: function onKeydown(event) {\n var keyCode = event.keyCode,\n shiftKey = event.shiftKey;\n\n if (keyCode === CODE_UP || keyCode === CODE_LEFT) {\n stopEvent(event);\n shiftKey ? this.focusFirst(event) : this.focusPrev(event);\n } else if (keyCode === CODE_DOWN || keyCode === CODE_RIGHT) {\n stopEvent(event);\n shiftKey ? this.focusLast(event) : this.focusNext(event);\n }\n }\n },\n render: function render(h) {\n var keyNav = this.keyNav;\n return h('div', {\n staticClass: 'btn-toolbar',\n class: {\n 'justify-content-between': this.justify\n },\n attrs: {\n role: 'toolbar',\n tabindex: keyNav ? '0' : null\n },\n on: keyNav ? {\n focusin: this.onFocusin,\n keydown: this.onKeydown\n } : {}\n }, [this.normalizeSlot()]);\n }\n });\n\n var ButtonToolbarPlugin = /*#__PURE__*/pluginFactory({\n components: {\n BButtonToolbar: BButtonToolbar,\n BBtnToolbar: BButtonToolbar\n }\n });\n\n var CALENDAR_GREGORY = 'gregory';\n var CALENDAR_LONG = 'long';\n var CALENDAR_NARROW = 'narrow';\n var CALENDAR_SHORT = 'short';\n var DATE_FORMAT_2_DIGIT = '2-digit';\n var DATE_FORMAT_NUMERIC = 'numeric';\n\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] : CALENDAR_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 }); // 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(locale).toLowerCase().replace(RX_STRIP_LOCALE_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\n var props$25 = {\n id: makeProp(PROP_TYPE_STRING)\n }; // --- Mixin ---\n // @vue/component\n\n var idMixin = extend({\n props: props$25,\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[COMPONENT_UID_KEY]);\n });\n }\n });\n\n var _watch$j;\n\n var _makeModelMixin$j = makeModelMixin('value', {\n type: PROP_TYPE_DATE_STRING\n }),\n modelMixin$i = _makeModelMixin$j.mixin,\n modelProps$i = _makeModelMixin$j.props,\n MODEL_PROP_NAME$i = _makeModelMixin$j.prop,\n MODEL_EVENT_NAME$i = _makeModelMixin$j.event; // --- Props ---\n\n\n var props$24 = makePropsConfigurable(sortKeys(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3({}, props$25), modelProps$i), {}, {\n ariaControls: makeProp(PROP_TYPE_STRING),\n // Makes calendar the full width of its parent container\n block: makeProp(PROP_TYPE_BOOLEAN, false),\n dateDisabledFn: makeProp(PROP_TYPE_FUNCTION),\n // `Intl.DateTimeFormat` object\n dateFormatOptions: makeProp(PROP_TYPE_OBJECT, {\n year: DATE_FORMAT_NUMERIC,\n month: CALENDAR_LONG,\n day: DATE_FORMAT_NUMERIC,\n weekday: CALENDAR_LONG\n }),\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 dateInfoFn: makeProp(PROP_TYPE_FUNCTION),\n // 'ltr', 'rtl', or `null` (for auto detect)\n direction: makeProp(PROP_TYPE_STRING),\n disabled: makeProp(PROP_TYPE_BOOLEAN, false),\n headerTag: makeProp(PROP_TYPE_STRING, 'header'),\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 hidden: makeProp(PROP_TYPE_BOOLEAN, false),\n // When `true` makes the selected date header `sr-only`\n hideHeader: makeProp(PROP_TYPE_BOOLEAN, false),\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 initialDate: makeProp(PROP_TYPE_DATE_STRING),\n // Labels for buttons and keyboard shortcuts\n labelCalendar: makeProp(PROP_TYPE_STRING, 'Calendar'),\n labelCurrentMonth: makeProp(PROP_TYPE_STRING, 'Current month'),\n labelHelp: makeProp(PROP_TYPE_STRING, 'Use cursor keys to navigate calendar dates'),\n labelNav: makeProp(PROP_TYPE_STRING, 'Calendar navigation'),\n labelNextDecade: makeProp(PROP_TYPE_STRING, 'Next decade'),\n labelNextMonth: makeProp(PROP_TYPE_STRING, 'Next month'),\n labelNextYear: makeProp(PROP_TYPE_STRING, 'Next year'),\n labelNoDateSelected: makeProp(PROP_TYPE_STRING, 'No date selected'),\n labelPrevDecade: makeProp(PROP_TYPE_STRING, 'Previous decade'),\n labelPrevMonth: makeProp(PROP_TYPE_STRING, 'Previous month'),\n labelPrevYear: makeProp(PROP_TYPE_STRING, 'Previous year'),\n labelSelected: makeProp(PROP_TYPE_STRING, 'Selected date'),\n labelToday: makeProp(PROP_TYPE_STRING, 'Today'),\n // Locale(s) to use\n // Default is to use page/browser default setting\n locale: makeProp(PROP_TYPE_ARRAY_STRING),\n max: makeProp(PROP_TYPE_DATE_STRING),\n min: makeProp(PROP_TYPE_DATE_STRING),\n // Variant color to use for the navigation buttons\n navButtonVariant: makeProp(PROP_TYPE_STRING, 'secondary'),\n // Disable highlighting today's date\n noHighlightToday: makeProp(PROP_TYPE_BOOLEAN, false),\n noKeyNav: makeProp(PROP_TYPE_BOOLEAN, false),\n readonly: makeProp(PROP_TYPE_BOOLEAN, false),\n roleDescription: makeProp(PROP_TYPE_STRING),\n // Variant color to use for the selected date\n selectedVariant: makeProp(PROP_TYPE_STRING, 'primary'),\n // When `true` enables the decade navigation buttons\n showDecadeNav: makeProp(PROP_TYPE_BOOLEAN, false),\n // Day of week to start calendar on\n // `0` (Sunday), `1` (Monday), ... `6` (Saturday)\n startWeekday: makeProp(PROP_TYPE_NUMBER_STRING, 0),\n // Variant color to use for today's date (defaults to `selectedVariant`)\n todayVariant: makeProp(PROP_TYPE_STRING),\n // Always return the `v-model` value as a date object\n valueAsDate: makeProp(PROP_TYPE_BOOLEAN, false),\n // Format of the weekday names at the top of the calendar\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 weekdayHeaderFormat: makeProp(PROP_TYPE_STRING, CALENDAR_SHORT, function (value) {\n return arrayIncludes([CALENDAR_LONG, CALENDAR_SHORT, CALENDAR_NARROW], value);\n }),\n // Has no effect if prop `block` is set\n width: makeProp(PROP_TYPE_STRING, '270px')\n })), NAME_CALENDAR); // --- Main component ---\n // @vue/component\n\n var BCalendar = extend({\n name: NAME_CALENDAR,\n // Mixin order is important!\n mixins: [attrsMixin, idMixin, modelMixin$i, normalizeSlotMixin],\n props: props$24,\n data: function data() {\n var selected = formatYMD(this[MODEL_PROP_NAME$i]) || '';\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), CALENDAR_GREGORY);\n },\n computedDateDisabledFn: function computedDateDisabledFn() {\n var dateDisabledFn = this.dateDisabledFn;\n return hasPropFunction(dateDisabledFn) ? dateDisabledFn : function () {\n return false;\n };\n },\n // TODO: Change `dateInfoFn` to handle events and notes as well as classes\n computedDateInfoFn: function computedDateInfoFn() {\n var dateInfoFn = this.dateInfoFn;\n return hasPropFunction(dateInfoFn) ? dateInfoFn : function () {\n return {};\n };\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: CALENDAR_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 !== CALENDAR_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 // We set the time for this date to 12pm to work around\n // date formatting issues in Firefox and Safari\n // See: https://github.com/bootstrap-vue/bootstrap-vue/issues/5818\n return createDate(this.calendarYear, this.calendarMonth, 1, 12);\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 computedNavButtonVariant: function computedNavButtonVariant() {\n return \"btn-outline-\".concat(this.navButtonVariant || 'primary');\n },\n isRTL: function isRTL() {\n // `true` if the language requested is RTL\n var dir = toString(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 activeYMD = this.activeYMD;\n var selectedDate = parseYMD(selectedYMD);\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 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 var _this = this;\n\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; // 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) || _this.computedDateDisabledFn(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$3(_objectSpread2$3({\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: DATE_FORMAT_NUMERIC,\n month: DATE_FORMAT_2_DIGIT,\n day: DATE_FORMAT_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: CALENDAR_GREGORY\n }));\n },\n formatYearMonth: function formatYearMonth() {\n // Returns a date formatter function\n return createDateFormatter(this.calendarLocale, {\n year: DATE_FORMAT_NUMERIC,\n month: CALENDAR_LONG,\n calendar: CALENDAR_GREGORY\n });\n },\n formatWeekdayName: function formatWeekdayName() {\n // Long weekday name for weekday header aria-label\n return createDateFormatter(this.calendarLocale, {\n weekday: CALENDAR_LONG,\n calendar: CALENDAR_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 || CALENDAR_SHORT,\n calendar: CALENDAR_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; // 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 = this.computedDateInfoFn(dayYMD, parseYMD(dayYMD));\n dateInfo = isString(dateInfo) || isArray(dateInfo) ?\n /* istanbul ignore next */\n {\n class: dateInfo\n } : isPlainObject(dateInfo) ? _objectSpread2$3({\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 _this2 = this;\n\n return this.calendar[0].map(function (d) {\n return {\n text: _this2.formatWeekdayNameShort(parseYMD(d.ymd)),\n label: _this2.formatWeekdayName(parseYMD(d.ymd))\n };\n });\n }\n },\n watch: (_watch$j = {}, _defineProperty(_watch$j, MODEL_PROP_NAME$i, function (newValue, oldValue) {\n var selected = formatYMD(newValue) || '';\n var old = formatYMD(oldValue) || '';\n\n if (!datesEqual(selected, old)) {\n this.activeYMD = selected || this.activeYMD;\n this.selectedYMD = selected;\n }\n }), _defineProperty(_watch$j, \"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(MODEL_EVENT_NAME$i, this.valueAsDate ? parseYMD(newYMD) || null : newYMD || '');\n }\n }), _defineProperty(_watch$j, \"context\", function context(newValue, oldValue) {\n if (!looseEqual(newValue, oldValue)) {\n this.$emit(EVENT_NAME_CONTEXT, newValue);\n }\n }), _defineProperty(_watch$j, \"hidden\", function hidden(newValue) {\n // Reset the active focused day when hidden\n this.activeYMD = this.selectedYMD || formatYMD(this[MODEL_PROP_NAME$i] || this.constrainDate(this.initialDate || this.getToday())); // Enable/disable the live regions\n\n this.setLive(!newValue);\n }), _watch$j),\n created: function created() {\n var _this3 = this;\n\n this.$nextTick(function () {\n _this3.$emit(EVENT_NAME_CONTEXT, _this3.context);\n });\n },\n mounted: function mounted() {\n this.setLive(true);\n },\n\n /* istanbul ignore next */\n activated: function activated() {\n this.setLive(true);\n },\n\n /* istanbul ignore next */\n deactivated: function deactivated() {\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 _this4 = this;\n\n if (on) {\n this.$nextTick(function () {\n requestAF(function () {\n _this4.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 _this5 = this;\n\n // Performed in a `$nextTick()` to (probably) ensure\n // the input event has emitted first\n this.$nextTick(function () {\n _this5.$emit(EVENT_NAME_SELECTED, formatYMD(date) || '', parseYMD(date) || null);\n });\n },\n // Event handlers\n setGridFocusFlag: function setGridFocusFlag(event) {\n // Sets the gridHasFocus flag to make date \"button\" look focused\n this.gridHasFocus = !this.disabled && event.type === 'focus';\n },\n onKeydownWrapper: function onKeydownWrapper(event) {\n // Calendar keyboard navigation\n // Handles PAGEUP/PAGEDOWN/END/HOME/LEFT/UP/RIGHT/DOWN\n // Focuses grid after updating\n if (this.noKeyNav) {\n /* istanbul ignore next */\n return;\n }\n\n var altKey = event.altKey,\n ctrlKey = event.ctrlKey,\n keyCode = event.keyCode;\n\n if (!arrayIncludes([CODE_PAGEUP, CODE_PAGEDOWN, CODE_END, CODE_HOME, CODE_LEFT, CODE_UP, CODE_RIGHT, CODE_DOWN], keyCode)) {\n /* istanbul ignore next */\n return;\n }\n\n stopEvent(event);\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 === CODE_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 === CODE_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 === CODE_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 === CODE_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 === CODE_UP) {\n // UP - Previous week\n activeDate.setDate(day - 7);\n activeDate = this.constrainDate(activeDate);\n checkDate = activeDate;\n } else if (keyCode === CODE_DOWN) {\n // DOWN - Next week\n activeDate.setDate(day + 7);\n activeDate = this.constrainDate(activeDate);\n checkDate = activeDate;\n } else if (keyCode === CODE_HOME) {\n // HOME - Today\n activeDate = constrainedToday;\n checkDate = activeDate;\n } else if (keyCode === CODE_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(event) {\n // Pressing enter/space on grid to select active date\n var keyCode = event.keyCode;\n var activeDate = this.activeDate;\n\n if (keyCode === CODE_ENTER || keyCode === CODE_SPACE) {\n stopEvent(event);\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 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 _this6 = 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 disabled = this.disabled,\n noKeyNav = this.noKeyNav,\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': disabled,\n readonly: this.readonly || disabled\n },\n attrs: {\n id: valueId,\n for: gridId,\n role: 'status',\n tabindex: 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(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(this.labelSelected), \") \")), h('bdi', this.formatDateString(this.selectedDate))] : this.labelNoDateSelected || \"\\xA0\" // '&nbsp;'\n );\n $header = h(this.headerTag, {\n staticClass: 'b-calendar-header',\n class: {\n 'sr-only': this.hideHeader\n },\n attrs: {\n title: this.selectedDate ? this.labelSelected || 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$3(_objectSpread2$3({}, navProps), {}, {\n flipH: isRTL\n });\n\n var navNextProps = _objectSpread2$3(_objectSpread2$3({}, navProps), {}, {\n flipH: !isRTL\n });\n\n var $prevDecadeIcon = this.normalizeSlot(SLOT_NAME_NAV_PEV_DECADE, navScope) || h(BIconChevronBarLeft, {\n props: navPrevProps\n });\n var $prevYearIcon = this.normalizeSlot(SLOT_NAME_NAV_PEV_YEAR, navScope) || h(BIconChevronDoubleLeft, {\n props: navPrevProps\n });\n var $prevMonthIcon = this.normalizeSlot(SLOT_NAME_NAV_PEV_MONTH, navScope) || h(BIconChevronLeft, {\n props: navPrevProps\n });\n var $thisMonthIcon = this.normalizeSlot(SLOT_NAME_NAV_THIS_MONTH, navScope) || h(BIconCircleFill, {\n props: navProps\n });\n var $nextMonthIcon = this.normalizeSlot(SLOT_NAME_NAV_NEXT_MONTH, navScope) || h(BIconChevronLeft, {\n props: navNextProps\n });\n var $nextYearIcon = this.normalizeSlot(SLOT_NAME_NAV_NEXT_YEAR, navScope) || h(BIconChevronDoubleLeft, {\n props: navNextProps\n });\n var $nextDecadeIcon = this.normalizeSlot(SLOT_NAME_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 border-0 flex-fill',\n class: [_this6.computedNavButtonVariant, {\n disabled: btnDisabled\n }],\n attrs: {\n title: label || null,\n type: 'button',\n tabindex: noKeyNav ? '-1' : null,\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 tabindex: noKeyNav ? '-1' : null,\n 'aria-hidden': 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('div', {\n staticClass: 'b-calendar-grid-caption text-center font-weight-bold',\n class: {\n 'text-muted': disabled\n },\n attrs: {\n id: gridCaptionId,\n 'aria-live': isLive ? 'polite' : null,\n 'aria-atomic': isLive ? 'true' : null\n },\n key: 'grid-caption'\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 staticClass: 'col text-truncate',\n class: {\n 'text-muted': disabled\n },\n attrs: {\n title: d.label === d.text ? null : d.label,\n 'aria-label': d.label\n },\n key: idx\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 && _this6.gridHasFocus,\n // Styling\n disabled: day.isDisabled || disabled,\n active: isSelected\n }, _defineProperty(_class, _this6.computedVariant, isSelected), _defineProperty(_class, _this6.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 _this6.onClickDay(day);\n }\n }\n }, day.day);\n return h('div', // Cell with button\n {\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 || disabled ? 'true' : null,\n 'aria-label': [day.label, isSelected ? \"(\".concat(_this6.labelSelected, \")\") : null, isToday ? \"(\".concat(_this6.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 key: dIndex\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 staticClass: 'row no-gutters',\n key: week[0].ymd\n }, $cells);\n });\n $gridBody = h('div', {\n // A key is only required on the body if we add in transition support\n staticClass: 'b-calendar-grid-body',\n style: disabled ? {\n pointerEvents: 'none'\n } : {} // key: this.activeYMD.slice(0, -3)\n\n }, $gridBody);\n var $gridHelp = h('div', {\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 staticClass: 'b-calendar-grid form-control h-auto text-center',\n attrs: {\n id: gridId,\n role: 'application',\n tabindex: noKeyNav ? '-1' : 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 && !disabled ? 'true' : null,\n 'aria-disabled': disabled ? 'true' : null,\n 'aria-activedescendant': activeId\n },\n on: {\n keydown: this.onKeydownGrid,\n focus: this.setGridFocusFlag,\n blur: this.setGridFocusFlag\n },\n ref: 'grid'\n }, [$gridCaption, $gridWeekDays, $gridBody, $gridHelp]); // Optional bottom slot\n\n var $slot = this.normalizeSlot();\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': 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 var props$23 = makePropsConfigurable({\n bgVariant: makeProp(PROP_TYPE_STRING),\n borderVariant: makeProp(PROP_TYPE_STRING),\n tag: makeProp(PROP_TYPE_STRING, 'div'),\n textVariant: makeProp(PROP_TYPE_STRING)\n }, NAME_CARD); // --- Mixin ---\n // @vue/component\n\n extend({\n props: props$23\n });\n\n var props$22 = makePropsConfigurable({\n title: makeProp(PROP_TYPE_STRING),\n titleTag: makeProp(PROP_TYPE_STRING, 'h4')\n }, NAME_CARD_TITLE); // --- Main component ---\n // @vue/component\n\n var BCardTitle = /*#__PURE__*/extend({\n name: NAME_CARD_TITLE,\n functional: true,\n props: props$22,\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(props.title));\n }\n });\n\n var props$21 = makePropsConfigurable({\n subTitle: makeProp(PROP_TYPE_STRING),\n subTitleTag: makeProp(PROP_TYPE_STRING, 'h6'),\n subTitleTextVariant: makeProp(PROP_TYPE_STRING, 'muted')\n }, NAME_CARD_SUB_TITLE); // --- Main component ---\n // @vue/component\n\n var BCardSubTitle = /*#__PURE__*/extend({\n name: NAME_CARD_SUB_TITLE,\n functional: true,\n props: props$21,\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(props.subTitle));\n }\n });\n\n var props$20 = makePropsConfigurable(sortKeys(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3({}, props$22), props$21), copyProps(props$23, prefixPropName.bind(null, 'body'))), {}, {\n bodyClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n overlay: makeProp(PROP_TYPE_BOOLEAN, false)\n })), NAME_CARD_BODY); // --- Main component ---\n // @vue/component\n\n var BCardBody = /*#__PURE__*/extend({\n name: NAME_CARD_BODY,\n functional: true,\n props: props$20,\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 bodyBgVariant = props.bodyBgVariant,\n bodyBorderVariant = props.bodyBorderVariant,\n bodyTextVariant = props.bodyTextVariant;\n var $title = h();\n\n if (props.title) {\n $title = h(BCardTitle, {\n props: pluckProps(props$22, props)\n });\n }\n\n var $subTitle = h();\n\n if (props.subTitle) {\n $subTitle = h(BCardSubTitle, {\n props: pluckProps(props$21, 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(bodyBgVariant), bodyBgVariant), _defineProperty(_ref2, \"border-\".concat(bodyBorderVariant), bodyBorderVariant), _defineProperty(_ref2, \"text-\".concat(bodyTextVariant), bodyTextVariant), _ref2), props.bodyClass]\n }), [$title, $subTitle, children]);\n }\n });\n\n var props$1$ = makePropsConfigurable(sortKeys(_objectSpread2$3(_objectSpread2$3({}, copyProps(props$23, prefixPropName.bind(null, 'header'))), {}, {\n header: makeProp(PROP_TYPE_STRING),\n headerClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n headerHtml: makeProp(PROP_TYPE_STRING)\n })), NAME_CARD_HEADER); // --- Main component ---\n // @vue/component\n\n var BCardHeader = /*#__PURE__*/extend({\n name: NAME_CARD_HEADER,\n functional: true,\n props: props$1$,\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$1_ = makePropsConfigurable(sortKeys(_objectSpread2$3(_objectSpread2$3({}, copyProps(props$23, prefixPropName.bind(null, 'footer'))), {}, {\n footer: makeProp(PROP_TYPE_STRING),\n footerClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n footerHtml: makeProp(PROP_TYPE_STRING)\n })), NAME_CARD_FOOTER); // --- Main component ---\n // @vue/component\n\n var BCardFooter = /*#__PURE__*/extend({\n name: NAME_CARD_FOOTER,\n functional: true,\n props: props$1_,\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 // 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>'; // --- Helper methods ---\n\n var makeBlankImgSrc = function makeBlankImgSrc(width, height, color) {\n var src = encodeURIComponent(BLANK_TEMPLATE.replace('%{w}', toString(width)).replace('%{h}', toString(height)).replace('%{f}', color));\n return \"data:image/svg+xml;charset=UTF-8,\".concat(src);\n }; // --- Props ---\n\n\n var props$1Z = makePropsConfigurable({\n alt: makeProp(PROP_TYPE_STRING),\n blank: makeProp(PROP_TYPE_BOOLEAN, false),\n blankColor: makeProp(PROP_TYPE_STRING, 'transparent'),\n block: makeProp(PROP_TYPE_BOOLEAN, false),\n center: makeProp(PROP_TYPE_BOOLEAN, false),\n fluid: makeProp(PROP_TYPE_BOOLEAN, false),\n // Gives fluid images class `w-100` to make them grow to fit container\n fluidGrow: makeProp(PROP_TYPE_BOOLEAN, false),\n height: makeProp(PROP_TYPE_NUMBER_STRING),\n left: makeProp(PROP_TYPE_BOOLEAN, false),\n right: makeProp(PROP_TYPE_BOOLEAN, false),\n // Possible values:\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 rounded: makeProp(PROP_TYPE_BOOLEAN_STRING, false),\n sizes: makeProp(PROP_TYPE_ARRAY_STRING),\n src: makeProp(PROP_TYPE_STRING),\n srcset: makeProp(PROP_TYPE_ARRAY_STRING),\n thumbnail: makeProp(PROP_TYPE_BOOLEAN, false),\n width: makeProp(PROP_TYPE_NUMBER_STRING)\n }, NAME_IMG); // --- Main component ---\n // @vue/component\n\n var BImg = /*#__PURE__*/extend({\n name: NAME_IMG,\n functional: true,\n props: props$1Z,\n render: function render(h, _ref) {\n var _class;\n\n var props = _ref.props,\n data = _ref.data;\n var alt = props.alt,\n src = props.src,\n block = props.block,\n fluidGrow = props.fluidGrow,\n rounded = props.rounded;\n var width = toInteger(props.width) || null;\n var height = toInteger(props.height) || null;\n var align = null;\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: alt,\n width: width ? toString(width) : null,\n height: height ? toString(height) : null,\n srcset: srcset || null,\n sizes: sizes || null\n },\n class: (_class = {\n 'img-thumbnail': props.thumbnail,\n 'img-fluid': props.fluid || fluidGrow,\n 'w-100': fluidGrow,\n rounded: rounded === '' || rounded === true\n }, _defineProperty(_class, \"rounded-\".concat(rounded), isString(rounded) && rounded !== ''), _defineProperty(_class, align, align), _defineProperty(_class, 'd-block', block), _class)\n }));\n }\n });\n\n var props$1Y = makePropsConfigurable(sortKeys(_objectSpread2$3(_objectSpread2$3({}, pick$1(props$1Z, ['src', 'alt', 'width', 'height', 'left', 'right'])), {}, {\n bottom: makeProp(PROP_TYPE_BOOLEAN, false),\n end: makeProp(PROP_TYPE_BOOLEAN, false),\n start: makeProp(PROP_TYPE_BOOLEAN, false),\n top: makeProp(PROP_TYPE_BOOLEAN, false)\n })), NAME_CARD_IMG); // --- Main component ---\n // @vue/component\n\n var BCardImg = /*#__PURE__*/extend({\n name: NAME_CARD_IMG,\n functional: true,\n props: props$1Y,\n render: function render(h, _ref) {\n var props = _ref.props,\n data = _ref.data;\n var src = props.src,\n alt = props.alt,\n width = props.width,\n height = props.height;\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: src,\n alt: alt,\n width: width,\n height: height\n }\n }));\n }\n });\n\n var cardImgProps = copyProps(props$1Y, prefixPropName.bind(null, 'img'));\n cardImgProps.imgSrc.required = false;\n var props$1X = makePropsConfigurable(sortKeys(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3({}, props$20), props$1$), props$1_), cardImgProps), props$23), {}, {\n align: makeProp(PROP_TYPE_STRING),\n noBody: makeProp(PROP_TYPE_BOOLEAN, false)\n })), NAME_CARD); // --- Main component ---\n // @vue/component\n\n var BCard = /*#__PURE__*/extend({\n name: NAME_CARD,\n functional: true,\n props: props$1X,\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 imgSrc = props.imgSrc,\n imgLeft = props.imgLeft,\n imgRight = props.imgRight,\n imgStart = props.imgStart,\n imgEnd = props.imgEnd,\n imgBottom = props.imgBottom,\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 (imgSrc) {\n var $img = h(BCardImg, {\n props: pluckProps(cardImgProps, props, unprefixPropName.bind(null, 'img'))\n });\n\n if (imgBottom) {\n $imgLast = $img;\n } else {\n $imgFirst = $img;\n }\n }\n\n var $header = h();\n var hasHeaderSlot = hasNormalizedSlot(SLOT_NAME_HEADER, $scopedSlots, $slots);\n\n if (hasHeaderSlot || header || headerHtml) {\n $header = h(BCardHeader, {\n props: pluckProps(props$1$, props),\n domProps: hasHeaderSlot ? {} : htmlOrText(headerHtml, header)\n }, normalizeSlot(SLOT_NAME_HEADER, slotScope, $scopedSlots, $slots));\n }\n\n var $content = normalizeSlot(SLOT_NAME_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$20, props)\n }, $content); // When the `overlap` prop is set we need to wrap the `<b-card-img>` and `<b-card-body>`\n // into a relative positioned wrapper to don't distract a potential header or footer\n\n if (props.overlay && imgSrc) {\n $content = h('div', {\n staticClass: 'position-relative'\n }, [$imgFirst, $content, $imgLast]); // Reset image variables since they are already in the wrapper\n\n $imgFirst = h();\n $imgLast = h();\n }\n }\n\n var $footer = h();\n var hasFooterSlot = hasNormalizedSlot(SLOT_NAME_FOOTER, $scopedSlots, $slots);\n\n if (hasFooterSlot || footer || footerHtml) {\n $footer = h(BCardFooter, {\n props: pluckProps(props$1_, props),\n domProps: hasHeaderSlot ? {} : htmlOrText(footerHtml, footer)\n }, normalizeSlot(SLOT_NAME_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\n var VisibilityObserver = /*#__PURE__*/function () {\n function VisibilityObserver(el, options) {\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();\n }\n\n _createClass(VisibilityObserver, [{\n key: \"createObserver\",\n value: function createObserver() {\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$1(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 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 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$1 = 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$1 = function bind(el, _ref) {\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_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$1(el); // Create new observer\n\n el[OBSERVER_PROP_NAME] = new VisibilityObserver(el, options); // 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$1 = 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$1(el, {\n value: value,\n modifiers: modifiers\n });\n }\n }; // When directive un-binds from element\n\n\n var unbind$1 = function unbind(el) {\n // Remove the observer\n destroy$1(el);\n }; // Export the directive\n\n\n var VBVisible = {\n bind: bind$1,\n componentUpdated: componentUpdated$1,\n unbind: unbind$1\n };\n\n var _watch$i;\n\n var MODEL_PROP_NAME_SHOW$1 = 'show';\n var MODEL_EVENT_NAME_SHOW$1 = MODEL_EVENT_NAME_PREFIX + MODEL_PROP_NAME_SHOW$1; // --- Props ---\n\n var imgProps$1 = omit(props$1Z, ['blank']);\n var props$1W = makePropsConfigurable(_objectSpread2$3(_objectSpread2$3({}, imgProps$1), {}, _defineProperty({\n blankHeight: makeProp(PROP_TYPE_NUMBER_STRING),\n // If `null`, a blank image is generated\n blankSrc: makeProp(PROP_TYPE_STRING, null),\n blankWidth: makeProp(PROP_TYPE_NUMBER_STRING),\n // Distance away from viewport (in pixels)\n // before being considered \"visible\"\n offset: makeProp(PROP_TYPE_NUMBER_STRING, 360)\n }, MODEL_PROP_NAME_SHOW$1, makeProp(PROP_TYPE_BOOLEAN, false))), NAME_IMG_LAZY); // --- Main component ---\n // @vue/component\n\n var BImgLazy = /*#__PURE__*/extend({\n name: NAME_IMG_LAZY,\n directives: {\n 'b-visible': VBVisible\n },\n props: props$1W,\n data: function data() {\n return {\n isShown: this[MODEL_PROP_NAME_SHOW$1]\n };\n },\n computed: {\n computedSrc: function computedSrc() {\n var blankSrc = this.blankSrc;\n return !blankSrc || this.isShown ? this.src : blankSrc;\n },\n computedBlank: function computedBlank() {\n return !(this.isShown || this.blankSrc);\n },\n computedWidth: function computedWidth() {\n var width = this.width;\n return this.isShown ? width : this.blankWidth || width;\n },\n computedHeight: function computedHeight() {\n var height = this.height;\n return this.isShown ? height : this.blankHeight || height;\n },\n computedSrcset: function computedSrcset() {\n var srcset = concat(this.srcset).filter(identity).join(',');\n return srcset && (!this.blankSrc || this.isShown) ? srcset : null;\n },\n computedSizes: function computedSizes() {\n var sizes = concat(this.sizes).filter(identity).join(',');\n return sizes && (!this.blankSrc || this.isShown) ? sizes : null;\n }\n },\n watch: (_watch$i = {}, _defineProperty(_watch$i, MODEL_PROP_NAME_SHOW$1, function (newValue, oldValue) {\n if (newValue !== oldValue) {\n // If `IntersectionObserver` support is not available, image is always shown\n var visible = HAS_INTERACTION_OBSERVER_SUPPORT ? newValue : true;\n this.isShown = visible; // Ensure the show prop is synced (when no `IntersectionObserver`)\n\n if (newValue !== visible) {\n this.$nextTick(this.updateShowProp);\n }\n }\n }), _defineProperty(_watch$i, \"isShown\", function isShown(newValue, oldValue) {\n // Update synched show prop\n if (newValue !== oldValue) {\n this.updateShowProp();\n }\n }), _watch$i),\n mounted: function mounted() {\n var _this = this;\n\n // If `IntersectionObserver` is not available, image is always shown\n this.$nextTick(function () {\n _this.isShown = HAS_INTERACTION_OBSERVER_SUPPORT ? _this[MODEL_PROP_NAME_SHOW$1] : true;\n });\n },\n methods: {\n updateShowProp: function updateShowProp() {\n this.$emit(MODEL_EVENT_NAME_SHOW$1, this.isShown);\n },\n doShow: function doShow(visible) {\n var _this2 = this;\n\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 // In a `requestAF()` to render the `blank` placeholder properly\n // for fast loading images in some browsers (i.e. Firefox)\n requestAF(function () {\n _this2.isShown = true;\n });\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: _objectSpread2$3(_objectSpread2$3({}, pluckProps(imgProps$1, this.$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,\n sizes: this.computedSizes\n })\n });\n }\n });\n\n var props$1V = makePropsConfigurable(sortKeys(_objectSpread2$3(_objectSpread2$3({}, omit(props$1W, keys(props$1Z))), omit(props$1Y, ['src', 'alt', 'width', 'height']))), NAME_CARD_IMG_LAZY); // --- Main component ---\n // @vue/component\n\n var BCardImgLazy = /*#__PURE__*/extend({\n name: NAME_CARD_IMG_LAZY,\n functional: true,\n props: props$1V,\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(BImgLazy, a(data, {\n class: [baseClass],\n // Exclude `left` and `right` props before passing to `<b-img-lazy>`\n props: omit(props, ['left', 'right'])\n }));\n }\n });\n\n var props$1U = makePropsConfigurable({\n textTag: makeProp(PROP_TYPE_STRING, 'p')\n }, NAME_CARD_TEXT); // --- Main component ---\n // @vue/component\n\n var BCardText = /*#__PURE__*/extend({\n name: NAME_CARD_TEXT,\n functional: true,\n props: props$1U,\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$1T = makePropsConfigurable({\n columns: makeProp(PROP_TYPE_BOOLEAN, false),\n deck: makeProp(PROP_TYPE_BOOLEAN, false),\n tag: makeProp(PROP_TYPE_STRING, 'div')\n }, NAME_CARD_GROUP); // --- Main component ---\n // @vue/component\n\n var BCardGroup = /*#__PURE__*/extend({\n name: NAME_CARD_GROUP,\n functional: true,\n props: props$1T,\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$3({\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 _watch$h;\n\n var _makeModelMixin$i = makeModelMixin('value', {\n type: PROP_TYPE_NUMBER,\n defaultValue: 0\n }),\n modelMixin$h = _makeModelMixin$i.mixin,\n modelProps$h = _makeModelMixin$i.props,\n MODEL_PROP_NAME$h = _makeModelMixin$i.prop,\n MODEL_EVENT_NAME$h = _makeModelMixin$i.event; // Slide directional classes\n\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$1 = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'otransitionend oTransitionEnd',\n transition: 'transitionend'\n }; // --- Helper methods ---\n // Return the browser specific transitionEnd event name\n\n var getTransitionEndEvent = function getTransitionEndEvent(el) {\n for (var name in TransitionEndEvents$1) {\n if (!isUndefined(el.style[name])) {\n return TransitionEndEvents$1[name];\n }\n } // Fallback\n\n /* istanbul ignore next */\n\n\n return null;\n }; // --- Props ---\n\n\n var props$1S = makePropsConfigurable(sortKeys(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3({}, props$25), modelProps$h), {}, {\n background: makeProp(PROP_TYPE_STRING),\n controls: makeProp(PROP_TYPE_BOOLEAN, false),\n // Enable cross-fade animation instead of slide animation\n fade: makeProp(PROP_TYPE_BOOLEAN, false),\n // Sniffed by carousel-slide\n imgHeight: makeProp(PROP_TYPE_NUMBER_STRING),\n // Sniffed by carousel-slide\n imgWidth: makeProp(PROP_TYPE_NUMBER_STRING),\n indicators: makeProp(PROP_TYPE_BOOLEAN, false),\n interval: makeProp(PROP_TYPE_NUMBER, 5000),\n labelGotoSlide: makeProp(PROP_TYPE_STRING, 'Goto slide'),\n labelIndicators: makeProp(PROP_TYPE_STRING, 'Select a slide to display'),\n labelNext: makeProp(PROP_TYPE_STRING, 'Next slide'),\n labelPrev: makeProp(PROP_TYPE_STRING, 'Previous slide'),\n // Disable slide/fade animation\n noAnimation: makeProp(PROP_TYPE_BOOLEAN, false),\n // Disable pause on hover\n noHoverPause: makeProp(PROP_TYPE_BOOLEAN, false),\n // Sniffed by carousel-slide\n noTouch: makeProp(PROP_TYPE_BOOLEAN, false),\n // Disable wrapping/looping when start/end is reached\n noWrap: makeProp(PROP_TYPE_BOOLEAN, false)\n })), NAME_CAROUSEL); // --- Main component ---\n // @vue/component\n\n var BCarousel = /*#__PURE__*/extend({\n name: NAME_CAROUSEL,\n mixins: [idMixin, modelMixin$h, normalizeSlotMixin],\n provide: function provide() {\n var _this = this;\n\n return {\n getBvCarousel: function getBvCarousel() {\n return _this;\n }\n };\n },\n props: props$1S,\n data: function data() {\n return {\n index: this[MODEL_PROP_NAME$h] || 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: (_watch$h = {}, _defineProperty(_watch$h, MODEL_PROP_NAME$h, function (newValue, oldValue) {\n if (newValue !== oldValue) {\n this.setSlide(toInteger(newValue, 0));\n }\n }), _defineProperty(_watch$h, \"interval\", function interval(newValue, oldValue) {\n /* istanbul ignore next */\n if (newValue === oldValue) {\n return;\n }\n\n if (!newValue) {\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 }), _defineProperty(_watch$h, \"isPaused\", function isPaused(newValue, oldValue) {\n if (newValue !== oldValue) {\n this.$emit(newValue ? EVENT_NAME_PAUSED : EVENT_NAME_UNPAUSED);\n }\n }), _defineProperty(_watch$h, \"index\", function index(to, from) {\n /* istanbul ignore next */\n if (to === from || this.isSliding) {\n return;\n }\n\n this.doSlide(to, from);\n }), _watch$h),\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 _this2 = 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 (IS_BROWSER && 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(EVENT_NAME_SLIDING_END, function () {\n // Wrap in `requestAF()` to allow the slide to properly finish to avoid glitching\n requestAF(function () {\n return _this2.setSlide(slide, direction);\n });\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[MODEL_PROP_NAME$h]) {\n this.$emit(MODEL_EVENT_NAME$h, 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(event) {\n if (!event) {\n this.isPaused = true;\n }\n\n this.clearInterval();\n },\n // Start auto rotate slides\n start: function start(event) {\n if (!event) {\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 if (!this.$el.contains(getActiveElement())) {\n this.start();\n }\n },\n doSlide: function doSlide(to, from) {\n var _this3 = 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(EVENT_NAME_SLIDING_START, to); // Update v-model\n\n this.$emit(MODEL_EVENT_NAME$h, 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 _this3.$emit(EVENT_NAME_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 (_this3.transitionEndEvent) {\n var events = _this3.transitionEndEvent.split(/\\s+/);\n\n events.forEach(function (event) {\n return eventOff(nextSlide, event, onceTransEnd, EVENT_OPTIONS_NO_CAPTURE);\n });\n }\n\n _this3.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 _this3.isSliding = false;\n _this3.direction = null; // Notify ourselves that we're done sliding (slid)\n\n _this3.$nextTick(function () {\n return _this3.$emit(EVENT_NAME_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(event, fn) {\n var keyCode = event.keyCode;\n\n if (event.type === 'click' || keyCode === CODE_SPACE || keyCode === CODE_ENTER) {\n stopEvent(event);\n fn();\n }\n },\n\n /* istanbul ignore next: JSDOM doesn't support touch events */\n handleSwipe: function handleSwipe() {\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: JSDOM doesn't support touch events */\n touchStart: function touchStart(event) {\n if (HAS_POINTER_EVENT_SUPPORT && PointerType[event.pointerType.toUpperCase()]) {\n this.touchStartX = event.clientX;\n } else if (!HAS_POINTER_EVENT_SUPPORT) {\n this.touchStartX = event.touches[0].clientX;\n }\n },\n\n /* istanbul ignore next: JSDOM doesn't support touch events */\n touchMove: function touchMove(event) {\n // Ensure swiping with one touch and not pinching\n if (event.touches && event.touches.length > 1) {\n this.touchDeltaX = 0;\n } else {\n this.touchDeltaX = event.touches[0].clientX - this.touchStartX;\n }\n },\n\n /* istanbul ignore next: JSDOM doesn't support touch events */\n touchEnd: function touchEnd(event) {\n if (HAS_POINTER_EVENT_SUPPORT && PointerType[event.pointerType.toUpperCase()]) {\n this.touchDeltaX = event.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 _this4 = this;\n\n var indicators = this.indicators,\n background = this.background,\n noAnimation = this.noAnimation,\n noHoverPause = this.noHoverPause,\n noTouch = this.noTouch,\n index = this.index,\n isSliding = this.isSliding,\n pause = this.pause,\n restart = this.restart,\n touchStart = this.touchStart,\n touchEnd = this.touchEnd;\n var idInner = this.safeId('__BV_inner_'); // Wrapper for slides\n\n var $inner = h('div', {\n staticClass: 'carousel-inner',\n attrs: {\n id: idInner,\n role: 'list'\n },\n ref: 'inner'\n }, [this.normalizeSlot()]); // Prev and next controls\n\n var $controls = h();\n\n if (this.controls) {\n var makeControl = function makeControl(direction, label, handler) {\n var handlerWrapper = function handlerWrapper(event) {\n /* istanbul ignore next */\n if (!isSliding) {\n _this4.handleClick(event, handler);\n } else {\n stopEvent(event, {\n propagation: false\n });\n }\n };\n\n return h('a', {\n staticClass: \"carousel-control-\".concat(direction),\n attrs: {\n href: '#',\n role: 'button',\n 'aria-controls': idInner,\n 'aria-disabled': isSliding ? 'true' : null\n },\n on: {\n click: handlerWrapper,\n keydown: handlerWrapper\n }\n }, [h('span', {\n staticClass: \"carousel-control-\".concat(direction, \"-icon\"),\n attrs: {\n 'aria-hidden': 'true'\n }\n }), h('span', {\n class: 'sr-only'\n }, [label])]);\n };\n\n $controls = [makeControl('prev', this.labelPrev, this.prev), makeControl('next', this.labelNext, this.next)];\n } // Indicators\n\n\n var $indicators = h('ol', {\n staticClass: 'carousel-indicators',\n directives: [{\n name: 'show',\n value: indicators\n }],\n attrs: {\n id: this.safeId('__BV_indicators_'),\n 'aria-hidden': indicators ? 'false' : 'true',\n 'aria-label': this.labelIndicators,\n 'aria-owns': idInner\n }\n }, this.slides.map(function (slide, i) {\n var handler = function handler(event) {\n _this4.handleClick(event, function () {\n _this4.setSlide(i);\n });\n };\n\n return h('li', {\n class: {\n active: i === index\n },\n attrs: {\n role: 'button',\n id: _this4.safeId(\"__BV_indicator_\".concat(i + 1, \"_\")),\n tabindex: indicators ? '0' : '-1',\n 'aria-current': i === index ? 'true' : 'false',\n 'aria-label': \"\".concat(_this4.labelGotoSlide, \" \").concat(i + 1),\n 'aria-describedby': slide.id || null,\n 'aria-controls': idInner\n },\n on: {\n click: handler,\n keydown: handler\n },\n key: \"slide_\".concat(i)\n });\n }));\n var on = {\n mouseenter: noHoverPause ? noop : pause,\n mouseleave: noHoverPause ? noop : restart,\n focusin: pause,\n focusout: restart,\n keydown: function keydown(event) {\n /* istanbul ignore next */\n if (/input|textarea/i.test(event.target.tagName)) {\n return;\n }\n\n var keyCode = event.keyCode;\n\n if (keyCode === CODE_LEFT || keyCode === CODE_RIGHT) {\n stopEvent(event);\n\n _this4[keyCode === CODE_LEFT ? 'prev' : 'next']();\n }\n }\n }; // Touch support event handlers for environment\n\n if (HAS_TOUCH_SUPPORT && !noTouch) {\n // Attach appropriate listeners (prepend event name with '&' for passive mode)\n\n /* istanbul ignore next: JSDOM doesn't support touch events */\n if (HAS_POINTER_EVENT_SUPPORT) {\n on['&pointerdown'] = touchStart;\n on['&pointerup'] = touchEnd;\n } else {\n on['&touchstart'] = touchStart;\n on['&touchmove'] = this.touchMove;\n on['&touchend'] = touchEnd;\n }\n } // Return the carousel\n\n\n return h('div', {\n staticClass: 'carousel',\n class: {\n slide: !noAnimation,\n 'carousel-fade': !noAnimation && this.fade,\n 'pointer-event': HAS_TOUCH_SUPPORT && HAS_POINTER_EVENT_SUPPORT && !noTouch\n },\n style: {\n background: background\n },\n attrs: {\n role: 'region',\n id: this.safeId(),\n 'aria-busy': isSliding ? 'true' : 'false'\n },\n on: on\n }, [$inner, $controls, $indicators]);\n }\n });\n\n var imgProps = {\n imgAlt: makeProp(PROP_TYPE_STRING),\n imgBlank: makeProp(PROP_TYPE_BOOLEAN, false),\n imgBlankColor: makeProp(PROP_TYPE_STRING, 'transparent'),\n imgHeight: makeProp(PROP_TYPE_NUMBER_STRING),\n imgSrc: makeProp(PROP_TYPE_STRING),\n imgWidth: makeProp(PROP_TYPE_NUMBER_STRING)\n };\n var props$1R = makePropsConfigurable(sortKeys(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3({}, props$25), imgProps), {}, {\n background: makeProp(PROP_TYPE_STRING),\n caption: makeProp(PROP_TYPE_STRING),\n captionHtml: makeProp(PROP_TYPE_STRING),\n captionTag: makeProp(PROP_TYPE_STRING, 'h3'),\n contentTag: makeProp(PROP_TYPE_STRING, 'div'),\n contentVisibleUp: makeProp(PROP_TYPE_STRING),\n text: makeProp(PROP_TYPE_STRING),\n textHtml: makeProp(PROP_TYPE_STRING),\n textTag: makeProp(PROP_TYPE_STRING, 'p')\n })), NAME_CAROUSEL_SLIDE); // --- Main component ---\n // @vue/component\n\n var BCarouselSlide = /*#__PURE__*/extend({\n name: NAME_CAROUSEL_SLIDE,\n mixins: [idMixin, normalizeSlotMixin],\n inject: {\n getBvCarousel: {\n // Explicitly disable touch if not a child of carousel\n default: function _default() {\n return function () {\n return {\n noTouch: true\n };\n };\n }\n }\n },\n props: props$1R,\n computed: {\n bvCarousel: function bvCarousel() {\n return this.getBvCarousel();\n },\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(SLOT_NAME_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 && HAS_TOUCH_SUPPORT) {\n on.dragstart = function (event) {\n return stopEvent(event, {\n propagation: false\n });\n };\n }\n\n $img = h(BImg, {\n props: _objectSpread2$3(_objectSpread2$3({}, 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() || false];\n var $content = h();\n\n if ($contentChildren.some(identity)) {\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 var CLASS_NAME_SHOW = 'show';\n\n // Generic collapse transion helper component\n // Transition event handler helpers\n\n var onEnter = function onEnter(el) {\n setStyle(el, 'height', 0); // In a `requestAF()` for `appear` to work\n\n requestAF(function () {\n reflow(el);\n setStyle(el, 'height', \"\".concat(el.scrollHeight, \"px\"));\n });\n };\n\n var onAfterEnter = function onAfterEnter(el) {\n removeStyle(el, 'height');\n };\n\n var onLeave = function onLeave(el) {\n setStyle(el, 'height', 'auto');\n setStyle(el, 'display', 'block');\n setStyle(el, 'height', \"\".concat(getBCR(el).height, \"px\"));\n reflow(el);\n setStyle(el, 'height', 0);\n };\n\n var onAfterLeave = function onAfterLeave(el) {\n removeStyle(el, 'height');\n }; // --- Constants ---\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 }; // --- Main component ---\n\n var props$1Q = {\n // // If `true` (and `visible` is `true` on mount), animate initially visible\n appear: makeProp(PROP_TYPE_BOOLEAN, false)\n }; // --- Main component ---\n // @vue/component\n\n var BVCollapse = /*#__PURE__*/extend({\n name: NAME_COLLAPSE_HELPER,\n functional: true,\n props: props$1Q,\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 var _watch$g;\n\n var ROOT_ACTION_EVENT_NAME_TOGGLE$2 = getRootActionEventName(NAME_COLLAPSE, 'toggle');\n var ROOT_ACTION_EVENT_NAME_REQUEST_STATE$2 = getRootActionEventName(NAME_COLLAPSE, 'request-state');\n var ROOT_EVENT_NAME_ACCORDION = getRootEventName(NAME_COLLAPSE, 'accordion');\n var ROOT_EVENT_NAME_STATE$3 = getRootEventName(NAME_COLLAPSE, 'state');\n var ROOT_EVENT_NAME_SYNC_STATE$3 = getRootEventName(NAME_COLLAPSE, 'sync-state');\n\n var _makeModelMixin$h = makeModelMixin('visible', {\n type: PROP_TYPE_BOOLEAN,\n defaultValue: false\n }),\n modelMixin$g = _makeModelMixin$h.mixin,\n modelProps$g = _makeModelMixin$h.props,\n MODEL_PROP_NAME$g = _makeModelMixin$h.prop,\n MODEL_EVENT_NAME$g = _makeModelMixin$h.event; // --- Props ---\n\n\n var props$1P = makePropsConfigurable(sortKeys(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3({}, props$25), modelProps$g), {}, {\n // If `true` (and `visible` is `true` on mount), animate initially visible\n accordion: makeProp(PROP_TYPE_STRING),\n appear: makeProp(PROP_TYPE_BOOLEAN, false),\n isNav: makeProp(PROP_TYPE_BOOLEAN, false),\n tag: makeProp(PROP_TYPE_STRING, 'div')\n })), NAME_COLLAPSE); // --- Main component ---\n // @vue/component\n\n var BCollapse = /*#__PURE__*/extend({\n name: NAME_COLLAPSE,\n mixins: [idMixin, modelMixin$g, normalizeSlotMixin, listenOnRootMixin],\n props: props$1P,\n data: function data() {\n return {\n show: this[MODEL_PROP_NAME$g],\n transitioning: false\n };\n },\n computed: {\n classObject: function classObject() {\n var transitioning = this.transitioning;\n return {\n 'navbar-collapse': this.isNav,\n collapse: !transitioning,\n show: this.show && !transitioning\n };\n },\n slotScope: function slotScope() {\n var _this = this;\n\n return {\n visible: this.show,\n close: function close() {\n _this.show = false;\n }\n };\n }\n },\n watch: (_watch$g = {}, _defineProperty(_watch$g, MODEL_PROP_NAME$g, function (newValue) {\n if (newValue !== this.show) {\n this.show = newValue;\n }\n }), _defineProperty(_watch$g, \"show\", function show(newValue, oldValue) {\n if (newValue !== oldValue) {\n this.emitState();\n }\n }), _watch$g),\n created: function created() {\n this.show = this[MODEL_PROP_NAME$g];\n },\n mounted: function mounted() {\n var _this2 = this;\n\n this.show = this[MODEL_PROP_NAME$g]; // Listen for toggle events to open/close us\n\n this.listenOnRoot(ROOT_ACTION_EVENT_NAME_TOGGLE$2, this.handleToggleEvent); // Listen to other collapses for accordion events\n\n this.listenOnRoot(ROOT_EVENT_NAME_ACCORDION, this.handleAccordionEvent);\n\n if (this.isNav) {\n // Set up handlers\n this.setWindowEvents(true);\n this.handleResize();\n }\n\n this.$nextTick(function () {\n _this2.emitState();\n }); // Listen for \"Sync state\" requests from `v-b-toggle`\n\n this.listenOnRoot(ROOT_ACTION_EVENT_NAME_REQUEST_STATE$2, function (id) {\n if (id === _this2.safeId()) {\n _this2.$nextTick(_this2.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 if (this.isNav) {\n this.setWindowEvents(false);\n }\n },\n\n /* istanbul ignore next */\n activated: function activated() {\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 && IS_BROWSER) {\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(EVENT_NAME_SHOW);\n },\n onAfterEnter: function onAfterEnter() {\n this.transitioning = false;\n this.$emit(EVENT_NAME_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(EVENT_NAME_HIDE);\n },\n onAfterLeave: function onAfterLeave() {\n this.transitioning = false;\n this.$emit(EVENT_NAME_HIDDEN);\n },\n emitState: function emitState() {\n var show = this.show,\n accordion = this.accordion;\n var id = this.safeId();\n this.$emit(MODEL_EVENT_NAME$g, show); // Let `v-b-toggle` know the state of this collapse\n\n this.emitOnRoot(ROOT_EVENT_NAME_STATE$3, id, show);\n\n if (accordion && show) {\n // Tell the other collapses in this accordion to close\n this.emitOnRoot(ROOT_EVENT_NAME_ACCORDION, id, 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(ROOT_EVENT_NAME_SYNC_STATE$3, 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 $el = this.$el;\n var restore = hasClass($el, CLASS_NAME_SHOW);\n removeClass($el, CLASS_NAME_SHOW);\n var isBlock = getCS($el).display === 'block';\n\n if (restore) {\n addClass($el, CLASS_NAME_SHOW);\n }\n\n return isBlock;\n },\n clickHandler: function clickHandler(event) {\n var el = event.target; // If we are in a nav/navbar, close the collapse when non-disabled link clicked\n\n /* istanbul ignore next: can't test `getComputedStyle()` in JSDOM */\n\n if (!this.isNav || !el || getCS(this.$el).display !== 'block') {\n return;\n } // Only close the collapse if it is not forced to be `display: block !important`\n\n\n if ((matches(el, '.nav-link,.dropdown-item') || closest('.nav-link,.dropdown-item', el)) && !this.checkDisplayBlock()) {\n this.show = false;\n }\n },\n handleToggleEvent: function handleToggleEvent(id) {\n if (id === this.safeId()) {\n this.toggle();\n }\n },\n handleAccordionEvent: function handleAccordionEvent(openedId, openAccordion) {\n var accordion = this.accordion,\n show = this.show;\n\n if (!accordion || accordion !== openAccordion) {\n return;\n }\n\n var isThis = openedId === this.safeId(); // Open this collapse if not shown or\n // close this collapse if shown\n\n if (isThis && !show || !isThis && show) {\n this.toggle();\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 appear = this.appear;\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(SLOT_NAME_DEFAULT, this.slotScope));\n return h(BVCollapse, {\n props: {\n appear: 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 getInstanceFromDirective = function getInstanceFromDirective(vnode, bindings) {\n return isVue3 ? bindings.instance : vnode.context;\n };\n\n // 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'; // Commonly used style properties\n\n var STYLE_OVERFLOW_ANCHOR = 'overflow-anchor'; // Emitted control event for collapse (emitted to collapse)\n\n var ROOT_ACTION_EVENT_NAME_TOGGLE$1 = getRootActionEventName(NAME_COLLAPSE, 'toggle'); // Listen to event for toggle state update (emitted by collapse)\n\n var ROOT_EVENT_NAME_STATE$2 = getRootEventName(NAME_COLLAPSE, 'state'); // Private event emitted on `$root` to ensure the toggle state is always synced\n // Gets emitted even if the state of b-collapse has not changed\n // This event is NOT to be documented as people should not be using it\n\n var ROOT_EVENT_NAME_SYNC_STATE$2 = getRootEventName(NAME_COLLAPSE, 'sync-state'); // Private event we send to collapse to request state update sync event\n\n var ROOT_ACTION_EVENT_NAME_REQUEST_STATE$1 = getRootActionEventName(NAME_COLLAPSE, 'request-state');\n var KEYDOWN_KEY_CODES = [CODE_ENTER, CODE_SPACE]; // --- Helper methods ---\n\n var isNonStandardTag = 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_SPACE_SPLIT) : value; // Support target ID as link href (`href=\"#id\"`)\n\n if (isTag(el.tagName, 'a')) {\n var href = getAttr(el, 'href') || '';\n\n if (RX_HASH_ID.test(href)) {\n targets.push(href.replace(RX_HASH, ''));\n }\n } // Add ID from `arg` (if provided), and support value\n // as a single string ID or an array of string IDs\n // If `value` is not an array or string, then it gets filtered out\n\n\n concat(arg, value).forEach(function (t) {\n return isString(t) && targets.push(t);\n }); // Return only unique and truthy target IDs\n\n return targets.filter(function (t, index, arr) {\n return t && arr.indexOf(t) === index;\n });\n };\n\n var removeClickListener = function removeClickListener(el) {\n var handler = el[BV_TOGGLE_CLICK_HANDLER];\n\n if (handler) {\n eventOff(el, 'click', handler, EVENT_OPTIONS_PASSIVE);\n eventOff(el, 'keydown', handler, EVENT_OPTIONS_PASSIVE);\n }\n\n el[BV_TOGGLE_CLICK_HANDLER] = null;\n };\n\n var addClickListener = function addClickListener(el, instance) {\n removeClickListener(el);\n\n if (instance) {\n var handler = function handler(event) {\n if (!(event.type === 'keydown' && !arrayIncludes(KEYDOWN_KEY_CODES, event.keyCode)) && !isDisabled(el)) {\n var targets = el[BV_TOGGLE_TARGETS] || [];\n targets.forEach(function (target) {\n getEventRoot(instance).$emit(ROOT_ACTION_EVENT_NAME_TOGGLE$1, target);\n });\n }\n };\n\n el[BV_TOGGLE_CLICK_HANDLER] = handler;\n eventOn(el, 'click', handler, EVENT_OPTIONS_PASSIVE);\n\n if (isNonStandardTag(el)) {\n eventOn(el, 'keydown', handler, EVENT_OPTIONS_PASSIVE);\n }\n }\n };\n\n var removeRootListeners = function removeRootListeners(el, instance) {\n if (el[BV_TOGGLE_ROOT_HANDLER] && instance) {\n getEventRoot(instance).$off([ROOT_EVENT_NAME_STATE$2, ROOT_EVENT_NAME_SYNC_STATE$2], el[BV_TOGGLE_ROOT_HANDLER]);\n }\n\n el[BV_TOGGLE_ROOT_HANDLER] = null;\n };\n\n var addRootListeners = function addRootListeners(el, instance) {\n removeRootListeners(el, instance);\n\n if (instance) {\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 getEventRoot(instance).$on([ROOT_EVENT_NAME_STATE$2, ROOT_EVENT_NAME_SYNC_STATE$2], 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 (!IS_BROWSER || !getInstanceFromDirective(vnode, binding)) {\n return;\n } // If element is not a button or link, we add `role=\"button\"`\n // and `tabindex=\"0\"` for accessibility reasons\n\n\n if (isNonStandardTag(el)) {\n if (!hasAttr(el, ATTR_ROLE)) {\n setAttr(el, ATTR_ROLE, 'button');\n }\n\n if (!hasAttr(el, ATTR_TABINDEX)) {\n setAttr(el, ATTR_TABINDEX, '0');\n }\n } // Ensure the collapse class and `aria-*` attributes persist\n // after element is updated (either by parent re-rendering\n // or changes to this element or its contents)\n\n\n setToggleState(el, el[BV_TOGGLE_STATE]); // Parse list of target IDs\n\n var targets = getTargets(binding, el); // Ensure the `aria-controls` hasn't been overwritten\n // or removed when vnode updates\n // Also ensure to set `overflow-anchor` to `none` to prevent\n // the browser's scroll anchoring behavior\n\n /* istanbul ignore else */\n\n if (targets.length > 0) {\n setAttr(el, ATTR_ARIA_CONTROLS, targets.join(' '));\n setStyle(el, STYLE_OVERFLOW_ANCHOR, 'none');\n } else {\n removeAttr(el, ATTR_ARIA_CONTROLS);\n removeStyle(el, STYLE_OVERFLOW_ANCHOR);\n } // Add/Update our click listener(s)\n // Wrap in a `requestAF()` to allow any previous\n // click handling to occur first\n\n\n requestAF(function () {\n addClickListener(el, getInstanceFromDirective(vnode, binding));\n }); // If targets array has changed, update\n\n if (!looseEqual(targets, el[BV_TOGGLE_TARGETS])) {\n // Update targets array to element storage\n el[BV_TOGGLE_TARGETS] = targets; // Ensure `aria-controls` is up to date\n // Request a state update from targets so that we can\n // ensure expanded state is correct (in most cases)\n\n targets.forEach(function (target) {\n getEventRoot(getInstanceFromDirective(vnode, binding)).$emit(ROOT_ACTION_EVENT_NAME_REQUEST_STATE$1, 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, getInstanceFromDirective(vnode, binding)); // 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, getInstanceFromDirective(vnode, binding)); // Reset custom props\n\n resetProp(el, BV_TOGGLE_ROOT_HANDLER);\n resetProp(el, BV_TOGGLE_CLICK_HANDLER);\n resetProp(el, BV_TOGGLE_STATE);\n resetProp(el, BV_TOGGLE_TARGETS); // Reset classes/attrs/styles\n\n removeClass(el, CLASS_BV_TOGGLE_COLLAPSED);\n removeClass(el, CLASS_BV_TOGGLE_NOT_COLLAPSED);\n removeAttr(el, ATTR_ARIA_EXPANDED);\n removeAttr(el, ATTR_ARIA_CONTROLS);\n removeAttr(el, ATTR_ROLE);\n removeStyle(el, STYLE_OVERFLOW_ANCHOR);\n }\n };\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 = 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 && 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 && 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(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 && !!(window.MSInputMethodContext && document.documentMode);\n var isIE10 = isBrowser && /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(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(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(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(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 = 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(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(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()) {\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(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() {\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 && /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(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_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(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({}, 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({}, 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({}, side, reference[side]),\n end: defineProperty({}, 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,\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(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.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 PLACEMENT_TOP_START = 'top-start';\n var PLACEMENT_TOP_END = 'top-end';\n var PLACEMENT_BOTTOM_START = 'bottom-start';\n var PLACEMENT_BOTTOM_END = 'bottom-end';\n var PLACEMENT_RIGHT_START = 'right-start';\n var PLACEMENT_LEFT_START = 'left-start';\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$1(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 }();\n\n var clickOutMixin = extend({\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 eventOff(this.clickOutElement, this.clickOutEventName, this._clickOutHandler, EVENT_OPTIONS_NO_CAPTURE);\n },\n methods: {\n isClickOut: function isClickOut(event) {\n return !contains(this.$el, event.target);\n },\n _clickOutHandler: function _clickOutHandler(event) {\n if (this.clickOutHandler && this.isClickOut(event)) {\n this.clickOutHandler(event);\n }\n }\n }\n });\n\n var focusInMixin = extend({\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 eventOff(this.focusInElement, 'focusin', this._focusInHandler, EVENT_OPTIONS_NO_CAPTURE);\n },\n methods: {\n _focusInHandler: function _focusInHandler(event) {\n if (this.focusInHandler) {\n this.focusInHandler(event);\n }\n }\n }\n });\n\n var registry = null;\n\n if (isVue3) {\n registry = new WeakMap();\n }\n\n var registerElementToInstance = function registerElementToInstance(element, instance) {\n if (!isVue3) {\n return;\n }\n\n registry.set(element, instance);\n };\n var removeElementToInstance = function removeElementToInstance(element) {\n if (!isVue3) {\n return;\n }\n\n registry.delete(element);\n };\n var getInstanceFromElement = function getInstanceFromElement(element) {\n if (!isVue3) {\n return element.__vue__;\n }\n\n var currentElement = element;\n\n while (currentElement) {\n if (registry.has(currentElement)) {\n /* istanbul ignore next */\n return registry.get(currentElement);\n }\n\n currentElement = currentElement.parentNode;\n }\n\n return null;\n };\n\n var ROOT_EVENT_NAME_SHOWN = getRootEventName(NAME_DROPDOWN, EVENT_NAME_SHOWN);\n var ROOT_EVENT_NAME_HIDDEN = getRootEventName(NAME_DROPDOWN, EVENT_NAME_HIDDEN); // CSS selectors\n\n var SELECTOR_FORM_CHILD = '.dropdown form';\n var SELECTOR_ITEM = ['.dropdown-item', '.b-dropdown-form'].map(function (selector) {\n return \"\".concat(selector, \":not(.disabled):not([disabled])\");\n }).join(', '); // --- Helper methods ---\n // Return an array of visible items\n\n var filterVisibles = function filterVisibles(els) {\n return (els || []).filter(isVisible);\n }; // --- Props ---\n\n\n var props$1O = makePropsConfigurable(sortKeys(_objectSpread2$3(_objectSpread2$3({}, props$25), {}, {\n // String: `scrollParent`, `window` or `viewport`\n // HTMLElement: HTML Element reference\n boundary: makeProp([HTMLElement, PROP_TYPE_STRING], 'scrollParent'),\n disabled: makeProp(PROP_TYPE_BOOLEAN, false),\n // Place left if possible\n dropleft: makeProp(PROP_TYPE_BOOLEAN, false),\n // Place right if possible\n dropright: makeProp(PROP_TYPE_BOOLEAN, false),\n // Place on top if possible\n dropup: makeProp(PROP_TYPE_BOOLEAN, false),\n // Disable auto-flipping of menu from bottom <=> top\n noFlip: makeProp(PROP_TYPE_BOOLEAN, false),\n // Number of pixels or a CSS unit value to offset menu\n // (i.e. `1px`, `1rem`, etc.)\n offset: makeProp(PROP_TYPE_NUMBER_STRING, 0),\n popperOpts: makeProp(PROP_TYPE_OBJECT, {}),\n // Right align menu (default is left align)\n right: makeProp(PROP_TYPE_BOOLEAN, false)\n })), NAME_DROPDOWN); // --- Mixin ---\n // @vue/component\n\n var dropdownMixin = extend({\n mixins: [idMixin, listenOnRootMixin, clickOutMixin, focusInMixin],\n provide: function provide() {\n var _this = this;\n\n return {\n getBvDropdown: function getBvDropdown() {\n return _this;\n }\n };\n },\n inject: {\n getBvNavbar: {\n default: function _default() {\n return function () {\n return null;\n };\n }\n }\n },\n props: props$1O,\n data: function data() {\n return {\n visible: false,\n visibleChangePrevented: false\n };\n },\n computed: {\n bvNavbar: function bvNavbar() {\n return this.getBvNavbar();\n },\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 boundaryClass: function boundaryClass() {\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 return this.boundary !== 'scrollParent' && !this.inNavbar ? 'position-static' : '';\n },\n hideDelay: function hideDelay() {\n return this.inNavbar ? HAS_TOUCH_SUPPORT ? 300 : 50 : 0;\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 eventName = newValue ? EVENT_NAME_SHOW : EVENT_NAME_HIDE;\n var bvEvent = new BvEvent(eventName, {\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(bvEvent);\n\n if (bvEvent.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(EVENT_NAME_HIDDEN, this.focusToggler);\n return;\n }\n\n if (newValue) {\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 this.$_hideTimeout = null;\n },\n\n /* istanbul ignore next */\n deactivated: function deactivated() {\n // In case we are inside a `<keep-alive>`\n this.visible = false;\n this.whileOpenListen(false);\n this.destroyPopper();\n },\n mounted: function mounted() {\n registerElementToInstance(this.$el, this);\n },\n beforeDestroy: function beforeDestroy() {\n this.visible = false;\n this.whileOpenListen(false);\n this.destroyPopper();\n this.clearHideTimeout();\n removeElementToInstance(this.$el);\n },\n methods: {\n // Event emitter\n emitEvent: function emitEvent(bvEvent) {\n var type = bvEvent.type;\n this.emitOnRoot(getRootEventName(NAME_DROPDOWN, type), bvEvent);\n this.$emit(type, bvEvent);\n },\n showMenu: function showMenu() {\n var _this2 = 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', NAME_DROPDOWN);\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.emitOnRoot(ROOT_EVENT_NAME_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 _this2.focusMenu(); // Emit the shown event\n\n\n _this2.$emit(EVENT_NAME_SHOWN);\n });\n },\n hideMenu: function hideMenu() {\n this.whileOpenListen(false);\n this.emitOnRoot(ROOT_EVENT_NAME_HIDDEN, this);\n this.$emit(EVENT_NAME_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 try {\n this.$_popper.scheduleUpdate();\n } catch (_unused) {}\n },\n clearHideTimeout: function clearHideTimeout() {\n clearTimeout(this.$_hideTimeout);\n this.$_hideTimeout = null;\n },\n getPopperConfig: function getPopperConfig() {\n var placement = PLACEMENT_BOTTOM_START;\n\n if (this.dropup) {\n placement = this.right ? PLACEMENT_TOP_END : PLACEMENT_TOP_START;\n } else if (this.dropright) {\n placement = PLACEMENT_RIGHT_START;\n } else if (this.dropleft) {\n placement = PLACEMENT_LEFT_START;\n } else if (this.right) {\n placement = PLACEMENT_BOTTOM_END;\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 var boundariesElement = this.boundary;\n\n if (boundariesElement) {\n popperConfig.modifiers.preventOverflow = {\n boundariesElement: boundariesElement\n };\n }\n\n return mergeDeep(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 ? 'listenOnRoot' : 'listenOffRoot';\n this[method](ROOT_EVENT_NAME_SHOWN, this.rootCloseListener);\n },\n rootCloseListener: function rootCloseListener(vm) {\n if (vm !== this) {\n this.visible = false;\n }\n },\n // Public method to show dropdown\n show: function show() {\n var _this3 = this;\n\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 _this3.visible = true;\n });\n },\n // Public method to hide dropdown\n hide: function hide() {\n var refocus = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n /* istanbul ignore next */\n if (this.disabled) {\n return;\n }\n\n this.visible = false;\n\n if (refocus) {\n // Child element is closing the dropdown on click\n this.$once(EVENT_NAME_HIDDEN, this.focusToggler);\n }\n },\n // Called only by a button that toggles the menu\n toggle: function toggle(event) {\n event = event || {}; // Early exit when not a click event or ENTER, SPACE or DOWN were pressed\n\n var _event = event,\n type = _event.type,\n keyCode = _event.keyCode;\n\n if (type !== 'click' && !(type === 'keydown' && [CODE_ENTER, CODE_SPACE, CODE_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(EVENT_NAME_TOGGLE, event);\n stopEvent(event); // 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(event) {\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 stopEvent(event, {\n propagation: false\n });\n },\n // Called from dropdown menu context\n onKeydown: function onKeydown(event) {\n var keyCode = event.keyCode;\n\n if (keyCode === CODE_ESC) {\n // Close on ESC\n this.onEsc(event);\n } else if (keyCode === CODE_DOWN) {\n // Down Arrow\n this.focusNext(event, false);\n } else if (keyCode === CODE_UP) {\n // Up Arrow\n this.focusNext(event, true);\n }\n },\n // If user presses ESC, close the menu\n onEsc: function onEsc(event) {\n if (this.visible) {\n this.visible = false;\n stopEvent(event); // Return focus to original trigger button\n\n this.$once(EVENT_NAME_HIDDEN, this.focusToggler);\n }\n },\n // Called only in split button mode, for the split button\n onSplitClick: function onSplitClick(event) {\n /* istanbul ignore next */\n if (this.disabled) {\n this.visible = false;\n return;\n }\n\n this.$emit(EVENT_NAME_CLICK, event);\n },\n // Shared hide handler between click-out and focus-in events\n hideHandler: function hideHandler(event) {\n var _this4 = this;\n\n var target = event.target;\n\n if (this.visible && !contains(this.$refs.menu, target) && !contains(this.toggler, target)) {\n this.clearHideTimeout();\n this.$_hideTimeout = setTimeout(function () {\n return _this4.hide();\n }, this.hideDelay);\n }\n },\n // Document click-out listener\n clickOutHandler: function clickOutHandler(event) {\n this.hideHandler(event);\n },\n // Document focus-in listener\n focusInHandler: function focusInHandler(event) {\n this.hideHandler(event);\n },\n // Keyboard nav\n focusNext: function focusNext(event, up) {\n var _this5 = this;\n\n // Ignore key up/down on form elements\n var target = event.target;\n\n if (!this.visible || event && closest(SELECTOR_FORM_CHILD, target)) {\n /* istanbul ignore next: should never happen */\n return;\n }\n\n stopEvent(event);\n this.$nextTick(function () {\n var items = _this5.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 _this5.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, this.$refs.menu));\n },\n focusMenu: function focusMenu() {\n attemptFocus(this.$refs.menu);\n },\n focusToggler: function focusToggler() {\n var _this6 = this;\n\n this.$nextTick(function () {\n attemptFocus(_this6.toggler);\n });\n }\n }\n });\n\n var props$1N = makePropsConfigurable(sortKeys(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3({}, props$25), props$1O), {}, {\n block: makeProp(PROP_TYPE_BOOLEAN, false),\n html: makeProp(PROP_TYPE_STRING),\n // If `true`, only render menu contents when open\n lazy: makeProp(PROP_TYPE_BOOLEAN, false),\n menuClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n noCaret: makeProp(PROP_TYPE_BOOLEAN, false),\n role: makeProp(PROP_TYPE_STRING, 'menu'),\n size: makeProp(PROP_TYPE_STRING),\n split: makeProp(PROP_TYPE_BOOLEAN, false),\n splitButtonType: makeProp(PROP_TYPE_STRING, 'button', function (value) {\n return arrayIncludes(['button', 'submit', 'reset'], value);\n }),\n splitClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n splitHref: makeProp(PROP_TYPE_STRING),\n splitTo: makeProp(PROP_TYPE_OBJECT_STRING),\n splitVariant: makeProp(PROP_TYPE_STRING),\n text: makeProp(PROP_TYPE_STRING),\n toggleAttrs: makeProp(PROP_TYPE_OBJECT, {}),\n toggleClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n toggleTag: makeProp(PROP_TYPE_STRING, 'button'),\n // TODO: This really should be `toggleLabel`\n toggleText: makeProp(PROP_TYPE_STRING, 'Toggle dropdown'),\n variant: makeProp(PROP_TYPE_STRING, 'secondary')\n })), NAME_DROPDOWN); // --- Main component ---\n // @vue/component\n\n var BDropdown = /*#__PURE__*/extend({\n name: NAME_DROPDOWN,\n mixins: [idMixin, dropdownMixin, normalizeSlotMixin],\n props: props$1N,\n computed: {\n dropdownClasses: function dropdownClasses() {\n var block = this.block,\n split = this.split;\n return [this.directionClass, this.boundaryClass, {\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 }];\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 visible = this.visible,\n variant = this.variant,\n size = this.size,\n block = this.block,\n disabled = this.disabled,\n split = this.split,\n role = this.role,\n hide = this.hide,\n toggle = this.toggle;\n var commonProps = {\n variant: variant,\n size: size,\n block: block,\n disabled: disabled\n };\n var $buttonChildren = this.normalizeSlot(SLOT_NAME_BUTTON_CONTENT);\n var buttonContentDomProps = this.hasNormalizedSlot(SLOT_NAME_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$3(_objectSpread2$3({}, commonProps), {}, {\n variant: this.splitVariant || 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: buttonContentDomProps,\n on: {\n click: this.onSplitClick\n },\n ref: 'button'\n }, $buttonChildren); // Overwrite button content for the toggle when in `split` mode\n\n $buttonChildren = [h('span', {\n class: ['sr-only']\n }, [this.toggleText])];\n buttonContentDomProps = {};\n }\n\n var ariaHasPopupRoles = ['menu', 'listbox', 'tree', 'grid', 'dialog'];\n var $toggle = h(BButton, {\n staticClass: 'dropdown-toggle',\n class: this.toggleClasses,\n attrs: _objectSpread2$3(_objectSpread2$3({}, this.toggleAttrs), {}, {\n // Must have attributes\n id: this.safeId('_BV_toggle_'),\n 'aria-haspopup': ariaHasPopupRoles.includes(role) ? role : 'false',\n 'aria-expanded': toString(visible)\n }),\n props: _objectSpread2$3(_objectSpread2$3({}, commonProps), {}, {\n tag: this.toggleTag,\n block: block && !split\n }),\n domProps: buttonContentDomProps,\n on: {\n mousedown: this.onMousedown,\n click: toggle,\n keydown: toggle // Handle ENTER, SPACE and DOWN\n\n },\n ref: 'toggle'\n }, $buttonChildren);\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 || visible ? this.normalizeSlot(SLOT_NAME_DEFAULT, {\n hide: 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 linkProps$4 = omit(props$2f, ['event', 'routerTag']);\n var props$1M = makePropsConfigurable(sortKeys(_objectSpread2$3(_objectSpread2$3({}, linkProps$4), {}, {\n linkClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n variant: makeProp(PROP_TYPE_STRING)\n })), NAME_DROPDOWN_ITEM); // --- Main component ---\n // @vue/component\n\n var BDropdownItem = /*#__PURE__*/extend({\n name: NAME_DROPDOWN_ITEM,\n mixins: [attrsMixin, normalizeSlotMixin],\n inject: {\n getBvDropdown: {\n default: function _default() {\n return function () {\n return null;\n };\n }\n }\n },\n inheritAttrs: false,\n props: props$1M,\n computed: {\n bvDropdown: function bvDropdown() {\n return this.getBvDropdown();\n },\n computedAttrs: function computedAttrs() {\n return _objectSpread2$3(_objectSpread2$3({}, 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(event) {\n this.$emit(EVENT_NAME_CLICK, event);\n this.closeDropdown();\n }\n },\n render: function render(h) {\n var linkClass = this.linkClass,\n variant = this.variant,\n active = this.active,\n disabled = this.disabled,\n onClick = this.onClick,\n bvAttrs = this.bvAttrs;\n return h('li', {\n class: bvAttrs.class,\n style: bvAttrs.style,\n attrs: {\n role: 'presentation'\n }\n }, [h(BLink, {\n staticClass: 'dropdown-item',\n class: [linkClass, _defineProperty({}, \"text-\".concat(variant), variant && !(active || disabled))],\n props: pluckProps(linkProps$4, this.$props),\n attrs: this.computedAttrs,\n on: {\n click: onClick\n },\n ref: 'item'\n }, this.normalizeSlot())]);\n }\n });\n\n var props$1L = makePropsConfigurable({\n active: makeProp(PROP_TYPE_BOOLEAN, false),\n activeClass: makeProp(PROP_TYPE_STRING, 'active'),\n buttonClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n disabled: makeProp(PROP_TYPE_BOOLEAN, false),\n variant: makeProp(PROP_TYPE_STRING)\n }, NAME_DROPDOWN_ITEM_BUTTON); // --- Main component ---\n // @vue/component\n\n var BDropdownItemButton = /*#__PURE__*/extend({\n name: NAME_DROPDOWN_ITEM_BUTTON,\n mixins: [attrsMixin, normalizeSlotMixin],\n inject: {\n getBvDropdown: {\n default: function _default() {\n return function () {\n return null;\n };\n }\n }\n },\n inheritAttrs: false,\n props: props$1L,\n computed: {\n bvDropdown: function bvDropdown() {\n return this.getBvDropdown();\n },\n computedAttrs: function computedAttrs() {\n return _objectSpread2$3(_objectSpread2$3({}, 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(event) {\n this.$emit(EVENT_NAME_CLICK, event);\n this.closeDropdown();\n }\n },\n render: function render(h) {\n var _ref;\n\n var active = this.active,\n variant = this.variant,\n bvAttrs = this.bvAttrs;\n return h('li', {\n class: bvAttrs.class,\n style: bvAttrs.style,\n attrs: {\n role: 'presentation'\n }\n }, [h('button', {\n staticClass: 'dropdown-item',\n class: [this.buttonClass, (_ref = {}, _defineProperty(_ref, this.activeClass, active), _defineProperty(_ref, \"text-\".concat(variant), variant && !(active || this.disabled)), _ref)],\n attrs: this.computedAttrs,\n on: {\n click: this.onClick\n },\n ref: 'button'\n }, this.normalizeSlot())]);\n }\n });\n\n var props$1K = makePropsConfigurable({\n id: makeProp(PROP_TYPE_STRING),\n tag: makeProp(PROP_TYPE_STRING, 'header'),\n variant: makeProp(PROP_TYPE_STRING)\n }, NAME_DROPDOWN_HEADER); // --- Main component ---\n // @vue/component\n\n var BDropdownHeader = /*#__PURE__*/extend({\n name: NAME_DROPDOWN_HEADER,\n functional: true,\n props: props$1K,\n render: function render(h, _ref) {\n var props = _ref.props,\n data = _ref.data,\n children = _ref.children;\n var tag = props.tag,\n variant = props.variant;\n return h('li', a(omit(data, ['attrs']), {\n attrs: {\n role: 'presentation'\n }\n }), [h(tag, {\n staticClass: 'dropdown-header',\n class: _defineProperty({}, \"text-\".concat(variant), variant),\n attrs: _objectSpread2$3(_objectSpread2$3({}, data.attrs || {}), {}, {\n id: props.id || null,\n role: isTag(tag, 'header') ? null : 'heading'\n }),\n ref: 'header'\n }, children)]);\n }\n });\n\n var props$1J = makePropsConfigurable({\n tag: makeProp(PROP_TYPE_STRING, 'hr')\n }, NAME_DROPDOWN_DIVIDER); // --- Main component ---\n // @vue/component\n\n var BDropdownDivider = /*#__PURE__*/extend({\n name: NAME_DROPDOWN_DIVIDER,\n functional: true,\n props: props$1J,\n render: function render(h, _ref) {\n var props = _ref.props,\n data = _ref.data;\n return h('li', a(omit(data, ['attrs']), {\n attrs: {\n role: 'presentation'\n }\n }), [h(props.tag, {\n staticClass: 'dropdown-divider',\n attrs: _objectSpread2$3(_objectSpread2$3({}, data.attrs || {}), {}, {\n role: 'separator',\n 'aria-orientation': 'horizontal'\n }),\n ref: 'divider'\n })]);\n }\n });\n\n var props$1I = makePropsConfigurable({\n id: makeProp(PROP_TYPE_STRING),\n inline: makeProp(PROP_TYPE_BOOLEAN, false),\n novalidate: makeProp(PROP_TYPE_BOOLEAN, false),\n validated: makeProp(PROP_TYPE_BOOLEAN, false)\n }, NAME_FORM); // --- Main component ---\n // @vue/component\n\n var BForm = /*#__PURE__*/extend({\n name: NAME_FORM,\n functional: true,\n props: props$1I,\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 props$1H = makePropsConfigurable(sortKeys(_objectSpread2$3(_objectSpread2$3({}, props$1I), {}, {\n disabled: makeProp(PROP_TYPE_BOOLEAN, false),\n formClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING)\n })), NAME_DROPDOWN_FORM); // --- Main component ---\n // @vue/component\n\n var BDropdownForm = /*#__PURE__*/extend({\n name: NAME_DROPDOWN_FORM,\n functional: true,\n props: props$1H,\n render: function render(h, _ref) {\n var props = _ref.props,\n data = _ref.data,\n listeners = _ref.listeners,\n children = _ref.children;\n return h('li', a(omit(data, ['attrs', 'on']), {\n attrs: {\n role: 'presentation'\n }\n }), [h(BForm, {\n staticClass: 'b-dropdown-form',\n class: [props.formClass, {\n disabled: props.disabled\n }],\n props: props,\n attrs: _objectSpread2$3(_objectSpread2$3({}, data.attrs || {}), {}, {\n disabled: props.disabled,\n // Tab index of -1 for keyboard navigation\n tabindex: props.disabled ? null : '-1'\n }),\n on: listeners,\n ref: 'form'\n }, children)]);\n }\n });\n\n var props$1G = makePropsConfigurable({\n tag: makeProp(PROP_TYPE_STRING, 'p'),\n textClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n variant: makeProp(PROP_TYPE_STRING)\n }, NAME_DROPDOWN_TEXT); // --- Main component ---\n // @vue/component\n\n var BDropdownText = /*#__PURE__*/extend({\n name: NAME_DROPDOWN_TEXT,\n functional: true,\n props: props$1G,\n render: function render(h, _ref) {\n var props = _ref.props,\n data = _ref.data,\n children = _ref.children;\n var tag = props.tag,\n textClass = props.textClass,\n variant = props.variant;\n return h('li', a(omit(data, ['attrs']), {\n attrs: {\n role: 'presentation'\n }\n }), [h(tag, {\n staticClass: 'b-dropdown-text',\n class: [textClass, _defineProperty({}, \"text-\".concat(variant), variant)],\n props: props,\n attrs: data.attrs || {},\n ref: 'text'\n }, children)]);\n }\n });\n\n var props$1F = makePropsConfigurable({\n ariaDescribedby: makeProp(PROP_TYPE_STRING),\n header: makeProp(PROP_TYPE_STRING),\n headerClasses: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n headerTag: makeProp(PROP_TYPE_STRING, 'header'),\n headerVariant: makeProp(PROP_TYPE_STRING),\n id: makeProp(PROP_TYPE_STRING)\n }, NAME_DROPDOWN_GROUP); // --- Main component ---\n // @vue/component\n\n var BDropdownGroup = /*#__PURE__*/extend({\n name: NAME_DROPDOWN_GROUP,\n functional: true,\n props: props$1F,\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 id = props.id,\n variant = props.variant,\n header = props.header,\n headerTag = props.headerTag;\n var $slots = slots();\n var $scopedSlots = scopedSlots || {};\n var slotScope = {};\n var headerId = id ? \"_bv_\".concat(id, \"_group_dd_header\") : null;\n var $header = h();\n\n if (hasNormalizedSlot(SLOT_NAME_HEADER, $scopedSlots, $slots) || header) {\n $header = h(headerTag, {\n staticClass: 'dropdown-header',\n class: [props.headerClasses, _defineProperty({}, \"text-\".concat(variant), variant)],\n attrs: {\n id: headerId,\n role: isTag(headerTag, 'header') ? null : 'heading'\n }\n }, normalizeSlot(SLOT_NAME_HEADER, slotScope, $scopedSlots, $slots) || header);\n }\n\n return h('li', a(omit(data, ['attrs']), {\n attrs: {\n role: 'presentation'\n }\n }), [$header, h('ul', {\n staticClass: 'list-unstyled',\n attrs: _objectSpread2$3(_objectSpread2$3({}, data.attrs || {}), {}, {\n id: id,\n role: 'group',\n 'aria-describedby': [headerId, props.ariaDescribedBy].filter(identity).join(' ').trim() || null\n })\n }, normalizeSlot(SLOT_NAME_DEFAULT, slotScope, $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 TYPES$2 = ['iframe', 'embed', 'video', 'object', 'img', 'b-img', 'b-img-lazy']; // --- Props ---\n\n var props$1E = makePropsConfigurable({\n aspect: makeProp(PROP_TYPE_STRING, '16by9'),\n tag: makeProp(PROP_TYPE_STRING, 'div'),\n type: makeProp(PROP_TYPE_STRING, 'iframe', function (value) {\n return arrayIncludes(TYPES$2, value);\n })\n }, NAME_EMBED); // --- Main component ---\n // @vue/component\n\n var BEmbed = /*#__PURE__*/extend({\n name: NAME_EMBED,\n functional: true,\n props: props$1E,\n render: function render(h, _ref) {\n var props = _ref.props,\n data = _ref.data,\n children = _ref.children;\n var aspect = props.aspect;\n return h(props.tag, {\n staticClass: 'embed-responsive',\n class: _defineProperty({}, \"embed-responsive-\".concat(aspect), aspect),\n ref: data.ref\n }, [h(props.type, a(omit(data, ['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.'; // --- Props ---\n\n var props$1D = makePropsConfigurable({\n disabledField: makeProp(PROP_TYPE_STRING, 'disabled'),\n htmlField: makeProp(PROP_TYPE_STRING, 'html'),\n options: makeProp(PROP_TYPE_ARRAY_OBJECT, []),\n textField: makeProp(PROP_TYPE_STRING, 'text'),\n valueField: makeProp(PROP_TYPE_STRING, 'value')\n }, 'formOptionControls'); // --- Mixin ---\n // @vue/component\n\n var formOptionsMixin = extend({\n props: props$1D,\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 props$1C = makePropsConfigurable(sortKeys(_objectSpread2$3(_objectSpread2$3({}, props$1D), {}, {\n id: makeProp(PROP_TYPE_STRING, undefined, true) // Required\n\n })), NAME_FORM_DATALIST); // --- Main component ---\n // @vue/component\n\n var BFormDatalist = /*#__PURE__*/extend({\n name: NAME_FORM_DATALIST,\n mixins: [formOptionsMixin, normalizeSlotMixin],\n props: props$1C,\n render: function render(h) {\n var id = this.id;\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: id\n }\n }, [$options, this.normalizeSlot()]);\n }\n });\n\n var props$1B = makePropsConfigurable({\n id: makeProp(PROP_TYPE_STRING),\n inline: makeProp(PROP_TYPE_BOOLEAN, false),\n tag: makeProp(PROP_TYPE_STRING, 'small'),\n textVariant: makeProp(PROP_TYPE_STRING, 'muted')\n }, NAME_FORM_TEXT); // --- Main component ---\n // @vue/component\n\n var BFormText = /*#__PURE__*/extend({\n name: NAME_FORM_TEXT,\n functional: true,\n props: props$1B,\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$1A = makePropsConfigurable({\n ariaLive: makeProp(PROP_TYPE_STRING),\n forceShow: makeProp(PROP_TYPE_BOOLEAN, false),\n id: makeProp(PROP_TYPE_STRING),\n role: makeProp(PROP_TYPE_STRING),\n // Tri-state prop: `true`, `false`, or `null`\n state: makeProp(PROP_TYPE_BOOLEAN, null),\n tag: makeProp(PROP_TYPE_STRING, 'div'),\n tooltip: makeProp(PROP_TYPE_BOOLEAN, false)\n }, NAME_FORM_INVALID_FEEDBACK); // --- Main component ---\n // @vue/component\n\n var BFormInvalidFeedback = /*#__PURE__*/extend({\n name: NAME_FORM_INVALID_FEEDBACK,\n functional: true,\n props: props$1A,\n render: function render(h, _ref) {\n var props = _ref.props,\n data = _ref.data,\n children = _ref.children;\n var tooltip = props.tooltip,\n ariaLive = props.ariaLive;\n var show = props.forceShow === true || props.state === false;\n return h(props.tag, a(data, {\n class: {\n 'd-block': show,\n 'invalid-feedback': !tooltip,\n 'invalid-tooltip': tooltip\n },\n attrs: {\n id: props.id || null,\n role: props.role || null,\n 'aria-live': ariaLive || null,\n 'aria-atomic': ariaLive ? 'true' : null\n }\n }), children);\n }\n });\n\n var props$1z = makePropsConfigurable({\n ariaLive: makeProp(PROP_TYPE_STRING),\n forceShow: makeProp(PROP_TYPE_BOOLEAN, false),\n id: makeProp(PROP_TYPE_STRING),\n role: makeProp(PROP_TYPE_STRING),\n // Tri-state prop: `true`, `false`, or `null`\n state: makeProp(PROP_TYPE_BOOLEAN, null),\n tag: makeProp(PROP_TYPE_STRING, 'div'),\n tooltip: makeProp(PROP_TYPE_BOOLEAN, false)\n }, NAME_FORM_VALID_FEEDBACK); // --- Main component ---\n // @vue/component\n\n var BFormValidFeedback = /*#__PURE__*/extend({\n name: NAME_FORM_VALID_FEEDBACK,\n functional: true,\n props: props$1z,\n render: function render(h, _ref) {\n var props = _ref.props,\n data = _ref.data,\n children = _ref.children;\n var tooltip = props.tooltip,\n ariaLive = props.ariaLive;\n var show = props.forceShow === true || props.state === true;\n return h(props.tag, a(data, {\n class: {\n 'd-block': show,\n 'valid-feedback': !tooltip,\n 'valid-tooltip': tooltip\n },\n attrs: {\n id: props.id || null,\n role: props.role || null,\n 'aria-live': ariaLive || null,\n 'aria-atomic': ariaLive ? 'true' : null\n }\n }), children);\n }\n });\n\n var props$1y = makePropsConfigurable({\n tag: makeProp(PROP_TYPE_STRING, 'div')\n }, NAME_FORM_ROW); // --- Main component ---\n // @vue/component\n\n var BFormRow = /*#__PURE__*/extend({\n name: NAME_FORM_ROW,\n functional: true,\n props: props$1y,\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(array, value) {\n for (var i = 0; i < array.length; i++) {\n if (looseEqual(array[i], value)) {\n return i;\n }\n }\n\n return -1;\n };\n\n var SELECTOR = 'input, textarea, select'; // --- Props ---\n\n var props$1x = makePropsConfigurable({\n autofocus: makeProp(PROP_TYPE_BOOLEAN, false),\n disabled: makeProp(PROP_TYPE_BOOLEAN, false),\n form: makeProp(PROP_TYPE_STRING),\n id: makeProp(PROP_TYPE_STRING),\n name: makeProp(PROP_TYPE_STRING),\n required: makeProp(PROP_TYPE_BOOLEAN, false)\n }, 'formControls'); // --- Mixin ---\n // @vue/component\n\n var formControlMixin = extend({\n props: props$1x,\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 props$1w = makePropsConfigurable({\n plain: makeProp(PROP_TYPE_BOOLEAN, false)\n }, 'formControls'); // --- Mixin ---\n // @vue/component\n\n var formCustomMixin = extend({\n props: props$1w,\n computed: {\n custom: function custom() {\n return !this.plain;\n }\n }\n });\n\n var props$1v = makePropsConfigurable({\n size: makeProp(PROP_TYPE_STRING)\n }, 'formControls'); // --- Mixin ---\n // @vue/component\n\n var formSizeMixin = extend({\n props: props$1v,\n computed: {\n sizeFormClass: function sizeFormClass() {\n return [this.size ? \"form-control-\".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 props$1u = makePropsConfigurable({\n // Tri-state prop: true, false, null (or undefined)\n state: makeProp(PROP_TYPE_BOOLEAN, null)\n }, 'formState'); // --- Mixin ---\n // @vue/component\n\n var formStateMixin = extend({\n props: props$1u,\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 computedAriaInvalid: function computedAriaInvalid() {\n var ariaInvalid = safeVueInstance(this).ariaInvalid;\n\n if (ariaInvalid === true || ariaInvalid === 'true' || ariaInvalid === '') {\n return 'true';\n }\n\n return this.computedState === false ? 'true' : ariaInvalid;\n }\n }\n });\n\n var _watch$f, _methods;\n\n var _makeModelMixin$g = makeModelMixin('checked', {\n defaultValue: null\n }),\n modelMixin$f = _makeModelMixin$g.mixin,\n modelProps$f = _makeModelMixin$g.props,\n MODEL_PROP_NAME$f = _makeModelMixin$g.prop,\n MODEL_EVENT_NAME$f = _makeModelMixin$g.event;\n\n var props$1t = makePropsConfigurable(sortKeys(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3({}, props$25), modelProps$f), props$1x), props$1v), props$1u), props$1w), {}, {\n ariaLabel: makeProp(PROP_TYPE_STRING),\n ariaLabelledby: makeProp(PROP_TYPE_STRING),\n // Only applicable in standalone mode (non group)\n button: makeProp(PROP_TYPE_BOOLEAN, false),\n // Only applicable when rendered with button style\n buttonVariant: makeProp(PROP_TYPE_STRING),\n inline: makeProp(PROP_TYPE_BOOLEAN, false),\n value: makeProp(PROP_TYPE_ANY)\n })), 'formRadioCheckControls'); // --- Mixin ---\n // @vue/component\n\n var formRadioCheckMixin = extend({\n mixins: [attrsMixin, idMixin, modelMixin$f, normalizeSlotMixin, formControlMixin, formSizeMixin, formStateMixin, formCustomMixin],\n inheritAttrs: false,\n props: props$1t,\n data: function data() {\n return {\n localChecked: this.isGroup ? this.bvGroup[MODEL_PROP_NAME$f] : this[MODEL_PROP_NAME$f],\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(value) {\n if (this.isGroup) {\n this.bvGroup.localChecked = value;\n } else {\n this.localChecked = value;\n }\n }\n },\n isChecked: function isChecked() {\n return looseEqual(this.value, this.computedLocalChecked);\n },\n isRadio: function isRadio() {\n return true;\n },\n isGroup: function isGroup() {\n // Is this check/radio a child of check-group or radio-group?\n return !!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.computedName && (this.isGroup ? this.bvGroup.required : this.required);\n },\n computedName: function computedName() {\n // Group name preferred over local name\n return (this.isGroup ? this.bvGroup.groupName : this.name) || null;\n },\n computedForm: function computedForm() {\n return (this.isGroup ? this.bvGroup.form : this.form) || null;\n },\n computedSize: function computedSize() {\n return (this.isGroup ? this.bvGroup.size : this.size) || '';\n },\n computedState: function computedState() {\n return this.isGroup ? this.bvGroup.computedState : isBoolean(this.state) ? this.state : null;\n },\n computedButtonVariant: function computedButtonVariant() {\n // Local variant preferred over group variant\n var buttonVariant = this.buttonVariant;\n\n if (buttonVariant) {\n return buttonVariant;\n }\n\n if (this.isGroup && this.bvGroup.buttonVariant) {\n return this.bvGroup.buttonVariant;\n }\n\n return 'secondary';\n },\n buttonClasses: function buttonClasses() {\n var _ref;\n\n var computedSize = this.computedSize;\n return ['btn', \"btn-\".concat(this.computedButtonVariant), (_ref = {}, _defineProperty(_ref, \"btn-\".concat(computedSize), computedSize), _defineProperty(_ref, \"disabled\", this.isDisabled), _defineProperty(_ref, \"active\", this.isChecked), _defineProperty(_ref, \"focus\", this.hasFocus), _ref)];\n },\n computedAttrs: function computedAttrs() {\n var disabled = this.isDisabled,\n required = this.isRequired;\n return _objectSpread2$3(_objectSpread2$3({}, this.bvAttrs), {}, {\n id: this.safeId(),\n type: this.isRadio ? 'radio' : 'checkbox',\n name: this.computedName,\n form: this.computedForm,\n disabled: disabled,\n required: required,\n 'aria-required': required || null,\n 'aria-label': this.ariaLabel || null,\n 'aria-labelledby': this.ariaLabelledby || null\n });\n }\n },\n watch: (_watch$f = {}, _defineProperty(_watch$f, MODEL_PROP_NAME$f, function () {\n this[\"\".concat(MODEL_PROP_NAME$f, \"Watcher\")].apply(this, arguments);\n }), _defineProperty(_watch$f, \"computedLocalChecked\", function computedLocalChecked() {\n this.computedLocalCheckedWatcher.apply(this, arguments);\n }), _watch$f),\n methods: (_methods = {}, _defineProperty(_methods, \"\".concat(MODEL_PROP_NAME$f, \"Watcher\"), function Watcher(newValue) {\n if (!looseEqual(newValue, this.computedLocalChecked)) {\n this.computedLocalChecked = newValue;\n }\n }), _defineProperty(_methods, \"computedLocalCheckedWatcher\", function computedLocalCheckedWatcher(newValue, oldValue) {\n if (!looseEqual(newValue, oldValue)) {\n this.$emit(MODEL_EVENT_NAME$f, newValue);\n }\n }), _defineProperty(_methods, \"handleChange\", function handleChange(_ref2) {\n var _this = this;\n\n var checked = _ref2.target.checked;\n var value = this.value;\n var localChecked = checked ? value : null;\n this.computedLocalChecked = value; // Fire events in a `$nextTick()` to ensure the `v-model` is updated\n\n this.$nextTick(function () {\n // Change is only emitted on user interaction\n _this.$emit(EVENT_NAME_CHANGE, localChecked); // If this is a child of a group, we emit a change event on it as well\n\n\n if (_this.isGroup) {\n _this.bvGroup.$emit(EVENT_NAME_CHANGE, localChecked);\n }\n });\n }), _defineProperty(_methods, \"handleFocus\", function handleFocus(event) {\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 (event.target) {\n if (event.type === 'focus') {\n this.hasFocus = true;\n } else if (event.type === 'blur') {\n this.hasFocus = false;\n }\n }\n }), _defineProperty(_methods, \"focus\", function focus() {\n if (!this.isDisabled) {\n attemptFocus(this.$refs.input);\n }\n }), _defineProperty(_methods, \"blur\", function blur() {\n if (!this.isDisabled) {\n attemptBlur(this.$refs.input);\n }\n }), _methods),\n render: function render(h) {\n var isRadio = this.isRadio,\n isBtnMode = this.isBtnMode,\n isPlain = this.isPlain,\n isCustom = this.isCustom,\n isInline = this.isInline,\n isSwitch = this.isSwitch,\n computedSize = this.computedSize,\n bvAttrs = this.bvAttrs;\n var $content = this.normalizeSlot();\n var $input = h('input', {\n class: [{\n 'form-check-input': isPlain,\n 'custom-control-input': isCustom,\n // https://github.com/bootstrap-vue/bootstrap-vue/issues/2911\n 'position-static': isPlain && !$content\n }, isBtnMode ? '' : this.stateClass],\n directives: [{\n name: 'model',\n value: this.computedLocalChecked\n }],\n attrs: this.computedAttrs,\n domProps: {\n value: this.value,\n checked: this.isChecked\n },\n on: _objectSpread2$3({\n change: this.handleChange\n }, isBtnMode ? {\n focus: this.handleFocus,\n blur: this.handleFocus\n } : {}),\n key: 'input',\n ref: 'input'\n });\n\n if (isBtnMode) {\n var $button = h('label', {\n class: this.buttonClasses\n }, [$input, $content]);\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 } // If no label content in plain mode we dont render the label\n // See: https://github.com/bootstrap-vue/bootstrap-vue/issues/2911\n\n\n var $label = h();\n\n if (!(isPlain && !$content)) {\n $label = h('label', {\n class: {\n 'form-check-label': isPlain,\n 'custom-control-label': isCustom\n },\n attrs: {\n for: this.safeId()\n }\n }, $content);\n }\n\n return h('div', {\n class: [_defineProperty({\n 'form-check': isPlain,\n 'form-check-inline': isPlain && isInline,\n 'custom-control': isCustom,\n 'custom-control-inline': isCustom && isInline,\n 'custom-checkbox': isCustom && !isRadio && !isSwitch,\n 'custom-switch': isSwitch,\n 'custom-radio': isCustom && isRadio\n }, \"b-custom-control-\".concat(computedSize), computedSize && !isBtnMode), bvAttrs.class],\n style: bvAttrs.style\n }, [$input, $label]);\n }\n });\n\n var _objectSpread2$2;\n\n var MODEL_PROP_NAME_INDETERMINATE = 'indeterminate';\n var MODEL_EVENT_NAME_INDETERMINATE = MODEL_EVENT_NAME_PREFIX + MODEL_PROP_NAME_INDETERMINATE; // --- Props ---\n\n var props$1s = makePropsConfigurable(sortKeys(_objectSpread2$3(_objectSpread2$3({}, props$1t), {}, (_objectSpread2$2 = {}, _defineProperty(_objectSpread2$2, MODEL_PROP_NAME_INDETERMINATE, makeProp(PROP_TYPE_BOOLEAN, false)), _defineProperty(_objectSpread2$2, \"switch\", makeProp(PROP_TYPE_BOOLEAN, false)), _defineProperty(_objectSpread2$2, \"uncheckedValue\", makeProp(PROP_TYPE_ANY, false)), _defineProperty(_objectSpread2$2, \"value\", makeProp(PROP_TYPE_ANY, true)), _objectSpread2$2))), NAME_FORM_CHECKBOX); // --- Main component ---\n // @vue/component\n\n var BFormCheckbox = /*#__PURE__*/extend({\n name: NAME_FORM_CHECKBOX,\n mixins: [formRadioCheckMixin],\n inject: {\n getBvGroup: {\n from: 'getBvCheckGroup',\n default: function _default() {\n return function () {\n return null;\n };\n }\n }\n },\n props: props$1s,\n computed: {\n bvGroup: function bvGroup() {\n return this.getBvGroup();\n },\n isChecked: function isChecked() {\n var value = this.value,\n checked = this.computedLocalChecked;\n return isArray(checked) ? looseIndexOf(checked, value) > -1 : looseEqual(checked, value);\n },\n isRadio: function isRadio() {\n return false;\n }\n },\n watch: _defineProperty({}, MODEL_PROP_NAME_INDETERMINATE, function (newValue, oldValue) {\n if (!looseEqual(newValue, oldValue)) {\n this.setIndeterminate(newValue);\n }\n }),\n mounted: function mounted() {\n // Set initial indeterminate state\n this.setIndeterminate(this[MODEL_PROP_NAME_INDETERMINATE]);\n },\n methods: {\n computedLocalCheckedWatcher: function computedLocalCheckedWatcher(newValue, oldValue) {\n if (!looseEqual(newValue, oldValue)) {\n this.$emit(MODEL_EVENT_NAME$f, newValue);\n var $input = this.$refs.input;\n\n if ($input) {\n this.$emit(MODEL_EVENT_NAME_INDETERMINATE, $input.indeterminate);\n }\n }\n },\n handleChange: function handleChange(_ref) {\n var _this = this;\n\n var _ref$target = _ref.target,\n checked = _ref$target.checked,\n indeterminate = _ref$target.indeterminate;\n var value = this.value,\n uncheckedValue = this.uncheckedValue; // Update `computedLocalChecked`\n\n var localChecked = this.computedLocalChecked;\n\n if (isArray(localChecked)) {\n var index = looseIndexOf(localChecked, value);\n\n if (checked && index < 0) {\n // Add value to array\n localChecked = localChecked.concat(value);\n } else if (!checked && index > -1) {\n // Remove value from array\n localChecked = localChecked.slice(0, index).concat(localChecked.slice(index + 1));\n }\n } else {\n localChecked = checked ? value : uncheckedValue;\n }\n\n this.computedLocalChecked = localChecked; // Fire events in a `$nextTick()` to ensure the `v-model` is updated\n\n this.$nextTick(function () {\n // Change is only emitted on user interaction\n _this.$emit(EVENT_NAME_CHANGE, localChecked); // If this is a child of a group, we emit a change event on it as well\n\n\n if (_this.isGroup) {\n _this.bvGroup.$emit(EVENT_NAME_CHANGE, localChecked);\n }\n\n _this.$emit(MODEL_EVENT_NAME_INDETERMINATE, indeterminate);\n });\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 var $input = this.$refs.input;\n\n if ($input) {\n $input.indeterminate = state; // Emit update event to prop\n\n this.$emit(MODEL_EVENT_NAME_INDETERMINATE, state);\n }\n }\n }\n });\n\n var props$1r = makePropsConfigurable(props$1t, NAME_FORM_RADIO); // --- Main component ---\n // @vue/component\n\n var BFormRadio = /*#__PURE__*/extend({\n name: NAME_FORM_RADIO,\n mixins: [formRadioCheckMixin],\n inject: {\n getBvGroup: {\n from: 'getBvRadioGroup',\n default: function _default() {\n return function () {\n return null;\n };\n }\n }\n },\n props: props$1r,\n computed: {\n bvGroup: function bvGroup() {\n return this.getBvGroup();\n }\n }\n });\n\n var _watch$e;\n // Attributes to pass down to checks/radios instead of applying them to the group\n\n var PASS_DOWN_ATTRS = ['aria-describedby', 'aria-labelledby'];\n\n var _makeModelMixin$f = makeModelMixin('checked'),\n modelMixin$e = _makeModelMixin$f.mixin,\n modelProps$e = _makeModelMixin$f.props,\n MODEL_PROP_NAME$e = _makeModelMixin$f.prop,\n MODEL_EVENT_NAME$e = _makeModelMixin$f.event;\n\n var props$1q = makePropsConfigurable(sortKeys(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3({}, props$25), modelProps$e), props$1x), props$1D), props$1v), props$1u), props$1w), {}, {\n ariaInvalid: makeProp(PROP_TYPE_BOOLEAN_STRING, false),\n // Only applicable when rendered with button style\n buttonVariant: makeProp(PROP_TYPE_STRING),\n // Render as button style\n buttons: makeProp(PROP_TYPE_BOOLEAN, false),\n stacked: makeProp(PROP_TYPE_BOOLEAN, false),\n validated: makeProp(PROP_TYPE_BOOLEAN, false)\n })), 'formRadioCheckGroups'); // --- Mixin ---\n // @vue/component\n\n var formRadioCheckGroupMixin = extend({\n mixins: [idMixin, modelMixin$e, normalizeSlotMixin, formControlMixin, formOptionsMixin, formSizeMixin, formStateMixin, formCustomMixin],\n inheritAttrs: false,\n props: props$1q,\n data: function data() {\n return {\n localChecked: this[MODEL_PROP_NAME$e]\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 var inline = this.inline,\n size = this.size,\n validated = this.validated;\n var classes = {\n 'was-validated': validated\n };\n\n if (this.buttons) {\n classes = [classes, 'btn-group-toggle', _defineProperty({\n 'btn-group': inline,\n 'btn-group-vertical': !inline\n }, \"btn-group-\".concat(size), size)];\n }\n\n return classes;\n }\n },\n watch: (_watch$e = {}, _defineProperty(_watch$e, MODEL_PROP_NAME$e, function (newValue) {\n if (!looseEqual(newValue, this.localChecked)) {\n this.localChecked = newValue;\n }\n }), _defineProperty(_watch$e, \"localChecked\", function localChecked(newValue, oldValue) {\n if (!looseEqual(newValue, oldValue)) {\n this.$emit(MODEL_EVENT_NAME$e, newValue);\n }\n }), _watch$e),\n render: function render(h) {\n var _this = this;\n\n var isRadioGroup = this.isRadioGroup;\n var attrs = pick$1(this.$attrs, PASS_DOWN_ATTRS);\n var optionComponent = isRadioGroup ? BFormRadio : BFormCheckbox;\n var $inputs = this.formOptions.map(function (option, index) {\n var key = \"BV_option_\".concat(index);\n return h(optionComponent, {\n props: {\n // Individual radios or checks can be disabled in a group\n disabled: option.disabled || false,\n id: _this.safeId(key),\n value: option.value // We don't need to include these, since the input's will know they are inside here\n // form: this.form || null,\n // name: this.groupName,\n // required: Boolean(this.name && this.required),\n // state: this.state\n\n },\n attrs: attrs,\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: _objectSpread2$3(_objectSpread2$3({}, omit(this.$attrs, PASS_DOWN_ATTRS)), {}, {\n 'aria-invalid': this.computedAriaInvalid,\n 'aria-required': this.required ? 'true' : null,\n id: this.safeId(),\n role: isRadioGroup ? 'radiogroup' : 'group',\n // Add `tabindex=\"-1\"` to allow group to be focused if needed by screen readers\n tabindex: '-1'\n })\n }, [this.normalizeSlot(SLOT_NAME_FIRST), $inputs, this.normalizeSlot()]);\n }\n });\n\n var _objectSpread2$1;\n\n var props$1p = makePropsConfigurable(sortKeys(_objectSpread2$3(_objectSpread2$3({}, props$1q), {}, (_objectSpread2$1 = {}, _defineProperty(_objectSpread2$1, MODEL_PROP_NAME$e, makeProp(PROP_TYPE_ARRAY, [])), _defineProperty(_objectSpread2$1, \"switches\", makeProp(PROP_TYPE_BOOLEAN, false)), _objectSpread2$1))), NAME_FORM_CHECKBOX_GROUP); // --- Main component ---\n // @vue/component\n\n var BFormCheckboxGroup = /*#__PURE__*/extend({\n name: NAME_FORM_CHECKBOX_GROUP,\n // Includes render function\n mixins: [formRadioCheckGroupMixin],\n provide: function provide() {\n var _this = this;\n\n return {\n getBvCheckGroup: function getBvCheckGroup() {\n return _this;\n }\n };\n },\n props: props$1p,\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$2 = '__BV_hover_handler__';\n var MOUSEENTER = 'mouseenter';\n var MOUSELEAVE = 'mouseleave'; // --- Helper methods ---\n\n var createListener = function createListener(handler) {\n var listener = function listener(event) {\n handler(event.type === MOUSEENTER, event);\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 (IS_BROWSER) {\n var listener = el[PROP$2];\n var hasListener = isFunction$1(listener);\n var handlerChanged = !(hasListener && listener.fn === handler);\n\n if (hasListener && handlerChanged) {\n updateListeners(false, el, listener);\n delete el[PROP$2];\n }\n\n if (isFunction$1(handler) && handlerChanged) {\n el[PROP$2] = createListener(handler);\n updateListeners(true, el, el[PROP$2]);\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 props$1o = sortKeys(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3({}, props$25), props$1v), props$1u), omit(props$1O, ['disabled'])), omit(props$1x, ['autofocus'])), {}, {\n // When `true`, renders a `btn-group` wrapper and visually hides the label\n buttonOnly: makeProp(PROP_TYPE_BOOLEAN, false),\n // Applicable in button mode only\n buttonVariant: makeProp(PROP_TYPE_STRING, 'secondary'),\n // This is the value shown in the label\n // Defaults back to `value`\n formattedValue: makeProp(PROP_TYPE_STRING),\n // Value placed in `.sr-only` span inside label when value is present\n labelSelected: makeProp(PROP_TYPE_STRING),\n lang: makeProp(PROP_TYPE_STRING),\n // Extra classes to apply to the `dropdown-menu` div\n menuClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n // This is the value placed on the hidden input when no value selected\n placeholder: makeProp(PROP_TYPE_STRING),\n readonly: makeProp(PROP_TYPE_BOOLEAN, false),\n // Tri-state prop: `true`, `false` or `null`\n rtl: makeProp(PROP_TYPE_BOOLEAN, null),\n value: makeProp(PROP_TYPE_STRING, '')\n })); // --- Main component ---\n // @vue/component\n\n var BVFormBtnLabelControl = /*#__PURE__*/extend({\n name: NAME_FORM_BUTTON_LABEL_CONTROL,\n directives: {\n 'b-hover': VBHover\n },\n mixins: [idMixin, formSizeMixin, formStateMixin, dropdownMixin, normalizeSlotMixin],\n props: props$1o,\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(event) {\n this.hasFocus = event.type === 'focus';\n },\n handleHover: function handleHover(hovered) {\n this.isHovered = hovered;\n }\n },\n render: function render(h) {\n var _class;\n\n var idButton = this.idButton,\n idLabel = this.idLabel,\n idMenu = this.idMenu,\n idWrapper = this.idWrapper,\n disabled = this.disabled,\n readonly = this.readonly,\n required = this.required,\n name = this.name,\n state = this.state,\n visible = this.visible,\n size = this.size,\n isHovered = this.isHovered,\n hasFocus = this.hasFocus,\n labelSelected = this.labelSelected,\n buttonVariant = this.buttonVariant,\n buttonOnly = this.buttonOnly;\n var value = toString(this.value) || '';\n var invalid = state === false || required && !value;\n var btnScope = {\n isHovered: isHovered,\n hasFocus: hasFocus,\n state: state,\n opened: visible\n };\n var $button = h('button', {\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': invalid ? '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 ref: 'toggle'\n }, [this.hasNormalizedSlot(SLOT_NAME_BUTTON_CONTENT) ? this.normalizeSlot(SLOT_NAME_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 (name && !disabled) {\n $hidden = h('input', {\n attrs: {\n type: 'hidden',\n name: name || null,\n form: this.form || null,\n value: value\n }\n });\n } // Dropdown content\n\n\n var $menu = h('div', {\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 ref: 'menu'\n }, [this.normalizeSlot(SLOT_NAME_DEFAULT, {\n opened: visible\n })]); // Value label\n\n var $label = h('label', {\n class: buttonOnly ? 'sr-only' // Hidden in button only mode\n : ['form-control', // Mute the text if showing the placeholder\n {\n 'text-muted': !value\n }, this.stateClass, this.sizeFormClass],\n attrs: {\n id: idLabel,\n for: idButton,\n 'aria-invalid': invalid ? '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':\n /* istanbul ignore next */\n function click(event) {\n stopEvent(event, {\n preventDefault: false\n });\n }\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, this.boundaryClass, [{\n 'btn-group': buttonOnly,\n 'form-control': !buttonOnly,\n focus: hasFocus && !buttonOnly,\n show: visible,\n 'is-valid': state === true,\n 'is-invalid': state === false\n }, buttonOnly ? null : this.sizeFormClass]],\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 _watch$d;\n\n var _makeModelMixin$e = makeModelMixin('value', {\n type: PROP_TYPE_DATE_STRING\n }),\n modelMixin$d = _makeModelMixin$e.mixin,\n modelProps$d = _makeModelMixin$e.props,\n MODEL_PROP_NAME$d = _makeModelMixin$e.prop,\n MODEL_EVENT_NAME$d = _makeModelMixin$e.event; // --- Props ---\n\n\n var calendarProps = omit(props$24, ['block', 'hidden', 'id', 'noKeyNav', 'roleDescription', 'value', 'width']);\n var formBtnLabelControlProps$1 = omit(props$1o, ['formattedValue', 'id', 'lang', 'rtl', 'value']);\n var props$1n = makePropsConfigurable(sortKeys(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3({}, props$25), modelProps$d), calendarProps), formBtnLabelControlProps$1), {}, {\n // Width of the calendar dropdown\n calendarWidth: makeProp(PROP_TYPE_STRING, '270px'),\n closeButton: makeProp(PROP_TYPE_BOOLEAN, false),\n closeButtonVariant: makeProp(PROP_TYPE_STRING, 'outline-secondary'),\n // Dark mode\n dark: makeProp(PROP_TYPE_BOOLEAN, false),\n labelCloseButton: makeProp(PROP_TYPE_STRING, 'Close'),\n labelResetButton: makeProp(PROP_TYPE_STRING, 'Reset'),\n labelTodayButton: makeProp(PROP_TYPE_STRING, 'Select today'),\n noCloseOnSelect: makeProp(PROP_TYPE_BOOLEAN, false),\n resetButton: makeProp(PROP_TYPE_BOOLEAN, false),\n resetButtonVariant: makeProp(PROP_TYPE_STRING, 'outline-danger'),\n resetValue: makeProp(PROP_TYPE_DATE_STRING),\n todayButton: makeProp(PROP_TYPE_BOOLEAN, false),\n todayButtonVariant: makeProp(PROP_TYPE_STRING, 'outline-primary')\n })), NAME_FORM_DATEPICKER); // --- Main component ---\n // @vue/component\n\n var BFormDatepicker = /*#__PURE__*/extend({\n name: NAME_FORM_DATEPICKER,\n mixins: [idMixin, modelMixin$d],\n props: props$1n,\n data: function data() {\n return {\n // We always use `YYYY-MM-DD` value internally\n localYMD: formatYMD(this[MODEL_PROP_NAME$d]) || '',\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 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: (_watch$d = {}, _defineProperty(_watch$d, MODEL_PROP_NAME$d, function (newValue) {\n this.localYMD = formatYMD(newValue) || '';\n }), _defineProperty(_watch$d, \"localYMD\", function localYMD(newValue) {\n // We only update the v-model when the datepicker is open\n if (this.isVisible) {\n this.$emit(MODEL_EVENT_NAME$d, this.valueAsDate ? parseYMD(newValue) || null : newValue || '');\n }\n }), _defineProperty(_watch$d, \"calendarYM\", function calendarYM(newValue, oldValue) {\n // Displayed calendar month has changed\n // So possibly the calendar height has changed...\n // We need to update popper computed position\n if (newValue !== oldValue && oldValue) {\n try {\n this.$refs.control.updatePopper();\n } catch (_unused) {}\n }\n }), _watch$d),\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(EVENT_NAME_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(EVENT_NAME_SHOWN);\n });\n },\n onHidden: function onHidden() {\n this.isVisible = false;\n this.$emit(EVENT_NAME_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 localYMD = this.localYMD,\n disabled = this.disabled,\n readonly = this.readonly,\n dark = this.dark,\n $props = this.$props,\n $scopedSlots = this.$scopedSlots;\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 disabled: disabled || readonly,\n size: 'sm',\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 disabled: disabled || readonly,\n size: 'sm',\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 disabled: disabled,\n size: 'sm',\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 staticClass: 'b-form-date-calendar w-100',\n props: _objectSpread2$3(_objectSpread2$3({}, pluckProps(calendarProps, $props)), {}, {\n hidden: !this.isVisible,\n value: localYMD,\n valueAsDate: false,\n width: this.calendarWidth\n }),\n on: {\n selected: this.onSelected,\n input: this.onInput,\n context: this.onContext\n },\n scopedSlots: pick$1($scopedSlots, ['nav-prev-decade', 'nav-prev-year', 'nav-prev-month', 'nav-this-month', 'nav-next-month', 'nav-next-year', 'nav-next-decade']),\n key: 'calendar',\n ref: 'calendar'\n }, $footer);\n return h(BVFormBtnLabelControl, {\n staticClass: 'b-form-datepicker',\n props: _objectSpread2$3(_objectSpread2$3({}, pluckProps(formBtnLabelControlProps$1, $props)), {}, {\n formattedValue: localYMD ? this.formattedValue : '',\n id: this.safeId(),\n lang: this.computedLang,\n menuClass: [{\n 'bg-dark': dark,\n 'text-light': dark\n }, this.menuClass],\n placeholder: placeholder,\n rtl: this.isRTL,\n value: localYMD\n }),\n on: {\n show: this.onShow,\n shown: this.onShown,\n hidden: this.onHidden\n },\n scopedSlots: _defineProperty({}, SLOT_NAME_BUTTON_CONTENT, $scopedSlots[SLOT_NAME_BUTTON_CONTENT] || this.defaultButtonFn),\n ref: 'control'\n }, [$calendar]);\n }\n });\n\n var FormDatepickerPlugin = /*#__PURE__*/pluginFactory({\n components: {\n BFormDatepicker: BFormDatepicker,\n BDatepicker: BFormDatepicker\n }\n });\n\n var _watch$c;\n\n var _makeModelMixin$d = makeModelMixin('value', {\n type: [PROP_TYPE_ARRAY, File],\n defaultValue: null,\n validator: function validator(value) {\n /* istanbul ignore next */\n if (value === '') {\n warn(VALUE_EMPTY_DEPRECATED_MSG, NAME_FORM_FILE);\n return true;\n }\n\n return isUndefinedOrNull(value) || isValidValue(value);\n }\n }),\n modelMixin$c = _makeModelMixin$d.mixin,\n modelProps$c = _makeModelMixin$d.props,\n MODEL_PROP_NAME$c = _makeModelMixin$d.prop,\n MODEL_EVENT_NAME$c = _makeModelMixin$d.event;\n\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 }; // Helper method to \"safely\" get the entry from a data-transfer item\n\n /* istanbul ignore next: not supported in JSDOM */\n\n\n var getDataTransferItemEntry = function getDataTransferItemEntry(item) {\n return isFunction$1(item.getAsEntry) ? item.getAsEntry() : isFunction$1(item.webkitGetAsEntry) ? item.webkitGetAsEntry() : null;\n }; // Drop handler function to get all files\n\n /* istanbul ignore next: not supported in JSDOM */\n\n\n var getAllFileEntries = function getAllFileEntries(dataTransferItemList) {\n var traverseDirectories = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n return Promise.all(from(dataTransferItemList).filter(function (item) {\n return item.kind === 'file';\n }).map(function (item) {\n var entry = getDataTransferItemEntry(item);\n\n if (entry) {\n if (entry.isDirectory && traverseDirectories) {\n return getAllFileEntriesInDirectory(entry.createReader(), \"\".concat(entry.name, \"/\"));\n } else if (entry.isFile) {\n return new Promise(function (resolve) {\n entry.file(function (file) {\n file.$path = '';\n resolve(file);\n });\n });\n }\n }\n\n return null;\n }).filter(identity));\n }; // Get all the file entries (recursive) in a directory\n\n /* istanbul ignore next: not supported in JSDOM */\n\n\n var getAllFileEntriesInDirectory = function getAllFileEntriesInDirectory(directoryReader) {\n var path = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n return new Promise(function (resolve) {\n var entryPromises = [];\n\n var readDirectoryEntries = function readDirectoryEntries() {\n directoryReader.readEntries(function (entries) {\n if (entries.length === 0) {\n resolve(Promise.all(entryPromises).then(function (entries) {\n return flatten(entries);\n }));\n } else {\n entryPromises.push(Promise.all(entries.map(function (entry) {\n if (entry) {\n if (entry.isDirectory) {\n return getAllFileEntriesInDirectory(entry.createReader(), \"\".concat(path).concat(entry.name, \"/\"));\n } else if (entry.isFile) {\n return new Promise(function (resolve) {\n entry.file(function (file) {\n file.$path = \"\".concat(path).concat(file.name);\n resolve(file);\n });\n });\n }\n }\n\n return null;\n }).filter(identity)));\n readDirectoryEntries();\n }\n });\n };\n\n readDirectoryEntries();\n });\n }; // --- Props ---\n\n\n var props$1m = makePropsConfigurable(sortKeys(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3({}, props$25), modelProps$c), props$1x), props$1w), props$1u), props$1v), {}, {\n accept: makeProp(PROP_TYPE_STRING, ''),\n browseText: makeProp(PROP_TYPE_STRING, 'Browse'),\n // Instruct input to capture from camera\n capture: makeProp(PROP_TYPE_BOOLEAN, false),\n directory: makeProp(PROP_TYPE_BOOLEAN, false),\n dropPlaceholder: makeProp(PROP_TYPE_STRING, 'Drop files here'),\n fileNameFormatter: makeProp(PROP_TYPE_FUNCTION),\n multiple: makeProp(PROP_TYPE_BOOLEAN, false),\n noDrop: makeProp(PROP_TYPE_BOOLEAN, false),\n noDropPlaceholder: makeProp(PROP_TYPE_STRING, 'Not allowed'),\n // TODO:\n // Should we deprecate this and only support flat file structures?\n // Nested file structures are only supported when files are dropped\n // A Chromium \"bug\" prevents `webkitEntries` from being populated\n // on the file input's `change` event and is marked as \"WontFix\"\n // Mozilla implemented the behavior the same way as Chromium\n // See: https://bugs.chromium.org/p/chromium/issues/detail?id=138987\n // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1326031\n noTraverse: makeProp(PROP_TYPE_BOOLEAN, false),\n placeholder: makeProp(PROP_TYPE_STRING, 'No file chosen')\n })), NAME_FORM_FILE); // --- Main component ---\n // @vue/component\n\n var BFormFile = /*#__PURE__*/extend({\n name: NAME_FORM_FILE,\n mixins: [attrsMixin, idMixin, modelMixin$c, normalizeSlotMixin, formControlMixin, formStateMixin, formCustomMixin, normalizeSlotMixin],\n inheritAttrs: false,\n props: props$1m,\n data: function data() {\n return {\n files: [],\n dragging: false,\n // IE 11 doesn't respect setting `event.dataTransfer.dropEffect`,\n // so we handle it ourselves as well\n // https://stackoverflow.com/a/46915971/2744776\n dropAllowed: !this.noDrop,\n hasFocus: false\n };\n },\n computed: {\n // Convert `accept` to an array of `[{ RegExpr, isMime }, ...]`\n computedAccept: function computedAccept() {\n var accept = this.accept;\n accept = (accept || '').trim().split(/[,\\s]+/).filter(identity); // Allow any file type/extension\n\n if (accept.length === 0) {\n return null;\n }\n\n return accept.map(function (extOrType) {\n var prop = 'name';\n var startMatch = '^';\n var endMatch = '$';\n\n if (RX_EXTENSION.test(extOrType)) {\n // File extension /\\.ext$/\n startMatch = '';\n } else {\n // MIME type /^mime\\/.+$/ or /^mime\\/type$/\n prop = 'type';\n\n if (RX_STAR.test(extOrType)) {\n endMatch = '.+$'; // Remove trailing `*`\n\n extOrType = extOrType.slice(0, -1);\n }\n } // Escape all RegExp special chars\n\n\n extOrType = escapeRegExp(extOrType);\n var rx = new RegExp(\"\".concat(startMatch).concat(extOrType).concat(endMatch));\n return {\n rx: rx,\n prop: prop\n };\n });\n },\n computedCapture: function computedCapture() {\n var capture = this.capture;\n return capture === true || capture === '' ? true : capture || null;\n },\n computedAttrs: function computedAttrs() {\n var name = this.name,\n disabled = this.disabled,\n required = this.required,\n form = this.form,\n computedCapture = this.computedCapture,\n accept = this.accept,\n multiple = this.multiple,\n directory = this.directory;\n return _objectSpread2$3(_objectSpread2$3({}, this.bvAttrs), {}, {\n type: 'file',\n id: this.safeId(),\n name: name,\n disabled: disabled,\n required: required,\n form: form || null,\n capture: computedCapture,\n accept: accept || null,\n multiple: multiple,\n directory: directory,\n webkitdirectory: directory,\n 'aria-required': required ? 'true' : null\n });\n },\n computedFileNameFormatter: function computedFileNameFormatter() {\n var fileNameFormatter = this.fileNameFormatter;\n return hasPropFunction(fileNameFormatter) ? fileNameFormatter : this.defaultFileNameFormatter;\n },\n clonedFiles: function clonedFiles() {\n return cloneDeep(this.files);\n },\n flattenedFiles: function flattenedFiles() {\n return flattenDeep(this.files);\n },\n fileNames: function fileNames() {\n return this.flattenedFiles.map(function (file) {\n return file.name;\n });\n },\n labelContent: function labelContent() {\n // Draging active\n\n /* istanbul ignore next: used by drag/drop which can't be tested easily */\n if (this.dragging && !this.noDrop) {\n return (// TODO: Add additional scope with file count, and other not-allowed reasons\n this.normalizeSlot(SLOT_NAME_DROP_PLACEHOLDER, {\n allowed: this.dropAllowed\n }) || (this.dropAllowed ? this.dropPlaceholder : this.$createElement('span', {\n staticClass: 'text-danger'\n }, this.noDropPlaceholder))\n );\n } // No file chosen\n\n\n if (this.files.length === 0) {\n return this.normalizeSlot(SLOT_NAME_PLACEHOLDER) || this.placeholder;\n }\n\n var flattenedFiles = this.flattenedFiles,\n clonedFiles = this.clonedFiles,\n fileNames = this.fileNames,\n computedFileNameFormatter = this.computedFileNameFormatter; // There is a slot for formatting the files/names\n\n if (this.hasNormalizedSlot(SLOT_NAME_FILE_NAME)) {\n return this.normalizeSlot(SLOT_NAME_FILE_NAME, {\n files: flattenedFiles,\n filesTraversed: clonedFiles,\n names: fileNames\n });\n }\n\n return computedFileNameFormatter(flattenedFiles, clonedFiles, fileNames);\n }\n },\n watch: (_watch$c = {}, _defineProperty(_watch$c, MODEL_PROP_NAME$c, function (newValue) {\n if (!newValue || isArray(newValue) && newValue.length === 0) {\n this.reset();\n }\n }), _defineProperty(_watch$c, \"files\", function files(newValue, oldValue) {\n if (!looseEqual(newValue, oldValue)) {\n var multiple = this.multiple,\n noTraverse = this.noTraverse;\n var files = !multiple || noTraverse ? flattenDeep(newValue) : newValue;\n this.$emit(MODEL_EVENT_NAME$c, multiple ? files : files[0] || null);\n }\n }), _watch$c),\n created: function created() {\n // Create private non-reactive props\n this.$_form = null;\n },\n mounted: function mounted() {\n // Listen for form reset events, to reset the file input\n var $form = closest('form', this.$el);\n\n if ($form) {\n eventOn($form, 'reset', this.reset, EVENT_OPTIONS_PASSIVE);\n this.$_form = $form;\n }\n },\n beforeDestroy: function beforeDestroy() {\n var $form = this.$_form;\n\n if ($form) {\n eventOff($form, 'reset', this.reset, EVENT_OPTIONS_PASSIVE);\n }\n },\n methods: {\n isFileValid: function isFileValid(file) {\n if (!file) {\n return false;\n }\n\n var accept = this.computedAccept;\n return accept ? accept.some(function (a) {\n return a.rx.test(file[a.prop]);\n }) : true;\n },\n isFilesArrayValid: function isFilesArrayValid(files) {\n var _this = this;\n\n return isArray(files) ? files.every(function (file) {\n return _this.isFileValid(file);\n }) : this.isFileValid(files);\n },\n defaultFileNameFormatter: function defaultFileNameFormatter(flattenedFiles, clonedFiles, fileNames) {\n return fileNames.join(', ');\n },\n setFiles: function setFiles(files) {\n // Reset the dragging flags\n this.dropAllowed = !this.noDrop;\n this.dragging = false; // Set the selected files\n\n this.files = this.multiple ? this.directory ? files : flattenDeep(files) : flattenDeep(files).slice(0, 1);\n },\n\n /* istanbul ignore next: used by Drag/Drop */\n setInputFiles: function setInputFiles(files) {\n // Try an set the file input files array so that `required`\n // constraint works for dropped files (will fail in IE11 though)\n // To be used only when dropping files\n try {\n // Firefox < 62 workaround exploiting https://bugzilla.mozilla.org/show_bug.cgi?id=1422655\n var dataTransfer = new ClipboardEvent('').clipboardData || new DataTransfer(); // Add flattened files to temp `dataTransfer` object to get a true `FileList` array\n\n flattenDeep(cloneDeep(files)).forEach(function (file) {\n // Make sure to remove the custom `$path` attribute\n delete file.$path;\n dataTransfer.items.add(file);\n });\n this.$refs.input.files = dataTransfer.files;\n } catch (_unused) {}\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 (_unused2) {}\n\n this.files = [];\n },\n handleFiles: function handleFiles(files) {\n var isDrop = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n if (isDrop) {\n // When dropped, make sure to filter files with the internal `accept` logic\n var filteredFiles = files.filter(this.isFilesArrayValid); // Only update files when we have any after filtering\n\n if (filteredFiles.length > 0) {\n this.setFiles(filteredFiles); // Try an set the file input's files array so that `required`\n // constraint works for dropped files (will fail in IE 11 though)\n\n this.setInputFiles(filteredFiles);\n }\n } else {\n // We always update the files from the `change` event\n this.setFiles(files);\n }\n },\n focusHandler: function focusHandler(event) {\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 || event.type === 'focusout') {\n this.hasFocus = false;\n } else {\n // Add focus styling for custom file input\n this.hasFocus = true;\n }\n },\n onChange: function onChange(event) {\n var _this2 = this;\n\n var type = event.type,\n target = event.target,\n _event$dataTransfer = event.dataTransfer,\n dataTransfer = _event$dataTransfer === void 0 ? {} : _event$dataTransfer;\n var isDrop = type === 'drop'; // Always emit original event\n\n this.$emit(EVENT_NAME_CHANGE, event);\n var items = from(dataTransfer.items || []);\n\n if (HAS_PROMISE_SUPPORT && items.length > 0 && !isNull(getDataTransferItemEntry(items[0]))) {\n // Drop handling for modern browsers\n // Supports nested directory structures in `directory` mode\n\n /* istanbul ignore next: not supported in JSDOM */\n getAllFileEntries(items, this.directory).then(function (files) {\n return _this2.handleFiles(files, isDrop);\n });\n } else {\n // Standard file input handling (native file input change event),\n // or fallback drop mode (IE 11 / Opera) which don't support `directory` mode\n var files = from(target.files || dataTransfer.files || []).map(function (file) {\n // Add custom `$path` property to each file (to be consistent with drop mode)\n file.$path = file.webkitRelativePath || '';\n return file;\n });\n this.handleFiles(files, isDrop);\n }\n },\n onDragenter: function onDragenter(event) {\n stopEvent(event);\n this.dragging = true;\n var _event$dataTransfer2 = event.dataTransfer,\n dataTransfer = _event$dataTransfer2 === void 0 ? {} : _event$dataTransfer2; // Early exit when the input or dropping is disabled\n\n if (this.noDrop || this.disabled || !this.dropAllowed) {\n // Show deny feedback\n\n /* istanbul ignore next: not supported in JSDOM */\n dataTransfer.dropEffect = 'none';\n this.dropAllowed = false;\n return;\n }\n /* istanbul ignore next: not supported in JSDOM */\n\n\n dataTransfer.dropEffect = 'copy';\n },\n // Note this event fires repeatedly while the mouse is over the dropzone at\n // intervals in the milliseconds, so avoid doing much processing in here\n onDragover: function onDragover(event) {\n stopEvent(event);\n this.dragging = true;\n var _event$dataTransfer3 = event.dataTransfer,\n dataTransfer = _event$dataTransfer3 === void 0 ? {} : _event$dataTransfer3; // Early exit when the input or dropping is disabled\n\n if (this.noDrop || this.disabled || !this.dropAllowed) {\n // Show deny feedback\n\n /* istanbul ignore next: not supported in JSDOM */\n dataTransfer.dropEffect = 'none';\n this.dropAllowed = false;\n return;\n }\n /* istanbul ignore next: not supported in JSDOM */\n\n\n dataTransfer.dropEffect = 'copy';\n },\n onDragleave: function onDragleave(event) {\n var _this3 = this;\n\n stopEvent(event);\n this.$nextTick(function () {\n _this3.dragging = false; // Reset `dropAllowed` to default\n\n _this3.dropAllowed = !_this3.noDrop;\n });\n },\n // Triggered by a file drop onto drop target\n onDrop: function onDrop(event) {\n var _this4 = this;\n\n stopEvent(event);\n this.dragging = false; // Early exit when the input or dropping is disabled\n\n if (this.noDrop || this.disabled || !this.dropAllowed) {\n this.$nextTick(function () {\n // Reset `dropAllowed` to default\n _this4.dropAllowed = !_this4.noDrop;\n });\n return;\n }\n\n this.onChange(event);\n }\n },\n render: function render(h) {\n var custom = this.custom,\n plain = this.plain,\n size = this.size,\n dragging = this.dragging,\n stateClass = this.stateClass,\n bvAttrs = this.bvAttrs; // Form Input\n\n var $input = h('input', {\n class: [{\n 'form-control-file': plain,\n 'custom-file-input': custom,\n focus: custom && this.hasFocus\n }, stateClass],\n // With IE 11, the input gets in the \"way\" of the drop events,\n // so we move it out of the way by putting it behind the label\n // Bootstrap v4 has it in front\n style: custom ? {\n zIndex: -5\n } : {},\n attrs: this.computedAttrs,\n on: {\n change: this.onChange,\n focusin: this.focusHandler,\n focusout: this.focusHandler,\n reset: this.reset\n },\n ref: 'input'\n });\n\n if (plain) {\n return $input;\n } // Overlay label\n\n\n var $label = h('label', {\n staticClass: 'custom-file-label',\n class: {\n dragging: dragging\n },\n attrs: {\n for: this.safeId(),\n // This goes away in Bootstrap v5\n 'data-browse': this.browseText || null\n }\n }, [h('span', {\n staticClass: 'd-block form-file-text',\n // `pointer-events: none` is used to make sure\n // the drag events fire only on the label\n style: {\n pointerEvents: 'none'\n }\n }, [this.labelContent])]); // Return rendered custom file input\n\n return h('div', {\n staticClass: 'custom-file b-form-file',\n class: [_defineProperty({}, \"b-custom-control-\".concat(size), size), stateClass, bvAttrs.class],\n style: bvAttrs.style,\n attrs: {\n id: this.safeId('_BV_file_outer_')\n },\n on: {\n dragenter: this.onDragenter,\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(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 ALIGN_SELF_VALUES = ['auto', 'start', 'end', 'center', 'baseline', 'stretch']; // --- Helper methods ---\n // Compute a breakpoint class name\n\n var computeBreakpoint = function computeBreakpoint(type, breakpoint, value) {\n var className = type;\n\n if (isUndefinedOrNull(value) || value === 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`, '' indicates the prop's presence\n\n\n if (type === 'col' && (value === '' || value === true)) {\n // .col-md\n return lowerCase(className);\n } // .order-md-6\n\n\n className += \"-\".concat(value);\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); // --- Props ---\n // Prop generator for lazy generation of props\n\n var generateProps$2 = function generateProps() {\n // Grab the breakpoints from the cached config (exclude the '' (xs) breakpoint)\n var breakpoints = getBreakpointsUpCached().filter(identity); // i.e. 'col-sm', 'col-md-6', 'col-lg-auto', ...\n\n var breakpointCol = breakpoints.reduce(function (props, breakpoint) {\n props[breakpoint] = makeProp(PROP_TYPE_BOOLEAN_NUMBER_STRING);\n return props;\n }, create(null)); // i.e. 'offset-md-1', 'offset-lg-12', ...\n\n var breakpointOffset = breakpoints.reduce(function (props, breakpoint) {\n props[suffixPropName(breakpoint, 'offset')] = makeProp(PROP_TYPE_NUMBER_STRING);\n return props;\n }, create(null)); // i.e. 'order-md-1', 'order-lg-12', ...\n\n var breakpointOrder = breakpoints.reduce(function (props, breakpoint) {\n props[suffixPropName(breakpoint, 'order')] = makeProp(PROP_TYPE_NUMBER_STRING);\n return props;\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 makePropsConfigurable(sortKeys(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3({}, breakpointCol), breakpointOffset), breakpointOrder), {}, {\n // Flex alignment\n alignSelf: makeProp(PROP_TYPE_STRING, null, function (value) {\n return arrayIncludes(ALIGN_SELF_VALUES, value);\n }),\n // Generic flexbox 'col' (xs)\n col: makeProp(PROP_TYPE_BOOLEAN, false),\n // i.e. 'col-1', 'col-2', 'col-auto', ...\n cols: makeProp(PROP_TYPE_NUMBER_STRING),\n offset: makeProp(PROP_TYPE_NUMBER_STRING),\n order: makeProp(PROP_TYPE_NUMBER_STRING),\n tag: makeProp(PROP_TYPE_STRING, 'div')\n })), NAME_COL);\n }; // --- Main component ---\n // We do not use extend here as that would evaluate the props\n // immediately, which we do not want to happen\n // @vue/component\n\n var BCol = {\n name: NAME_COL,\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$2();\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 cols = props.cols,\n offset = props.offset,\n order = props.order,\n alignSelf = props.alignSelf;\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 && !cols\n }, _defineProperty(_classList$push, \"col-\".concat(cols), cols), _defineProperty(_classList$push, \"offset-\".concat(offset), offset), _defineProperty(_classList$push, \"order-\".concat(order), order), _defineProperty(_classList$push, \"align-self-\".concat(alignSelf), alignSelf), _classList$push));\n return h(props.tag, a(data, {\n class: classList\n }), children);\n }\n };\n\n var INPUTS = ['input', 'select', 'textarea']; // Selector for finding first input in the form group\n\n var INPUT_SELECTOR = INPUTS.map(function (v) {\n return \"\".concat(v, \":not([disabled])\");\n }).join(); // A list of interactive elements (tag names) inside `<b-form-group>`'s legend\n\n var LEGEND_INTERACTIVE_ELEMENTS = [].concat(INPUTS, ['a', 'button', 'label']); // --- Props ---\n // Prop generator for lazy generation of props\n\n var generateProps$1 = function generateProps() {\n return makePropsConfigurable(sortKeys(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3({}, props$25), props$1u), getBreakpointsUpCached().reduce(function (props, breakpoint) {\n // i.e. 'content-cols', 'content-cols-sm', 'content-cols-md', ...\n props[suffixPropName(breakpoint, 'contentCols')] = makeProp(PROP_TYPE_BOOLEAN_NUMBER_STRING); // i.e. 'label-align', 'label-align-sm', 'label-align-md', ...\n\n props[suffixPropName(breakpoint, 'labelAlign')] = makeProp(PROP_TYPE_STRING); // i.e. 'label-cols', 'label-cols-sm', 'label-cols-md', ...\n\n props[suffixPropName(breakpoint, 'labelCols')] = makeProp(PROP_TYPE_BOOLEAN_NUMBER_STRING);\n return props;\n }, create(null))), {}, {\n description: makeProp(PROP_TYPE_STRING),\n disabled: makeProp(PROP_TYPE_BOOLEAN, false),\n feedbackAriaLive: makeProp(PROP_TYPE_STRING, 'assertive'),\n invalidFeedback: makeProp(PROP_TYPE_STRING),\n label: makeProp(PROP_TYPE_STRING),\n labelClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n labelFor: makeProp(PROP_TYPE_STRING),\n labelSize: makeProp(PROP_TYPE_STRING),\n labelSrOnly: makeProp(PROP_TYPE_BOOLEAN, false),\n tooltip: makeProp(PROP_TYPE_BOOLEAN, false),\n validFeedback: makeProp(PROP_TYPE_STRING),\n validated: makeProp(PROP_TYPE_BOOLEAN, false)\n })), NAME_FORM_GROUP);\n }; // --- Main component ---\n // We do not use `extend()` here as that would evaluate the props\n // immediately, which we do not want to happen\n // @vue/component\n\n var BFormGroup = {\n name: NAME_FORM_GROUP,\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 data: function data() {\n return {\n ariaDescribedby: null\n };\n },\n computed: {\n contentColProps: function contentColProps() {\n return this.getColProps(this.$props, 'content');\n },\n labelAlignClasses: function labelAlignClasses() {\n return this.getAlignClasses(this.$props, 'label');\n },\n labelColProps: function labelColProps() {\n return this.getColProps(this.$props, 'label');\n },\n isHorizontal: function isHorizontal() {\n // Determine if the form group will be rendered horizontal\n // based on the existence of 'content-col' or 'label-col' props\n return keys(this.contentColProps).length > 0 || keys(this.labelColProps).length > 0;\n }\n },\n watch: {\n ariaDescribedby: function ariaDescribedby(newValue, oldValue) {\n if (newValue !== oldValue) {\n this.updateAriaDescribedby(newValue, oldValue);\n }\n }\n },\n mounted: function mounted() {\n var _this = this;\n\n this.$nextTick(function () {\n // Set `aria-describedby` on the input specified by `labelFor`\n // We do this in a `$nextTick()` to ensure the children have finished rendering\n _this.updateAriaDescribedby(_this.ariaDescribedby);\n });\n },\n methods: {\n getAlignClasses: function getAlignClasses(props, prefix) {\n return getBreakpointsUpCached().reduce(function (result, breakpoint) {\n var propValue = props[suffixPropName(breakpoint, \"\".concat(prefix, \"Align\"))] || null;\n\n if (propValue) {\n result.push(['text', breakpoint, propValue].filter(identity).join('-'));\n }\n\n return result;\n }, []);\n },\n getColProps: function getColProps(props, prefix) {\n return getBreakpointsUpCached().reduce(function (result, breakpoint) {\n var propValue = props[suffixPropName(breakpoint, \"\".concat(prefix, \"Cols\"))]; // Handle case where the prop's value is an empty string,\n // which represents `true`\n\n propValue = propValue === '' ? true : propValue || false;\n\n if (!isBoolean(propValue) && propValue !== 'auto') {\n // Convert to column size to number\n propValue = toInteger(propValue, 0); // Ensure column size is greater than `0`\n\n propValue = propValue > 0 ? propValue : false;\n } // Add the prop to the list of props to give to `<b-col>`\n // If breakpoint is '' (`${prefix}Cols` is `true`), then we use\n // the 'col' prop to make equal width at 'xs'\n\n\n if (propValue) {\n result[breakpoint || (isBoolean(propValue) ? 'col' : 'cols')] = propValue;\n }\n\n return result;\n }, {});\n },\n // Sets the `aria-describedby` attribute on the input if `labelFor` 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 updateAriaDescribedby: function updateAriaDescribedby(newValue, oldValue) {\n var labelFor = this.labelFor;\n\n if (IS_BROWSER && labelFor) {\n // We need to escape `labelFor` since it can be user-provided\n var $input = select(\"#\".concat(cssEscape(labelFor)), this.$refs.content);\n\n if ($input) {\n var attr = 'aria-describedby';\n var newIds = (newValue || '').split(RX_SPACE_SPLIT);\n var oldIds = (oldValue || '').split(RX_SPACE_SPLIT); // Update ID list, preserving any original IDs\n // and ensuring the ID's are unique\n\n var ids = (getAttr($input, attr) || '').split(RX_SPACE_SPLIT).filter(function (id) {\n return !arrayIncludes(oldIds, id);\n }).concat(newIds).filter(function (id, index, ids) {\n return ids.indexOf(id) === index;\n }).filter(identity).join(' ').trim();\n\n if (ids) {\n setAttr($input, attr, ids);\n } else {\n removeAttr($input, attr);\n }\n }\n }\n },\n onLegendClick: function onLegendClick(event) {\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 if (this.labelFor) {\n return;\n }\n\n var target = event.target;\n var tagName = target ? target.tagName : ''; // If clicked an interactive element inside legend,\n // we just let the default happen\n\n /* istanbul ignore next */\n\n if (LEGEND_INTERACTIVE_ELEMENTS.indexOf(tagName) !== -1) {\n return;\n } // If only a single input, focus it, emulating label behaviour\n\n\n var inputs = selectAll(INPUT_SELECTOR, this.$refs.content).filter(isVisible);\n\n if (inputs.length === 1) {\n attemptFocus(inputs[0]);\n }\n }\n },\n render: function render(h) {\n var state = this.computedState,\n feedbackAriaLive = this.feedbackAriaLive,\n isHorizontal = this.isHorizontal,\n labelFor = this.labelFor,\n normalizeSlot = this.normalizeSlot,\n safeId = this.safeId,\n tooltip = this.tooltip;\n var id = safeId();\n var isFieldset = !labelFor;\n var $label = h();\n var labelContent = normalizeSlot(SLOT_NAME_LABEL) || this.label;\n var labelId = labelContent ? safeId('_BV_label_') : null;\n\n if (labelContent || isHorizontal) {\n var labelSize = this.labelSize,\n labelColProps = this.labelColProps;\n var labelTag = isFieldset ? 'legend' : 'label';\n\n if (this.labelSrOnly) {\n if (labelContent) {\n $label = h(labelTag, {\n class: 'sr-only',\n attrs: {\n id: labelId,\n for: labelFor || null\n }\n }, [labelContent]);\n }\n\n $label = h(isHorizontal ? BCol : 'div', {\n props: isHorizontal ? labelColProps : {}\n }, [$label]);\n } else {\n $label = h(isHorizontal ? BCol : labelTag, {\n on: isFieldset ? {\n click: this.onLegendClick\n } : {},\n props: isHorizontal ? _objectSpread2$3(_objectSpread2$3({}, labelColProps), {}, {\n tag: labelTag\n }) : {},\n attrs: {\n id: labelId,\n for: labelFor || null,\n // We add a `tabindex` to legend so that screen readers\n // will properly read the `aria-labelledby` in IE\n tabindex: isFieldset ? '-1' : null\n },\n class: [// Hide the focus ring on the legend\n isFieldset ? 'bv-no-focus-ring' : '', // When horizontal or if a legend is rendered, add 'col-form-label' class\n // for correct sizing as Bootstrap has inconsistent font styling for\n // legend in non-horizontal form groups\n // See: https://github.com/twbs/bootstrap/issues/27805\n isHorizontal || isFieldset ? 'col-form-label' : '', // Emulate label padding top of `0` on legend when not horizontal\n !isHorizontal && isFieldset ? 'pt-0' : '', // If not horizontal and not a legend, we add 'd-block' class to label\n // so that label-align works\n !isHorizontal && !isFieldset ? 'd-block' : '', labelSize ? \"col-form-label-\".concat(labelSize) : '', this.labelAlignClasses, this.labelClass]\n }, [labelContent]);\n }\n }\n\n var $invalidFeedback = h();\n var invalidFeedbackContent = normalizeSlot(SLOT_NAME_INVALID_FEEDBACK) || this.invalidFeedback;\n var invalidFeedbackId = invalidFeedbackContent ? safeId('_BV_feedback_invalid_') : null;\n\n if (invalidFeedbackContent) {\n $invalidFeedback = h(BFormInvalidFeedback, {\n props: {\n ariaLive: feedbackAriaLive,\n id: invalidFeedbackId,\n // If state is explicitly `false`, always show the feedback\n state: state,\n tooltip: tooltip\n },\n attrs: {\n tabindex: invalidFeedbackContent ? '-1' : null\n }\n }, [invalidFeedbackContent]);\n }\n\n var $validFeedback = h();\n var validFeedbackContent = normalizeSlot(SLOT_NAME_VALID_FEEDBACK) || this.validFeedback;\n var validFeedbackId = validFeedbackContent ? safeId('_BV_feedback_valid_') : null;\n\n if (validFeedbackContent) {\n $validFeedback = h(BFormValidFeedback, {\n props: {\n ariaLive: feedbackAriaLive,\n id: validFeedbackId,\n // If state is explicitly `true`, always show the feedback\n state: state,\n tooltip: tooltip\n },\n attrs: {\n tabindex: validFeedbackContent ? '-1' : null\n }\n }, [validFeedbackContent]);\n }\n\n var $description = h();\n var descriptionContent = normalizeSlot(SLOT_NAME_DESCRIPTION) || this.description;\n var descriptionId = descriptionContent ? safeId('_BV_description_') : null;\n\n if (descriptionContent) {\n $description = h(BFormText, {\n attrs: {\n id: descriptionId,\n tabindex: '-1'\n }\n }, [descriptionContent]);\n } // Update `ariaDescribedby`\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\n\n var ariaDescribedby = this.ariaDescribedby = [descriptionId, state === false ? invalidFeedbackId : null, state === true ? validFeedbackId : null].filter(identity).join(' ') || null;\n var $content = h(isHorizontal ? BCol : 'div', {\n props: isHorizontal ? this.contentColProps : {},\n ref: 'content'\n }, [normalizeSlot(SLOT_NAME_DEFAULT, {\n ariaDescribedby: ariaDescribedby,\n descriptionId: descriptionId,\n id: id,\n labelId: labelId\n }) || h(), $invalidFeedback, $validFeedback, $description]); // 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', {\n staticClass: 'form-group',\n class: [{\n 'was-validated': this.validated\n }, this.stateClass],\n attrs: {\n id: id,\n disabled: isFieldset ? this.disabled : null,\n role: isFieldset ? null : 'group',\n 'aria-invalid': this.computedAriaInvalid,\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 ? labelId : null\n }\n }, 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 var formSelectionMixin = extend({\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 _makeModelMixin$c = makeModelMixin('value', {\n type: PROP_TYPE_NUMBER_STRING,\n defaultValue: '',\n event: EVENT_NAME_UPDATE\n }),\n modelMixin$b = _makeModelMixin$c.mixin,\n modelProps$b = _makeModelMixin$c.props,\n MODEL_PROP_NAME$b = _makeModelMixin$c.prop,\n MODEL_EVENT_NAME$b = _makeModelMixin$c.event;\n\n var props$1l = makePropsConfigurable(sortKeys(_objectSpread2$3(_objectSpread2$3({}, modelProps$b), {}, {\n ariaInvalid: makeProp(PROP_TYPE_BOOLEAN_STRING, false),\n autocomplete: makeProp(PROP_TYPE_STRING),\n // Debounce timeout (in ms). Not applicable with `lazy` prop\n debounce: makeProp(PROP_TYPE_NUMBER_STRING, 0),\n formatter: makeProp(PROP_TYPE_FUNCTION),\n // Only update the `v-model` on blur/change events\n lazy: makeProp(PROP_TYPE_BOOLEAN, false),\n lazyFormatter: makeProp(PROP_TYPE_BOOLEAN, false),\n number: makeProp(PROP_TYPE_BOOLEAN, false),\n placeholder: makeProp(PROP_TYPE_STRING),\n plaintext: makeProp(PROP_TYPE_BOOLEAN, false),\n readonly: makeProp(PROP_TYPE_BOOLEAN, false),\n trim: makeProp(PROP_TYPE_BOOLEAN, false)\n })), 'formTextControls'); // --- Mixin ---\n // @vue/component\n\n var formTextMixin = extend({\n mixins: [modelMixin$b],\n props: props$1l,\n data: function data() {\n var value = this[MODEL_PROP_NAME$b];\n return {\n localValue: toString(value),\n vModelValue: this.modifyValue(value)\n };\n },\n computed: {\n computedClass: function computedClass() {\n var plaintext = this.plaintext,\n type = this.type;\n var isRange = type === 'range';\n var isColor = type === 'color';\n return [{\n // Range input needs class `custom-range`\n 'custom-range': isRange,\n // `plaintext` not supported by `type=\"range\"` or `type=\"color\"`\n 'form-control-plaintext': plaintext && !isRange && !isColor,\n // `form-control` not used by `type=\"range\"` or `plaintext`\n // Always used by `type=\"color\"`\n 'form-control': isColor || !plaintext && !isRange\n }, this.sizeFormClass, this.stateClass];\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 hasPropFunction(this.formatter);\n }\n },\n watch: _defineProperty({}, MODEL_PROP_NAME$b, function (newValue) {\n var stringifyValue = toString(newValue);\n var modifiedValue = this.modifyValue(newValue);\n\n if (stringifyValue !== this.localValue || modifiedValue !== 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 = modifiedValue;\n }\n }),\n created: function created() {\n // Create private non-reactive props\n this.$_inputDebounceTimer = null;\n },\n beforeDestroy: function beforeDestroy() {\n this.clearDebounce();\n },\n methods: {\n clearDebounce: function clearDebounce() {\n clearTimeout(this.$_inputDebounceTimer);\n this.$_inputDebounceTimer = null;\n },\n formatValue: function formatValue(value, event) {\n var force = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n value = toString(value);\n\n if (this.hasFormatter && (!this.lazyFormatter || force)) {\n value = this.formatter(value, event);\n }\n\n return value;\n },\n modifyValue: function modifyValue(value) {\n value = toString(value); // Emulate `.trim` modifier behaviour\n\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 } // Make sure to always clear the debounce when `updateValue()`\n // is called, even when the v-model hasn't changed\n\n\n this.clearDebounce(); // Define the shared update logic in a method to be able to use\n // it for immediate and debounced value changes\n\n var doUpdate = function doUpdate() {\n value = _this.modifyValue(value);\n\n if (value !== _this.vModelValue) {\n _this.vModelValue = value;\n\n _this.$emit(MODEL_EVENT_NAME$b, value);\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 }; // 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\n var debounce = this.computedDebounce;\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 },\n onInput: function onInput(event) {\n // `event.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 (event.target.composing) {\n return;\n }\n\n var value = event.target.value;\n var formattedValue = this.formatValue(value, event); // Exit when the `formatter` function strictly returned `false`\n // or prevented the input event\n\n /* istanbul ignore next */\n\n if (formattedValue === false || event.defaultPrevented) {\n stopEvent(event, {\n propagation: false\n });\n return;\n }\n\n this.localValue = formattedValue;\n this.updateValue(formattedValue);\n this.$emit(EVENT_NAME_INPUT, formattedValue);\n },\n onChange: function onChange(event) {\n var value = event.target.value;\n var formattedValue = this.formatValue(value, event); // Exit when the `formatter` function strictly returned `false`\n // or prevented the input event\n\n /* istanbul ignore next */\n\n if (formattedValue === false || event.defaultPrevented) {\n stopEvent(event, {\n propagation: false\n });\n return;\n }\n\n this.localValue = formattedValue;\n this.updateValue(formattedValue, true);\n this.$emit(EVENT_NAME_CHANGE, formattedValue);\n },\n onBlur: function onBlur(event) {\n // Apply the `localValue` on blur to prevent cursor jumps\n // on mobile browsers (e.g. caused by autocomplete)\n var value = event.target.value;\n var formattedValue = this.formatValue(value, event, 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(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(EVENT_NAME_BLUR, event);\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 var formValidityMixin = extend({\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 // Valid supported input types\n\n var TYPES$1 = ['text', 'password', 'email', 'number', 'url', 'tel', 'search', 'range', 'color', 'date', 'time', 'datetime', 'datetime-local', 'month', 'week']; // --- Props ---\n\n var props$1k = makePropsConfigurable(sortKeys(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3({}, props$25), props$1x), props$1v), props$1u), props$1l), {}, {\n list: makeProp(PROP_TYPE_STRING),\n max: makeProp(PROP_TYPE_NUMBER_STRING),\n min: makeProp(PROP_TYPE_NUMBER_STRING),\n // Disable mousewheel to prevent wheel from changing values (i.e. number/date)\n noWheel: makeProp(PROP_TYPE_BOOLEAN, false),\n step: makeProp(PROP_TYPE_NUMBER_STRING),\n type: makeProp(PROP_TYPE_STRING, 'text', function (type) {\n return arrayIncludes(TYPES$1, type);\n })\n })), NAME_FORM_INPUT); // --- Main component ---\n // @vue/component\n\n var BFormInput = /*#__PURE__*/extend({\n name: NAME_FORM_INPUT,\n // Mixin order is important!\n mixins: [listenersMixin, idMixin, formControlMixin, formSizeMixin, formStateMixin, formTextMixin, formSelectionMixin, formValidityMixin],\n props: props$1k,\n computed: {\n localType: function localType() {\n // We only allow certain types\n var type = this.type;\n return arrayIncludes(TYPES$1, type) ? type : 'text';\n },\n computedAttrs: function computedAttrs() {\n var type = this.localType,\n name = this.name,\n form = this.form,\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: name,\n form: form,\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$3(_objectSpread2$3({}, this.bvListeners), {}, {\n input: this.onInput,\n change: this.onChange,\n blur: this.onBlur\n });\n }\n },\n watch: {\n noWheel: function noWheel(newValue) {\n this.setWheelStopper(newValue);\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(event) {\n stopEvent(event, {\n propagation: false\n });\n attemptBlur(this.$el);\n }\n },\n render: function render(h) {\n return h('input', {\n class: this.computedClass,\n attrs: this.computedAttrs,\n domProps: {\n value: this.localValue\n },\n on: this.computedListeners,\n ref: 'input'\n });\n }\n });\n\n var FormInputPlugin = /*#__PURE__*/pluginFactory({\n components: {\n BFormInput: BFormInput,\n BInput: BFormInput\n }\n });\n\n var props$1j = makePropsConfigurable(props$1q, NAME_FORM_RADIO_GROUP); // --- Main component ---\n // @vue/component\n\n var BFormRadioGroup = /*#__PURE__*/extend({\n name: NAME_FORM_RADIO_GROUP,\n mixins: [formRadioCheckGroupMixin],\n provide: function provide() {\n var _this = this;\n\n return {\n getBvRadioGroup: function getBvRadioGroup() {\n return _this;\n }\n };\n },\n props: props$1j,\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 _watch$b;\n\n var _makeModelMixin$b = makeModelMixin('value', {\n type: PROP_TYPE_NUMBER_STRING,\n event: EVENT_NAME_CHANGE\n }),\n modelMixin$a = _makeModelMixin$b.mixin,\n modelProps$a = _makeModelMixin$b.props,\n MODEL_PROP_NAME$a = _makeModelMixin$b.prop,\n MODEL_EVENT_NAME$a = _makeModelMixin$b.event;\n\n var MIN_STARS = 3;\n var DEFAULT_STARS = 5; // --- Helper 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 }; // --- Helper components ---\n // @vue/component\n\n\n var BVFormRatingStar = extend({\n name: NAME_FORM_RATING_STAR,\n mixins: [normalizeSlotMixin],\n props: {\n disabled: makeProp(PROP_TYPE_BOOLEAN, false),\n // If parent is focused\n focused: makeProp(PROP_TYPE_BOOLEAN, false),\n hasClear: makeProp(PROP_TYPE_BOOLEAN, false),\n rating: makeProp(PROP_TYPE_NUMBER, 0),\n readonly: makeProp(PROP_TYPE_BOOLEAN, false),\n star: makeProp(PROP_TYPE_NUMBER, 0),\n variant: makeProp(PROP_TYPE_STRING)\n },\n methods: {\n onClick: function onClick(event) {\n if (!this.disabled && !this.readonly) {\n stopEvent(event, {\n propagation: false\n });\n this.$emit(EVENT_NAME_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 }); // --- Props ---\n\n var props$1i = makePropsConfigurable(sortKeys(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3({}, props$25), modelProps$a), omit(props$1x, ['required', 'autofocus'])), props$1v), {}, {\n // CSS color string (overrides variant)\n color: makeProp(PROP_TYPE_STRING),\n iconClear: makeProp(PROP_TYPE_STRING, 'x'),\n iconEmpty: makeProp(PROP_TYPE_STRING, 'star'),\n iconFull: makeProp(PROP_TYPE_STRING, 'star-fill'),\n iconHalf: makeProp(PROP_TYPE_STRING, 'star-half'),\n inline: makeProp(PROP_TYPE_BOOLEAN, false),\n // Locale for the formatted value (if shown)\n // Defaults to the browser locale. Falls back to `en`\n locale: makeProp(PROP_TYPE_ARRAY_STRING),\n noBorder: makeProp(PROP_TYPE_BOOLEAN, false),\n precision: makeProp(PROP_TYPE_NUMBER_STRING),\n readonly: makeProp(PROP_TYPE_BOOLEAN, false),\n showClear: makeProp(PROP_TYPE_BOOLEAN, false),\n showValue: makeProp(PROP_TYPE_BOOLEAN, false),\n showValueMax: makeProp(PROP_TYPE_BOOLEAN, false),\n stars: makeProp(PROP_TYPE_NUMBER_STRING, DEFAULT_STARS, function (value) {\n return toInteger(value) >= MIN_STARS;\n }),\n variant: makeProp(PROP_TYPE_STRING)\n })), NAME_FORM_RATING); // --- Main component ---\n // @vue/component\n\n var BFormRating = /*#__PURE__*/extend({\n name: NAME_FORM_RATING,\n components: {\n BIconStar: BIconStar,\n BIconStarHalf: BIconStarHalf,\n BIconStarFill: BIconStarFill,\n BIconX: BIconX\n },\n mixins: [idMixin, modelMixin$a, formSizeMixin],\n props: props$1i,\n data: function data() {\n var value = toFloat(this[MODEL_PROP_NAME$a], 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: (_watch$b = {}, _defineProperty(_watch$b, MODEL_PROP_NAME$a, function (newValue, oldValue) {\n if (newValue !== oldValue) {\n var value = toFloat(newValue, null);\n this.localValue = isNull(value) ? null : clampValue(value, 0, this.computedStars);\n }\n }), _defineProperty(_watch$b, \"localValue\", function localValue(newValue, oldValue) {\n if (newValue !== oldValue && newValue !== (this.value || 0)) {\n this.$emit(MODEL_EVENT_NAME$a, newValue || null);\n }\n }), _defineProperty(_watch$b, \"disabled\", function disabled(newValue) {\n if (newValue) {\n this.hasFocus = false;\n this.blur();\n }\n }), _watch$b),\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(event) {\n var keyCode = event.keyCode;\n\n if (this.isInteractive && arrayIncludes([CODE_LEFT, CODE_DOWN, CODE_RIGHT, CODE_UP], keyCode)) {\n stopEvent(event, {\n propagation: false\n });\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 === CODE_LEFT) {\n this.localValue = clampValue(value - amountRtl, min, stars) || null;\n } else if (keyCode === CODE_RIGHT) {\n this.localValue = clampValue(value + amountRtl, min, stars);\n } else if (keyCode === CODE_DOWN) {\n this.localValue = clampValue(value - 1, min, stars) || null;\n } else if (keyCode === CODE_UP) {\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(event) {\n this.hasFocus = !this.isInteractive ? false : event.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\n var disabled = this.disabled,\n readonly = this.readonly,\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[SLOT_NAME_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[SLOT_NAME_ICON_EMPTY] || this.iconEmptyFn,\n half: $scopedSlots[SLOT_NAME_ICON_HALF] || this.iconHalfFn,\n full: $scopedSlots[SLOT_NAME_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(formattedRating)));\n }\n\n return h('output', {\n staticClass: 'b-rating form-control align-items-center',\n class: [{\n 'd-inline-flex': inline,\n 'd-flex': !inline,\n 'border-0': noBorder,\n disabled: disabled,\n readonly: !disabled && readonly\n }, this.sizeFormClass],\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(computedStars),\n 'aria-valuenow': computedRating ? toString(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 _makeModelMixin$a = makeModelMixin('value'),\n mixin = _makeModelMixin$a.mixin,\n props$1h = _makeModelMixin$a.props,\n prop = _makeModelMixin$a.prop,\n event = _makeModelMixin$a.event;\n\n var props$1g = makePropsConfigurable(sortKeys(_objectSpread2$3(_objectSpread2$3({}, props$1D), {}, {\n labelField: makeProp(PROP_TYPE_STRING, 'label'),\n optionsField: makeProp(PROP_TYPE_STRING, 'options')\n })), 'formOptions'); // --- Mixin ---\n // @vue/component\n\n var optionsMixin = extend({\n mixins: [formOptionsMixin],\n props: props$1g,\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 props$1f = makePropsConfigurable({\n disabled: makeProp(PROP_TYPE_BOOLEAN, false),\n value: makeProp(PROP_TYPE_ANY, undefined, true) // Required\n\n }, NAME_FORM_SELECT_OPTION); // --- Main component ---\n // @vue/component\n\n var BFormSelectOption = /*#__PURE__*/extend({\n name: NAME_FORM_SELECT_OPTION,\n functional: true,\n props: props$1f,\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 props$1e = makePropsConfigurable(sortKeys(_objectSpread2$3(_objectSpread2$3({}, props$1D), {}, {\n label: makeProp(PROP_TYPE_STRING, undefined, true) // Required\n\n })), NAME_FORM_SELECT_OPTION_GROUP); // --- Main component ---\n // @vue/component\n\n var BFormSelectOptionGroup = /*#__PURE__*/extend({\n name: NAME_FORM_SELECT_OPTION_GROUP,\n mixins: [normalizeSlotMixin, formOptionsMixin],\n props: props$1e,\n render: function render(h) {\n var label = this.label;\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: label\n }\n }, [this.normalizeSlot(SLOT_NAME_FIRST), $options, this.normalizeSlot()]);\n }\n });\n\n var props$1d = makePropsConfigurable(sortKeys(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3({}, props$25), props$1h), props$1x), props$1w), props$1v), props$1u), {}, {\n ariaInvalid: makeProp(PROP_TYPE_BOOLEAN_STRING, false),\n multiple: makeProp(PROP_TYPE_BOOLEAN, false),\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 selectSize: makeProp(PROP_TYPE_NUMBER, 0)\n })), NAME_FORM_SELECT); // --- Main component ---\n // @vue/component\n\n var BFormSelect = /*#__PURE__*/extend({\n name: NAME_FORM_SELECT,\n mixins: [idMixin, mixin, formControlMixin, formSizeMixin, formStateMixin, formCustomMixin, optionsMixin, normalizeSlotMixin],\n props: props$1d,\n data: function data() {\n return {\n localValue: this[prop]\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 },\n watch: {\n value: function value(newValue) {\n this.localValue = newValue;\n },\n localValue: function localValue() {\n this.$emit(event, 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(event) {\n var _this = this;\n\n var target = event.target;\n var selectedValue = 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 ? selectedValue : selectedValue[0];\n this.$nextTick(function () {\n _this.$emit(EVENT_NAME_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(SLOT_NAME_FIRST), $options, this.normalizeSlot()]);\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 _watch$a;\n\n var _makeModelMixin$9 = makeModelMixin('value', {\n // Should this really be String, to match native number inputs?\n type: PROP_TYPE_BOOLEAN_NUMBER\n }),\n modelMixin$9 = _makeModelMixin$9.mixin,\n modelProps$9 = _makeModelMixin$9.props,\n MODEL_PROP_NAME$9 = _makeModelMixin$9.prop,\n MODEL_EVENT_NAME$9 = _makeModelMixin$9.event; // Default for spin button range and step\n\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;\n var KEY_CODES = [CODE_UP, CODE_DOWN, CODE_HOME, CODE_END, CODE_PAGEUP, CODE_PAGEDOWN]; // --- Props ---\n\n var props$1c = makePropsConfigurable(sortKeys(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3({}, props$25), modelProps$9), omit(props$1x, ['required', 'autofocus'])), props$1v), props$1u), {}, {\n ariaControls: makeProp(PROP_TYPE_STRING),\n ariaLabel: makeProp(PROP_TYPE_STRING),\n formatterFn: makeProp(PROP_TYPE_FUNCTION),\n inline: makeProp(PROP_TYPE_BOOLEAN, false),\n labelDecrement: makeProp(PROP_TYPE_STRING, 'Decrement'),\n labelIncrement: makeProp(PROP_TYPE_STRING, 'Increment'),\n locale: makeProp(PROP_TYPE_ARRAY_STRING),\n max: makeProp(PROP_TYPE_NUMBER_STRING, DEFAULT_MAX),\n min: makeProp(PROP_TYPE_NUMBER_STRING, DEFAULT_MIN),\n placeholder: makeProp(PROP_TYPE_STRING),\n readonly: makeProp(PROP_TYPE_BOOLEAN, false),\n repeatDelay: makeProp(PROP_TYPE_NUMBER_STRING, DEFAULT_REPEAT_DELAY),\n repeatInterval: makeProp(PROP_TYPE_NUMBER_STRING, DEFAULT_REPEAT_INTERVAL),\n repeatStepMultiplier: makeProp(PROP_TYPE_NUMBER_STRING, DEFAULT_REPEAT_MULTIPLIER),\n repeatThreshold: makeProp(PROP_TYPE_NUMBER_STRING, DEFAULT_REPEAT_THRESHOLD),\n step: makeProp(PROP_TYPE_NUMBER_STRING, DEFAULT_STEP),\n vertical: makeProp(PROP_TYPE_BOOLEAN, false),\n wrap: makeProp(PROP_TYPE_BOOLEAN, false)\n })), NAME_FORM_SPINBUTTON); // --- Main Component ---\n // @vue/component\n\n var BFormSpinbutton = /*#__PURE__*/extend({\n name: NAME_FORM_SPINBUTTON,\n // Mixin order is important!\n mixins: [attrsMixin, idMixin, modelMixin$9, formSizeMixin, formStateMixin, normalizeSlotMixin],\n inheritAttrs: false,\n props: props$1c,\n data: function data() {\n return {\n localValue: toFloat(this[MODEL_PROP_NAME$9], null),\n hasFocus: false\n };\n },\n computed: {\n required: function required() {\n return false;\n },\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 var formatterFn = this.formatterFn;\n return hasPropFunction(formatterFn) ? formatterFn : this.defaultFormatter;\n },\n computedAttrs: function computedAttrs() {\n return _objectSpread2$3(_objectSpread2$3({}, 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$3(_objectSpread2$3({\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(this.computedMin),\n 'aria-valuemax': toString(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: (_watch$a = {}, _defineProperty(_watch$a, MODEL_PROP_NAME$9, function (value) {\n this.localValue = toFloat(value, null);\n }), _defineProperty(_watch$a, \"localValue\", function localValue(value) {\n this.$emit(MODEL_EVENT_NAME$9, value);\n }), _defineProperty(_watch$a, \"disabled\", function disabled(_disabled) {\n if (_disabled) {\n this.clearRepeat();\n }\n }), _defineProperty(_watch$a, \"readonly\", function readonly(_readonly) {\n if (_readonly) {\n this.clearRepeat();\n }\n }), _watch$a),\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 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(EVENT_NAME_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(event) {\n this.hasFocus = this.disabled ? false : event.type === 'focus';\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(event) {\n var keyCode = event.keyCode,\n altKey = event.altKey,\n ctrlKey = event.ctrlKey,\n metaKey = event.metaKey;\n /* istanbul ignore if */\n\n if (this.disabled || this.readonly || altKey || ctrlKey || metaKey) {\n return;\n }\n\n if (arrayIncludes(KEY_CODES, keyCode)) {\n // https://w3c.github.io/aria-practices/#spinbutton\n stopEvent(event, {\n propagation: false\n });\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([CODE_UP, CODE_DOWN], keyCode)) {\n // The following use the custom auto-repeat handling\n this.$_keyIsDown = true;\n\n if (keyCode === CODE_UP) {\n this.handleStepRepeat(event, this.stepUp);\n } else if (keyCode === CODE_DOWN) {\n this.handleStepRepeat(event, this.stepDown);\n }\n } else {\n // These use native OS key repeating\n if (keyCode === CODE_PAGEUP) {\n this.stepUp(this.computedStepMultiplier);\n } else if (keyCode === CODE_PAGEDOWN) {\n this.stepDown(this.computedStepMultiplier);\n } else if (keyCode === CODE_HOME) {\n this.localValue = this.computedMin;\n } else if (keyCode === CODE_END) {\n this.localValue = this.computedMax;\n }\n }\n }\n },\n onKeyup: function onKeyup(event) {\n // Emit a change event when the keyup happens\n var keyCode = event.keyCode,\n altKey = event.altKey,\n ctrlKey = event.ctrlKey,\n metaKey = event.metaKey;\n /* istanbul ignore if */\n\n if (this.disabled || this.readonly || altKey || ctrlKey || metaKey) {\n return;\n }\n\n if (arrayIncludes(KEY_CODES, keyCode)) {\n stopEvent(event, {\n propagation: false\n });\n this.resetTimers();\n this.$_keyIsDown = false;\n this.emitChange();\n }\n },\n handleStepRepeat: function handleStepRepeat(event, stepper) {\n var _this = this;\n\n var _ref = event || {},\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(event) {\n // `<body>` listener, only enabled when mousedown starts\n var _ref2 = event || {},\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 stopEvent(event, {\n propagation: false\n });\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\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 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(event) {\n if (!disabled && !readonly) {\n stopEvent(event, {\n propagation: false\n });\n\n _this2.setMouseup(true); // Since we `preventDefault()`, we must manually focus the button\n\n\n attemptFocus(event.currentTarget);\n\n _this2.handleStepRepeat(event, stepper);\n }\n };\n\n return h('button', {\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 key: keyRef || null,\n ref: keyRef\n }, [_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, SLOT_NAME_INCREMENT);\n var $decrement = makeButton(this.stepDown, this.labelDecrement, BIconDash, 'dec', 'ArrowDown', false, SLOT_NAME_DECREMENT);\n var $hidden = h();\n\n if (this.name && !disabled) {\n $hidden = h('input', {\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 key: 'hidden'\n });\n }\n\n var $spin = h( // We use 'output' element to make this accept a `<label for=\"id\">` (Except IE)\n '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 key: 'output',\n ref: 'spinner'\n }, [h('bdi', hasValue ? computedFormatter(value) : this.placeholder || '')]);\n return h('div', {\n staticClass: 'b-form-spinbutton form-control',\n class: [{\n disabled: disabled,\n readonly: readonly,\n focus: this.hasFocus,\n 'd-inline-flex': inline || vertical,\n 'd-flex': !inline && !vertical,\n 'align-items-stretch': !vertical,\n 'flex-column': vertical\n }, this.sizeFormClass, this.stateClass],\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 props$1b = makePropsConfigurable(sortKeys(_objectSpread2$3(_objectSpread2$3({}, props$25), {}, {\n disabled: makeProp(PROP_TYPE_BOOLEAN, false),\n noRemove: makeProp(PROP_TYPE_BOOLEAN, false),\n pill: makeProp(PROP_TYPE_BOOLEAN, false),\n removeLabel: makeProp(PROP_TYPE_STRING, 'Remove tag'),\n tag: makeProp(PROP_TYPE_STRING, 'span'),\n title: makeProp(PROP_TYPE_STRING),\n variant: makeProp(PROP_TYPE_STRING, 'secondary')\n })), NAME_FORM_TAG); // --- Main component ---\n // @vue/component\n\n var BFormTag = /*#__PURE__*/extend({\n name: NAME_FORM_TAG,\n mixins: [idMixin, normalizeSlotMixin],\n props: props$1b,\n methods: {\n onRemove: function onRemove(event) {\n var type = event.type,\n keyCode = event.keyCode;\n\n if (!this.disabled && (type === 'click' || type === 'keydown' && keyCode === CODE_DELETE)) {\n this.$emit(EVENT_NAME_REMOVE);\n }\n }\n },\n render: function render(h) {\n var title = this.title,\n tag = this.tag,\n variant = this.variant,\n pill = this.pill,\n disabled = this.disabled;\n var tagId = this.safeId();\n var tagLabelId = this.safeId('_taglabel_');\n var $remove = h();\n\n if (!this.noRemove && !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.onRemove,\n keydown: this.onRemove\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() || title);\n return h(BBadge, {\n staticClass: 'b-form-tag d-inline-flex align-items-baseline mw-100',\n class: {\n disabled: disabled\n },\n props: {\n tag: tag,\n variant: variant,\n pill: pill\n },\n attrs: {\n id: tagId,\n title: title || null,\n 'aria-labelledby': tagLabelId\n }\n }, [$tag, $remove]);\n }\n });\n\n var _watch$9;\n\n var _makeModelMixin$8 = makeModelMixin('value', {\n type: PROP_TYPE_ARRAY,\n defaultValue: []\n }),\n modelMixin$8 = _makeModelMixin$8.mixin,\n modelProps$8 = _makeModelMixin$8.props,\n MODEL_PROP_NAME$8 = _makeModelMixin$8.prop,\n MODEL_EVENT_NAME$8 = _makeModelMixin$8.event; // Supported input types (for built in input)\n\n\n var TYPES = ['text', 'email', 'tel', 'url', 'number']; // Default ignore input focus selector\n\n var DEFAULT_INPUT_FOCUS_SELECTOR = ['.b-form-tag', 'button', 'input', 'select'].join(' '); // --- Helper 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(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(event) {\n return isString(event) ? event : isEvent(event) ? event.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 }; // --- Props ---\n\n\n var props$1a = makePropsConfigurable(sortKeys(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3({}, props$25), modelProps$8), props$1x), props$1v), props$1u), {}, {\n addButtonText: makeProp(PROP_TYPE_STRING, 'Add'),\n addButtonVariant: makeProp(PROP_TYPE_STRING, 'outline-secondary'),\n // Enable change event triggering tag addition\n // Handy if using <select> as the input\n addOnChange: makeProp(PROP_TYPE_BOOLEAN, false),\n duplicateTagText: makeProp(PROP_TYPE_STRING, 'Duplicate tag(s)'),\n feedbackAriaLive: makeProp(PROP_TYPE_STRING, 'assertive'),\n // Disable the input focus behavior when clicking\n // on element matching the selector (or selectors)\n ignoreInputFocusSelector: makeProp(PROP_TYPE_ARRAY_STRING, DEFAULT_INPUT_FOCUS_SELECTOR),\n // Additional attributes to add to the input element\n inputAttrs: makeProp(PROP_TYPE_OBJECT, {}),\n inputClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n inputId: makeProp(PROP_TYPE_STRING),\n inputType: makeProp(PROP_TYPE_STRING, 'text', function (value) {\n return arrayIncludes(TYPES, value);\n }),\n invalidTagText: makeProp(PROP_TYPE_STRING, 'Invalid tag(s)'),\n limit: makeProp(PROP_TYPE_NUMBER),\n limitTagsText: makeProp(PROP_TYPE_STRING, 'Tag limit reached'),\n // Disable ENTER key from triggering tag addition\n noAddOnEnter: makeProp(PROP_TYPE_BOOLEAN, false),\n // Disable the focus ring on the root element\n noOuterFocus: makeProp(PROP_TYPE_BOOLEAN, false),\n noTagRemove: makeProp(PROP_TYPE_BOOLEAN, false),\n placeholder: makeProp(PROP_TYPE_STRING, 'Add tag...'),\n // Enable deleting last tag in list when CODE_BACKSPACE is\n // pressed and input is empty\n removeOnDelete: makeProp(PROP_TYPE_BOOLEAN, false),\n // Character (or characters) that trigger adding tags\n separator: makeProp(PROP_TYPE_ARRAY_STRING),\n tagClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n tagPills: makeProp(PROP_TYPE_BOOLEAN, false),\n tagRemoveLabel: makeProp(PROP_TYPE_STRING, 'Remove tag'),\n tagRemovedLabel: makeProp(PROP_TYPE_STRING, 'Tag removed'),\n tagValidator: makeProp(PROP_TYPE_FUNCTION),\n tagVariant: makeProp(PROP_TYPE_STRING, 'secondary')\n })), NAME_FORM_TAGS); // --- Main component ---\n // @vue/component\n\n var BFormTags = /*#__PURE__*/extend({\n name: NAME_FORM_TAGS,\n mixins: [listenersMixin, idMixin, modelMixin$8, formControlMixin, formSizeMixin, formStateMixin, normalizeSlotMixin],\n props: props$1a,\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 focusState: null\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, this.inputType) ? this.inputType : 'text';\n },\n computedInputAttrs: function computedInputAttrs() {\n var disabled = this.disabled,\n form = this.form;\n return _objectSpread2$3(_objectSpread2$3({}, this.inputAttrs), {}, {\n // Must have attributes\n id: this.computedInputId,\n value: this.newTag,\n disabled: disabled,\n form: form\n });\n },\n computedInputHandlers: function computedInputHandlers() {\n return _objectSpread2$3(_objectSpread2$3({}, omit(this.bvListeners, [EVENT_NAME_FOCUSIN, EVENT_NAME_FOCUSOUT])), {}, {\n blur: this.onInputBlur,\n change: this.onInputChange,\n focus: this.onInputFocus,\n input: this.onInputInput,\n keydown: this.onInputKeydown,\n reset: this.reset\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 isLimitReached: function isLimitReached() {\n var limit = this.limit;\n return isNumber(limit) && limit >= 0 && this.tags.length >= limit;\n }\n },\n watch: (_watch$9 = {}, _defineProperty(_watch$9, MODEL_PROP_NAME$8, function (newValue) {\n this.tags = cleanTags(newValue);\n }), _defineProperty(_watch$9, \"tags\", function tags(newValue, oldValue) {\n // Update the `v-model` (if it differs from the value prop)\n if (!looseEqual(newValue, this[MODEL_PROP_NAME$8])) {\n this.$emit(MODEL_EVENT_NAME$8, newValue);\n }\n\n if (!looseEqual(newValue, oldValue)) {\n newValue = concat(newValue).filter(identity);\n oldValue = concat(oldValue).filter(identity);\n this.removedTags = oldValue.filter(function (old) {\n return !arrayIncludes(newValue, old);\n });\n }\n }), _defineProperty(_watch$9, \"tagsState\", function tagsState(newValue, oldValue) {\n // Emit a tag-state event when the `tagsState` object changes\n if (!looseEqual(newValue, oldValue)) {\n this.$emit(EVENT_NAME_TAG_STATE, newValue.valid, newValue.invalid, newValue.duplicate);\n }\n }), _watch$9),\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[MODEL_PROP_NAME$8]);\n },\n mounted: function mounted() {\n // Listen for form reset events, to reset the tags input\n var $form = closest('form', this.$el);\n\n if ($form) {\n eventOn($form, 'reset', this.reset, EVENT_OPTIONS_PASSIVE);\n }\n },\n beforeDestroy: function beforeDestroy() {\n var $form = closest('form', this.$el);\n\n if ($form) {\n eventOff($form, 'reset', this.reset, EVENT_OPTIONS_PASSIVE);\n }\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) === '' || this.isLimitReached) {\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$1(parsed.invalid), _toConsumableArray$1(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 /* 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 });\n },\n reset: function reset() {\n var _this2 = this;\n\n this.newTag = '';\n this.tags = [];\n this.$nextTick(function () {\n _this2.removedTags = [];\n _this2.tagsState = cleanTagsState();\n });\n },\n // --- Input element event handlers ---\n onInputInput: function onInputInput(event) {\n /* istanbul ignore next: hard to test composition events */\n if (this.disabled || isEvent(event) && event.target.composing) {\n // `event.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(event);\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(event) {\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(event);\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(event) {\n // Early exit\n\n /* istanbul ignore next */\n if (this.disabled || !isEvent(event)) {\n return;\n }\n\n var keyCode = event.keyCode;\n var value = event.target.value || '';\n /* istanbul ignore else: testing to be added later */\n\n if (!this.noAddOnEnter && keyCode === CODE_ENTER) {\n // Attempt to add the tag when user presses enter\n stopEvent(event, {\n propagation: false\n });\n this.addTag();\n } else if (this.removeOnDelete && (keyCode === CODE_BACKSPACE || keyCode === CODE_DELETE) && value === '') {\n // Remove the last tag if the user pressed backspace/delete and the input is empty\n stopEvent(event, {\n propagation: false\n });\n this.tags = this.tags.slice(0, -1);\n }\n },\n // --- Wrapper event handlers ---\n onClick: function onClick(event) {\n var _this3 = this;\n\n var ignoreFocusSelector = this.computeIgnoreInputFocusSelector;\n\n if (!ignoreFocusSelector || !closest(ignoreFocusSelector, event.target, true)) {\n this.$nextTick(function () {\n _this3.focus();\n });\n }\n },\n onInputFocus: function onInputFocus(event) {\n var _this4 = this;\n\n if (this.focusState !== 'out') {\n this.focusState = 'in';\n this.$nextTick(function () {\n requestAF(function () {\n if (_this4.hasFocus) {\n _this4.$emit(EVENT_NAME_FOCUS, event);\n\n _this4.focusState = null;\n }\n });\n });\n }\n },\n onInputBlur: function onInputBlur(event) {\n var _this5 = this;\n\n if (this.focusState !== 'in') {\n this.focusState = 'out';\n this.$nextTick(function () {\n requestAF(function () {\n if (!_this5.hasFocus) {\n _this5.$emit(EVENT_NAME_BLUR, event);\n\n _this5.focusState = null;\n }\n });\n });\n }\n },\n onFocusin: function onFocusin(event) {\n this.hasFocus = true;\n this.$emit(EVENT_NAME_FOCUSIN, event);\n },\n onFocusout: function onFocusout(event) {\n this.hasFocus = false;\n this.$emit(EVENT_NAME_FOCUSOUT, event);\n },\n handleAutofocus: function handleAutofocus() {\n var _this6 = this;\n\n this.$nextTick(function () {\n requestAF(function () {\n if (_this6.autofocus) {\n _this6.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(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 _this7 = 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(_this7.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 (_this7.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 var tagValidator = this.tagValidator;\n return hasPropFunction(tagValidator) ? tagValidator(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 addButtonText = _ref.addButtonText,\n addButtonVariant = _ref.addButtonVariant,\n addTag = _ref.addTag,\n disableAddButton = _ref.disableAddButton,\n disabled = _ref.disabled,\n duplicateTagText = _ref.duplicateTagText,\n inputAttrs = _ref.inputAttrs,\n inputClass = _ref.inputClass,\n inputHandlers = _ref.inputHandlers,\n inputType = _ref.inputType,\n invalidTagText = _ref.invalidTagText,\n isDuplicate = _ref.isDuplicate,\n isInvalid = _ref.isInvalid,\n isLimitReached = _ref.isLimitReached,\n limitTagsText = _ref.limitTagsText,\n noTagRemove = _ref.noTagRemove,\n placeholder = _ref.placeholder,\n removeTag = _ref.removeTag,\n tagClass = _ref.tagClass,\n tagPills = _ref.tagPills,\n tagRemoveLabel = _ref.tagRemoveLabel,\n tagVariant = _ref.tagVariant,\n tags = _ref.tags;\n var h = this.$createElement; // Make the list of tags\n\n var $tags = tags.map(function (tag) {\n tag = toString(tag);\n return h(BFormTag, {\n class: tagClass,\n // `BFormTag` will auto generate an ID\n // so we do not need to set the ID prop\n props: {\n disabled: disabled,\n noRemove: noTagRemove,\n pill: tagPills,\n removeLabel: tagRemoveLabel,\n tag: 'li',\n title: tag,\n variant: tagVariant\n },\n on: {\n remove: function remove() {\n return removeTag(tag);\n }\n },\n key: \"tags_\".concat(tag)\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;\n var limitFeedbackId = limitTagsText && isLimitReached ? this.safeId('__limit_feedback__') : null; // Compute the `aria-describedby` attribute value\n\n var ariaDescribedby = [inputAttrs['aria-describedby'], invalidFeedbackId, duplicateFeedbackId, limitFeedbackId].filter(identity).join(' '); // Input\n\n var $input = h('input', {\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$3(_objectSpread2$3({}, 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 // Directive needed to get `event.target.composing` set (if needed)\n directives: [{\n name: 'model',\n value: inputAttrs.value\n }],\n ref: 'input'\n }); // Add button\n\n var $button = h(BButton, {\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 disabled: disableAddButton || isLimitReached,\n variant: addButtonVariant\n },\n on: {\n click: function click() {\n return addTag();\n }\n },\n ref: 'button'\n }, [this.normalizeSlot(SLOT_NAME_ADD_BUTTON_TEXT) || addButtonText]); // ID of the tags + input `<ul>` list\n // Note we could concatenate `inputAttrs.id` with '__tag_list__'\n // but `inputId` may be `null` until after mount\n // `safeId()` returns `null`, if no user provided ID,\n // until after mount when a unique ID is generated\n\n var tagListId = this.safeId('__tag_list__');\n var $field = h('li', {\n staticClass: 'b-form-tags-field flex-grow-1',\n attrs: {\n role: 'none',\n 'aria-live': 'off',\n 'aria-controls': tagListId\n },\n key: 'tags_field'\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 staticClass: 'b-form-tags-list list-unstyled mb-0 d-flex flex-wrap align-items-center',\n attrs: {\n id: tagListId\n },\n key: 'tags_list'\n }, [$tags, $field]); // Assemble the feedback\n\n var $feedback = h();\n\n if (invalidTagText || duplicateTagText || limitTagsText) {\n // Add an aria live region for the invalid/duplicate tag\n // messages if the user has not disabled the messages\n var ariaLive = this.feedbackAriaLive,\n joiner = this.computedJoiner; // Invalid tag feedback if needed (error)\n\n var $invalid = h();\n\n if (invalidFeedbackId) {\n $invalid = h(BFormInvalidFeedback, {\n props: {\n id: invalidFeedbackId,\n ariaLive: ariaLive,\n forceShow: true\n },\n key: 'tags_invalid_feedback'\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 props: {\n id: duplicateFeedbackId,\n ariaLive: ariaLive\n },\n key: 'tags_duplicate_feedback'\n }, [this.duplicateTagText, ': ', this.duplicateTags.join(joiner)]);\n } // Limit tags feedback if needed (warning, not error)\n\n\n var $limit = h();\n\n if (limitFeedbackId) {\n $limit = h(BFormText, {\n props: {\n id: limitFeedbackId,\n ariaLive: ariaLive\n },\n key: 'tags_limit_feedback'\n }, [limitTagsText]);\n }\n\n $feedback = h('div', {\n attrs: {\n 'aria-live': 'polite',\n 'aria-atomic': 'true'\n },\n key: 'tags_feedback'\n }, [$invalid, $duplicate, $limit]);\n } // Return the content\n\n\n return [$ul, $feedback];\n }\n },\n render: function render(h) {\n var name = this.name,\n disabled = this.disabled,\n required = this.required,\n form = this.form,\n tags = this.tags,\n computedInputId = this.computedInputId,\n hasFocus = this.hasFocus,\n noOuterFocus = this.noOuterFocus; // Scoped slot properties\n\n var scope = _objectSpread2$3({\n // Array of tags (shallow copy to prevent mutations)\n tags: tags.slice(),\n // <input> v-bind:inputAttrs\n inputAttrs: this.computedInputAttrs,\n // We don't include this in the attrs, as users may want to override this\n inputType: this.computedInputType,\n // <input> v-on:inputHandlers\n inputHandlers: this.computedInputHandlers,\n // Methods\n removeTag: this.removeTag,\n addTag: this.addTag,\n reset: this.reset,\n // <input> :id=\"inputId\"\n inputId: computedInputId,\n // Invalid/Duplicate state information\n isInvalid: this.hasInvalidTags,\n invalidTags: this.invalidTags.slice(),\n isDuplicate: this.hasDuplicateTags,\n duplicateTags: this.duplicateTags.slice(),\n isLimitReached: this.isLimitReached,\n // If the 'Add' button should be disabled\n disableAddButton: this.disableAddButton\n }, pick$1(this.$props, ['addButtonText', 'addButtonVariant', 'disabled', 'duplicateTagText', 'form', 'inputClass', 'invalidTagText', 'limit', 'limitTagsText', 'noTagRemove', 'placeholder', 'required', 'separator', 'size', 'state', 'tagClass', 'tagPills', 'tagRemoveLabel', 'tagVariant'])); // Generate the user interface\n\n\n var $content = this.normalizeSlot(SLOT_NAME_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: computedInputId,\n 'aria-live': 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': 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 (name && !disabled) {\n // We add hidden inputs for each tag if a name is provided\n // When there are currently no tags, a visually hidden input\n // with empty value is rendered for proper required handling\n var hasTags = tags.length > 0;\n $hidden = (hasTags ? tags : ['']).map(function (tag) {\n return h('input', {\n class: {\n 'sr-only': !hasTags\n },\n attrs: {\n type: hasTags ? 'hidden' : 'text',\n value: tag,\n required: required,\n name: name,\n form: form\n },\n key: \"tag_input_\".concat(tag)\n });\n });\n } // Return the rendered output\n\n\n return h('div', {\n staticClass: 'b-form-tags form-control h-auto',\n class: [{\n focus: hasFocus && !noOuterFocus && !disabled,\n disabled: disabled\n }, this.sizeFormClass, this.stateClass],\n attrs: {\n id: this.safeId(),\n role: 'group',\n tabindex: disabled || noOuterFocus ? null : '-1',\n 'aria-describedby': this.safeId('__selected_tags__')\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 props$19 = makePropsConfigurable(sortKeys(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3({}, props$25), props$1x), props$1v), props$1u), props$1l), {}, {\n maxRows: makeProp(PROP_TYPE_NUMBER_STRING),\n // When in auto resize mode, disable shrinking to content height\n noAutoShrink: makeProp(PROP_TYPE_BOOLEAN, false),\n // Disable the resize handle of textarea\n noResize: makeProp(PROP_TYPE_BOOLEAN, false),\n rows: makeProp(PROP_TYPE_NUMBER_STRING, 2),\n // 'soft', 'hard' or 'off'\n // Browser default is 'soft'\n wrap: makeProp(PROP_TYPE_STRING, 'soft')\n })), NAME_FORM_TEXTAREA); // --- Main component ---\n // @vue/component\n\n var BFormTextarea = /*#__PURE__*/extend({\n name: NAME_FORM_TEXTAREA,\n directives: {\n 'b-visible': VBVisible\n },\n // Mixin order is important!\n mixins: [listenersMixin, idMixin, listenOnRootMixin, formControlMixin, formSizeMixin, formStateMixin, formTextMixin, formSelectionMixin, formValidityMixin],\n props: props$19,\n data: function data() {\n return {\n heightInPx: null\n };\n },\n computed: {\n type: function type() {\n return null;\n },\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$3(_objectSpread2$3({}, 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\n /* istanbul ignore next */\n visibleCallback: function visibleCallback(visible) {\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\n /* istanbul ignore next: can't test getComputedStyle in JSDOM */\n computeHeight: function computeHeight() {\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 = getStyle(el, 'height') || computedStyle.height; // Probe scrollHeight by temporarily changing the height to `auto`\n\n setStyle(el, '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 setStyle(el, '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 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 ref: 'input'\n });\n }\n });\n\n var FormTextareaPlugin = /*#__PURE__*/pluginFactory({\n components: {\n BFormTextarea: BFormTextarea,\n BTextarea: BFormTextarea\n }\n });\n\n var _watch$8;\n\n var _makeModelMixin$7 = makeModelMixin('value', {\n type: PROP_TYPE_STRING,\n defaultValue: ''\n }),\n modelMixin$7 = _makeModelMixin$7.mixin,\n modelProps$7 = _makeModelMixin$7.props,\n MODEL_PROP_NAME$7 = _makeModelMixin$7.prop,\n MODEL_EVENT_NAME$7 = _makeModelMixin$7.event;\n\n var NUMERIC = 'numeric'; // --- Helper methods ---\n\n var padLeftZeros = function padLeftZeros(value) {\n return \"00\".concat(value || '').slice(-2);\n };\n\n var parseHMS = function parseHMS(value) {\n value = toString(value);\n var hh = null,\n mm = null,\n ss = null;\n\n if (RX_TIME.test(value)) {\n\n var _value$split$map = value.split(':').map(function (v) {\n return toInteger(v, null);\n });\n\n var _value$split$map2 = _slicedToArray(_value$split$map, 3);\n\n hh = _value$split$map2[0];\n mm = _value$split$map2[1];\n ss = _value$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 }; // --- Props ---\n\n\n var props$18 = makePropsConfigurable(sortKeys(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3({}, props$25), modelProps$7), pick$1(props$1c, ['labelIncrement', 'labelDecrement'])), {}, {\n // ID of label element\n ariaLabelledby: makeProp(PROP_TYPE_STRING),\n disabled: makeProp(PROP_TYPE_BOOLEAN, false),\n footerTag: makeProp(PROP_TYPE_STRING, 'footer'),\n headerTag: makeProp(PROP_TYPE_STRING, 'header'),\n hidden: makeProp(PROP_TYPE_BOOLEAN, false),\n hideHeader: makeProp(PROP_TYPE_BOOLEAN, false),\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 hour12: makeProp(PROP_TYPE_BOOLEAN, null),\n labelAm: makeProp(PROP_TYPE_STRING, 'AM'),\n labelAmpm: makeProp(PROP_TYPE_STRING, 'AM/PM'),\n labelHours: makeProp(PROP_TYPE_STRING, 'Hours'),\n labelMinutes: makeProp(PROP_TYPE_STRING, 'Minutes'),\n labelNoTimeSelected: makeProp(PROP_TYPE_STRING, 'No time selected'),\n labelPm: makeProp(PROP_TYPE_STRING, 'PM'),\n labelSeconds: makeProp(PROP_TYPE_STRING, 'Seconds'),\n labelSelected: makeProp(PROP_TYPE_STRING, 'Selected time'),\n locale: makeProp(PROP_TYPE_ARRAY_STRING),\n minutesStep: makeProp(PROP_TYPE_NUMBER_STRING, 1),\n readonly: makeProp(PROP_TYPE_BOOLEAN, false),\n secondsStep: makeProp(PROP_TYPE_NUMBER_STRING, 1),\n // If `true`, show the second spinbutton\n showSeconds: makeProp(PROP_TYPE_BOOLEAN, false)\n })), NAME_TIME); // --- Main component ---\n // @vue/component\n\n var BTime = /*#__PURE__*/extend({\n name: NAME_TIME,\n mixins: [idMixin, modelMixin$7, normalizeSlotMixin],\n props: props$18,\n data: function data() {\n var parsed = parseHMS(this[MODEL_PROP_NAME$7] || '');\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 112. Corresponds to 'h' in patterns. The 12 hour clock, with midnight starting at 12:00 am\n // h23 - Hour system using 023. Corresponds to 'H' in patterns. The 24 hour clock, with midnight starting at 0:00\n // h11 - Hour system using 011. Corresponds to 'K' in patterns. The 12 hour clock, with midnight starting at 0:00 am\n // h24 - Hour system using 124. 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: (_watch$8 = {}, _defineProperty(_watch$8, MODEL_PROP_NAME$7, function (newValue, oldValue) {\n if (newValue !== oldValue && !looseEqual(parseHMS(newValue), parseHMS(this.computedHMS))) {\n var _parseHMS = parseHMS(newValue),\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 }), _defineProperty(_watch$8, \"computedHMS\", function computedHMS(newValue, oldValue) {\n if (newValue !== oldValue) {\n this.$emit(MODEL_EVENT_NAME$7, newValue);\n }\n }), _defineProperty(_watch$8, \"context\", function context(newValue, oldValue) {\n if (!looseEqual(newValue, oldValue)) {\n this.$emit(EVENT_NAME_CONTEXT, newValue);\n }\n }), _defineProperty(_watch$8, \"modelAmpm\", function modelAmpm(newValue, oldValue) {\n var _this = this;\n\n if (newValue !== oldValue) {\n var hours = isNull(this.modelHours) ? 0 : this.modelHours;\n this.$nextTick(function () {\n if (newValue === 0 && hours > 11) {\n // Switched to AM\n _this.modelHours = hours - 12;\n } else if (newValue === 1 && hours < 12) {\n // Switched to PM\n _this.modelHours = hours + 12;\n }\n });\n }\n }), _defineProperty(_watch$8, \"modelHours\", function modelHours(newHours, oldHours) {\n if (newHours !== oldHours) {\n this.modelAmpm = newHours > 11 ? 1 : 0;\n }\n }), _watch$8),\n created: function created() {\n var _this2 = this;\n\n this.$nextTick(function () {\n _this2.$emit(EVENT_NAME_CONTEXT, _this2.context);\n });\n },\n mounted: function mounted() {\n this.setLive(true);\n },\n\n /* istanbul ignore next */\n activated: function activated() {\n this.setLive(true);\n },\n\n /* istanbul ignore next */\n deactivated: function deactivated() {\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 event = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var type = event.type,\n keyCode = event.keyCode;\n\n if (!this.disabled && type === 'keydown' && (keyCode === CODE_LEFT || keyCode === CODE_RIGHT)) {\n stopEvent(event);\n var spinners = this.$refs.spinners || [];\n var index = spinners.map(function (cmp) {\n return !!cmp.hasFocus;\n }).indexOf(true);\n index = index + (keyCode === CODE_LEFT ? -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 // If hidden, we just render a placeholder comment\n\n /* istanbul ignore if */\n if (this.hidden) {\n return h();\n }\n\n var disabled = this.disabled,\n readonly = this.readonly,\n locale = this.computedLocale,\n ariaLabelledby = this.computedAriaLabelledby,\n labelIncrement = this.labelIncrement,\n labelDecrement = this.labelDecrement,\n valueId = this.valueId,\n focusHandler = this.focus;\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, _defineProperty({\n class: classes,\n props: _objectSpread2$3({\n id: id,\n placeholder: '--',\n vertical: true,\n required: true,\n disabled: disabled,\n readonly: readonly,\n locale: locale,\n labelIncrement: labelIncrement,\n labelDecrement: 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 key: key,\n ref: 'spinners'\n }, REF_FOR_KEY, true));\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': disabled || 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 // depends on client settings, shouldn't be rendered on server\n\n\n if (this.isLive && 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: disabled || readonly ? null : '-1',\n 'aria-labelledby': ariaLabelledby\n },\n on: {\n keydown: this.onSpinLeftRight,\n click:\n /* istanbul ignore next */\n function click(event) {\n if (event.target === event.currentTarget) {\n focusHandler();\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: disabled || readonly\n },\n attrs: {\n id: valueId,\n role: 'status',\n for: spinIds.filter(identity).join(' ') || null,\n tabindex: 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: focusHandler,\n focus: focusHandler\n }\n }, [h('bdi', this.formattedTimeString), this.computedHMS ? h('span', {\n staticClass: 'sr-only'\n }, \" (\".concat(this.labelSelected, \") \")) : '']);\n var $header = h(this.headerTag, {\n staticClass: 'b-time-header',\n class: {\n 'sr-only': this.hideHeader\n }\n }, [$value]);\n var $content = this.normalizeSlot();\n var $footer = $content ? h(this.footerTag, {\n staticClass: 'b-time-footer'\n }, $content) : 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': ariaLabelledby || null,\n 'aria-disabled': disabled ? 'true' : null,\n 'aria-readonly': readonly && !disabled ? 'true' : null\n }\n }, [$header, $spinners, $footer]);\n }\n });\n\n var _watch$7;\n\n var _makeModelMixin$6 = makeModelMixin('value', {\n type: PROP_TYPE_STRING,\n defaultValue: ''\n }),\n modelMixin$6 = _makeModelMixin$6.mixin,\n modelProps$6 = _makeModelMixin$6.props,\n MODEL_PROP_NAME$6 = _makeModelMixin$6.prop,\n MODEL_EVENT_NAME$6 = _makeModelMixin$6.event; // --- Props ---\n\n\n var timeProps = omit(props$18, ['hidden', 'id', 'value']);\n var formBtnLabelControlProps = omit(props$1o, ['formattedValue', 'id', 'lang', 'rtl', 'value']);\n var props$17 = makePropsConfigurable(sortKeys(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3({}, props$25), modelProps$6), timeProps), formBtnLabelControlProps), {}, {\n closeButtonVariant: makeProp(PROP_TYPE_STRING, 'outline-secondary'),\n labelCloseButton: makeProp(PROP_TYPE_STRING, 'Close'),\n labelNowButton: makeProp(PROP_TYPE_STRING, 'Select now'),\n labelResetButton: makeProp(PROP_TYPE_STRING, 'Reset'),\n noCloseButton: makeProp(PROP_TYPE_BOOLEAN, false),\n nowButton: makeProp(PROP_TYPE_BOOLEAN, false),\n nowButtonVariant: makeProp(PROP_TYPE_STRING, 'outline-primary'),\n resetButton: makeProp(PROP_TYPE_BOOLEAN, false),\n resetButtonVariant: makeProp(PROP_TYPE_STRING, 'outline-danger'),\n resetValue: makeProp(PROP_TYPE_DATE_STRING)\n })), NAME_FORM_TIMEPICKER); // --- Main component ---\n // @vue/component\n\n var BFormTimepicker = /*#__PURE__*/extend({\n name: NAME_FORM_TIMEPICKER,\n mixins: [idMixin, modelMixin$6],\n props: props$17,\n data: function data() {\n return {\n // We always use `HH:mm:ss` value internally\n localHMS: this[MODEL_PROP_NAME$6] || '',\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 },\n watch: (_watch$7 = {}, _defineProperty(_watch$7, MODEL_PROP_NAME$6, function (newValue) {\n this.localHMS = newValue || '';\n }), _defineProperty(_watch$7, \"localHMS\", function localHMS(newValue) {\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(MODEL_EVENT_NAME$6, newValue || '');\n }\n }), _watch$7),\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(EVENT_NAME_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(EVENT_NAME_SHOWN);\n });\n },\n onHidden: function onHidden() {\n this.isVisible = false;\n this.$emit(EVENT_NAME_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 $props = this.$props;\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 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 key: 'now-btn'\n }, label));\n }\n\n if (this.resetButton) {\n if ($footer.length > 0) {\n // Add a \"spacer\" between buttons ('&nbsp;')\n $footer.push(h('span', \"\\xA0\"));\n }\n\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 key: 'reset-btn'\n }, _label));\n }\n\n if (!this.noCloseButton) {\n // Add a \"spacer\" between buttons ('&nbsp;')\n if ($footer.length > 0) {\n $footer.push(h('span', \"\\xA0\"));\n }\n\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 key: 'close-btn'\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 staticClass: 'b-form-time-control',\n props: _objectSpread2$3(_objectSpread2$3({}, pluckProps(timeProps, $props)), {}, {\n value: localHMS,\n hidden: !this.isVisible\n }),\n on: {\n input: this.onInput,\n context: this.onContext\n },\n ref: 'time'\n }, $footer);\n return h(BVFormBtnLabelControl, {\n staticClass: 'b-form-timepicker',\n props: _objectSpread2$3(_objectSpread2$3({}, pluckProps(formBtnLabelControlProps, $props)), {}, {\n id: this.safeId(),\n value: localHMS,\n formattedValue: localHMS ? this.formattedValue : '',\n placeholder: placeholder,\n rtl: this.isRTL,\n lang: this.computedLang\n }),\n on: {\n show: this.onShow,\n shown: this.onShown,\n hidden: this.onHidden\n },\n scopedSlots: _defineProperty({}, SLOT_NAME_BUTTON_CONTENT, this.$scopedSlots[SLOT_NAME_BUTTON_CONTENT] || this.defaultButtonFn),\n ref: 'control'\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$16 = makePropsConfigurable({\n tag: makeProp(PROP_TYPE_STRING, 'div')\n }, NAME_INPUT_GROUP_TEXT); // --- Main component ---\n // @vue/component\n\n var BInputGroupText = /*#__PURE__*/extend({\n name: NAME_INPUT_GROUP_TEXT,\n functional: true,\n props: props$16,\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 props$15 = makePropsConfigurable({\n append: makeProp(PROP_TYPE_BOOLEAN, false),\n id: makeProp(PROP_TYPE_STRING),\n isText: makeProp(PROP_TYPE_BOOLEAN, false),\n tag: makeProp(PROP_TYPE_STRING, 'div')\n }, NAME_INPUT_GROUP_ADDON); // --- Main component ---\n // @vue/component\n\n var BInputGroupAddon = /*#__PURE__*/extend({\n name: NAME_INPUT_GROUP_ADDON,\n functional: true,\n props: props$15,\n render: function render(h, _ref) {\n var props = _ref.props,\n data = _ref.data,\n children = _ref.children;\n var append = props.append;\n return h(props.tag, a(data, {\n class: {\n 'input-group-append': append,\n 'input-group-prepend': !append\n },\n attrs: {\n id: props.id\n }\n }), props.isText ? [h(BInputGroupText, children)] : children);\n }\n });\n\n var props$14 = makePropsConfigurable(omit(props$15, ['append']), NAME_INPUT_GROUP_APPEND); // --- Main component ---\n // @vue/component\n\n var BInputGroupAppend = /*#__PURE__*/extend({\n name: NAME_INPUT_GROUP_APPEND,\n functional: true,\n props: props$14,\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$3(_objectSpread2$3({}, props), {}, {\n append: true\n })\n }), children);\n }\n });\n\n var props$13 = makePropsConfigurable(omit(props$15, ['append']), NAME_INPUT_GROUP_PREPEND); // --- Main component ---\n // @vue/component\n\n var BInputGroupPrepend = /*#__PURE__*/extend({\n name: NAME_INPUT_GROUP_PREPEND,\n functional: true,\n props: props$13,\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$3(_objectSpread2$3({}, props), {}, {\n append: false\n })\n }), children);\n }\n });\n\n var props$12 = makePropsConfigurable({\n append: makeProp(PROP_TYPE_STRING),\n appendHtml: makeProp(PROP_TYPE_STRING),\n id: makeProp(PROP_TYPE_STRING),\n prepend: makeProp(PROP_TYPE_STRING),\n prependHtml: makeProp(PROP_TYPE_STRING),\n size: makeProp(PROP_TYPE_STRING),\n tag: makeProp(PROP_TYPE_STRING, 'div')\n }, NAME_INPUT_GROUP); // --- Main component ---\n // @vue/component\n\n var BInputGroup = /*#__PURE__*/extend({\n name: NAME_INPUT_GROUP,\n functional: true,\n props: props$12,\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(SLOT_NAME_PREPEND, $scopedSlots, $slots);\n\n if (hasPrependSlot || prepend || prependHtml) {\n $prepend = h(BInputGroupPrepend, [hasPrependSlot ? normalizeSlot(SLOT_NAME_PREPEND, slotScope, $scopedSlots, $slots) : h(BInputGroupText, {\n domProps: htmlOrText(prependHtml, prepend)\n })]);\n }\n\n var $append = h();\n var hasAppendSlot = hasNormalizedSlot(SLOT_NAME_APPEND, $scopedSlots, $slots);\n\n if (hasAppendSlot || append || appendHtml) {\n $append = h(BInputGroupAppend, [hasAppendSlot ? normalizeSlot(SLOT_NAME_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(SLOT_NAME_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$11 = makePropsConfigurable({\n // String breakpoint name new in Bootstrap v4.4.x\n fluid: makeProp(PROP_TYPE_BOOLEAN_STRING, false),\n tag: makeProp(PROP_TYPE_STRING, 'div')\n }, NAME_CONTAINER); // --- Main component ---\n // @vue/component\n\n var BContainer = /*#__PURE__*/extend({\n name: NAME_CONTAINER,\n functional: true,\n props: props$11,\n render: function render(h, _ref) {\n var props = _ref.props,\n data = _ref.data,\n children = _ref.children;\n var fluid = props.fluid;\n return h(props.tag, a(data, {\n class: _defineProperty({\n container: !(fluid || fluid === ''),\n 'container-fluid': fluid === true || fluid === ''\n }, \"container-\".concat(fluid), fluid && fluid !== true)\n }), children);\n }\n });\n\n var props$10 = makePropsConfigurable({\n bgVariant: makeProp(PROP_TYPE_STRING),\n borderVariant: makeProp(PROP_TYPE_STRING),\n containerFluid: makeProp(PROP_TYPE_BOOLEAN_STRING, false),\n fluid: makeProp(PROP_TYPE_BOOLEAN, false),\n header: makeProp(PROP_TYPE_STRING),\n headerHtml: makeProp(PROP_TYPE_STRING),\n headerLevel: makeProp(PROP_TYPE_NUMBER_STRING, 3),\n headerTag: makeProp(PROP_TYPE_STRING, 'h1'),\n lead: makeProp(PROP_TYPE_STRING),\n leadHtml: makeProp(PROP_TYPE_STRING),\n leadTag: makeProp(PROP_TYPE_STRING, 'p'),\n tag: makeProp(PROP_TYPE_STRING, 'div'),\n textVariant: makeProp(PROP_TYPE_STRING)\n }, NAME_JUMBOTRON); // --- Main component ---\n // @vue/component\n\n var BJumbotron = /*#__PURE__*/extend({\n name: NAME_JUMBOTRON,\n functional: true,\n props: props$10,\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(SLOT_NAME_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(SLOT_NAME_HEADER, slotScope, $scopedSlots, $slots));\n }\n\n var $lead = h();\n var hasLeadSlot = hasNormalizedSlot(SLOT_NAME_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(SLOT_NAME_LEAD, slotScope, $scopedSlots, $slots));\n }\n\n var $children = [$header, $lead, normalizeSlot(SLOT_NAME_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']; // --- Helper methods ---\n // Compute a `row-cols-{breakpoint}-{cols}` class name\n // Memoized function for better performance on generating class names\n\n var computeRowColsClass = memoize(function (breakpoint, cols) {\n cols = trim(toString(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 = []; // --- Props ---\n // Prop generator for lazy generation of props\n\n var generateProps = function generateProps() {\n // i.e. 'row-cols-2', 'row-cols-md-4', 'row-cols-xl-6', ...\n var rowColsProps = getBreakpointsUpCached().reduce(function (props, breakpoint) {\n props[suffixPropName(breakpoint, 'cols')] = makeProp(PROP_TYPE_NUMBER_STRING);\n return props;\n }, create(null)); // Cache the row-cols prop names\n\n rowColsPropList = keys(rowColsProps); // Return the generated props\n\n return makePropsConfigurable(sortKeys(_objectSpread2$3(_objectSpread2$3({}, rowColsProps), {}, {\n alignContent: makeProp(PROP_TYPE_STRING, null, function (value) {\n return arrayIncludes(concat(COMMON_ALIGNMENT, 'between', 'around', 'stretch'), value);\n }),\n alignH: makeProp(PROP_TYPE_STRING, null, function (value) {\n return arrayIncludes(concat(COMMON_ALIGNMENT, 'between', 'around'), value);\n }),\n alignV: makeProp(PROP_TYPE_STRING, null, function (value) {\n return arrayIncludes(concat(COMMON_ALIGNMENT, 'baseline', 'stretch'), value);\n }),\n noGutters: makeProp(PROP_TYPE_BOOLEAN, false),\n tag: makeProp(PROP_TYPE_STRING, 'div')\n })), NAME_ROW);\n }; // --- Main component ---\n // We do not use `extend()` here as that would evaluate the props\n // immediately, which we do not want to happen\n // @vue/component\n\n var BRow = {\n name: NAME_ROW,\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();\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 alignV = props.alignV,\n alignH = props.alignH,\n alignContent = props.alignContent; // Loop through row-cols breakpoint props and generate the classes\n\n var classList = [];\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(alignV), alignV), _defineProperty(_classList$push, \"justify-content-\".concat(alignH), alignH), _defineProperty(_classList$push, \"align-content-\".concat(alignContent), 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$$ = makePropsConfigurable({\n flush: makeProp(PROP_TYPE_BOOLEAN, false),\n horizontal: makeProp(PROP_TYPE_BOOLEAN_STRING, false),\n tag: makeProp(PROP_TYPE_STRING, 'div')\n }, NAME_LIST_GROUP); // --- Main component ---\n // @vue/component\n\n var BListGroup = /*#__PURE__*/extend({\n name: NAME_LIST_GROUP,\n functional: true,\n props: props$$,\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 actionTags = ['a', 'router-link', 'button', 'b-link']; // --- Props ---\n\n var linkProps$3 = omit(props$2f, ['event', 'routerTag']);\n delete linkProps$3.href.default;\n delete linkProps$3.to.default;\n var props$_ = makePropsConfigurable(sortKeys(_objectSpread2$3(_objectSpread2$3({}, linkProps$3), {}, {\n action: makeProp(PROP_TYPE_BOOLEAN, false),\n button: makeProp(PROP_TYPE_BOOLEAN, false),\n tag: makeProp(PROP_TYPE_STRING, 'div'),\n variant: makeProp(PROP_TYPE_STRING)\n })), NAME_LIST_GROUP_ITEM); // --- Main component ---\n // @vue/component\n\n var BListGroupItem = /*#__PURE__*/extend({\n name: NAME_LIST_GROUP_ITEM,\n functional: true,\n props: props$_,\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$1(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$Z = makePropsConfigurable({\n right: makeProp(PROP_TYPE_BOOLEAN, false),\n tag: makeProp(PROP_TYPE_STRING, 'div'),\n verticalAlign: makeProp(PROP_TYPE_STRING, 'top')\n }, NAME_MEDIA_ASIDE); // --- Main component ---\n // @vue/component\n\n var BMediaAside = /*#__PURE__*/extend({\n name: NAME_MEDIA_ASIDE,\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 verticalAlign = props.verticalAlign;\n var align = verticalAlign === 'top' ? 'start' : verticalAlign === 'bottom' ? 'end' :\n /* istanbul ignore next */\n verticalAlign;\n return h(props.tag, a(data, {\n staticClass: 'media-aside',\n class: _defineProperty({\n 'media-aside-right': props.right\n }, \"align-self-\".concat(align), align)\n }), children);\n }\n });\n\n var props$Y = makePropsConfigurable({\n tag: makeProp(PROP_TYPE_STRING, 'div')\n }, NAME_MEDIA_BODY); // --- Main component ---\n // @vue/component\n\n var BMediaBody = /*#__PURE__*/extend({\n name: NAME_MEDIA_BODY,\n functional: true,\n props: props$Y,\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$X = makePropsConfigurable({\n noBody: makeProp(PROP_TYPE_BOOLEAN, false),\n rightAlign: makeProp(PROP_TYPE_BOOLEAN, false),\n tag: makeProp(PROP_TYPE_STRING, 'div'),\n verticalAlign: makeProp(PROP_TYPE_STRING, 'top')\n }, NAME_MEDIA); // --- Main component ---\n // @vue/component\n\n var BMedia = /*#__PURE__*/extend({\n name: NAME_MEDIA,\n functional: true,\n props: props$X,\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 noBody = props.noBody,\n rightAlign = props.rightAlign,\n verticalAlign = props.verticalAlign;\n var $children = noBody ? children : [];\n\n if (!noBody) {\n var slotScope = {};\n var $slots = slots();\n var $scopedSlots = scopedSlots || {};\n $children.push(h(BMediaBody, normalizeSlot(SLOT_NAME_DEFAULT, slotScope, $scopedSlots, $slots)));\n var $aside = normalizeSlot(SLOT_NAME_ASIDE, slotScope, $scopedSlots, $slots);\n\n if ($aside) {\n $children[rightAlign ? 'push' : 'unshift'](h(BMediaAside, {\n props: {\n right: rightAlign,\n verticalAlign: verticalAlign\n }\n }, $aside));\n }\n }\n\n return h(props.tag, a(data, {\n staticClass: 'media'\n }), $children);\n }\n });\n\n var MediaPlugin = /*#__PURE__*/pluginFactory({\n components: {\n BMedia: BMedia,\n BMediaAside: BMediaAside,\n BMediaBody: BMediaBody\n }\n });\n\n var PROP$1 = '$_documentListeners'; // --- Mixin ---\n // @vue/component\n\n var listenOnDocumentMixin = extend({\n created: function created() {\n // Define non-reactive property\n // Object of arrays, keyed by event name,\n // where value is an array of callbacks\n this[PROP$1] = {};\n },\n beforeDestroy: function beforeDestroy() {\n var _this = this;\n\n // Unregister all registered listeners\n keys(this[PROP$1] || {}).forEach(function (event) {\n _this[PROP$1][event].forEach(function (callback) {\n _this.listenOffDocument(event, callback);\n });\n });\n this[PROP$1] = null;\n },\n methods: {\n registerDocumentListener: function registerDocumentListener(event, callback) {\n if (this[PROP$1]) {\n this[PROP$1][event] = this[PROP$1][event] || [];\n\n if (!arrayIncludes(this[PROP$1][event], callback)) {\n this[PROP$1][event].push(callback);\n }\n }\n },\n unregisterDocumentListener: function unregisterDocumentListener(event, callback) {\n if (this[PROP$1] && this[PROP$1][event]) {\n this[PROP$1][event] = this[PROP$1][event].filter(function (cb) {\n return cb !== callback;\n });\n }\n },\n listenDocument: function listenDocument(on, event, callback) {\n on ? this.listenOnDocument(event, callback) : this.listenOffDocument(event, callback);\n },\n listenOnDocument: function listenOnDocument(event, callback) {\n if (IS_BROWSER) {\n eventOn(document, event, callback, EVENT_OPTIONS_NO_CAPTURE);\n this.registerDocumentListener(event, callback);\n }\n },\n listenOffDocument: function listenOffDocument(event, callback) {\n if (IS_BROWSER) {\n eventOff(document, event, callback, EVENT_OPTIONS_NO_CAPTURE);\n }\n\n this.unregisterDocumentListener(event, callback);\n }\n }\n });\n\n var PROP = '$_windowListeners'; // --- Mixin ---\n // @vue/component\n\n var listenOnWindowMixin = extend({\n created: function created() {\n // Define non-reactive property\n // Object of arrays, keyed by event name,\n // where value is an array of callbacks\n this[PROP] = {};\n },\n beforeDestroy: function beforeDestroy() {\n var _this = this;\n\n // Unregister all registered listeners\n keys(this[PROP] || {}).forEach(function (event) {\n _this[PROP][event].forEach(function (callback) {\n _this.listenOffWindow(event, callback);\n });\n });\n this[PROP] = null;\n },\n methods: {\n registerWindowListener: function registerWindowListener(event, callback) {\n if (this[PROP]) {\n this[PROP][event] = this[PROP][event] || [];\n\n if (!arrayIncludes(this[PROP][event], callback)) {\n this[PROP][event].push(callback);\n }\n }\n },\n unregisterWindowListener: function unregisterWindowListener(event, callback) {\n if (this[PROP] && this[PROP][event]) {\n this[PROP][event] = this[PROP][event].filter(function (cb) {\n return cb !== callback;\n });\n }\n },\n listenWindow: function listenWindow(on, event, callback) {\n on ? this.listenOnWindow(event, callback) : this.listenOffWindow(event, callback);\n },\n listenOnWindow: function listenOnWindow(event, callback) {\n if (IS_BROWSER) {\n eventOn(window, event, callback, EVENT_OPTIONS_NO_CAPTURE);\n this.registerWindowListener(event, callback);\n }\n },\n listenOffWindow: function listenOffWindow(event, callback) {\n if (IS_BROWSER) {\n eventOff(window, event, callback, EVENT_OPTIONS_NO_CAPTURE);\n }\n\n this.unregisterWindowListener(event, callback);\n }\n }\n });\n\n // @vue/component\n\n var useParentMixin = extend({\n computed: {\n bvParent: function bvParent() {\n return this.$parent || this.$root === this && this.$options.bvParent;\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 scopedStyleMixin = extend({\n mixins: [useParentMixin],\n computed: {\n scopedStyleAttrs: function scopedStyleAttrs() {\n var scopeId = getScopeId(this.bvParent);\n return scopeId ? _defineProperty({}, scopeId, '') : {};\n }\n }\n });\n\n var createNewChildComponent = function createNewChildComponent(parent, Component) {\n var config = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var bvEventRoot = parent.$root ? parent.$root.$options.bvEventRoot || parent.$root : null;\n return new Component(_objectSpread2$3(_objectSpread2$3({}, config), {}, {\n parent: parent,\n bvParent: parent,\n bvEventRoot: bvEventRoot\n }));\n };\n\n // BVTransporter/BVTransporterTarget:\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 BVTransporter\n // Supports only a single root element\n // @vue/component\n\n var BVTransporterTarget = /*#__PURE__*/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: NAME_TRANSPORTER_TARGET,\n props: {\n // Even though we only support a single root element,\n // VNodes are always passed as an array\n nodes: makeProp(PROP_TYPE_ARRAY_FUNCTION)\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 updatedNodes = this.updatedNodes;\n var $nodes = isFunction$1(updatedNodes) ? updatedNodes({}) : updatedNodes;\n $nodes = concat($nodes).filter(identity);\n\n if ($nodes && $nodes.length > 0 && !$nodes[0].text) {\n return $nodes[0];\n }\n /* istanbul ignore next */\n\n\n return h();\n }\n }); // --- Props ---\n\n var props$W = {\n // String: CSS selector,\n // HTMLElement: Element reference\n // Mainly needed for tooltips/popovers inside modals\n container: makeProp([HTMLElement, PROP_TYPE_STRING], 'body'),\n disabled: makeProp(PROP_TYPE_BOOLEAN, false),\n // This should be set to match the root element type\n tag: makeProp(PROP_TYPE_STRING, 'div')\n }; // --- Main component ---\n // @vue/component\n\n var BVTransporterVue2 = /*#__PURE__*/extend({\n name: NAME_TRANSPORTER,\n mixins: [normalizeSlotMixin],\n props: props$W,\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 (IS_BROWSER) {\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 = createNewChildComponent(this, BVTransporterTarget, {\n el: $el,\n propsData: {\n // Initial nodes to be rendered\n nodes: concat(this.normalizeSlot())\n }\n });\n }\n }\n },\n // Update the content of the target\n updateTarget: function updateTarget() {\n if (IS_BROWSER && 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 // This component has no root element, so only a single VNode is allowed\n if (this.disabled) {\n var $nodes = concat(this.normalizeSlot()).filter(identity);\n\n if ($nodes.length > 0 && !$nodes[0].text) {\n return $nodes[0];\n }\n }\n\n return h();\n }\n });\n var BVTransporterVue3 = /*#__PURE__*/extend({\n name: NAME_TRANSPORTER,\n mixins: [normalizeSlotMixin],\n props: props$W,\n render: function render(h) {\n if (this.disabled) {\n var $nodes = concat(this.normalizeSlot()).filter(identity);\n\n if ($nodes.length > 0) {\n return $nodes[0];\n }\n }\n\n return h(Vue__default['default'].Teleport, {\n to: this.container\n }, this.normalizeSlot());\n }\n });\n var BVTransporter = isVue3 ? BVTransporterVue3 : BVTransporterVue2;\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$3(_objectSpread2$3({}, _get(_getPrototypeOf(BvModalEvent), \"Defaults\", this)), {}, {\n trigger: null\n });\n }\n }]);\n\n return BvModalEvent;\n }(BvEvent); // Named exports\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_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\n var SELECTOR_STICKY_CONTENT = '.sticky-top';\n var SELECTOR_NAVBAR_TOGGLER = '.navbar-toggler'; // --- Main component ---\n // @vue/component\n\n var ModalManager = /*#__PURE__*/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 (IS_BROWSER) {\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(newValue) {\n var _this = this;\n\n this.checkScrollbar();\n requestAF(function () {\n _this.updateModals(newValue || []);\n });\n }\n },\n methods: {\n // Public methods\n registerModal: function registerModal(modal) {\n // Register the modal if not already registered\n if (modal && this.modals.indexOf(modal) === -1) {\n this.modals.push(modal);\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 (IS_BROWSER && isNull(this.baseZIndex)) {\n // Create a temporary `div.modal-backdrop` to get computed z-index\n var div = document.createElement('div');\n addClass(div, 'modal-backdrop');\n addClass(div, 'd-none');\n setStyle(div, '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 (IS_BROWSER && isNull(this.scrollbarWidth)) {\n // Create a temporary `div.measure-scrollbar` to get computed z-index\n var div = document.createElement('div');\n addClass(div, '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 _this2 = 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 === _this2.modals.length - 1;\n modal.isBodyOverflowing = _this2.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_FIXED_CONTENT).forEach(function (el) {\n var actualPadding = getStyle(el, 'paddingRight') || '';\n setAttr(el, 'data-padding-right', actualPadding);\n setStyle(el, '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_STICKY_CONTENT).forEach(function (el)\n /* istanbul ignore next */\n {\n var actualMargin = getStyle(el, 'marginRight') || '';\n setAttr(el, 'data-margin-right', actualMargin);\n setStyle(el, '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_NAVBAR_TOGGLER).forEach(function (el)\n /* istanbul ignore next */\n {\n var actualMargin = getStyle(el, 'marginRight') || '';\n setAttr(el, 'data-margin-right', actualMargin);\n setStyle(el, 'marginRight', \"\".concat(toFloat(getCS(el).marginRight, 0) + scrollbarWidth, \"px\"));\n\n body._marginChangedForModal.push(el);\n }); // Adjust body padding\n\n var actualPadding = getStyle(body, 'paddingRight') || '';\n setAttr(body, 'data-padding-right', actualPadding);\n setStyle(body, '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 setStyle(el, '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 setStyle(el, '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 setStyle(body, '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 _makeModelMixin$5 = makeModelMixin('visible', {\n type: PROP_TYPE_BOOLEAN,\n defaultValue: false,\n event: EVENT_NAME_CHANGE\n }),\n modelMixin$5 = _makeModelMixin$5.mixin,\n modelProps$5 = _makeModelMixin$5.props,\n MODEL_PROP_NAME$5 = _makeModelMixin$5.prop,\n MODEL_EVENT_NAME$5 = _makeModelMixin$5.event;\n\n var TRIGGER_BACKDROP = 'backdrop';\n var TRIGGER_ESC = 'esc';\n var TRIGGER_FORCE = 'FORCE';\n var TRIGGER_TOGGLE = 'toggle';\n var BUTTON_CANCEL = 'cancel'; // TODO: This should be renamed to 'close'\n\n var BUTTON_CLOSE = 'headerclose';\n var BUTTON_OK = 'ok';\n var BUTTONS = [BUTTON_CANCEL, BUTTON_CLOSE, BUTTON_OK]; // `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$V = makePropsConfigurable(sortKeys(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3({}, props$25), modelProps$5), {}, {\n ariaLabel: makeProp(PROP_TYPE_STRING),\n autoFocusButton: makeProp(PROP_TYPE_STRING, null,\n /* istanbul ignore next */\n function (value) {\n return isUndefinedOrNull(value) || arrayIncludes(BUTTONS, value);\n }),\n bodyBgVariant: makeProp(PROP_TYPE_STRING),\n bodyClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n bodyTextVariant: makeProp(PROP_TYPE_STRING),\n busy: makeProp(PROP_TYPE_BOOLEAN, false),\n buttonSize: makeProp(PROP_TYPE_STRING),\n cancelDisabled: makeProp(PROP_TYPE_BOOLEAN, false),\n cancelTitle: makeProp(PROP_TYPE_STRING, 'Cancel'),\n cancelTitleHtml: makeProp(PROP_TYPE_STRING),\n cancelVariant: makeProp(PROP_TYPE_STRING, 'secondary'),\n centered: makeProp(PROP_TYPE_BOOLEAN, false),\n contentClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n dialogClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n footerBgVariant: makeProp(PROP_TYPE_STRING),\n footerBorderVariant: makeProp(PROP_TYPE_STRING),\n footerClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n footerTag: makeProp(PROP_TYPE_STRING, 'footer'),\n footerTextVariant: makeProp(PROP_TYPE_STRING),\n headerBgVariant: makeProp(PROP_TYPE_STRING),\n headerBorderVariant: makeProp(PROP_TYPE_STRING),\n headerClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n headerCloseContent: makeProp(PROP_TYPE_STRING, '&times;'),\n headerCloseLabel: makeProp(PROP_TYPE_STRING, 'Close'),\n headerCloseVariant: makeProp(PROP_TYPE_STRING),\n headerTag: makeProp(PROP_TYPE_STRING, 'header'),\n headerTextVariant: makeProp(PROP_TYPE_STRING),\n // TODO: Rename to `noBackdrop` and deprecate `hideBackdrop`\n hideBackdrop: makeProp(PROP_TYPE_BOOLEAN, false),\n // TODO: Rename to `noFooter` and deprecate `hideFooter`\n hideFooter: makeProp(PROP_TYPE_BOOLEAN, false),\n // TODO: Rename to `noHeader` and deprecate `hideHeader`\n hideHeader: makeProp(PROP_TYPE_BOOLEAN, false),\n // TODO: Rename to `noHeaderClose` and deprecate `hideHeaderClose`\n hideHeaderClose: makeProp(PROP_TYPE_BOOLEAN, false),\n ignoreEnforceFocusSelector: makeProp(PROP_TYPE_ARRAY_STRING),\n lazy: makeProp(PROP_TYPE_BOOLEAN, false),\n modalClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n noCloseOnBackdrop: makeProp(PROP_TYPE_BOOLEAN, false),\n noCloseOnEsc: makeProp(PROP_TYPE_BOOLEAN, false),\n noEnforceFocus: makeProp(PROP_TYPE_BOOLEAN, false),\n noFade: makeProp(PROP_TYPE_BOOLEAN, false),\n noStacking: makeProp(PROP_TYPE_BOOLEAN, false),\n okDisabled: makeProp(PROP_TYPE_BOOLEAN, false),\n okOnly: makeProp(PROP_TYPE_BOOLEAN, false),\n okTitle: makeProp(PROP_TYPE_STRING, 'OK'),\n okTitleHtml: makeProp(PROP_TYPE_STRING),\n okVariant: makeProp(PROP_TYPE_STRING, 'primary'),\n // HTML Element, CSS selector string or Vue component instance\n returnFocus: makeProp([HTMLElement, PROP_TYPE_OBJECT, PROP_TYPE_STRING]),\n scrollable: makeProp(PROP_TYPE_BOOLEAN, false),\n size: makeProp(PROP_TYPE_STRING, 'md'),\n static: makeProp(PROP_TYPE_BOOLEAN, false),\n title: makeProp(PROP_TYPE_STRING),\n titleClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n titleHtml: makeProp(PROP_TYPE_STRING),\n titleSrOnly: makeProp(PROP_TYPE_BOOLEAN, false),\n titleTag: makeProp(PROP_TYPE_STRING, 'h5')\n })), NAME_MODAL); // --- Main component ---\n // @vue/component\n\n var BModal = /*#__PURE__*/extend({\n name: NAME_MODAL,\n mixins: [attrsMixin, idMixin, modelMixin$5, listenOnDocumentMixin, listenOnRootMixin, listenOnWindowMixin, normalizeSlotMixin, scopedStyleMixin],\n inheritAttrs: false,\n props: props$V,\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 // 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 cancel: this.onCancel,\n close: this.onClose,\n hide: this.hide,\n ok: this.onOk,\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$3(_objectSpread2$3(_objectSpread2$3({}, 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(SLOT_NAME_MODAL_TITLE) || this.titleHtml || this.title) ? null : this.modalTitleId,\n 'aria-describedby': this.modalBodyId\n };\n }\n },\n watch: _defineProperty({}, MODEL_PROP_NAME$5, function (newValue, oldValue) {\n if (newValue !== oldValue) {\n this[newValue ? 'show' : 'hide']();\n }\n }),\n created: function created() {\n // Define non-reactive properties\n this.$_observer = null;\n this.$_returnFocus = this.returnFocus || 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(getRootActionEventName(NAME_MODAL, EVENT_NAME_SHOW), this.showHandler);\n this.listenOnRoot(getRootActionEventName(NAME_MODAL, EVENT_NAME_HIDE), this.hideHandler);\n this.listenOnRoot(getRootActionEventName(NAME_MODAL, EVENT_NAME_TOGGLE), this.toggleHandler); // Listen for `bv:modal::show events`, and close ourselves if the\n // opening modal not us\n\n this.listenOnRoot(getRootEventName(NAME_MODAL, EVENT_NAME_SHOW), this.modalListener); // Initially show modal?\n\n if (this[MODEL_PROP_NAME$5] === true) {\n this.$nextTick(this.show);\n }\n },\n beforeDestroy: function beforeDestroy() {\n // Ensure everything is back to normal\n modalManager.unregisterModal(this);\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(value) {\n if (value !== this[MODEL_PROP_NAME$5]) {\n this.$emit(MODEL_EVENT_NAME$5, value);\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$3(_objectSpread2$3({\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(EVENT_NAME_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.$_returnFocus = this.$_returnFocus || this.getActiveElement();\n var showEvent = this.buildEvent(EVENT_NAME_SHOW, {\n cancelable: true\n });\n this.emitEvent(showEvent); // Don't show if canceled\n\n if (showEvent.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 hideEvent = this.buildEvent(EVENT_NAME_HIDE, {\n cancelable: trigger !== TRIGGER_FORCE,\n trigger: trigger || null\n }); // We emit specific event for one of the three built-in buttons\n\n if (trigger === BUTTON_OK) {\n this.$emit(EVENT_NAME_OK, hideEvent);\n } else if (trigger === BUTTON_CANCEL) {\n this.$emit(EVENT_NAME_CANCEL, hideEvent);\n } else if (trigger === BUTTON_CLOSE) {\n this.$emit(EVENT_NAME_CLOSE, hideEvent);\n }\n\n this.emitEvent(hideEvent); // Hide if not canceled\n\n if (hideEvent.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.$_returnFocus = triggerEl;\n }\n\n if (this.isVisible) {\n this.hide(TRIGGER_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(IS_BROWSER ? [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(getRootEventName(NAME_MODAL, EVENT_NAME_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(EVENT_NAME_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(EVENT_NAME_HIDDEN));\n });\n },\n emitEvent: function emitEvent(bvEvent) {\n var type = bvEvent.type; // We emit on `$root` first in case a global listener wants to cancel\n // the event first before the instance emits its event\n\n this.emitOnRoot(getRootEventName(NAME_MODAL, type), bvEvent, bvEvent.componentId);\n this.$emit(type, bvEvent);\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(event) {\n eventOff(modal, 'mouseup', onceModalMouseup, EVENT_OPTIONS_NO_CAPTURE);\n\n if (event.target === modal) {\n _this5.ignoreBackdropClick = true;\n }\n };\n\n eventOn(modal, 'mouseup', onceModalMouseup, EVENT_OPTIONS_NO_CAPTURE);\n },\n onClickOut: function onClickOut(event) {\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, event.target)) {\n return;\n } // If backdrop clicked, hide modal\n\n\n if (!contains(this.$refs.content, event.target)) {\n this.hide(TRIGGER_BACKDROP);\n }\n },\n onOk: function onOk() {\n this.hide(BUTTON_OK);\n },\n onCancel: function onCancel() {\n this.hide(BUTTON_CANCEL);\n },\n onClose: function onClose() {\n this.hide(BUTTON_CLOSE);\n },\n onEsc: function onEsc(event) {\n // If ESC pressed, hide modal\n if (event.keyCode === CODE_ESC && this.isVisible && !this.noCloseOnEsc) {\n this.hide(TRIGGER_ESC);\n }\n },\n // Document focusin listener\n focusHandler: function focusHandler(event) {\n // If focus leaves modal content, bring it back\n var content = this.$refs.content;\n var target = event.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 bottomTrap = this.$refs['bottom-trap'];\n var topTrap = this.$refs['top-trap'];\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.$_returnFocus = 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(bvEvent) {\n // If another modal opens, close this one if stacking not permitted\n if (this.noStacking && bvEvent.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 (IS_BROWSER) {\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 === BUTTON_OK && ok ? ok.$el || ok : autoFocus === BUTTON_CANCEL && cancel ? cancel.$el || cancel : autoFocus === BUTTON_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.$_returnFocus || null;\n this.$_returnFocus = 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(SLOT_NAME_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(SLOT_NAME_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(SLOT_NAME_MODAL_TITLE) ? {} : htmlOrText(this.titleHtml, this.title)\n }, // TODO: Rename slot to `title` and deprecate `modal-title`\n this.normalizeSlot(SLOT_NAME_MODAL_TITLE, this.slotScope)), $closeButton];\n }\n\n $header = h(this.headerTag, {\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(SLOT_NAME_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(SLOT_NAME_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(SLOT_NAME_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(SLOT_NAME_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(SLOT_NAME_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(SLOT_NAME_MODAL_OK));\n $modalFooter = [$cancelButton, $okButton];\n }\n\n $footer = h(this.footerTag, {\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 attrs: {\n tabindex: '0'\n },\n ref: 'top-trap'\n });\n $tabTrapBottom = h('span', {\n attrs: {\n tabindex: '0'\n },\n ref: 'bottom-trap'\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(SLOT_NAME_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[COMPONENT_UID_KEY])\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(BVTransporter, [this.makeModal(h)]);\n }\n }\n });\n\n var ROOT_ACTION_EVENT_NAME_SHOW = getRootActionEventName(NAME_MODAL, EVENT_NAME_SHOW); // 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 = 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(event) {\n // `currentTarget` is the element with the listener on it\n var currentTarget = event.currentTarget;\n\n if (!isDisabled(currentTarget)) {\n var type = event.type;\n var key = event.keyCode; // Open modal only if trigger is not disabled\n\n if (type === 'click' || type === 'keydown' && (key === CODE_ENTER || key === CODE_SPACE)) {\n getEventRoot(getInstanceFromDirective(vnode, binding)).$emit(ROOT_ACTION_EVENT_NAME_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 = 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 = 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(el);\n bind(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,\n updated: updated,\n componentUpdated: componentUpdated,\n unbind: unbind\n };\n\n var PROP_NAME$1 = '$bvModal';\n var PROP_NAME_PRIV$1 = '_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$1 = ['id'].concat(_toConsumableArray$1(keys(omit(props$V, ['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$1 = {\n msgBoxContent: 'default',\n title: 'modal-title',\n okTitle: 'modal-ok',\n cancelTitle: 'modal-cancel'\n }; // --- Helper 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 `$bvModal` VM injection\n\n\n var plugin$1 = 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: NAME_MSG_BOX,\n extends: BModal,\n mixins: [useParentMixin],\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 _this.$nextTick(function () {\n // In a `requestAF()` to release control back to application\n requestAF(function () {\n _this.$destroy();\n });\n });\n }; // Self destruct if parent destroyed\n\n\n this.bvParent.$once(HOOK_EVENT_NAME_DESTROYED, handleDestroy); // Self destruct after hidden\n\n this.$once(EVENT_NAME_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_EVENT_NAME_BEFORE_DESTROY, 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$1) || warnNoPromiseSupport(PROP_NAME$1)) {\n /* istanbul ignore next */\n return;\n } // Create an instance of `BMsgBox` component\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\n\n var msgBox = createNewChildComponent(parent, BMsgBox, {\n // Preset the prop values\n propsData: _objectSpread2$3(_objectSpread2$3(_objectSpread2$3({}, filterOptions$1(getComponentConfig(NAME_MODAL))), {}, {\n // Defaults that user can override\n hideHeaderClose: true,\n hideHeader: !(props.title || props.titleHtml)\n }, omit(props, keys(propsToSlots$1))), {}, {\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$1).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$1[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_EVENT_NAME_DESTROYED, function () {\n if (!resolved) {\n /* istanbul ignore next */\n reject(new Error('BootstrapVue MsgBox destroyed before resolve'));\n }\n });\n msgBox.$on(EVENT_NAME_HIDE, function (bvModalEvent) {\n if (!bvModalEvent.defaultPrevented) {\n var result = resolver(bvModalEvent); // If resolver didn't cancel hide, we resolve\n\n if (!bvModalEvent.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 ? arguments[3] : null;\n\n if (!content || warnNoPromiseSupport(PROP_NAME$1) || warnNotClient(PROP_NAME$1) || !isFunction$1(resolver)) {\n /* istanbul ignore next */\n return;\n }\n\n return asyncMsgBox(parent, _objectSpread2$3(_objectSpread2$3({}, filterOptions$1(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: getEventRoot(vm)\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, [getRootActionEventName(NAME_MODAL, 'show'), 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, [getRootActionEventName(NAME_MODAL, 'hide'), 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$3(_objectSpread2$3({}, 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$3(_objectSpread2$3({}, 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 (bvModalEvent) {\n var trigger = bvModalEvent.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$1] = 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$1)) {\n defineProperty$1(Vue.prototype, PROP_NAME$1, {\n get: function get() {\n /* istanbul ignore next */\n if (!this || !this[PROP_NAME_PRIV$1]) {\n warn(\"\\\"\".concat(PROP_NAME$1, \"\\\" must be accessed from a Vue instance \\\"this\\\" context.\"), NAME_MODAL);\n }\n\n return this[PROP_NAME_PRIV$1];\n }\n });\n }\n };\n\n var BVModalPlugin = /*#__PURE__*/pluginFactory({\n plugins: {\n plugin: plugin$1\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 computeJustifyContent$1 = function computeJustifyContent(value) {\n value = value === 'left' ? 'start' : value === 'right' ? 'end' : value;\n return \"justify-content-\".concat(value);\n }; // --- Props ---\n\n\n var props$U = makePropsConfigurable({\n align: makeProp(PROP_TYPE_STRING),\n // Set to `true` if placing in a card header\n cardHeader: makeProp(PROP_TYPE_BOOLEAN, false),\n fill: makeProp(PROP_TYPE_BOOLEAN, false),\n justified: makeProp(PROP_TYPE_BOOLEAN, false),\n pills: makeProp(PROP_TYPE_BOOLEAN, false),\n small: makeProp(PROP_TYPE_BOOLEAN, false),\n tabs: makeProp(PROP_TYPE_BOOLEAN, false),\n tag: makeProp(PROP_TYPE_STRING, 'ul'),\n vertical: makeProp(PROP_TYPE_BOOLEAN, false)\n }, NAME_NAV); // --- Main component ---\n // @vue/component\n\n var BNav = /*#__PURE__*/extend({\n name: NAME_NAV,\n functional: true,\n props: props$U,\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 tabs = props.tabs,\n pills = props.pills,\n vertical = props.vertical,\n align = props.align,\n cardHeader = props.cardHeader;\n return h(props.tag, a(data, {\n staticClass: 'nav',\n class: (_class = {\n 'nav-tabs': tabs,\n 'nav-pills': pills && !tabs,\n 'card-header-tabs': !vertical && cardHeader && tabs,\n 'card-header-pills': !vertical && cardHeader && pills && !tabs,\n 'flex-column': vertical,\n 'nav-fill': !vertical && props.fill,\n 'nav-justified': !vertical && props.justified\n }, _defineProperty(_class, computeJustifyContent$1(align), !vertical && align), _defineProperty(_class, \"small\", props.small), _class)\n }), children);\n }\n });\n\n var linkProps$2 = omit(props$2f, ['event', 'routerTag']);\n var props$T = makePropsConfigurable(sortKeys(_objectSpread2$3(_objectSpread2$3({}, linkProps$2), {}, {\n linkAttrs: makeProp(PROP_TYPE_OBJECT, {}),\n linkClasses: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING)\n })), NAME_NAV_ITEM); // --- Main component ---\n // @vue/component\n\n var BNavItem = /*#__PURE__*/extend({\n name: NAME_NAV_ITEM,\n functional: true,\n props: props$T,\n render: function render(h, _ref) {\n var props = _ref.props,\n data = _ref.data,\n listeners = _ref.listeners,\n children = _ref.children;\n return h('li', a(omit(data, ['on']), {\n staticClass: 'nav-item'\n }), [h(BLink, {\n staticClass: 'nav-link',\n class: props.linkClasses,\n attrs: props.linkAttrs,\n props: pluckProps(linkProps$2, props),\n on: listeners\n }, children)]);\n }\n });\n\n var props$S = {}; // --- Main component ---\n // @vue/component\n\n var BNavText = /*#__PURE__*/extend({\n name: NAME_NAV_TEXT,\n functional: true,\n props: props$S,\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 formProps = omit(props$1I, ['inline']);\n var props$R = makePropsConfigurable(sortKeys(_objectSpread2$3(_objectSpread2$3({}, formProps), {}, {\n formClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING)\n })), NAME_NAV_FORM); // --- Main component ---\n // @vue/component\n\n var BNavForm = /*#__PURE__*/extend({\n name: NAME_NAV_FORM,\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 listeners = _ref.listeners;\n var $form = h(BForm, {\n class: props.formClass,\n props: _objectSpread2$3(_objectSpread2$3({}, pluckProps(formProps, props)), {}, {\n inline: true\n }),\n attrs: data.attrs,\n on: listeners\n }, children);\n return h('li', a(omit(data, ['attrs', 'on']), {\n staticClass: 'form-inline'\n }), [$form]);\n }\n });\n\n var props$Q = makePropsConfigurable(sortKeys(_objectSpread2$3(_objectSpread2$3({}, props$25), pick$1(props$1N, [].concat(_toConsumableArray$1(keys(props$1O)), ['html', 'lazy', 'menuClass', 'noCaret', 'role', 'text', 'toggleClass'])))), NAME_NAV_ITEM_DROPDOWN); // --- Main component ---\n // @vue/component\n\n var BNavItemDropdown = /*#__PURE__*/extend({\n name: NAME_NAV_ITEM_DROPDOWN,\n mixins: [idMixin, dropdownMixin, normalizeSlotMixin],\n props: props$Q,\n computed: {\n toggleId: function toggleId() {\n return this.safeId('_BV_toggle_');\n },\n menuId: function menuId() {\n return this.safeId('_BV_toggle_menu_');\n },\n dropdownClasses: function dropdownClasses() {\n return [this.directionClass, this.boundaryClass, {\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 menuId = this.menuId,\n visible = this.visible,\n hide = this.hide;\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 'aria-controls': menuId\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([SLOT_NAME_BUTTON_CONTENT, SLOT_NAME_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 id: menuId\n },\n on: {\n keydown: this.onKeydown // Handle UP, DOWN and ESC\n\n },\n ref: 'menu'\n }, !this.lazy || visible ? this.normalizeSlot(SLOT_NAME_DEFAULT, {\n hide: 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 props$P = makePropsConfigurable({\n fixed: makeProp(PROP_TYPE_STRING),\n print: makeProp(PROP_TYPE_BOOLEAN, false),\n sticky: makeProp(PROP_TYPE_BOOLEAN, false),\n tag: makeProp(PROP_TYPE_STRING, 'nav'),\n toggleable: makeProp(PROP_TYPE_BOOLEAN_STRING, false),\n type: makeProp(PROP_TYPE_STRING, 'light'),\n variant: makeProp(PROP_TYPE_STRING)\n }, NAME_NAVBAR); // --- Main component ---\n // @vue/component\n\n var BNavbar = /*#__PURE__*/extend({\n name: NAME_NAVBAR,\n mixins: [normalizeSlotMixin],\n provide: function provide() {\n var _this = this;\n\n return {\n getBvNavbar: function getBvNavbar() {\n return _this;\n }\n };\n },\n props: props$P,\n computed: {\n breakpointClass: function breakpointClass() {\n var toggleable = this.toggleable;\n var xs = getBreakpoints()[0];\n var breakpoint = null;\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 var tag = this.tag,\n type = this.type,\n variant = this.variant,\n fixed = this.fixed;\n return h(tag, {\n staticClass: 'navbar',\n class: [(_ref = {\n 'd-print': this.print,\n 'sticky-top': this.sticky\n }, _defineProperty(_ref, \"navbar-\".concat(type), type), _defineProperty(_ref, \"bg-\".concat(variant), variant), _defineProperty(_ref, \"fixed-\".concat(fixed), fixed), _ref), this.breakpointClass],\n attrs: {\n role: isTag(tag, 'nav') ? null : 'navigation'\n }\n }, [this.normalizeSlot()]);\n }\n });\n\n var computeJustifyContent = function computeJustifyContent(value) {\n value = value === 'left' ? 'start' : value === 'right' ? 'end' : value;\n return \"justify-content-\".concat(value);\n }; // --- Props ---\n\n\n var props$O = makePropsConfigurable(pick$1(props$U, ['tag', 'fill', 'justified', 'align', 'small']), NAME_NAVBAR_NAV); // --- Main component ---\n // @vue/component\n\n var BNavbarNav = /*#__PURE__*/extend({\n name: NAME_NAVBAR_NAV,\n functional: true,\n props: props$O,\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 align = props.align;\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(align), align), _defineProperty(_class, \"small\", props.small), _class)\n }), children);\n }\n });\n\n var linkProps$1 = omit(props$2f, ['event', 'routerTag']);\n linkProps$1.href.default = undefined;\n linkProps$1.to.default = undefined;\n var props$N = makePropsConfigurable(sortKeys(_objectSpread2$3(_objectSpread2$3({}, linkProps$1), {}, {\n tag: makeProp(PROP_TYPE_STRING, 'div')\n })), NAME_NAVBAR_BRAND); // --- Main component ---\n // @vue/component\n\n var BNavbarBrand = /*#__PURE__*/extend({\n name: NAME_NAVBAR_BRAND,\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 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$1, props) : {}\n }), children);\n }\n });\n\n var CLASS_NAME$1 = 'navbar-toggler';\n var ROOT_EVENT_NAME_STATE$1 = getRootEventName(NAME_COLLAPSE, 'state');\n var ROOT_EVENT_NAME_SYNC_STATE$1 = getRootEventName(NAME_COLLAPSE, 'sync-state'); // --- Props ---\n\n var props$M = makePropsConfigurable({\n disabled: makeProp(PROP_TYPE_BOOLEAN, false),\n label: makeProp(PROP_TYPE_STRING, 'Toggle navigation'),\n target: makeProp(PROP_TYPE_ARRAY_STRING, undefined, true) // Required\n\n }, NAME_NAVBAR_TOGGLE); // --- Main component ---\n // @vue/component\n\n var BNavbarToggle = /*#__PURE__*/extend({\n name: NAME_NAVBAR_TOGGLE,\n directives: {\n VBToggle: VBToggle\n },\n mixins: [listenOnRootMixin, normalizeSlotMixin],\n props: props$M,\n data: function data() {\n return {\n toggleState: false\n };\n },\n created: function created() {\n this.listenOnRoot(ROOT_EVENT_NAME_STATE$1, this.handleStateEvent);\n this.listenOnRoot(ROOT_EVENT_NAME_SYNC_STATE$1, this.handleStateEvent);\n },\n methods: {\n onClick: function onClick(event) {\n if (!this.disabled) {\n // Emit courtesy `click` event\n this.$emit(EVENT_NAME_CLICK, event);\n }\n },\n handleStateEvent: function handleStateEvent(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$1,\n class: {\n disabled: disabled\n },\n directives: [{\n name: 'VBToggle',\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(SLOT_NAME_DEFAULT, {\n expanded: this.toggleState\n }) || h('span', {\n staticClass: \"\".concat(CLASS_NAME$1, \"-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 props$L = makePropsConfigurable({\n label: makeProp(PROP_TYPE_STRING),\n role: makeProp(PROP_TYPE_STRING, 'status'),\n small: makeProp(PROP_TYPE_BOOLEAN, false),\n tag: makeProp(PROP_TYPE_STRING, 'span'),\n type: makeProp(PROP_TYPE_STRING, 'border'),\n variant: makeProp(PROP_TYPE_STRING)\n }, NAME_SPINNER); // --- Main component ---\n // @vue/component\n\n var BSpinner = /*#__PURE__*/extend({\n name: NAME_SPINNER,\n functional: true,\n props: props$L,\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(SLOT_NAME_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 POSITION_COVER = {\n top: 0,\n left: 0,\n bottom: 0,\n right: 0\n }; // --- Props ---\n\n var props$K = makePropsConfigurable({\n // Alternative to variant, allowing a specific\n // CSS color to be applied to the overlay\n bgColor: makeProp(PROP_TYPE_STRING),\n blur: makeProp(PROP_TYPE_STRING, '2px'),\n fixed: makeProp(PROP_TYPE_BOOLEAN, false),\n noCenter: makeProp(PROP_TYPE_BOOLEAN, false),\n noFade: makeProp(PROP_TYPE_BOOLEAN, false),\n // If `true, does not render the default slot\n // and switches to absolute positioning\n noWrap: makeProp(PROP_TYPE_BOOLEAN, false),\n opacity: makeProp(PROP_TYPE_NUMBER_STRING, 0.85, function (value) {\n var number = toFloat(value, 0);\n return number >= 0 && number <= 1;\n }),\n overlayTag: makeProp(PROP_TYPE_STRING, 'div'),\n rounded: makeProp(PROP_TYPE_BOOLEAN_STRING, false),\n show: makeProp(PROP_TYPE_BOOLEAN, false),\n spinnerSmall: makeProp(PROP_TYPE_BOOLEAN, false),\n spinnerType: makeProp(PROP_TYPE_STRING, 'border'),\n spinnerVariant: makeProp(PROP_TYPE_STRING),\n variant: makeProp(PROP_TYPE_STRING, 'light'),\n wrapTag: makeProp(PROP_TYPE_STRING, 'div'),\n zIndex: makeProp(PROP_TYPE_NUMBER_STRING, 10)\n }, NAME_OVERLAY); // --- Main component ---\n // @vue/component\n\n var BOverlay = /*#__PURE__*/extend({\n name: NAME_OVERLAY,\n mixins: [normalizeSlotMixin],\n props: props$K,\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 var variant = this.variant;\n return variant && !this.bgColor ? \"bg-\".concat(variant) : '';\n },\n slotScope: function slotScope() {\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 show = this.show,\n fixed = this.fixed,\n noFade = this.noFade,\n noWrap = this.noWrap,\n slotScope = this.slotScope;\n var $overlay = h();\n\n if (show) {\n var $background = h('div', {\n staticClass: 'position-absolute',\n class: [this.computedVariant, this.computedRounded],\n style: _objectSpread2$3(_objectSpread2$3({}, POSITION_COVER), {}, {\n opacity: this.opacity,\n backgroundColor: this.bgColor || null,\n backdropFilter: this.blur ? \"blur(\".concat(this.blur, \")\") : null\n })\n });\n var $content = h('div', {\n staticClass: 'position-absolute',\n style: this.noCenter ?\n /* istanbul ignore next */\n _objectSpread2$3({}, POSITION_COVER) : {\n top: '50%',\n left: '50%',\n transform: 'translateX(-50%) translateY(-50%)'\n }\n }, [this.normalizeSlot(SLOT_NAME_OVERLAY, slotScope) || this.defaultOverlayFn(slotScope)]);\n $overlay = h(this.overlayTag, {\n staticClass: 'b-overlay',\n class: {\n 'position-absolute': !noWrap || noWrap && !fixed,\n 'position-fixed': noWrap && fixed\n },\n style: _objectSpread2$3(_objectSpread2$3({}, POSITION_COVER), {}, {\n zIndex: this.zIndex || 10\n }),\n on: {\n click: function click(event) {\n return _this.$emit(EVENT_NAME_CLICK, event);\n }\n },\n key: 'overlay'\n }, [$background, $content]);\n } // Wrap in a fade transition\n\n\n $overlay = h(BVTransition, {\n props: {\n noFade: noFade,\n appear: true\n },\n on: {\n 'after-enter': function afterEnter() {\n return _this.$emit(EVENT_NAME_SHOWN);\n },\n 'after-leave': function afterLeave() {\n return _this.$emit(EVENT_NAME_HIDDEN);\n }\n }\n }, [$overlay]);\n\n if (noWrap) {\n return $overlay;\n }\n\n return h(this.wrapTag, {\n staticClass: 'b-overlay-wrap position-relative',\n attrs: {\n 'aria-busy': show ? 'true' : null\n }\n }, noWrap ? [$overlay] : [this.normalizeSlot(), $overlay]);\n }\n });\n\n var OverlayPlugin = /*#__PURE__*/pluginFactory({\n components: {\n BOverlay: BOverlay\n }\n });\n\n var _watch$6;\n // for `<b-pagination>` and `<b-pagination-nav>`\n // --- Constants ---\n\n var _makeModelMixin$4 = makeModelMixin('value', {\n type: PROP_TYPE_BOOLEAN_NUMBER_STRING,\n defaultValue: null,\n\n /* istanbul ignore next */\n validator: function validator(value) {\n if (!isNull(value) && toInteger(value, 0) < 1) {\n warn('\"v-model\" value must be a number greater than \"0\"', NAME_PAGINATION);\n return false;\n }\n\n return true;\n }\n }),\n modelMixin$4 = _makeModelMixin$4.mixin,\n modelProps$4 = _makeModelMixin$4.props,\n MODEL_PROP_NAME$4 = _makeModelMixin$4.prop,\n MODEL_EVENT_NAME$4 = _makeModelMixin$4.event;\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 createArray(numberOfPages, function (_, 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(value) {\n var limit = toInteger(value) || 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(event) {\n if (event.keyCode === CODE_SPACE) {\n // Stop page from scrolling\n stopEvent(event, {\n immediatePropagation: true\n }); // Trigger the click event on the link\n\n event.currentTarget.click();\n return false;\n }\n }; // --- Props ---\n\n\n var props$J = makePropsConfigurable(sortKeys(_objectSpread2$3(_objectSpread2$3({}, modelProps$4), {}, {\n align: makeProp(PROP_TYPE_STRING, 'left'),\n ariaLabel: makeProp(PROP_TYPE_STRING, 'Pagination'),\n disabled: makeProp(PROP_TYPE_BOOLEAN, false),\n ellipsisClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n ellipsisText: makeProp(PROP_TYPE_STRING, \"\\u2026\"),\n // '…'\n firstClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n firstNumber: makeProp(PROP_TYPE_BOOLEAN, false),\n firstText: makeProp(PROP_TYPE_STRING, \"\\xAB\"),\n // '«'\n hideEllipsis: makeProp(PROP_TYPE_BOOLEAN, false),\n hideGotoEndButtons: makeProp(PROP_TYPE_BOOLEAN, false),\n labelFirstPage: makeProp(PROP_TYPE_STRING, 'Go to first page'),\n labelLastPage: makeProp(PROP_TYPE_STRING, 'Go to last page'),\n labelNextPage: makeProp(PROP_TYPE_STRING, 'Go to next page'),\n labelPage: makeProp(PROP_TYPE_FUNCTION_STRING, 'Go to page'),\n labelPrevPage: makeProp(PROP_TYPE_STRING, 'Go to previous page'),\n lastClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n lastNumber: makeProp(PROP_TYPE_BOOLEAN, false),\n lastText: makeProp(PROP_TYPE_STRING, \"\\xBB\"),\n // '»'\n limit: makeProp(PROP_TYPE_NUMBER_STRING, DEFAULT_LIMIT,\n /* istanbul ignore next */\n function (value) {\n if (toInteger(value, 0) < 1) {\n warn('Prop \"limit\" must be a number greater than \"0\"', NAME_PAGINATION);\n return false;\n }\n\n return true;\n }),\n nextClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n nextText: makeProp(PROP_TYPE_STRING, \"\\u203A\"),\n // ''\n pageClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n pills: makeProp(PROP_TYPE_BOOLEAN, false),\n prevClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n prevText: makeProp(PROP_TYPE_STRING, \"\\u2039\"),\n // ''\n size: makeProp(PROP_TYPE_STRING)\n })), 'pagination'); // --- Mixin ---\n // @vue/component\n\n var paginationMixin$1 = extend({\n mixins: [modelMixin$4, normalizeSlotMixin],\n props: props$J,\n data: function data() {\n // `-1` signifies no page initially selected\n var currentPage = toInteger(this[MODEL_PROP_NAME$4], 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 var size = this.size;\n return size ? \"pagination-\".concat(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 numberOfPages = this.localNumberOfPages,\n currentPage = this.computedCurrentPage,\n hideEllipsis = this.hideEllipsis,\n firstNumber = this.firstNumber,\n 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 - (hideEllipsis ? 0 : 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: (_watch$6 = {}, _defineProperty(_watch$6, MODEL_PROP_NAME$4, function (newValue, oldValue) {\n if (newValue !== oldValue) {\n this.currentPage = sanitizeCurrentPage(newValue, this.localNumberOfPages);\n }\n }), _defineProperty(_watch$6, \"currentPage\", function currentPage(newValue, oldValue) {\n if (newValue !== oldValue) {\n // Emit `null` if no page selected\n this.$emit(MODEL_EVENT_NAME$4, newValue > 0 ? newValue : null);\n }\n }), _defineProperty(_watch$6, \"limit\", function limit(newValue, oldValue) {\n if (newValue !== oldValue) {\n this.localLimit = sanitizeLimit(newValue);\n }\n }), _watch$6),\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(event) {\n var keyCode = event.keyCode,\n shiftKey = event.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 === CODE_LEFT || keyCode === CODE_UP) {\n stopEvent(event, {\n propagation: false\n });\n shiftKey ? this.focusFirst() : this.focusPrev();\n } else if (keyCode === CODE_RIGHT || keyCode === CODE_DOWN) {\n stopEvent(event, {\n propagation: false\n });\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 _safeVueInstance = safeVueInstance(this),\n disabled = _safeVueInstance.disabled,\n labelPage = _safeVueInstance.labelPage,\n ariaLabel = _safeVueInstance.ariaLabel,\n isNav = _safeVueInstance.isNav,\n numberOfPages = _safeVueInstance.localNumberOfPages,\n currentPage = _safeVueInstance.computedCurrentPage;\n\n var pageNumbers = this.pageList.map(function (p) {\n return p.number;\n });\n var _this$paginationParam2 = this.paginationParams,\n showFirstDots = _this$paginationParam2.showFirstDots,\n showLastDots = _this$paginationParam2.showLastDots;\n var fill = this.align === 'fill';\n var $buttons = []; // 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(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': safeVueInstance(_this7).ariaControls || null,\n 'aria-disabled': isDisabled ? 'true' : null\n },\n on: isDisabled ? {} : {\n '!click': function click(event) {\n _this7.onClick(event, linkTo);\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 staticClass: 'page-item',\n class: ['disabled', 'bv-d-xs-down-none', fill ? 'flex-fill' : '', _this7.ellipsisClass],\n attrs: {\n role: 'separator'\n },\n key: \"ellipsis-\".concat(isLast ? 'last' : 'first')\n }, [h('span', {\n staticClass: 'page-link'\n }, [_this7.normalizeSlot(SLOT_NAME_ELLIPSIS_TEXT) || toString(_this7.ellipsisText) || h()])]);\n }; // Page button factory\n\n\n var makePageButton = function makePageButton(page, idx) {\n var pageNumber = page.number;\n var active = isActivePage(pageNumber) && !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': safeVueInstance(_this7).ariaControls || null,\n 'aria-label': hasPropFunction(labelPage) ?\n /* istanbul ignore next */\n labelPage(pageNumber) : \"\".concat(isFunction$1(labelPage) ? labelPage() : labelPage, \" \").concat(pageNumber),\n 'aria-checked': isNav ? null : active ? 'true' : 'false',\n 'aria-current': isNav && active ? 'page' : null,\n 'aria-posinset': isNav ? null : pageNumber,\n 'aria-setsize': isNav ? null : numberOfPages,\n // ARIA \"roving tabindex\" method (except in `isNav` mode)\n tabindex: isNav ? null : tabIndex\n };\n var btnContent = toString(_this7.makePage(pageNumber));\n var scope = {\n page: pageNumber,\n index: pageNumber - 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(pageNumber),\n staticClass: 'page-link',\n class: {\n 'flex-grow-1': !isNav && !disabled && fill\n },\n attrs: attrs,\n on: disabled ? {} : {\n '!click': function click(event) {\n _this7.onClick(event, pageNumber);\n },\n keydown: onSpaceKey\n }\n }, [_this7.normalizeSlot(SLOT_NAME_PAGE, scope) || btnContent]);\n return h('li', {\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 key: \"page-\".concat(pageNumber)\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, SLOT_NAME_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, SLOT_NAME_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, SLOT_NAME_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, SLOT_NAME_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 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 : ariaLabel || null\n },\n // We disable keyboard left/right nav when `<b-pagination-nav>`\n on: isNav ? {} : {\n keydown: this.handleKeyNav\n },\n ref: 'ul'\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 ? ariaLabel || null : null\n }\n }, [$pagination]);\n }\n\n return $pagination;\n }\n });\n\n var DEFAULT_PER_PAGE = 20;\n var DEFAULT_TOTAL_ROWS = 0; // --- Helper methods ---\n // Sanitize the provided per page number (converting to a number)\n\n var sanitizePerPage = function sanitizePerPage(value) {\n return mathMax(toInteger(value) || DEFAULT_PER_PAGE, 1);\n }; // Sanitize the provided total rows number (converting to a number)\n\n\n var sanitizeTotalRows = function sanitizeTotalRows(value) {\n return mathMax(toInteger(value) || DEFAULT_TOTAL_ROWS, 0);\n }; // --- Props ---\n\n\n var props$I = makePropsConfigurable(sortKeys(_objectSpread2$3(_objectSpread2$3({}, props$J), {}, {\n ariaControls: makeProp(PROP_TYPE_STRING),\n perPage: makeProp(PROP_TYPE_NUMBER_STRING, DEFAULT_PER_PAGE),\n totalRows: makeProp(PROP_TYPE_NUMBER_STRING, DEFAULT_TOTAL_ROWS)\n })), NAME_PAGINATION); // --- Main component ---\n // @vue/component\n\n var BPagination = /*#__PURE__*/extend({\n name: NAME_PAGINATION,\n // The render function is brought in via the `paginationMixin`\n mixins: [paginationMixin$1],\n props: props$I,\n computed: {\n numberOfPages: function numberOfPages() {\n var result = mathCeil(sanitizeTotalRows(this.totalRows) / sanitizePerPage(this.perPage));\n return result < 1 ? 1 : result;\n },\n // Used for watching changes to `perPage` and `numberOfPages`\n pageSizeNumberOfPages: function pageSizeNumberOfPages() {\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(newValue, oldValue) {\n if (!isUndefinedOrNull(oldValue)) {\n if (newValue.perPage !== oldValue.perPage && newValue.totalRows === oldValue.totalRows) {\n // If the page size changes, reset to page 1\n this.currentPage = 1;\n } else if (newValue.numberOfPages !== oldValue.numberOfPages && this.currentPage > newValue.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 = newValue.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[MODEL_PROP_NAME$4], 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 methods: {\n // These methods are used by the render function\n onClick: function onClick(event, pageNumber) {\n var _this2 = this;\n\n // Dont do anything if clicking the current active page\n if (pageNumber === this.currentPage) {\n return;\n }\n\n var target = event.target; // Emit a user-cancelable `page-click` event\n\n var clickEvent = new BvEvent(EVENT_NAME_PAGE_CLICK, {\n cancelable: true,\n vueTarget: this,\n target: target\n });\n this.$emit(clickEvent.type, clickEvent, pageNumber);\n\n if (clickEvent.defaultPrevented) {\n return;\n } // Update the `v-model`\n\n\n this.currentPage = pageNumber; // Emit event triggered by user interaction\n\n this.$emit(EVENT_NAME_CHANGE, this.currentPage); // Keep the current button focused if possible\n\n this.$nextTick(function () {\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 return {};\n }\n }\n });\n\n var PaginationPlugin = /*#__PURE__*/pluginFactory({\n components: {\n BPagination: BPagination\n }\n });\n\n // Sanitize the provided number of pages (converting to a number)\n\n var sanitizeNumberOfPages = function sanitizeNumberOfPages(value) {\n return mathMax(toInteger(value, 0), 1);\n }; // --- Props ---\n\n var _linkProps = omit(props$2f, ['event', 'routerTag']);\n\n var props$H = makePropsConfigurable(sortKeys(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3({}, props$J), _linkProps), {}, {\n baseUrl: makeProp(PROP_TYPE_STRING, '/'),\n linkGen: makeProp(PROP_TYPE_FUNCTION),\n // Disable auto page number detection if `true`\n noPageDetect: makeProp(PROP_TYPE_BOOLEAN, false),\n numberOfPages: makeProp(PROP_TYPE_NUMBER_STRING, 1,\n /* istanbul ignore next */\n function (value) {\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_PAGINATION_NAV);\n return false;\n }\n\n return true;\n }),\n pageGen: makeProp(PROP_TYPE_FUNCTION),\n // Optional array of page links\n pages: makeProp(PROP_TYPE_ARRAY),\n useRouter: makeProp(PROP_TYPE_BOOLEAN, false)\n })), NAME_PAGINATION_NAV); // --- Main component ---\n // @vue/component\n\n var BPaginationNav = /*#__PURE__*/extend({\n name: NAME_PAGINATION_NAV,\n // The render function is brought in via the pagination mixin\n mixins: [paginationMixin$1],\n props: props$H,\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(event, pageNumber) {\n var _this5 = this;\n\n // Dont do anything if clicking the current active page\n if (pageNumber === this.currentPage) {\n return;\n }\n\n var target = event.currentTarget || event.target; // Emit a user-cancelable `page-click` event\n\n var clickEvent = new BvEvent(EVENT_NAME_PAGE_CLICK, {\n cancelable: true,\n vueTarget: this,\n target: target\n });\n this.$emit(clickEvent.type, clickEvent, pageNumber);\n\n if (clickEvent.defaultPrevented) {\n return;\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\n\n requestAF(function () {\n _this5.currentPage = pageNumber;\n\n _this5.$emit(EVENT_NAME_CHANGE, pageNumber);\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\n this.$nextTick(function () {\n attemptBlur(target);\n });\n },\n getPageInfo: function getPageInfo(pageNumber) {\n if (!isArray(this.pages) || this.pages.length === 0 || isUndefined(this.pages[pageNumber - 1])) {\n var link = \"\".concat(this.baseUrl).concat(pageNumber);\n return {\n link: this.useRouter ? {\n path: link\n } : link,\n text: toString(pageNumber)\n };\n }\n\n var info = this.pages[pageNumber - 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(info.text || pageNumber)\n };\n } else {\n return {\n link: toString(info),\n text: toString(pageNumber)\n };\n }\n },\n makePage: function makePage(pageNumber) {\n var pageGen = this.pageGen;\n var info = this.getPageInfo(pageNumber);\n\n if (hasPropFunction(pageGen)) {\n return pageGen(pageNumber, info);\n }\n\n return info.text;\n },\n makeLink: function makeLink(pageNumber) {\n var linkGen = this.linkGen;\n var info = this.getPageInfo(pageNumber);\n\n if (hasPropFunction(linkGen)) {\n return linkGen(pageNumber, info);\n }\n\n return info.link;\n },\n linkProps: function linkProps(pageNumber) {\n var props = pluckProps(_linkProps, this);\n var link = this.makeLink(pageNumber);\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 (_unused) {}\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 $router = this.$router,\n $route = this.$route;\n var guess = this.computedValue; // This section only occurs if we are client side, or server-side with `$router`\n\n if (!this.noPageDetect && !guess && (IS_BROWSER || !IS_BROWSER && $router)) {\n // Current route (if router available)\n var currentRoute = $router && $route ? {\n path: $route.path,\n hash: $route.hash,\n query: $route.query\n } : {}; // Current page full HREF (if client side)\n // Can't be done as a computed prop!\n\n var loc = IS_BROWSER ? window.location || document.location : null;\n var currentLink = 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 pageNumber = 1; !guess && pageNumber <= this.localNumberOfPages; pageNumber++) {\n var to = this.makeLink(pageNumber);\n\n if ($router && (isObject(to) || this.useRouter)) {\n // Resolve the page via the `$router`\n guess = looseEqual(this.resolveRoute(to), currentRoute) ? pageNumber : null;\n } else if (IS_BROWSER) {\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), currentLink) ? pageNumber : null;\n } else {\n // Probably SSR, but no `$router` so we can't guess,\n // so lets break out of 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 `currentPage` is `-1` when no value is specified\n // 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\n var AttachmentMap = {\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 }; // --- Props ---\n\n var props$G = {\n // The minimum distance (in `px`) from the edge of the\n // tooltip/popover that the arrow can be positioned\n arrowPadding: makeProp(PROP_TYPE_NUMBER_STRING, 6),\n // 'scrollParent', 'viewport', 'window', or `Element`\n boundary: makeProp([HTMLElement, PROP_TYPE_STRING], 'scrollParent'),\n // Tooltip/popover will try and stay away from\n // boundary edge by this many pixels\n boundaryPadding: makeProp(PROP_TYPE_NUMBER_STRING, 5),\n fallbackPlacement: makeProp(PROP_TYPE_ARRAY_STRING, 'flip'),\n offset: makeProp(PROP_TYPE_NUMBER_STRING, 0),\n placement: makeProp(PROP_TYPE_STRING, 'top'),\n // Element that the tooltip/popover is positioned relative to\n target: makeProp([HTMLElement, SVGElement])\n }; // --- Main component ---\n // @vue/component\n\n var BVPopper = /*#__PURE__*/extend({\n name: NAME_POPPER,\n mixins: [useParentMixin],\n props: props$G,\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 // 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(EVENT_NAME_SHOW, function (el) {\n _this2.popperCreate(el);\n }); // Self destruct handler\n\n var handleDestroy = function handleDestroy() {\n _this2.$nextTick(function () {\n // In a `requestAF()` to release control back to application\n requestAF(function () {\n _this2.$destroy();\n });\n });\n }; // Self destruct if parent destroyed\n\n\n this.bvParent.$once(HOOK_EVENT_NAME_DESTROYED, handleDestroy); // Self destruct after hidden\n\n this.$once(EVENT_NAME_HIDDEN, handleDestroy);\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 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[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 // Will be overridden by templates\n return h('div');\n }\n },\n render: function render(h) {\n var _this3 = this;\n\n var noFade = this.noFade; // Note: 'show' and 'fade' classes are only appled during transition\n\n return h(BVTransition, {\n // Transitions as soon as mounted\n props: {\n appear: true,\n noFade: noFade\n },\n on: {\n // Events used by parent component/instance\n beforeEnter: function beforeEnter(el) {\n return _this3.$emit(EVENT_NAME_SHOW, el);\n },\n afterEnter: function afterEnter(el) {\n return _this3.$emit(EVENT_NAME_SHOWN, el);\n },\n beforeLeave: function beforeLeave(el) {\n return _this3.$emit(EVENT_NAME_HIDE, el);\n },\n afterLeave: function afterLeave(el) {\n return _this3.$emit(EVENT_NAME_HIDDEN, el);\n }\n }\n }, [this.localShow ? this.renderTemplate(h) : h()]);\n }\n });\n\n var props$F = {\n // Used only by the directive versions\n html: makeProp(PROP_TYPE_BOOLEAN, false),\n // Other non-reactive (while open) props are pulled in from BVPopper\n id: makeProp(PROP_TYPE_STRING)\n }; // --- Main component ---\n // @vue/component\n\n var BVTooltipTemplate = /*#__PURE__*/extend({\n name: NAME_TOOLTIP_TEMPLATE,\n extends: BVPopper,\n mixins: [scopedStyleMixin],\n props: props$F,\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 var variant = this.variant,\n attachment = this.attachment,\n templateType = this.templateType;\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(templateType, \"-\").concat(variant), variant), _defineProperty(_ref, \"bs-\".concat(templateType, \"-\").concat(attachment), attachment), _ref), this.customClass];\n },\n templateAttributes: function templateAttributes() {\n var id = this.id;\n return _objectSpread2$3(_objectSpread2$3({}, this.bvParent.bvParent.$attrs), {}, {\n id: 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(event) {\n _this.$emit(EVENT_NAME_MOUSEENTER, event);\n },\n mouseleave:\n /* istanbul ignore next */\n function mouseleave(event) {\n _this.$emit(EVENT_NAME_MOUSELEAVE, event);\n },\n focusin:\n /* istanbul ignore next */\n function focusin(event) {\n _this.$emit(EVENT_NAME_FOCUSIN, event);\n },\n focusout:\n /* istanbul ignore next */\n function focusout(event) {\n _this.$emit(EVENT_NAME_FOCUSOUT, event);\n }\n };\n }\n },\n methods: {\n renderTemplate: function renderTemplate(h) {\n var title = this.title; // Title can be a scoped slot function\n\n var $title = isFunction$1(title) ? title({}) : title; // Directive versions only\n\n var domProps = this.html && !isFunction$1(title) ? {\n innerHTML: 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 staticClass: 'arrow',\n ref: 'arrow'\n }), h('div', {\n staticClass: 'tooltip-inner',\n domProps: domProps\n }, [$title])]);\n }\n }\n });\n\n // Modal container selector for appending tooltip/popover\n\n var MODAL_SELECTOR = '.modal-content'; // Modal `$root` hidden event\n\n var ROOT_EVENT_NAME_MODAL_HIDDEN = getRootEventName(NAME_MODAL, EVENT_NAME_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 attribute to temporary store the `title` attribute's value\n\n var DATA_TITLE_ATTR = 'data-original-title'; // 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 }; // --- Main component ---\n // @vue/component\n\n var BVTooltip = /*#__PURE__*/extend({\n name: NAME_TOOLTIP_HELPER,\n mixins: [listenOnRootMixin, useParentMixin],\n data: function data() {\n return _objectSpread2$3(_objectSpread2$3({}, 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[COMPONENT_UID_KEY], \"__\");\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(identity).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 var title = this.title,\n content = this.content,\n variant = this.variant,\n customClass = this.customClass,\n noFade = this.noFade,\n interactive = this.interactive;\n return {\n title: title,\n content: content,\n variant: variant,\n customClass: customClass,\n noFade: noFade,\n interactive: 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 title: function title(newValue, oldValue) {\n // Make sure to hide the tooltip when the title is set empty\n if (newValue !== oldValue && !newValue) {\n this.hide();\n }\n },\n disabled: function disabled(newValue) {\n if (newValue) {\n this.disable();\n } else {\n this.enable();\n }\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.bvParent) {\n this.bvParent.$once(HOOK_EVENT_NAME_BEFORE_DESTROY, function () {\n _this2.$nextTick(function () {\n // In a `requestAF()` to release control back to application\n requestAF(function () {\n _this2.$destroy();\n });\n });\n });\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.bvParent); // Set up all trigger handlers and listeners\n\n _this2.listen();\n } else {\n /* istanbul ignore next */\n warn(isString(_this2.target) ? \"Unable to find target element by ID \\\"#\".concat(_this2.target, \"\\\" in document.\") : 'The provided target is no valid HTML element.', _this2.templateType);\n }\n });\n },\n\n /* istanbul ignore next */\n updated: function updated() {\n // Usually called when the slots/data changes\n this.$nextTick(this.handleTemplateUpdate);\n },\n\n /* istanbul ignore next */\n deactivated: function deactivated() {\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 }); // If the title has updated, we may need to handle the `title`\n // attribute on the trigger target\n // We only do this while the template is open\n\n if (titleUpdated && this.localShow) {\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 = createNewChildComponent(this, Template, {\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(EVENT_NAME_SHOW, this.onTemplateShow); // When the template has completed showing\n\n $tip.$once(EVENT_NAME_SHOWN, this.onTemplateShown); // When the template has started to hide\n\n $tip.$once(EVENT_NAME_HIDE, this.onTemplateHide); // When the template has completed hiding\n\n $tip.$once(EVENT_NAME_HIDDEN, this.onTemplateHidden); // When the template gets destroyed for any reason\n\n $tip.$once(HOOK_EVENT_NAME_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(EVENT_NAME_FOCUSIN, this.handleEvent);\n $tip.$on(EVENT_NAME_FOCUSOUT, this.handleEvent);\n $tip.$on(EVENT_NAME_MOUSEENTER, this.handleEvent);\n $tip.$on(EVENT_NAME_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 showEvent = this.buildEvent(EVENT_NAME_SHOW, {\n cancelable: true\n });\n this.emitEvent(showEvent); // Don't show if event cancelled\n\n /* istanbul ignore if */\n\n if (showEvent.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 hideEvent = this.buildEvent(EVENT_NAME_HIDE, {\n cancelable: !force\n });\n this.emitEvent(hideEvent);\n /* istanbul ignore if: ignore for now */\n\n if (hideEvent.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` event 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(EVENT_NAME_ENABLED));\n },\n disable: function disable() {\n this.$_enabled = false; // Create a non-cancelable BvEvent\n\n this.emitEvent(this.buildEvent(EVENT_NAME_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(EVENT_NAME_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(EVENT_NAME_HIDDEN));\n },\n // --- Helper methods ---\n getTarget: function getTarget() {\n var target = this.target;\n\n if (isString(target)) {\n target = getById(target.replace(/^#/, ''));\n } else if (isFunction$1(target)) {\n target = target();\n } else if (target) {\n target = target.$el || target;\n }\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,\n // remove it and store it on a data attribute\n var target = this.getTarget();\n\n if (hasAttr(target, 'title')) {\n // Get `title` attribute value and remove it from target\n var title = getAttr(target, 'title');\n setAttr(target, 'title', ''); // Only set the data attribute when the value is truthy\n\n if (title) {\n setAttr(target, DATA_TITLE_ATTR, title);\n }\n }\n },\n restoreTitle: function restoreTitle() {\n // If the target had a `title` attribute,\n // restore it and remove the data attribute\n var target = this.getTarget();\n\n if (hasAttr(target, DATA_TITLE_ATTR)) {\n // Get data attribute value and remove it from target\n var title = getAttr(target, DATA_TITLE_ATTR);\n removeAttr(target, DATA_TITLE_ATTR); // Only restore the `title` attribute when the value is truthy\n\n if (title) {\n setAttr(target, 'title', title);\n }\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$3({\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(bvEvent) {\n var type = bvEvent.type;\n this.emitOnRoot(getRootEventName(this.templateType, type), bvEvent);\n this.$emit(type, bvEvent);\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 loses 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\n /* istanbul ignore next */\n unListen: function unListen() {\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 (event) {\n target && eventOff(target, event, _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 method = on ? 'listenOnRoot' : 'listenOffRoot';\n var type = this.templateType;\n this[method](getRootActionEventName(type, EVENT_NAME_HIDE), this.doHide);\n this[method](getRootActionEventName(type, EVENT_NAME_SHOW), this.doShow);\n this[method](getRootActionEventName(type, EVENT_NAME_DISABLE), this.doDisable);\n this[method](getRootActionEventName(type, EVENT_NAME_ENABLE), this.doEnable);\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\n if (on) {\n this.$_visibleInterval = setInterval(function () {\n var tip = _this8.getTemplateElement();\n\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[on ? 'listenOnRoot' : 'listenOffRoot'](ROOT_EVENT_NAME_MODAL_HIDDEN, this.forceHide);\n }\n },\n\n /* istanbul ignore next: JSDOM doesn't support `ontouchstart` */\n setOnTouchStartListener: function setOnTouchStartListener(on) {\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.bvEventRoot || !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 var instance = getInstanceFromElement(target);\n\n if (instance) {\n instance[on ? '$on' : '$off'](EVENT_NAME_SHOWN, this.forceHide);\n }\n },\n // --- Event handlers ---\n handleEvent: function handleEvent(event) {\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 = event.type;\n var triggers = this.computedTriggers;\n\n if (type === 'click' && arrayIncludes(triggers, 'click')) {\n this.click(event);\n } else if (type === 'mouseenter' && arrayIncludes(triggers, 'hover')) {\n // `mouseenter` is a non-bubbling event\n this.enter(event);\n } else if (type === 'focusin' && arrayIncludes(triggers, 'focus')) {\n // `focusin` is a bubbling event\n // `event` includes `relatedTarget` (element losing focus)\n this.enter(event);\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(); // `eventTarget` is the element which is losing focus/hover and\n\n var eventTarget = event.target; // `relatedTarget` is the element gaining focus/hover\n\n var relatedTarget = event.relatedTarget;\n /* istanbul ignore next */\n\n if ( // From tip to target\n tip && contains(tip, eventTarget) && contains(target, relatedTarget) || // From target to tip\n tip && contains(target, eventTarget) && contains(tip, relatedTarget) || // Within tip\n tip && contains(tip, eventTarget) && contains(tip, relatedTarget) || // Within target\n contains(target, eventTarget) && 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(event);\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(event) {\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(event.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 // 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 event = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\n // Opening trigger handler\n // Note: Click events are sent with event === null\n if (event) {\n this.activeTrigger[event.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 event = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\n // Closing trigger handler\n // Note: Click events are sent with event === null\n if (event) {\n this.activeTrigger[event.type === 'focusout' ? 'focus' : 'hover'] = false;\n /* istanbul ignore next */\n\n if (event.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 _makePropsConfigurabl, _watch$5;\n\n var MODEL_PROP_NAME_ENABLED = 'disabled';\n var MODEL_EVENT_NAME_ENABLED = MODEL_EVENT_NAME_PREFIX + MODEL_PROP_NAME_ENABLED;\n var MODEL_PROP_NAME_SHOW = 'show';\n var MODEL_EVENT_NAME_SHOW = MODEL_EVENT_NAME_PREFIX + MODEL_PROP_NAME_SHOW; // --- Props ---\n\n var props$E = makePropsConfigurable((_makePropsConfigurabl = {\n // String: scrollParent, window, or viewport\n // Element: element reference\n // Object: Vue component\n boundary: makeProp([HTMLElement, PROP_TYPE_OBJECT, PROP_TYPE_STRING], 'scrollParent'),\n boundaryPadding: makeProp(PROP_TYPE_NUMBER_STRING, 50),\n // String: HTML ID of container, if null body is used (default)\n // HTMLElement: element reference reference\n // Object: Vue Component\n container: makeProp([HTMLElement, PROP_TYPE_OBJECT, PROP_TYPE_STRING]),\n customClass: makeProp(PROP_TYPE_STRING),\n delay: makeProp(PROP_TYPE_NUMBER_OBJECT_STRING, 50)\n }, _defineProperty(_makePropsConfigurabl, MODEL_PROP_NAME_ENABLED, makeProp(PROP_TYPE_BOOLEAN, false)), _defineProperty(_makePropsConfigurabl, \"fallbackPlacement\", makeProp(PROP_TYPE_ARRAY_STRING, 'flip')), _defineProperty(_makePropsConfigurabl, \"id\", makeProp(PROP_TYPE_STRING)), _defineProperty(_makePropsConfigurabl, \"noFade\", makeProp(PROP_TYPE_BOOLEAN, false)), _defineProperty(_makePropsConfigurabl, \"noninteractive\", makeProp(PROP_TYPE_BOOLEAN, false)), _defineProperty(_makePropsConfigurabl, \"offset\", makeProp(PROP_TYPE_NUMBER_STRING, 0)), _defineProperty(_makePropsConfigurabl, \"placement\", makeProp(PROP_TYPE_STRING, 'top')), _defineProperty(_makePropsConfigurabl, MODEL_PROP_NAME_SHOW, makeProp(PROP_TYPE_BOOLEAN, false)), _defineProperty(_makePropsConfigurabl, \"target\", makeProp([HTMLElement, SVGElement, PROP_TYPE_FUNCTION, PROP_TYPE_OBJECT, PROP_TYPE_STRING], undefined, true)), _defineProperty(_makePropsConfigurabl, \"title\", makeProp(PROP_TYPE_STRING)), _defineProperty(_makePropsConfigurabl, \"triggers\", makeProp(PROP_TYPE_ARRAY_STRING, 'hover focus')), _defineProperty(_makePropsConfigurabl, \"variant\", makeProp(PROP_TYPE_STRING)), _makePropsConfigurabl), NAME_TOOLTIP); // --- Main component ---\n // @vue/component\n\n var BTooltip = /*#__PURE__*/extend({\n name: NAME_TOOLTIP,\n mixins: [normalizeSlotMixin, useParentMixin],\n inheritAttrs: false,\n props: props$E,\n data: function data() {\n return {\n localShow: this[MODEL_PROP_NAME_SHOW],\n localTitle: '',\n localContent: ''\n };\n },\n computed: {\n // Data that will be passed to the template and popper\n templateData: function templateData() {\n return _objectSpread2$3({\n title: this.localTitle,\n content: this.localContent,\n interactive: !this.noninteractive\n }, pick$1(this.$props, ['boundary', 'boundaryPadding', 'container', 'customClass', 'delay', 'fallbackPlacement', 'id', 'noFade', 'offset', 'placement', 'target', 'target', 'triggers', 'variant', MODEL_PROP_NAME_ENABLED]));\n },\n // Used to watch for changes to the title and content props\n templateTitleContent: function templateTitleContent() {\n var title = this.title,\n content = this.content;\n return {\n title: title,\n content: content\n };\n }\n },\n watch: (_watch$5 = {}, _defineProperty(_watch$5, MODEL_PROP_NAME_SHOW, function (newValue, oldValue) {\n if (newValue !== oldValue && newValue !== this.localShow && this.$_toolpop) {\n if (newValue) {\n this.$_toolpop.show();\n } else {\n // We use `forceHide()` to override any active triggers\n this.$_toolpop.forceHide();\n }\n }\n }), _defineProperty(_watch$5, MODEL_PROP_NAME_ENABLED, function (newValue) {\n if (newValue) {\n this.doDisable();\n } else {\n this.doEnable();\n }\n }), _defineProperty(_watch$5, \"localShow\", function localShow(newValue) {\n // TODO: May need to be done in a `$nextTick()`\n this.$emit(MODEL_EVENT_NAME_SHOW, newValue);\n }), _defineProperty(_watch$5, \"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 }), _defineProperty(_watch$5, \"templateTitleContent\", function templateTitleContent() {\n this.$nextTick(this.updateContent);\n }), _watch$5),\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(EVENT_NAME_OPEN, this.doOpen);\n this.$off(EVENT_NAME_CLOSE, this.doClose);\n this.$off(EVENT_NAME_DISABLE, this.doDisable);\n this.$off(EVENT_NAME_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.bvParent); // Create the instance\n\n var $toolpop = _this2.$_toolpop = createNewChildComponent(_this2, Component, {\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(EVENT_NAME_SHOW, _this2.onShow);\n $toolpop.$on(EVENT_NAME_SHOWN, _this2.onShown);\n $toolpop.$on(EVENT_NAME_HIDE, _this2.onHide);\n $toolpop.$on(EVENT_NAME_HIDDEN, _this2.onHidden);\n $toolpop.$on(EVENT_NAME_DISABLED, _this2.onDisabled);\n $toolpop.$on(EVENT_NAME_ENABLED, _this2.onEnabled); // Initially disabled?\n\n if (_this2[MODEL_PROP_NAME_ENABLED]) {\n // Initially disabled\n _this2.doDisable();\n } // Listen to open signals from others\n\n\n _this2.$on(EVENT_NAME_OPEN, _this2.doOpen); // Listen to close signals from others\n\n\n _this2.$on(EVENT_NAME_CLOSE, _this2.doClose); // Listen to disable signals from others\n\n\n _this2.$on(EVENT_NAME_DISABLE, _this2.doDisable); // Listen to enable signals from others\n\n\n _this2.$on(EVENT_NAME_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.normalizeSlot() || this.title);\n },\n // Helper methods for `updateContent()`\n setTitle: function setTitle(value) {\n value = isUndefinedOrNull(value) ? '' : value; // We only update the value if it has changed\n\n if (this.localTitle !== value) {\n this.localTitle = value;\n }\n },\n setContent: function setContent(value) {\n value = isUndefinedOrNull(value) ? '' : value; // We only update the value if it has changed\n\n if (this.localContent !== value) {\n this.localContent = value;\n }\n },\n // --- Template event handlers ---\n onShow: function onShow(bvEvent) {\n // Placeholder\n this.$emit(EVENT_NAME_SHOW, bvEvent);\n\n if (bvEvent) {\n this.localShow = !bvEvent.defaultPrevented;\n }\n },\n onShown: function onShown(bvEvent) {\n // Tip is now showing\n this.localShow = true;\n this.$emit(EVENT_NAME_SHOWN, bvEvent);\n },\n onHide: function onHide(bvEvent) {\n this.$emit(EVENT_NAME_HIDE, bvEvent);\n },\n onHidden: function onHidden(bvEvent) {\n // Tip is no longer showing\n this.$emit(EVENT_NAME_HIDDEN, bvEvent);\n this.localShow = false;\n },\n onDisabled: function onDisabled(bvEvent) {\n // Prevent possible endless loop if user mistakenly\n // fires `disabled` instead of `disable`\n if (bvEvent && bvEvent.type === EVENT_NAME_DISABLED) {\n this.$emit(MODEL_EVENT_NAME_ENABLED, true);\n this.$emit(EVENT_NAME_DISABLED, bvEvent);\n }\n },\n onEnabled: function onEnabled(bvEvent) {\n // Prevent possible endless loop if user mistakenly\n // fires `enabled` instead of `enable`\n if (bvEvent && bvEvent.type === EVENT_NAME_ENABLED) {\n this.$emit(MODEL_EVENT_NAME_ENABLED, false);\n this.$emit(EVENT_NAME_ENABLED, bvEvent);\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 BVPopoverTemplate = /*#__PURE__*/extend({\n name: NAME_POPOVER_TEMPLATE,\n extends: BVTooltipTemplate,\n computed: {\n templateType: function templateType() {\n return 'popover';\n }\n },\n methods: {\n renderTemplate: function renderTemplate(h) {\n var title = this.title,\n content = this.content; // Title and content could be a scoped slot function\n\n var $title = isFunction$1(title) ? title({}) : title;\n var $content = isFunction$1(content) ? content({}) : content; // Directive usage only\n\n var titleDomProps = this.html && !isFunction$1(title) ? {\n innerHTML: title\n } : {};\n var contentDomProps = this.html && !isFunction$1(content) ? {\n innerHTML: 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 staticClass: 'arrow',\n ref: '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\n var BVPopover = /*#__PURE__*/extend({\n name: NAME_POPOVER_HELPER,\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 props$D = makePropsConfigurable(sortKeys(_objectSpread2$3(_objectSpread2$3({}, props$E), {}, {\n content: makeProp(PROP_TYPE_STRING),\n placement: makeProp(PROP_TYPE_STRING, 'right'),\n triggers: makeProp(PROP_TYPE_ARRAY_STRING, EVENT_NAME_CLICK)\n })), NAME_POPOVER); // --- Main component ---\n // @vue/component\n\n var BPopover = /*#__PURE__*/extend({\n name: NAME_POPOVER,\n extends: BTooltip,\n inheritAttrs: false,\n props: props$D,\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.normalizeSlot() || this.content);\n this.setTitle(this.normalizeSlot(SLOT_NAME_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$1 = 'click'; // 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 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$2 = /^o-?\\d+$/i;\n var variantRE$1 = /^v-.+$/i;\n var spacesRE$1 = /\\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$2 = function parseBindings(bindings, vnode)\n /* istanbul ignore next: not easy to test */\n {\n // We start out with a basic config\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_POPOVER, 'delay', 50),\n boundary: String(getComponentConfig(NAME_POPOVER, 'boundary', 'scrollParent')),\n boundaryPadding: toInteger(getComponentConfig(NAME_POPOVER, 'boundaryPadding', 5), 0),\n variant: getComponentConfig(NAME_POPOVER, 'variant'),\n customClass: getComponentConfig(NAME_POPOVER, '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$1(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$3(_objectSpread2$3({}, 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$1.test(mod)) {\n // Title/content allows HTML\n config.html = true;\n } else if (noFadeRE$1.test(mod)) {\n // No animation\n config.animation = false;\n } else if (placementRE$1.test(mod)) {\n // Placement of popover\n config.placement = mod;\n } else if (boundaryRE$1.test(mod)) {\n // Boundary of popover\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$2.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 }\n\n return config;\n }; // Add or update Popover on our element\n\n\n var applyPopover = function applyPopover(el, bindings, vnode) {\n if (!IS_BROWSER) {\n /* istanbul ignore next */\n return;\n }\n\n var config = parseBindings$2(bindings, vnode);\n\n if (!el[BV_POPOVER]) {\n var parent = getInstanceFromDirective(vnode, bindings);\n el[BV_POPOVER] = createNewChildComponent(parent, BVPopover, {\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(EVENT_NAME_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$1(config.title)) {\n data.title = config.title(el);\n }\n\n if (isFunction$1(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$1(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 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 props$C = makePropsConfigurable({\n animated: makeProp(PROP_TYPE_BOOLEAN, null),\n label: makeProp(PROP_TYPE_STRING),\n labelHtml: makeProp(PROP_TYPE_STRING),\n max: makeProp(PROP_TYPE_NUMBER_STRING, null),\n precision: makeProp(PROP_TYPE_NUMBER_STRING, null),\n showProgress: makeProp(PROP_TYPE_BOOLEAN, null),\n showValue: makeProp(PROP_TYPE_BOOLEAN, null),\n striped: makeProp(PROP_TYPE_BOOLEAN, null),\n value: makeProp(PROP_TYPE_NUMBER_STRING, 0),\n variant: makeProp(PROP_TYPE_STRING)\n }, NAME_PROGRESS_BAR); // --- Main component ---\n // @vue/component\n\n var BProgressBar = /*#__PURE__*/extend({\n name: NAME_PROGRESS_BAR,\n mixins: [normalizeSlotMixin],\n inject: {\n getBvProgress: {\n default:\n /* istanbul ignore next */\n function _default() {\n return function () {\n return {};\n };\n }\n }\n },\n props: props$C,\n computed: {\n bvProgress: function bvProgress() {\n return this.getBvProgress();\n },\n progressBarClasses: function progressBarClasses() {\n var computedAnimated = this.computedAnimated,\n computedVariant = this.computedVariant;\n return [computedVariant ? \"bg-\".concat(computedVariant) : '', this.computedStriped || computedAnimated ? 'progress-bar-striped' : '', 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 $children;\n var domProps = {};\n\n if (this.hasNormalizedSlot()) {\n $children = this.normalizeSlot();\n } else if (label || labelHtml) {\n domProps = htmlOrText(labelHtml, label);\n } else if (this.computedShowProgress) {\n $children = this.computedProgress;\n } else if (this.computedShowValue) {\n $children = 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(this.computedMax),\n 'aria-valuenow': toFixed(computedValue, computedPrecision)\n },\n domProps: domProps\n }, $children);\n }\n });\n\n var progressBarProps = omit(props$C, ['label', 'labelHtml']);\n var props$B = makePropsConfigurable(sortKeys(_objectSpread2$3(_objectSpread2$3({}, progressBarProps), {}, {\n animated: makeProp(PROP_TYPE_BOOLEAN, false),\n height: makeProp(PROP_TYPE_STRING),\n max: makeProp(PROP_TYPE_NUMBER_STRING, 100),\n precision: makeProp(PROP_TYPE_NUMBER_STRING, 0),\n showProgress: makeProp(PROP_TYPE_BOOLEAN, false),\n showValue: makeProp(PROP_TYPE_BOOLEAN, false),\n striped: makeProp(PROP_TYPE_BOOLEAN, false)\n })), NAME_PROGRESS); // --- Main component ---\n // @vue/component\n\n var BProgress = /*#__PURE__*/extend({\n name: NAME_PROGRESS,\n mixins: [normalizeSlotMixin],\n provide: function provide() {\n var _this = this;\n\n return {\n getBvProgress: function getBvProgress() {\n return _this;\n }\n };\n },\n props: props$B,\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();\n\n if (!$childNodes) {\n $childNodes = h(BProgressBar, {\n props: pluckProps(progressBarProps, this.$props)\n });\n }\n\n return h('div', {\n staticClass: '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 _watch$4;\n\n var CLASS_NAME = 'b-sidebar';\n var ROOT_ACTION_EVENT_NAME_REQUEST_STATE = getRootActionEventName(NAME_COLLAPSE, 'request-state');\n var ROOT_ACTION_EVENT_NAME_TOGGLE = getRootActionEventName(NAME_COLLAPSE, 'toggle');\n var ROOT_EVENT_NAME_STATE = getRootEventName(NAME_COLLAPSE, 'state');\n var ROOT_EVENT_NAME_SYNC_STATE = getRootEventName(NAME_COLLAPSE, 'sync-state');\n\n var _makeModelMixin$3 = makeModelMixin('visible', {\n type: PROP_TYPE_BOOLEAN,\n defaultValue: false,\n event: EVENT_NAME_CHANGE\n }),\n modelMixin$3 = _makeModelMixin$3.mixin,\n modelProps$3 = _makeModelMixin$3.props,\n MODEL_PROP_NAME$3 = _makeModelMixin$3.prop,\n MODEL_EVENT_NAME$3 = _makeModelMixin$3.event; // --- Props ---\n\n\n var props$A = makePropsConfigurable(sortKeys(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3({}, props$25), modelProps$3), {}, {\n ariaLabel: makeProp(PROP_TYPE_STRING),\n ariaLabelledby: makeProp(PROP_TYPE_STRING),\n // If `true`, shows a basic backdrop\n backdrop: makeProp(PROP_TYPE_BOOLEAN, false),\n backdropVariant: makeProp(PROP_TYPE_STRING, 'dark'),\n bgVariant: makeProp(PROP_TYPE_STRING, 'light'),\n bodyClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n // `aria-label` for close button\n closeLabel: makeProp(PROP_TYPE_STRING),\n footerClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n footerTag: makeProp(PROP_TYPE_STRING, 'footer'),\n headerClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n headerTag: makeProp(PROP_TYPE_STRING, 'header'),\n lazy: makeProp(PROP_TYPE_BOOLEAN, false),\n noCloseOnBackdrop: makeProp(PROP_TYPE_BOOLEAN, false),\n noCloseOnEsc: makeProp(PROP_TYPE_BOOLEAN, false),\n noCloseOnRouteChange: makeProp(PROP_TYPE_BOOLEAN, false),\n noEnforceFocus: makeProp(PROP_TYPE_BOOLEAN, false),\n noHeader: makeProp(PROP_TYPE_BOOLEAN, false),\n noHeaderClose: makeProp(PROP_TYPE_BOOLEAN, false),\n noSlide: makeProp(PROP_TYPE_BOOLEAN, false),\n right: makeProp(PROP_TYPE_BOOLEAN, false),\n shadow: makeProp(PROP_TYPE_BOOLEAN_STRING, false),\n sidebarClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n tag: makeProp(PROP_TYPE_STRING, 'div'),\n textVariant: makeProp(PROP_TYPE_STRING, 'dark'),\n title: makeProp(PROP_TYPE_STRING),\n width: makeProp(PROP_TYPE_STRING),\n zIndex: makeProp(PROP_TYPE_NUMBER_STRING)\n })), NAME_SIDEBAR); // --- Render methods ---\n\n var renderHeaderTitle = function renderHeaderTitle(h, ctx) {\n // Render a empty `<span>` when to title was provided\n var title = ctx.normalizeSlot(SLOT_NAME_TITLE, ctx.slotScope) || ctx.title;\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 props: {\n ariaLabel: closeLabel,\n textVariant: textVariant\n },\n on: {\n click: hide\n },\n ref: 'close-button'\n }, [ctx.normalizeSlot(SLOT_NAME_HEADER_CLOSE) || h(BIconX)]);\n };\n\n var renderHeader = function renderHeader(h, ctx) {\n if (ctx.noHeader) {\n return h();\n }\n\n var $content = ctx.normalizeSlot(SLOT_NAME_HEADER, ctx.slotScope);\n\n if (!$content) {\n var $title = renderHeaderTitle(h, ctx);\n var $close = renderHeaderClose(h, ctx);\n $content = ctx.right ? [$close, $title] : [$title, $close];\n }\n\n return h(ctx.headerTag, {\n staticClass: \"\".concat(CLASS_NAME, \"-header\"),\n class: ctx.headerClass,\n key: 'header'\n }, $content);\n };\n\n var renderBody = function renderBody(h, ctx) {\n return h('div', {\n staticClass: \"\".concat(CLASS_NAME, \"-body\"),\n class: ctx.bodyClass,\n key: 'body'\n }, [ctx.normalizeSlot(SLOT_NAME_DEFAULT, ctx.slotScope)]);\n };\n\n var renderFooter = function renderFooter(h, ctx) {\n var $footer = ctx.normalizeSlot(SLOT_NAME_FOOTER, ctx.slotScope);\n\n if (!$footer) {\n return h();\n }\n\n return h(ctx.footerTag, {\n staticClass: \"\".concat(CLASS_NAME, \"-footer\"),\n class: ctx.footerClass,\n key: 'footer'\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__*/extend({\n name: NAME_SIDEBAR,\n mixins: [attrsMixin, idMixin, modelMixin$3, listenOnRootMixin, normalizeSlotMixin],\n inheritAttrs: false,\n props: props$A,\n data: function data() {\n var visible = !!this[MODEL_PROP_NAME$3];\n return {\n // Internal `v-model` state\n localShow: visible,\n // For lazy render triggering\n isOpen: 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 var hide = this.hide,\n right = this.right,\n visible = this.localShow;\n return {\n hide: hide,\n right: right,\n visible: visible\n };\n },\n hasTitle: function hasTitle() {\n var $scopedSlots = this.$scopedSlots,\n $slots = this.$slots;\n return !this.noHeader && !this.hasNormalizedSlot(SLOT_NAME_HEADER) && !!(this.normalizeSlot(SLOT_NAME_TITLE, this.slotScope, $scopedSlots, $slots) || this.title);\n },\n titleId: function titleId() {\n return this.hasTitle ? this.safeId('__title__') : null;\n },\n computedAttrs: function computedAttrs() {\n return _objectSpread2$3(_objectSpread2$3({}, 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: (_watch$4 = {}, _defineProperty(_watch$4, MODEL_PROP_NAME$3, function (newValue, oldValue) {\n if (newValue !== oldValue) {\n this.localShow = newValue;\n }\n }), _defineProperty(_watch$4, \"localShow\", function localShow(newValue, oldValue) {\n if (newValue !== oldValue) {\n this.emitState(newValue);\n this.$emit(MODEL_EVENT_NAME$3, newValue);\n }\n }), _defineProperty(_watch$4, \"$route\", function $route() {\n var newValue = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var oldValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n if (!this.noCloseOnRouteChange && newValue.fullPath !== oldValue.fullPath) {\n this.hide();\n }\n }), _watch$4),\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(ROOT_ACTION_EVENT_NAME_TOGGLE, this.handleToggle);\n this.listenOnRoot(ROOT_ACTION_EVENT_NAME_REQUEST_STATE, 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 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(ROOT_EVENT_NAME_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(ROOT_EVENT_NAME_SYNC_STATE, 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(event) {\n var keyCode = event.keyCode;\n\n if (!this.noCloseOnEsc && keyCode === CODE_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 var tabables = getTabables(this.$refs.content);\n this.enforceFocus(tabables.reverse()[0]);\n },\n\n /* istanbul ignore next */\n onBottomTrapFocus: function onBottomTrapFocus() {\n var tabables = getTabables(this.$refs.content);\n this.enforceFocus(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(IS_BROWSER ? [document.body] : []); // Trigger lazy render\n\n this.isOpen = true;\n },\n onAfterEnter: function onAfterEnter(el) {\n if (!contains(el, getActiveElement())) {\n this.enforceFocus(el);\n }\n\n this.$emit(EVENT_NAME_SHOWN);\n },\n onAfterLeave: function onAfterLeave() {\n this.enforceFocus(this.$_returnFocusEl);\n this.$_returnFocusEl = null; // Trigger lazy render\n\n this.isOpen = false;\n this.$emit(EVENT_NAME_HIDDEN);\n },\n enforceFocus: function enforceFocus(el) {\n if (!this.noEnforceFocus) {\n attemptFocus(el);\n }\n }\n },\n render: function render(h) {\n var _ref;\n\n var bgVariant = this.bgVariant,\n width = this.width,\n textVariant = this.textVariant,\n localShow = this.localShow;\n var shadow = this.shadow === '' ? true : this.shadow;\n var $sidebar = h(this.tag, {\n staticClass: CLASS_NAME,\n class: [(_ref = {\n shadow: shadow === true\n }, _defineProperty(_ref, \"shadow-\".concat(shadow), shadow && shadow !== true), _defineProperty(_ref, \"\".concat(CLASS_NAME, \"-right\"), this.right), _defineProperty(_ref, \"bg-\".concat(bgVariant), bgVariant), _defineProperty(_ref, \"text-\".concat(textVariant), textVariant), _ref), this.sidebarClass],\n style: {\n width: width\n },\n attrs: this.computedAttrs,\n directives: [{\n name: 'show',\n value: localShow\n }],\n ref: 'content'\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 && 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 props$z = makePropsConfigurable({\n animation: makeProp(PROP_TYPE_STRING, 'wave'),\n height: makeProp(PROP_TYPE_STRING),\n size: makeProp(PROP_TYPE_STRING),\n type: makeProp(PROP_TYPE_STRING, 'text'),\n variant: makeProp(PROP_TYPE_STRING),\n width: makeProp(PROP_TYPE_STRING)\n }, NAME_SKELETON); // --- Main component ---\n // @vue/component\n\n var BSkeleton = /*#__PURE__*/extend({\n name: NAME_SKELETON,\n functional: true,\n props: props$z,\n render: function render(h, _ref) {\n var _class;\n\n var data = _ref.data,\n props = _ref.props;\n var size = props.size,\n animation = props.animation,\n variant = props.variant;\n return h('div', a(data, {\n staticClass: 'b-skeleton',\n style: {\n width: size || props.width,\n height: size || props.height\n },\n class: (_class = {}, _defineProperty(_class, \"b-skeleton-\".concat(props.type), true), _defineProperty(_class, \"b-skeleton-animate-\".concat(animation), animation), _defineProperty(_class, \"bg-\".concat(variant), variant), _class)\n }));\n }\n });\n\n makePropsConfigurable(omit(props$2h, ['content', 'stacked']), NAME_ICONSTACK); // --- Main component ---\n\n var props$y = makePropsConfigurable({\n animation: makeProp(PROP_TYPE_STRING, 'wave'),\n icon: makeProp(PROP_TYPE_STRING),\n iconProps: makeProp(PROP_TYPE_OBJECT, {})\n }, NAME_SKELETON_ICON); // --- Main component ---\n // @vue/component\n\n var BSkeletonIcon = /*#__PURE__*/extend({\n name: NAME_SKELETON_ICON,\n functional: true,\n props: props$y,\n render: function render(h, _ref) {\n var data = _ref.data,\n props = _ref.props;\n var icon = props.icon,\n animation = props.animation;\n var $icon = h(BIcon, {\n staticClass: 'b-skeleton-icon',\n props: _objectSpread2$3(_objectSpread2$3({}, props.iconProps), {}, {\n icon: icon\n })\n });\n return h('div', a(data, {\n staticClass: 'b-skeleton-icon-wrapper position-relative d-inline-block overflow-hidden',\n class: _defineProperty({}, \"b-skeleton-animate-\".concat(animation), animation)\n }), [$icon]);\n }\n });\n\n var props$x = makePropsConfigurable({\n animation: makeProp(PROP_TYPE_STRING),\n aspect: makeProp(PROP_TYPE_STRING, '16:9'),\n cardImg: makeProp(PROP_TYPE_STRING),\n height: makeProp(PROP_TYPE_STRING),\n noAspect: makeProp(PROP_TYPE_BOOLEAN, false),\n variant: makeProp(PROP_TYPE_STRING),\n width: makeProp(PROP_TYPE_STRING)\n }, NAME_SKELETON_IMG); // --- Main component ---\n // @vue/component\n\n var BSkeletonImg = /*#__PURE__*/extend({\n name: NAME_SKELETON_IMG,\n functional: true,\n props: props$x,\n render: function render(h, _ref) {\n var data = _ref.data,\n props = _ref.props;\n var aspect = props.aspect,\n width = props.width,\n height = props.height,\n animation = props.animation,\n variant = props.variant,\n cardImg = props.cardImg;\n var $img = h(BSkeleton, a(data, {\n props: {\n type: 'img',\n width: width,\n height: height,\n animation: animation,\n variant: variant\n },\n class: _defineProperty({}, \"card-img-\".concat(cardImg), cardImg)\n }));\n return props.noAspect ? $img : h(BAspect, {\n props: {\n aspect: aspect\n }\n }, [$img]);\n }\n });\n\n // Mixin to determine if an event listener has been registered\n\n var hasListenerMixin = extend({\n methods: {\n hasListener: function hasListener(name) {\n if (isVue3) {\n return true;\n } // Only includes listeners registered via `v-on:name`\n\n\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 var LIGHT = 'light';\n var DARK = 'dark'; // --- Props ---\n\n var props$w = makePropsConfigurable({\n variant: makeProp(PROP_TYPE_STRING)\n }, NAME_TR); // --- 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 BTr = /*#__PURE__*/extend({\n name: NAME_TR,\n mixins: [attrsMixin, listenersMixin, normalizeSlotMixin],\n provide: function provide() {\n var _this = this;\n\n return {\n getBvTableTr: function getBvTableTr() {\n return _this;\n }\n };\n },\n inject: {\n getBvTableRowGroup: {\n default:\n /* istanbul ignore next */\n function _default() {\n return function () {\n return {};\n };\n }\n }\n },\n inheritAttrs: false,\n props: props$w,\n computed: {\n bvTableRowGroup: function bvTableRowGroup() {\n return this.getBvTableRowGroup();\n },\n // Sniffed by `<b-td>` / `<b-th>`\n inTbody: function inTbody() {\n return this.bvTableRowGroup.isTbody;\n },\n // Sniffed by `<b-td>` / `<b-th>`\n inThead: function inThead() {\n return this.bvTableRowGroup.isThead;\n },\n // Sniffed by `<b-td>` / `<b-th>`\n inTfoot: function inTfoot() {\n return this.bvTableRowGroup.isTfoot;\n },\n // Sniffed by `<b-td>` / `<b-th>`\n isDark: function isDark() {\n return this.bvTableRowGroup.isDark;\n },\n // Sniffed by `<b-td>` / `<b-th>`\n isStacked: function isStacked() {\n return this.bvTableRowGroup.isStacked;\n },\n // Sniffed by `<b-td>` / `<b-th>`\n isResponsive: function isResponsive() {\n return this.bvTableRowGroup.isResponsive;\n },\n // Sniffed by `<b-td>` / `<b-th>`\n // Sticky headers are only supported in thead\n isStickyHeader: function isStickyHeader() {\n return this.bvTableRowGroup.isStickyHeader;\n },\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 hasStickyHeader: function hasStickyHeader() {\n return !this.isStacked && this.bvTableRowGroup.hasStickyHeader;\n },\n // Sniffed by `<b-td>` / `<b-th>`\n tableVariant: function tableVariant() {\n return this.bvTableRowGroup.tableVariant;\n },\n // Sniffed by `<b-td>` / `<b-th>`\n headVariant: function headVariant() {\n return this.inThead ? this.bvTableRowGroup.headVariant : null;\n },\n // Sniffed by `<b-td>` / `<b-th>`\n footVariant: function footVariant() {\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 var variant = this.variant;\n return [variant ? \"\".concat(this.isRowDark ? 'bg' : 'table', \"-\").concat(variant) : null];\n },\n trAttrs: function trAttrs() {\n return _objectSpread2$3({\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());\n }\n });\n\n var props$v = {}; // --- Mixin ---\n // @vue/component\n\n var bottomRowMixin = extend({\n props: props$v,\n methods: {\n renderBottomRow: function renderBottomRow() {\n var fields = this.computedFields,\n stacked = this.stacked,\n tbodyTrClass = this.tbodyTrClass,\n tbodyTrAttr = this.tbodyTrAttr;\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(SLOT_NAME_BOTTOM_ROW) || stacked === true || stacked === '') {\n return h();\n }\n\n return h(BTr, {\n staticClass: 'b-table-bottom-row',\n class: [isFunction$1(tbodyTrClass) ?\n /* istanbul ignore next */\n tbodyTrClass(null, 'row-bottom') : tbodyTrClass],\n attrs: isFunction$1(tbodyTrAttr) ?\n /* istanbul ignore next */\n tbodyTrAttr(null, 'row-bottom') : tbodyTrAttr,\n key: 'b-bottom-row'\n }, this.normalizeSlot(SLOT_NAME_BOTTOM_ROW, {\n columns: fields.length,\n fields: fields\n }));\n }\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(value) {\n return isUndefinedOrNull(value) || parseSpan(value) > 0;\n }; // --- Props ---\n\n\n var props$u = makePropsConfigurable({\n colspan: makeProp(PROP_TYPE_NUMBER_STRING, null, spanValidator),\n rowspan: makeProp(PROP_TYPE_NUMBER_STRING, null, spanValidator),\n stackedHeading: makeProp(PROP_TYPE_STRING),\n stickyColumn: makeProp(PROP_TYPE_BOOLEAN, false),\n variant: makeProp(PROP_TYPE_STRING)\n }, NAME_TABLE_CELL); // --- 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__*/extend({\n name: NAME_TABLE_CELL,\n // Mixin order is important!\n mixins: [attrsMixin, listenersMixin, normalizeSlotMixin],\n inject: {\n getBvTableTr: {\n default:\n /* istanbul ignore next */\n function _default() {\n return function () {\n return {};\n };\n }\n }\n },\n inheritAttrs: false,\n props: props$u,\n computed: {\n bvTableTr: function bvTableTr() {\n return this.getBvTableTr();\n },\n // Overridden by `<b-th>`\n tag: function tag() {\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 // We only support stacked-heading in tbody in stacked mode\n isStackedCell: function isStackedCell() {\n return this.inTbody && this.isStacked;\n },\n isResponsive: function isResponsive() {\n return this.bvTableTr.isResponsive;\n },\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 isStickyHeader: function isStickyHeader() {\n return this.bvTableTr.isStickyHeader;\n },\n // Needed to handle header background classes, due to lack of\n // background color inheritance with Bootstrap v4 table CSS\n hasStickyHeader: function hasStickyHeader() {\n return this.bvTableTr.hasStickyHeader;\n },\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 isStickyColumn: function isStickyColumn() {\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 // We use computed props here for improved performance by caching\n // the results of the string interpolation\n cellClasses: function cellClasses() {\n var variant = this.variant,\n headVariant = this.headVariant,\n isStickyColumn = this.isStickyColumn;\n\n if (!variant && this.isStickyHeader && !headVariant || !variant && isStickyColumn && this.inTfoot && !this.footVariant || !variant && isStickyColumn && this.inThead && !headVariant || !variant && isStickyColumn && this.inTbody) {\n // Needed for sticky-header mode as Bootstrap v4 table cells do\n // not inherit parent's `background-color`\n variant = this.rowVariant || this.tableVariant || 'b-table-default';\n }\n\n return [variant ? \"\".concat(this.isDark ? 'bg' : 'table', \"-\").concat(variant) : null, isStickyColumn ? 'b-table-sticky-column' : null];\n },\n cellAttrs: function cellAttrs() {\n var stackedHeading = this.stackedHeading; // We use computed props here for improved performance by caching\n // the results of the object spread (Object.assign)\n\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$3(_objectSpread2$3({\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(stackedHeading) ?\n /* istanbul ignore next */\n toString(stackedHeading) : null\n });\n }\n },\n render: function render(h) {\n var $content = [this.normalizeSlot()];\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 var MODEL_PROP_NAME_BUSY = 'busy';\n var MODEL_EVENT_NAME_BUSY = MODEL_EVENT_NAME_PREFIX + MODEL_PROP_NAME_BUSY; // --- Props ---\n\n var props$t = _defineProperty({}, MODEL_PROP_NAME_BUSY, makeProp(PROP_TYPE_BOOLEAN, false)); // --- Mixin ---\n // @vue/component\n\n var busyMixin = extend({\n props: props$t,\n data: function data() {\n return {\n localBusy: false\n };\n },\n computed: {\n computedBusy: function computedBusy() {\n return this[MODEL_PROP_NAME_BUSY] || this.localBusy;\n }\n },\n watch: {\n localBusy: function localBusy(newValue, oldValue) {\n if (newValue !== oldValue) {\n this.$emit(MODEL_EVENT_NAME_BUSY, newValue);\n }\n }\n },\n methods: {\n // Event handler helper\n stopIfBusy: function stopIfBusy(event) {\n // If table is busy (via provider) then don't propagate\n if (this.computedBusy) {\n stopEvent(event);\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 tbodyTrClass = this.tbodyTrClass,\n tbodyTrAttr = this.tbodyTrAttr;\n var h = this.$createElement; // Return a busy indicator row, or `null` if not busy\n\n if (this.computedBusy && this.hasNormalizedSlot(SLOT_NAME_TABLE_BUSY)) {\n return h(BTr, {\n staticClass: 'b-table-busy-slot',\n class: [isFunction$1(tbodyTrClass) ?\n /* istanbul ignore next */\n tbodyTrClass(null, SLOT_NAME_TABLE_BUSY) : tbodyTrClass],\n attrs: isFunction$1(tbodyTrAttr) ?\n /* istanbul ignore next */\n tbodyTrAttr(null, SLOT_NAME_TABLE_BUSY) : tbodyTrAttr,\n key: 'table-busy-slot'\n }, [h(BTd, {\n props: {\n colspan: this.computedFields.length || null\n }\n }, [this.normalizeSlot(SLOT_NAME_TABLE_BUSY)])]);\n } // We return `null` here so that we can determine if we need to\n // render the table items rows or not\n\n\n return null;\n }\n }\n });\n\n var props$s = {\n caption: makeProp(PROP_TYPE_STRING),\n captionHtml: makeProp(PROP_TYPE_STRING) // `caption-top` is part of table-render mixin (styling)\n // captionTop: makeProp(PROP_TYPE_BOOLEAN, false)\n\n }; // --- Mixin ---\n // @vue/component\n\n var captionMixin = extend({\n props: props$s,\n computed: {\n captionId: function captionId() {\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(SLOT_NAME_TABLE_CAPTION);\n\n if (hasCaptionSlot || caption || captionHtml) {\n $caption = h('caption', {\n attrs: {\n id: this.captionId\n },\n domProps: hasCaptionSlot ? {} : htmlOrText(captionHtml, caption),\n key: 'caption',\n ref: 'caption'\n }, this.normalizeSlot(SLOT_NAME_TABLE_CAPTION));\n }\n\n return $caption;\n }\n }\n });\n\n var props$r = {}; // --- Mixin ---\n // @vue/component\n\n var colgroupMixin = extend({\n methods: {\n renderColgroup: function renderColgroup() {\n var fields = this.computedFields;\n var h = this.$createElement;\n var $colgroup = h();\n\n if (this.hasNormalizedSlot(SLOT_NAME_TABLE_COLGROUP)) {\n $colgroup = h('colgroup', {\n key: 'colgroup'\n }, [this.normalizeSlot(SLOT_NAME_TABLE_COLGROUP, {\n columns: fields.length,\n fields: fields\n })]);\n }\n\n return $colgroup;\n }\n }\n });\n\n var props$q = {\n emptyFilteredHtml: makeProp(PROP_TYPE_STRING),\n emptyFilteredText: makeProp(PROP_TYPE_STRING, 'There are no records matching your request'),\n emptyHtml: makeProp(PROP_TYPE_STRING),\n emptyText: makeProp(PROP_TYPE_STRING, 'There are no records to show'),\n showEmpty: makeProp(PROP_TYPE_BOOLEAN, false)\n }; // --- Mixin ---\n // @vue/component\n\n var emptyMixin = extend({\n props: props$q,\n methods: {\n renderEmpty: function renderEmpty() {\n var _safeVueInstance = safeVueInstance(this),\n items = _safeVueInstance.computedItems,\n computedBusy = _safeVueInstance.computedBusy;\n\n var h = this.$createElement;\n var $empty = h();\n\n if (this.showEmpty && (!items || items.length === 0) && !(computedBusy && this.hasNormalizedSlot(SLOT_NAME_TABLE_BUSY))) {\n var fields = this.computedFields,\n isFiltered = this.isFiltered,\n emptyText = this.emptyText,\n emptyHtml = this.emptyHtml,\n emptyFilteredText = this.emptyFilteredText,\n emptyFilteredHtml = this.emptyFilteredHtml,\n tbodyTrClass = this.tbodyTrClass,\n tbodyTrAttr = this.tbodyTrAttr;\n $empty = this.normalizeSlot(isFiltered ? SLOT_NAME_EMPTYFILTERED : SLOT_NAME_EMPTY, {\n emptyFilteredHtml: emptyFilteredHtml,\n emptyFilteredText: emptyFilteredText,\n emptyHtml: emptyHtml,\n emptyText: emptyText,\n fields: fields,\n // Not sure why this is included, as it will always be an empty array\n items: items\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: fields.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$1(tbodyTrClass) ?\n /* istanbul ignore next */\n tbodyTrClass(null, 'row-empty') : tbodyTrClass],\n attrs: isFunction$1(tbodyTrAttr) ?\n /* istanbul ignore next */\n 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 // 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 // Strings are returned as-is\n // Numbers get converted to string\n // `null` and `undefined` values are filtered out\n // Dates are converted to their native string format\n\n var stringifyObjectValues = function stringifyObjectValues(value) {\n if (isUndefinedOrNull(value)) {\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(value) && !isDate(value)) {\n return keys(value).sort() // Sort to prevent SSR issues on pre-rendered sorted tables\n .map(function (k) {\n return stringifyObjectValues(value[k]);\n }).filter(function (v) {\n return !!v;\n }) // Ignore empty strings\n .join(' ');\n }\n\n return toString(value);\n };\n\n // Constants used by table helpers\n var FIELD_KEY_CELL_VARIANT = '_cellVariants';\n var FIELD_KEY_ROW_VARIANT = '_rowVariant';\n var FIELD_KEY_SHOW_DETAILS = '_showDetails'; // Object of item keys that should be ignored for headers and\n // stringification and filter events\n\n var IGNORED_FIELD_KEYS = [FIELD_KEY_CELL_VARIANT, FIELD_KEY_ROW_VARIANT, FIELD_KEY_SHOW_DETAILS].reduce(function (result, key) {\n return _objectSpread2$3(_objectSpread2$3({}, result), {}, _defineProperty({}, key, 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 sanitizeRow = function sanitizeRow(row, ignoreFields, includeFields) {\n var fieldsObj = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n // We first need to format the row based on the field configurations\n // This ensures that we add formatted values for keys that may not\n // exist in the row itself\n var formattedRow = keys(fieldsObj).reduce(function (result, key) {\n var field = fieldsObj[key];\n var filterByFormatted = field.filterByFormatted;\n var formatter = isFunction$1(filterByFormatted) ?\n /* istanbul ignore next */\n filterByFormatted : filterByFormatted ?\n /* istanbul ignore next */\n field.formatter : null;\n\n if (isFunction$1(formatter)) {\n result[key] = formatter(row[key], key, row);\n }\n\n return result;\n }, clone(row)); // Determine the allowed keys:\n // - Ignore special fields that start with `_`\n // - Ignore fields in the `ignoreFields` array\n // - Include only fields in the `includeFields` array\n\n var allowedKeys = keys(formattedRow).filter(function (key) {\n return !IGNORED_FIELD_KEYS[key] && !(isArray(ignoreFields) && ignoreFields.length > 0 && arrayIncludes(ignoreFields, key)) && !(isArray(includeFields) && includeFields.length > 0 && !arrayIncludes(includeFields, key));\n });\n return pick$1(formattedRow, allowedKeys);\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.'; // --- Props ---\n\n var props$p = {\n filter: makeProp([].concat(_toConsumableArray$1(PROP_TYPE_ARRAY_OBJECT_STRING), [PROP_TYPE_REG_EXP])),\n filterDebounce: makeProp(PROP_TYPE_NUMBER_STRING, 0, function (value) {\n return RX_DIGITS.test(String(value));\n }),\n filterFunction: makeProp(PROP_TYPE_FUNCTION),\n filterIgnoredFields: makeProp(PROP_TYPE_ARRAY, []),\n filterIncludedFields: makeProp(PROP_TYPE_ARRAY, [])\n }; // --- Mixin ---\n // @vue/component\n\n var filteringMixin = extend({\n props: props$p,\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 concat(this.filterIgnoredFields || []).filter(identity);\n },\n computedFilterIncluded: function computedFilterIncluded() {\n return concat(this.filterIncludedFields || []).filter(identity);\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, NAME_TABLE);\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 var filteredItems = this.filteredItems,\n localItems = this.localItems,\n localFilter = this.localFilter;\n return {\n filteredItems: filteredItems,\n localItems: localItems,\n localFilter: localFilter\n };\n },\n // Sanitized/normalize filter-function prop\n localFilterFn: function localFilterFn() {\n // Return `null` to signal to use internal filter function\n var filterFunction = this.filterFunction;\n return hasPropFunction(filterFunction) ? 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 // Note the criteria is debounced and sanitized\n var items = this.localItems,\n 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(newValue) {\n if (!newValue && 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(EVENT_NAME_FILTERED, filteredItems, filteredItems.length);\n }\n\n this.isFiltered = isFiltered;\n },\n isFiltered: function isFiltered(newValue, oldValue) {\n if (newValue === false && oldValue === 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 var localItems = this.localItems;\n this.$emit(EVENT_NAME_FILTERED, localItems, 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 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$1(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, '\\\\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 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$1(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 _makeModelMixin$2 = makeModelMixin('value', {\n type: PROP_TYPE_ARRAY,\n defaultValue: []\n }),\n modelMixin$2 = _makeModelMixin$2.mixin,\n modelProps$2 = _makeModelMixin$2.props,\n MODEL_PROP_NAME$2 = _makeModelMixin$2.prop,\n MODEL_EVENT_NAME$2 = _makeModelMixin$2.event;\n\n var props$o = sortKeys(_objectSpread2$3(_objectSpread2$3({}, modelProps$2), {}, _defineProperty({\n fields: makeProp(PROP_TYPE_ARRAY, null),\n // Provider mixin adds in `Function` type\n items: makeProp(PROP_TYPE_ARRAY, []),\n // Primary key for record\n // If provided the value in each row must be unique!\n primaryKey: makeProp(PROP_TYPE_STRING)\n }, MODEL_PROP_NAME$2, makeProp(PROP_TYPE_ARRAY, [])))); // --- Mixin ---\n // @vue/component\n\n var itemsMixin = extend({\n mixins: [modelMixin$2, useParentMixin],\n props: props$o,\n data: function data() {\n var items = this.items;\n return {\n // Our local copy of the items\n // Must be an array\n localItems: isArray(items) ? 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 bvParent = this.bvParent;\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$1(bvParent[formatter])) {\n formatter = bvParent[formatter];\n } else if (!isFunction$1(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 var _safeVueInstance = safeVueInstance(this),\n paginatedItems = _safeVueInstance.paginatedItems,\n sortedItems = _safeVueInstance.sortedItems,\n filteredItems = _safeVueInstance.filteredItems,\n localItems = _safeVueInstance.localItems; // Fallback if various mixins not provided\n\n\n return (paginatedItems || sortedItems || filteredItems || localItems ||\n /* istanbul ignore next */\n []).slice();\n },\n context: function context() {\n var _safeVueInstance2 = safeVueInstance(this),\n perPage = _safeVueInstance2.perPage,\n currentPage = _safeVueInstance2.currentPage; // Current state of sorting, filtering and pagination props/values\n\n\n return {\n filter: this.localFilter,\n sortBy: this.localSortBy,\n sortDesc: this.localSortDesc,\n perPage: mathMax(toInteger(perPage, 0), 0),\n currentPage: mathMax(toInteger(currentPage, 0), 1),\n apiUrl: this.apiUrl\n };\n }\n },\n watch: {\n items: function items(newValue) {\n // Set `localItems`/`filteredItems` to a copy of the provided array\n this.localItems = isArray(newValue) ? newValue.slice() : [];\n },\n // Watch for changes on `computedItems` and update the `v-model`\n computedItems: function computedItems(newValue, oldValue) {\n if (!looseEqual(newValue, oldValue)) {\n this.$emit(MODEL_EVENT_NAME$2, newValue);\n }\n },\n // Watch for context changes\n context: function context(newValue, oldValue) {\n // Emit context information for external paging/filtering/sorting handling\n if (!looseEqual(newValue, oldValue)) {\n this.$emit(EVENT_NAME_CONTEXT_CHANGED, newValue);\n }\n }\n },\n mounted: function mounted() {\n // Initially update the `v-model` of displayed items\n this.$emit(MODEL_EVENT_NAME$2, 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 var props$n = {\n currentPage: makeProp(PROP_TYPE_NUMBER_STRING, 1),\n perPage: makeProp(PROP_TYPE_NUMBER_STRING, 0)\n }; // --- Mixin ---\n // @vue/component\n\n var paginationMixin = extend({\n props: props$n,\n computed: {\n localPaging: function localPaging() {\n return this.hasProvider ? !!this.noProviderPaging : true;\n },\n paginatedItems: function paginatedItems() {\n var _safeVueInstance = safeVueInstance(this),\n sortedItems = _safeVueInstance.sortedItems,\n filteredItems = _safeVueInstance.filteredItems,\n localItems = _safeVueInstance.localItems;\n\n var items = sortedItems || filteredItems || 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 ROOT_EVENT_NAME_REFRESHED = getRootEventName(NAME_TABLE, EVENT_NAME_REFRESHED);\n var ROOT_ACTION_EVENT_NAME_REFRESH = getRootActionEventName(NAME_TABLE, EVENT_NAME_REFRESH); // --- Props ---\n\n var props$m = {\n // Passed to the context object\n // Not used by `<b-table>` directly\n apiUrl: makeProp(PROP_TYPE_STRING),\n // Adds in 'Function' support\n items: makeProp(PROP_TYPE_ARRAY_FUNCTION, []),\n noProviderFiltering: makeProp(PROP_TYPE_BOOLEAN, false),\n noProviderPaging: makeProp(PROP_TYPE_BOOLEAN, false),\n noProviderSorting: makeProp(PROP_TYPE_BOOLEAN, false)\n }; // --- Mixin ---\n // @vue/component\n\n var providerMixin = extend({\n mixins: [listenOnRootMixin],\n props: props$m,\n computed: {\n hasProvider: function hasProvider() {\n return isFunction$1(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(newValue) {\n // If a new provider has been specified, trigger an update\n if (this.hasProvider || isFunction$1(newValue)) {\n this.$nextTick(this._providerUpdate);\n }\n },\n providerTriggerContext: function providerTriggerContext(newValue, oldValue) {\n // Trigger the provider to update as the relevant context values have changed.\n if (!looseEqual(newValue, oldValue)) {\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(ROOT_ACTION_EVENT_NAME_REFRESH, function (id) {\n if (id === _this.id || id === _this) {\n _this.refresh();\n }\n });\n },\n methods: {\n refresh: function refresh() {\n var _safeVueInstance = safeVueInstance(this),\n items = _safeVueInstance.items,\n refresh = _safeVueInstance.refresh,\n computedBusy = _safeVueInstance.computedBusy; // Public Method: Force a refresh of the provider function\n\n\n this.$off(EVENT_NAME_REFRESHED, refresh);\n\n if (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(EVENT_NAME_REFRESHED, 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(items) ? 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(EVENT_NAME_REFRESHED); // New root emit\n\n if (this.id) {\n this.emitOnRoot(ROOT_EVENT_NAME_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 (safeVueInstance(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.\", NAME_TABLE);\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, \".\"), NAME_TABLE);\n _this2.localBusy = false;\n\n _this2.$off(EVENT_NAME_REFRESHED, _this2.refresh);\n }\n });\n }\n }\n });\n\n var SELECT_MODES = ['range', 'multi', 'single'];\n var ROLE_GRID = 'grid'; // --- Props ---\n\n var props$l = {\n // Disable use of click handlers for row selection\n noSelectOnClick: makeProp(PROP_TYPE_BOOLEAN, false),\n selectMode: makeProp(PROP_TYPE_STRING, 'multi', function (value) {\n return arrayIncludes(SELECT_MODES, value);\n }),\n selectable: makeProp(PROP_TYPE_BOOLEAN, false),\n selectedVariant: makeProp(PROP_TYPE_STRING, 'active')\n }; // --- Mixin ---\n // @vue/component\n\n var selectableMixin = extend({\n props: props$l,\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 var selectedRows = this.selectedRows;\n return this.isSelectable && selectedRows && selectedRows.length > 0 && 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 var isSelectable = this.isSelectable;\n return _ref = {\n 'b-table-selectable': isSelectable\n }, _defineProperty(_ref, \"b-table-select-\".concat(this.selectMode), isSelectable), _defineProperty(_ref, 'b-table-selecting', this.selectableHasSelection), _defineProperty(_ref, 'b-table-selectable-no-click', isSelectable && !this.hasSelectableRowClick), _ref;\n },\n selectableTableAttrs: function selectableTableAttrs() {\n if (!this.isSelectable) {\n return {};\n }\n\n var role = this.bvAttrs.role || ROLE_GRID;\n return {\n role: role,\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': role === ROLE_GRID ? toString(this.selectableIsMultiSelect) : null\n };\n }\n },\n watch: {\n computedItems: function computedItems(newValue, oldValue) {\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(newValue) && isArray(oldValue) && newValue.length === oldValue.length;\n\n for (var i = 0; equal && i < newValue.length; i++) {\n // Look for the first non-loosely equal row, after ignoring reserved fields\n equal = looseEqual(sanitizeRow(newValue[i]), sanitizeRow(oldValue[i]));\n }\n }\n\n if (!equal) {\n this.clearSelected();\n }\n },\n selectable: function selectable(newValue) {\n this.clearSelected();\n this.setSelectionHandlers(newValue);\n },\n selectMode: function selectMode() {\n this.clearSelected();\n },\n hasSelectableRowClick: function hasSelectableRowClick(newValue) {\n this.clearSelected();\n this.setSelectionHandlers(!newValue);\n },\n selectedRows: function selectedRows(_selectedRows, oldValue) {\n var _this = this;\n\n if (this.isSelectable && !looseEqual(_selectedRows, oldValue)) {\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(EVENT_NAME_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 ? createArray(length, true) : [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 }\n\n return {};\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](EVENT_NAME_ROW_CLICKED, this.selectionHandler); // Clear selection on filter, pagination, and sort changes\n\n this[method](EVENT_NAME_FILTERED, this.clearSelected);\n this[method](EVENT_NAME_CONTEXT_CHANGED, this.clearSelected);\n },\n selectionHandler: function selectionHandler(item, index, event) {\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 selectedLastRow = this.selectedLastRow;\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 (selectedLastRow > -1 && event.shiftKey) {\n // range\n for (var idx = mathMin(selectedLastRow, index); idx <= mathMax(selectedLastRow, index); idx++) {\n selectedRows[idx] = true;\n }\n\n selected = true;\n } else {\n if (!(event.ctrlKey || event.metaKey)) {\n // Clear range selection if any\n selectedRows = [];\n selected = true;\n }\n\n if (selected) this.selectedLastRow = index;\n }\n }\n\n selectedRows[index] = selected;\n this.selectedRows = selectedRows;\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$1 = 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 var normalizeValue = function normalizeValue(value) {\n if (isUndefinedOrNull(value)) {\n return '';\n }\n\n if (isNumeric$1(value)) {\n return toFloat(value, value);\n }\n\n return value;\n }; // Default sort compare routine\n //\n // TODO:\n // 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\n var defaultSortCompare = function defaultSortCompare(a, b) {\n var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n _ref$sortBy = _ref.sortBy,\n sortBy = _ref$sortBy === void 0 ? null : _ref$sortBy,\n _ref$formatter = _ref.formatter,\n formatter = _ref$formatter === void 0 ? null : _ref$formatter,\n _ref$locale = _ref.locale,\n locale = _ref$locale === void 0 ? undefined : _ref$locale,\n _ref$localeOptions = _ref.localeOptions,\n localeOptions = _ref$localeOptions === void 0 ? {} : _ref$localeOptions,\n _ref$nullLast = _ref.nullLast,\n nullLast = _ref$nullLast === void 0 ? false : _ref$nullLast;\n\n // Get the value by `sortBy`\n var aa = get(a, sortBy, null);\n var bb = get(b, sortBy, null); // Apply user-provided formatter\n\n if (isFunction$1(formatter)) {\n aa = formatter(aa, sortBy, a);\n bb = formatter(bb, sortBy, b);\n } // Internally normalize value\n // `null` / `undefined` => ''\n // `'0'` => `0`\n\n\n aa = normalizeValue(aa);\n bb = normalizeValue(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` / '' last\n return 1;\n } else if (nullLast && aa !== '' && bb === '') {\n // Special case when sorting `null` / `undefined` / '' last\n return -1;\n } // Do localized string comparison\n\n\n return stringifyObjectValues(aa).localeCompare(stringifyObjectValues(bb), locale, localeOptions);\n };\n\n var _props, _watch$3;\n\n var MODEL_PROP_NAME_SORT_BY = 'sortBy';\n var MODEL_EVENT_NAME_SORT_BY = MODEL_EVENT_NAME_PREFIX + MODEL_PROP_NAME_SORT_BY;\n var MODEL_PROP_NAME_SORT_DESC = 'sortDesc';\n var MODEL_EVENT_NAME_SORT_DESC = MODEL_EVENT_NAME_PREFIX + MODEL_PROP_NAME_SORT_DESC;\n var SORT_DIRECTION_ASC = 'asc';\n var SORT_DIRECTION_DESC = 'desc';\n var SORT_DIRECTION_LAST = 'last';\n var SORT_DIRECTIONS = [SORT_DIRECTION_ASC, SORT_DIRECTION_DESC, SORT_DIRECTION_LAST]; // --- Props ---\n\n var props$k = (_props = {\n labelSortAsc: makeProp(PROP_TYPE_STRING, 'Click to sort ascending'),\n labelSortClear: makeProp(PROP_TYPE_STRING, 'Click to clear sorting'),\n labelSortDesc: makeProp(PROP_TYPE_STRING, 'Click to sort descending'),\n noFooterSorting: makeProp(PROP_TYPE_BOOLEAN, false),\n noLocalSorting: makeProp(PROP_TYPE_BOOLEAN, false),\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 noSortReset: makeProp(PROP_TYPE_BOOLEAN, false)\n }, _defineProperty(_props, MODEL_PROP_NAME_SORT_BY, makeProp(PROP_TYPE_STRING)), _defineProperty(_props, \"sortCompare\", makeProp(PROP_TYPE_FUNCTION)), _defineProperty(_props, \"sortCompareLocale\", makeProp(PROP_TYPE_ARRAY_STRING)), _defineProperty(_props, \"sortCompareOptions\", makeProp(PROP_TYPE_OBJECT, {\n numeric: true\n })), _defineProperty(_props, MODEL_PROP_NAME_SORT_DESC, makeProp(PROP_TYPE_BOOLEAN, false)), _defineProperty(_props, \"sortDirection\", makeProp(PROP_TYPE_STRING, SORT_DIRECTION_ASC, function (value) {\n return arrayIncludes(SORT_DIRECTIONS, value);\n })), _defineProperty(_props, \"sortIconLeft\", makeProp(PROP_TYPE_BOOLEAN, false)), _defineProperty(_props, \"sortNullLast\", makeProp(PROP_TYPE_BOOLEAN, false)), _props); // --- Mixin ---\n // @vue/component\n\n var sortingMixin = extend({\n props: props$k,\n data: function data() {\n return {\n localSortBy: this[MODEL_PROP_NAME_SORT_BY] || '',\n localSortDesc: this[MODEL_PROP_NAME_SORT_DESC] || 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 // Sorts the filtered items and returns a new array of the sorted items\n // When not sorted, the original items array will be returned\n sortedItems: function sortedItems() {\n var _safeVueInstance = safeVueInstance(this),\n sortBy = _safeVueInstance.localSortBy,\n sortDesc = _safeVueInstance.localSortDesc,\n locale = _safeVueInstance.sortCompareLocale,\n nullLast = _safeVueInstance.sortNullLast,\n sortCompare = _safeVueInstance.sortCompare,\n localSorting = _safeVueInstance.localSorting,\n filteredItems = _safeVueInstance.filteredItems,\n localItems = _safeVueInstance.localItems;\n\n var items = (filteredItems || localItems || []).slice();\n\n var localeOptions = _objectSpread2$3(_objectSpread2$3({}, this.sortCompareOptions), {}, {\n usage: 'sort'\n });\n\n if (sortBy && localSorting) {\n var field = this.computedFieldsObj[sortBy] || {};\n var sortByFormatted = field.sortByFormatted;\n var formatter = isFunction$1(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$1(items, function (a, b) {\n var result = null; // Call user provided `sortCompare` routine first\n\n if (isFunction$1(sortCompare)) {\n // TODO:\n // Change the `sortCompare` signature to the one of `defaultSortCompare`\n // with the next major version bump\n result = sortCompare(a, b, sortBy, sortDesc, formatter, localeOptions, locale);\n } // Fallback to built-in `defaultSortCompare` if `sortCompare`\n // is not defined or returns `null`/`false`\n\n\n if (isUndefinedOrNull(result) || result === false) {\n result = defaultSortCompare(a, b, {\n sortBy: sortBy,\n formatter: formatter,\n locale: locale,\n localeOptions: localeOptions,\n nullLast: nullLast\n });\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: (_watch$3 = {\n /* istanbul ignore next: pain in the butt to test */\n isSortable: function isSortable(newValue) {\n if (newValue) {\n if (this.isSortable) {\n this.$on(EVENT_NAME_HEAD_CLICKED, this.handleSort);\n }\n } else {\n this.$off(EVENT_NAME_HEAD_CLICKED, this.handleSort);\n }\n }\n }, _defineProperty(_watch$3, MODEL_PROP_NAME_SORT_DESC, function (newValue) {\n /* istanbul ignore next */\n if (newValue === this.localSortDesc) {\n return;\n }\n\n this.localSortDesc = newValue || false;\n }), _defineProperty(_watch$3, MODEL_PROP_NAME_SORT_BY, function (newValue) {\n /* istanbul ignore next */\n if (newValue === this.localSortBy) {\n return;\n }\n\n this.localSortBy = newValue || '';\n }), _defineProperty(_watch$3, \"localSortDesc\", function localSortDesc(newValue, oldValue) {\n // Emit update to sort-desc.sync\n if (newValue !== oldValue) {\n this.$emit(MODEL_EVENT_NAME_SORT_DESC, newValue);\n }\n }), _defineProperty(_watch$3, \"localSortBy\", function localSortBy(newValue, oldValue) {\n if (newValue !== oldValue) {\n this.$emit(MODEL_EVENT_NAME_SORT_BY, newValue);\n }\n }), _watch$3),\n created: function created() {\n if (this.isSortable) {\n this.$on(EVENT_NAME_HEAD_CLICKED, this.handleSort);\n }\n },\n methods: {\n // Handlers\n // Need to move from thead-mixin\n handleSort: function handleSort(key, field, event, 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 === SORT_DIRECTION_ASC) {\n _this.localSortDesc = false;\n } else if (sortDirection === SORT_DIRECTION_DESC) {\n _this.localSortDesc = true;\n } else ;\n };\n\n if (field.sortable) {\n var sortKey = !this.localSorting && field.sortKey ? field.sortKey : key;\n\n if (this.localSortBy === sortKey) {\n // Change sorting direction on current column\n this.localSortDesc = !this.localSortDesc;\n } else {\n // Start sorting this column ascending\n this.localSortBy = sortKey; // 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(EVENT_NAME_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 var _field$sortKey;\n\n var isSortable = this.isSortable,\n noFooterSorting = this.noFooterSorting,\n localSortDesc = this.localSortDesc,\n localSortBy = this.localSortBy,\n localSorting = this.localSorting;\n\n if (!isSortable || isFoot && noFooterSorting) {\n // No attributes if not a sortable table\n return {};\n }\n\n var sortable = field.sortable;\n var sortKey = !localSorting ? (_field$sortKey = field.sortKey) !== null && _field$sortKey !== void 0 ? _field$sortKey : key : key; // Assemble the aria-sort attribute value\n\n var ariaSort = sortable && localSortBy === sortKey ? localSortDesc ? 'descending' : 'ascending' : sortable ? 'none' : null; // Return the attribute\n\n return {\n 'aria-sort': ariaSort\n };\n },\n // A label to be placed in an `.sr-only` element in the header cell\n sortTheadThLabel: function sortTheadThLabel(key, field, isFoot) {\n // No label if not a sortable table\n if (!this.isSortable || isFoot && this.noFooterSorting) {\n return null;\n }\n\n var localSortBy = this.localSortBy,\n localSortDesc = this.localSortDesc,\n labelSortAsc = this.labelSortAsc,\n labelSortDesc = this.labelSortDesc;\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 (localSortBy === key) {\n // Currently sorted sortable column\n labelSorting = localSortDesc ? labelSortAsc : labelSortDesc;\n } else {\n // Not currently sorted sortable column\n // Not using nested ternary's here for clarity/readability\n // Default for `aria-label`\n labelSorting = localSortDesc ? labelSortDesc : labelSortAsc; // Handle `sortDirection` setting\n\n var sortDirection = this.sortDirection || field.sortDirection;\n\n if (sortDirection === SORT_DIRECTION_ASC) {\n labelSorting = labelSortAsc;\n } else if (sortDirection === SORT_DIRECTION_DESC) {\n labelSorting = labelSortDesc;\n }\n }\n } else if (!this.noSortReset) {\n // Non sortable column\n labelSorting = 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 props$j = {\n stacked: makeProp(PROP_TYPE_BOOLEAN_STRING, false)\n }; // --- Mixin ---\n // @vue/component\n\n var stackedMixin = extend({\n props: props$j,\n computed: {\n isStacked: function isStacked() {\n var stacked = this.stacked; // `true` when always stacked, or returns breakpoint specified\n\n return stacked === '' ? true : stacked;\n },\n isStackedAlways: function isStackedAlways() {\n return this.isStacked === true;\n },\n stackedTableClasses: function stackedTableClasses() {\n var isStackedAlways = this.isStackedAlways;\n return _defineProperty({\n 'b-table-stacked': isStackedAlways\n }, \"b-table-stacked-\".concat(this.stacked), !isStackedAlways && this.isStacked);\n }\n }\n });\n\n // Includes all main table styling options\n // --- Props ---\n\n var props$i = {\n bordered: makeProp(PROP_TYPE_BOOLEAN, false),\n borderless: makeProp(PROP_TYPE_BOOLEAN, false),\n captionTop: makeProp(PROP_TYPE_BOOLEAN, false),\n dark: makeProp(PROP_TYPE_BOOLEAN, false),\n fixed: makeProp(PROP_TYPE_BOOLEAN, false),\n hover: makeProp(PROP_TYPE_BOOLEAN, false),\n noBorderCollapse: makeProp(PROP_TYPE_BOOLEAN, false),\n outlined: makeProp(PROP_TYPE_BOOLEAN, false),\n responsive: makeProp(PROP_TYPE_BOOLEAN_STRING, false),\n small: makeProp(PROP_TYPE_BOOLEAN, false),\n // If a string, it is assumed to be the table `max-height` value\n stickyHeader: makeProp(PROP_TYPE_BOOLEAN_STRING, false),\n striped: makeProp(PROP_TYPE_BOOLEAN, false),\n tableClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n tableVariant: makeProp(PROP_TYPE_STRING)\n }; // --- Mixin ---\n // @vue/component\n\n var tableRendererMixin = extend({\n mixins: [attrsMixin],\n provide: function provide() {\n var _this = this;\n\n return {\n getBvTable: function getBvTable() {\n return _this;\n }\n };\n },\n // Don't place attributes on root element automatically,\n // as table could be wrapped in responsive `<div>`\n inheritAttrs: false,\n props: props$i,\n computed: {\n isTableSimple: function isTableSimple() {\n return false;\n },\n // Layout related computed props\n isResponsive: function isResponsive() {\n var responsive = this.responsive;\n return responsive === '' ? true : responsive;\n },\n isStickyHeader: function isStickyHeader() {\n var stickyHeader = this.stickyHeader;\n stickyHeader = stickyHeader === '' ? true : stickyHeader;\n return this.isStacked ? false : stickyHeader;\n },\n wrapperClasses: function wrapperClasses() {\n var isResponsive = this.isResponsive;\n return [this.isStickyHeader ? 'b-table-sticky-header' : '', isResponsive === true ? 'table-responsive' : isResponsive ? \"table-responsive-\".concat(this.responsive) : ''].filter(identity);\n },\n wrapperStyles: function wrapperStyles() {\n var isStickyHeader = this.isStickyHeader;\n return isStickyHeader && !isBoolean(isStickyHeader) ? {\n maxHeight: isStickyHeader\n } : {};\n },\n tableClasses: function tableClasses() {\n var _safeVueInstance = safeVueInstance(this),\n hover = _safeVueInstance.hover,\n tableVariant = _safeVueInstance.tableVariant,\n selectableTableClasses = _safeVueInstance.selectableTableClasses,\n stackedTableClasses = _safeVueInstance.stackedTableClasses,\n tableClass = _safeVueInstance.tableClass,\n computedBusy = _safeVueInstance.computedBusy;\n\n hover = this.isTableSimple ? hover : hover && this.computedItems.length > 0 && !computedBusy;\n return [// User supplied classes\n 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 }, tableVariant ? \"\".concat(this.dark ? 'bg' : 'table', \"-\").concat(tableVariant) : '', // Stacked table classes\n stackedTableClasses, // Selectable classes\n selectableTableClasses];\n },\n tableAttrs: function tableAttrs() {\n var _safeVueInstance2 = safeVueInstance(this),\n items = _safeVueInstance2.computedItems,\n filteredItems = _safeVueInstance2.filteredItems,\n fields = _safeVueInstance2.computedFields,\n selectableTableAttrs = _safeVueInstance2.selectableTableAttrs,\n computedBusy = _safeVueInstance2.computedBusy;\n\n var ariaAttrs = this.isTableSimple ? {} : {\n 'aria-busy': toString(computedBusy),\n 'aria-colcount': toString(fields.length),\n // Preserve user supplied `aria-describedby`, if provided\n 'aria-describedby': this.bvAttrs['aria-describedby'] || this.$refs.caption ? this.captionId : null\n };\n var rowCount = items && filteredItems && filteredItems.length > items.length ? toString(filteredItems.length) : null;\n return _objectSpread2$3(_objectSpread2$3(_objectSpread2$3({\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: this.bvAttrs.role || 'table'\n }, ariaAttrs), selectableTableAttrs);\n }\n },\n render: function render(h) {\n var _safeVueInstance3 = safeVueInstance(this),\n wrapperClasses = _safeVueInstance3.wrapperClasses,\n renderCaption = _safeVueInstance3.renderCaption,\n renderColgroup = _safeVueInstance3.renderColgroup,\n renderThead = _safeVueInstance3.renderThead,\n renderTbody = _safeVueInstance3.renderTbody,\n renderTfoot = _safeVueInstance3.renderTfoot;\n\n var $content = [];\n\n if (this.isTableSimple) {\n $content.push(this.normalizeSlot());\n } else {\n // Build the `<caption>` (from caption mixin)\n $content.push(renderCaption ? renderCaption() : null); // Build the `<colgroup>`\n\n $content.push(renderColgroup ? renderColgroup() : null); // Build the `<thead>`\n\n $content.push(renderThead ? renderThead() : null); // Build the `<tbody>`\n\n $content.push(renderTbody ? renderTbody() : null); // Build the `<tfoot>`\n\n $content.push(renderTfoot ? renderTfoot() : null);\n } // Assemble `<table>`\n\n\n var $table = h('table', {\n staticClass: 'table b-table',\n class: this.tableClasses,\n attrs: this.tableAttrs,\n key: 'b-table'\n }, $content.filter(identity)); // Add responsive/sticky wrapper if needed and return table\n\n return wrapperClasses.length > 0 ? h('div', {\n class: wrapperClasses,\n style: this.wrapperStyles,\n key: 'wrap'\n }, [$table]) : $table;\n }\n });\n\n var props$h = makePropsConfigurable({\n tbodyTransitionHandlers: makeProp(PROP_TYPE_OBJECT),\n tbodyTransitionProps: makeProp(PROP_TYPE_OBJECT)\n }, NAME_TBODY); // --- 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 BTbody = /*#__PURE__*/extend({\n name: NAME_TBODY,\n mixins: [attrsMixin, listenersMixin, normalizeSlotMixin],\n provide: function provide() {\n var _this = this;\n\n return {\n getBvTableRowGroup: function getBvTableRowGroup() {\n return _this;\n }\n };\n },\n inject: {\n // Sniffed by `<b-tr>` / `<b-td>` / `<b-th>`\n getBvTable: {\n default:\n /* istanbul ignore next */\n function _default() {\n return function () {\n return {};\n };\n }\n }\n },\n inheritAttrs: false,\n props: props$h,\n computed: {\n bvTable: function bvTable() {\n return this.getBvTable();\n },\n // Sniffed by `<b-tr>` / `<b-td>` / `<b-th>`\n isTbody: function isTbody() {\n return true;\n },\n // Sniffed by `<b-tr>` / `<b-td>` / `<b-th>`\n isDark: function isDark() {\n return this.bvTable.dark;\n },\n // Sniffed by `<b-tr>` / `<b-td>` / `<b-th>`\n isStacked: function isStacked() {\n return this.bvTable.isStacked;\n },\n // Sniffed by `<b-tr>` / `<b-td>` / `<b-th>`\n isResponsive: function isResponsive() {\n return this.bvTable.isResponsive;\n },\n // Sniffed by `<b-tr>` / `<b-td>` / `<b-th>`\n // Sticky headers are only supported in thead\n isStickyHeader: function isStickyHeader() {\n return false;\n },\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 hasStickyHeader: function hasStickyHeader() {\n return !this.isStacked && this.bvTable.stickyHeader;\n },\n // Sniffed by `<b-tr>` / `<b-td>` / `<b-th>`\n tableVariant: function tableVariant() {\n return this.bvTable.tableVariant;\n },\n isTransitionGroup: function isTransitionGroup() {\n return this.tbodyTransitionProps || this.tbodyTransitionHandlers;\n },\n tbodyAttrs: function tbodyAttrs() {\n return _objectSpread2$3({\n role: 'rowgroup'\n }, this.bvAttrs);\n },\n tbodyProps: function tbodyProps() {\n var tbodyTransitionProps = this.tbodyTransitionProps;\n return tbodyTransitionProps ? _objectSpread2$3(_objectSpread2$3({}, 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());\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(event) {\n // Exit early when we don't have a target element\n if (!event || !event.target) {\n /* istanbul ignore next */\n return false;\n }\n\n var el = event.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$g = makePropsConfigurable(props$u, NAME_TH); // --- 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 BTh = /*#__PURE__*/extend({\n name: NAME_TH,\n extends: BTd,\n props: props$g,\n computed: {\n tag: function tag() {\n return 'th';\n }\n }\n });\n\n var props$f = {\n detailsTdClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n tbodyTrAttr: makeProp(PROP_TYPE_OBJECT_FUNCTION),\n tbodyTrClass: makeProp([].concat(_toConsumableArray$1(PROP_TYPE_ARRAY_OBJECT_STRING), [PROP_TYPE_FUNCTION]))\n }; // --- Mixin ---\n // @vue/component\n\n var tbodyRowMixin = extend({\n mixins: [useParentMixin],\n props: props$f,\n methods: {\n // Methods for computing classes, attributes and styles for table cells\n getTdValues: function getTdValues(item, key, tdValue, defaultValue) {\n var bvParent = this.bvParent;\n\n if (tdValue) {\n var value = get(item, key, '');\n\n if (isFunction$1(tdValue)) {\n return tdValue(value, key, item);\n } else if (isString(tdValue) && isFunction$1(bvParent[tdValue])) {\n return bvParent[tdValue](value, key, item);\n }\n\n return tdValue;\n }\n\n return defaultValue;\n },\n getThValues: function getThValues(item, key, thValue, type, defaultValue) {\n var bvParent = this.bvParent;\n\n if (thValue) {\n var value = get(item, key, '');\n\n if (isFunction$1(thValue)) {\n return thValue(value, key, item, type);\n } else if (isString(thValue) && isFunction$1(bvParent[thValue])) {\n return bvParent[thValue](value, key, item, type);\n }\n\n return thValue;\n }\n\n return defaultValue;\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$1(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, FIELD_KEY_SHOW_DETAILS, !item[FIELD_KEY_SHOW_DETAILS]);\n }\n };\n },\n // Row event handlers\n rowHovered: function rowHovered(event) {\n // `mouseenter` handler (non-bubbling)\n // `this.tbodyRowEventStopped` from tbody mixin\n if (!this.tbodyRowEventStopped(event)) {\n // `this.emitTbodyRowEvent` from tbody mixin\n this.emitTbodyRowEvent(EVENT_NAME_ROW_HOVERED, event);\n }\n },\n rowUnhovered: function rowUnhovered(event) {\n // `mouseleave` handler (non-bubbling)\n // `this.tbodyRowEventStopped` from tbody mixin\n if (!this.tbodyRowEventStopped(event)) {\n // `this.emitTbodyRowEvent` from tbody mixin\n this.emitTbodyRowEvent(EVENT_NAME_ROW_UNHOVERED, event);\n }\n },\n // Renders a TD or TH for a row's field\n renderTbodyRowCell: function renderTbodyRowCell(field, colIndex, item, rowIndex) {\n var _this2 = this;\n\n var isStacked = this.isStacked;\n var key = field.key,\n label = field.label,\n isRowHeader = field.isRowHeader;\n var h = this.$createElement;\n var hasDetailsSlot = this.hasNormalizedSlot(SLOT_NAME_ROW_DETAILS);\n var formatted = this.getFormattedValue(item, field);\n var stickyColumn = !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 ? isRowHeader ? BTh : BTd : isRowHeader ? 'th' : 'td';\n var cellVariant = item[FIELD_KEY_CELL_VARIANT] && item[FIELD_KEY_CELL_VARIANT][key] ? item[FIELD_KEY_CELL_VARIANT][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 class: [field.class ? field.class : '', this.getTdValues(item, key, field.tdClass, '')],\n props: {},\n attrs: _objectSpread2$3({\n 'aria-colindex': String(colIndex + 1)\n }, isRowHeader ? this.getThValues(item, key, field.thAttr, 'row', {}) : this.getTdValues(item, key, field.tdAttr, {})),\n key: \"row-\".concat(rowIndex, \"-cell-\").concat(colIndex, \"-\").concat(key)\n };\n\n if (stickyColumn) {\n // We are using the helper BTd or BTh\n data.props = {\n stackedHeading: isStacked ? 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'] = isStacked && !isUndefinedOrNull(label) ? toString(label) : null;\n data.attrs.role = isRowHeader ? 'rowheader' : 'cell';\n data.attrs.scope = 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[FIELD_KEY_SHOW_DETAILS])\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 (safeVueInstance(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(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 // Renders an item's row (or rows if details supported)\n renderTbodyRow: function renderTbodyRow(item, rowIndex) {\n var _this3 = this;\n\n var _safeVueInstance = safeVueInstance(this),\n fields = _safeVueInstance.computedFields,\n striped = _safeVueInstance.striped,\n primaryKey = _safeVueInstance.primaryKey,\n currentPage = _safeVueInstance.currentPage,\n perPage = _safeVueInstance.perPage,\n tbodyTrClass = _safeVueInstance.tbodyTrClass,\n tbodyTrAttr = _safeVueInstance.tbodyTrAttr,\n hasSelectableRowClick = _safeVueInstance.hasSelectableRowClick;\n\n var h = this.$createElement;\n var hasDetailsSlot = this.hasNormalizedSlot(SLOT_NAME_ROW_DETAILS);\n var rowShowDetails = item[FIELD_KEY_SHOW_DETAILS] && hasDetailsSlot;\n var hasRowClickHandler = this.$listeners[EVENT_NAME_ROW_CLICKED] || 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 (currentPage && perPage && perPage > 0) {\n ariaRowIndex = String((currentPage - 1) * 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 primaryKeyValue = toString(get(item, primaryKey)) || null;\n var rowKey = primaryKeyValue || toString(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 = safeVueInstance(this).selectableRowClasses ? this.selectableRowClasses(rowIndex) : {};\n var selectableAttrs = safeVueInstance(this).selectableRowAttrs ? this.selectableRowAttrs(rowIndex) : {}; // Additional classes and attributes\n\n var userTrClasses = isFunction$1(tbodyTrClass) ? tbodyTrClass(item, 'row') : tbodyTrClass;\n var userTrAttrs = isFunction$1(tbodyTrAttr) ?\n /* istanbul ignore next */\n tbodyTrAttr(item, 'row') : tbodyTrAttr; // Add the item row\n\n $rows.push(h(BTr, _defineProperty({\n class: [userTrClasses, selectableClasses, rowShowDetails ? 'b-table-has-details' : ''],\n props: {\n variant: item[FIELD_KEY_ROW_VARIANT] || null\n },\n attrs: _objectSpread2$3(_objectSpread2$3({\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 key: \"__b-table-row-\".concat(rowKey, \"__\"),\n ref: 'item-rows'\n }, REF_FOR_KEY, true), $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 (safeVueInstance(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(SLOT_NAME_ROW_DETAILS, 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 (striped) {\n $rows.push( // We don't use `BTr` here as we don't need the extra functionality\n h('tr', {\n staticClass: 'd-none',\n attrs: {\n 'aria-hidden': 'true',\n role: 'presentation'\n },\n key: \"__b-table-details-stripe__\".concat(rowKey)\n }));\n } // Add the actual details row\n\n\n var userDetailsTrClasses = isFunction$1(this.tbodyTrClass) ?\n /* istanbul ignore next */\n this.tbodyTrClass(item, SLOT_NAME_ROW_DETAILS) : this.tbodyTrClass;\n var userDetailsTrAttrs = isFunction$1(this.tbodyTrAttr) ?\n /* istanbul ignore next */\n this.tbodyTrAttr(item, SLOT_NAME_ROW_DETAILS) : this.tbodyTrAttr;\n $rows.push(h(BTr, {\n staticClass: 'b-table-details',\n class: [userDetailsTrClasses],\n props: {\n variant: item[FIELD_KEY_ROW_VARIANT] || null\n },\n attrs: _objectSpread2$3(_objectSpread2$3({}, userDetailsTrAttrs), {}, {\n // Users cannot override the following attributes\n id: detailsId,\n tabindex: '-1'\n }),\n key: \"__b-table-details__\".concat(rowKey)\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 (striped) {\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 getCellSlotName = function getCellSlotName(value) {\n return \"cell(\".concat(value || '', \")\");\n }; // --- Props ---\n\n\n var props$e = sortKeys(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3({}, props$h), props$f), {}, {\n tbodyClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING)\n })); // --- Mixin ---\n // @vue/component\n\n var tbodyMixin = extend({\n mixins: [tbodyRowMixin],\n props: props$e,\n beforeDestroy: function beforeDestroy() {\n this.$_bodyFieldSlotNameCache = null;\n },\n methods: {\n // Returns all the item TR elements (excludes detail and spacer rows)\n // `this.$refs['item-rows']` 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['item-rows']` may not always be in document order\n getTbodyTrs: function getTbodyTrs() {\n var $refs = this.$refs;\n var tbody = $refs.tbody ? $refs.tbody.$el || $refs.tbody : null;\n var trs = ($refs['item-rows'] || []).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 // Returns index of a particular TBODY item TR\n // We set `true` on closest to include self in result\n getTbodyTrIndex: function getTbodyTrIndex(el) {\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 // Emits a row event, with the item object, row index and original event\n emitTbodyRowEvent: function emitTbodyRowEvent(type, event) {\n if (type && this.hasListener(type) && event && event.target) {\n var rowIndex = this.getTbodyTrIndex(event.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, event);\n }\n }\n },\n tbodyRowEventStopped: function tbodyRowEventStopped(event) {\n return this.stopIfBusy && this.stopIfBusy(event);\n },\n // Delegated row event handlers\n onTbodyRowKeydown: function onTbodyRowKeydown(event) {\n // Keyboard navigation and row click emulation\n var target = event.target,\n keyCode = event.keyCode;\n\n if (this.tbodyRowEventStopped(event) || target.tagName !== 'TR' || !isActiveElement(target) || target.tabIndex !== 0) {\n // Early exit if not an item row TR\n return;\n }\n\n if (arrayIncludes([CODE_ENTER, CODE_SPACE], keyCode)) {\n // Emulated click for keyboard users, transfer to click handler\n stopEvent(event);\n this.onTBodyRowClicked(event);\n } else if (arrayIncludes([CODE_UP, CODE_DOWN, CODE_HOME, CODE_END], keyCode)) {\n // Keyboard navigation\n var rowIndex = this.getTbodyTrIndex(target);\n\n if (rowIndex > -1) {\n stopEvent(event);\n var trs = this.getTbodyTrs();\n var shift = event.shiftKey;\n\n if (keyCode === CODE_HOME || shift && keyCode === CODE_UP) {\n // Focus first row\n attemptFocus(trs[0]);\n } else if (keyCode === CODE_END || shift && keyCode === CODE_DOWN) {\n // Focus last row\n attemptFocus(trs[trs.length - 1]);\n } else if (keyCode === CODE_UP && rowIndex > 0) {\n // Focus previous row\n attemptFocus(trs[rowIndex - 1]);\n } else if (keyCode === CODE_DOWN && rowIndex < trs.length - 1) {\n // Focus next row\n attemptFocus(trs[rowIndex + 1]);\n }\n }\n }\n },\n onTBodyRowClicked: function onTBodyRowClicked(event) {\n var $refs = this.$refs;\n var tbody = $refs.tbody ? $refs.tbody.$el || $refs.tbody : null; // Don't emit event when the table is busy, the user clicked\n // on a non-disabled control or is selecting text\n\n if (this.tbodyRowEventStopped(event) || filterEvent(event) || textSelectionActive(tbody || this.$el)) {\n return;\n }\n\n this.emitTbodyRowEvent(EVENT_NAME_ROW_CLICKED, event);\n },\n onTbodyRowMiddleMouseRowClicked: function onTbodyRowMiddleMouseRowClicked(event) {\n if (!this.tbodyRowEventStopped(event) && event.which === 2) {\n this.emitTbodyRowEvent(EVENT_NAME_ROW_MIDDLE_CLICKED, event);\n }\n },\n onTbodyRowContextmenu: function onTbodyRowContextmenu(event) {\n if (!this.tbodyRowEventStopped(event)) {\n this.emitTbodyRowEvent(EVENT_NAME_ROW_CONTEXTMENU, event);\n }\n },\n onTbodyRowDblClicked: function onTbodyRowDblClicked(event) {\n if (!this.tbodyRowEventStopped(event) && !filterEvent(event)) {\n this.emitTbodyRowEvent(EVENT_NAME_ROW_DBLCLICKED, event);\n }\n },\n // Render the tbody element and children\n // Note:\n // Row hover handlers are handled by the tbody-row mixin\n // As mouseenter/mouseleave events do not bubble\n renderTbody: function renderTbody() {\n var _this = this;\n\n var _safeVueInstance = safeVueInstance(this),\n items = _safeVueInstance.computedItems,\n renderBusy = _safeVueInstance.renderBusy,\n renderTopRow = _safeVueInstance.renderTopRow,\n renderEmpty = _safeVueInstance.renderEmpty,\n renderBottomRow = _safeVueInstance.renderBottomRow,\n hasSelectableRowClick = _safeVueInstance.hasSelectableRowClick;\n\n var h = this.$createElement;\n var hasRowClickHandler = this.hasListener(EVENT_NAME_ROW_CLICKED) || hasSelectableRowClick; // Prepare the tbody rows\n\n var $rows = []; // Add the item data rows or the busy slot\n\n var $busy = renderBusy ? 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 = getCellSlotName();\n defaultSlotName = this.hasNormalizedSlot(defaultSlotName) ? defaultSlotName : null;\n this.computedFields.forEach(function (field) {\n var key = field.key;\n var slotName = getCellSlotName(key);\n var lowercaseSlotName = getCellSlotName(key.toLowerCase());\n cache[key] = _this.hasNormalizedSlot(slotName) ? slotName : _this.hasNormalizedSlot(lowercaseSlotName) ?\n /* istanbul ignore next */\n lowercaseSlotName : 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(renderTopRow ? 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(renderEmpty ? renderEmpty() : h()); // Static bottom row slot (hidden in visibly stacked mode\n // as we can't control `data-label` attr)\n\n $rows.push(renderBottomRow ? 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 class: this.tbodyClass || null,\n props: pluckProps(props$h, this.$props),\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 ref: 'tbody'\n }, $rows); // Return the assembled tbody\n\n return $tbody;\n }\n }\n });\n\n var props$d = makePropsConfigurable({\n // Supported values: 'lite', 'dark', or null\n footVariant: makeProp(PROP_TYPE_STRING)\n }, NAME_TFOOT); // --- 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 BTfoot = /*#__PURE__*/extend({\n name: NAME_TFOOT,\n mixins: [attrsMixin, listenersMixin, normalizeSlotMixin],\n provide: function provide() {\n var _this = this;\n\n return {\n getBvTableRowGroup: function getBvTableRowGroup() {\n return _this;\n }\n };\n },\n inject: {\n // Sniffed by `<b-tr>` / `<b-td>` / `<b-th>`\n getBvTable: {\n default:\n /* istanbul ignore next */\n function _default() {\n return function () {\n return {};\n };\n }\n }\n },\n inheritAttrs: false,\n props: props$d,\n computed: {\n bvTable: function bvTable() {\n return this.getBvTable();\n },\n // Sniffed by `<b-tr>` / `<b-td>` / `<b-th>`\n isTfoot: function isTfoot() {\n return true;\n },\n // Sniffed by `<b-tr>` / `<b-td>` / `<b-th>`\n isDark: function isDark() {\n return this.bvTable.dark;\n },\n // Sniffed by `<b-tr>` / `<b-td>` / `<b-th>`\n isStacked: function isStacked() {\n return this.bvTable.isStacked;\n },\n // Sniffed by `<b-tr>` / `<b-td>` / `<b-th>`\n isResponsive: function isResponsive() {\n return this.bvTable.isResponsive;\n },\n // Sniffed by `<b-tr>` / `<b-td>` / `<b-th>`\n // Sticky headers are only supported in thead\n isStickyHeader: function isStickyHeader() {\n return false;\n },\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 hasStickyHeader: function hasStickyHeader() {\n return !this.isStacked && this.bvTable.stickyHeader;\n },\n // Sniffed by `<b-tr>` / `<b-td>` / `<b-th>`\n tableVariant: function tableVariant() {\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$3(_objectSpread2$3({}, this.bvAttrs), {}, {\n role: 'rowgroup'\n });\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());\n }\n });\n\n var props$c = {\n footClone: makeProp(PROP_TYPE_BOOLEAN, false),\n // Any Bootstrap theme variant (or custom)\n // Falls back to `headRowVariant`\n footRowVariant: makeProp(PROP_TYPE_STRING),\n // 'dark', 'light', or `null` (or custom)\n footVariant: makeProp(PROP_TYPE_STRING),\n tfootClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n tfootTrClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING)\n }; // --- Mixin ---\n // @vue/component\n\n var tfootMixin = extend({\n props: props$c,\n methods: {\n renderTFootCustom: function renderTFootCustom() {\n var h = this.$createElement;\n\n if (this.hasNormalizedSlot(SLOT_NAME_CUSTOM_FOOT)) {\n return h(BTfoot, {\n class: this.tfootClass || null,\n props: {\n footVariant: this.footVariant || this.headVariant || null\n },\n key: 'bv-tfoot-custom'\n }, this.normalizeSlot(SLOT_NAME_CUSTOM_FOOT, {\n items: this.computedItems.slice(),\n fields: this.computedFields.slice(),\n columns: this.computedFields.length\n }));\n }\n\n return h();\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$b = makePropsConfigurable({\n // Also sniffed by `<b-tr>` / `<b-td>` / `<b-th>`\n // Supported values: 'lite', 'dark', or `null`\n headVariant: makeProp(PROP_TYPE_STRING)\n }, NAME_THEAD); // --- 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 BThead = /*#__PURE__*/extend({\n name: NAME_THEAD,\n mixins: [attrsMixin, listenersMixin, normalizeSlotMixin],\n provide: function provide() {\n var _this = this;\n\n return {\n getBvTableRowGroup: function getBvTableRowGroup() {\n return _this;\n }\n };\n },\n inject: {\n // Sniffed by `<b-tr>` / `<b-td>` / `<b-th>`\n getBvTable: {\n default:\n /* istanbul ignore next */\n function _default() {\n return function () {\n return {};\n };\n }\n }\n },\n inheritAttrs: false,\n props: props$b,\n computed: {\n bvTable: function bvTable() {\n return this.getBvTable();\n },\n // Sniffed by `<b-tr>` / `<b-td>` / `<b-th>`\n isThead: function isThead() {\n return true;\n },\n // Sniffed by `<b-tr>` / `<b-td>` / `<b-th>`\n isDark: function isDark() {\n return this.bvTable.dark;\n },\n // Sniffed by `<b-tr>` / `<b-td>` / `<b-th>`\n isStacked: function isStacked() {\n return this.bvTable.isStacked;\n },\n // Sniffed by `<b-tr>` / `<b-td>` / `<b-th>`\n isResponsive: function isResponsive() {\n return this.bvTable.isResponsive;\n },\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 isStickyHeader: function isStickyHeader() {\n return !this.isStacked && this.bvTable.stickyHeader;\n },\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 hasStickyHeader: function hasStickyHeader() {\n return !this.isStacked && this.bvTable.stickyHeader;\n },\n // Sniffed by `<b-tr>` / `<b-td>` / `<b-th>`\n tableVariant: function tableVariant() {\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$3({\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());\n }\n });\n\n var getHeadSlotName = function getHeadSlotName(value) {\n return \"head(\".concat(value || '', \")\");\n };\n\n var getFootSlotName = function getFootSlotName(value) {\n return \"foot(\".concat(value || '', \")\");\n }; // --- Props ---\n\n\n var props$a = {\n // Any Bootstrap theme variant (or custom)\n headRowVariant: makeProp(PROP_TYPE_STRING),\n // 'light', 'dark' or `null` (or custom)\n headVariant: makeProp(PROP_TYPE_STRING),\n theadClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n theadTrClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING)\n }; // --- Mixin ---\n // @vue/component\n\n var theadMixin = extend({\n props: props$a,\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(event, field, isFoot) {\n if (this.stopIfBusy && this.stopIfBusy(event)) {\n // If table is busy (via provider) then don't propagate\n return;\n } else if (filterEvent(event)) {\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 stopEvent(event);\n this.$emit(EVENT_NAME_HEAD_CLICKED, field.key, field, event, isFoot);\n },\n renderThead: function renderThead() {\n var _this = this;\n\n var isFoot = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n var _safeVueInstance = safeVueInstance(this),\n fields = _safeVueInstance.computedFields,\n isSortable = _safeVueInstance.isSortable,\n isSelectable = _safeVueInstance.isSelectable,\n headVariant = _safeVueInstance.headVariant,\n footVariant = _safeVueInstance.footVariant,\n headRowVariant = _safeVueInstance.headRowVariant,\n footRowVariant = _safeVueInstance.footRowVariant;\n\n var h = this.$createElement; // 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 hasHeadClickListener = isSortable || this.hasListener(EVENT_NAME_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 (event) {\n _this.headClicked(event, field, isFoot);\n };\n\n on.keydown = function (event) {\n var keyCode = event.keyCode;\n\n if (keyCode === CODE_ENTER || keyCode === CODE_SPACE) {\n _this.headClicked(event, 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: [{\n // We need to make the header cell relative when we have\n // a `.sr-only` sort label to work around overflow issues\n 'position-relative': sortLabel\n }, _this.fieldClasses(field), sortClass],\n props: {\n variant: variant,\n stickyColumn: stickyColumn\n },\n style: field.thStyle || {},\n attrs: _objectSpread2$3(_objectSpread2$3({\n // We only add a `tabindex` of `0` if there is a head-clicked listener\n // and the current field is sortable\n tabindex: hasHeadClickListener && field.sortable ? '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 = [getHeadSlotName(key), getHeadSlotName(key.toLowerCase()), getHeadSlotName()]; // Footer will fallback to header slot names\n\n if (isFoot) {\n slotNames = [getFootSlotName(key), getFootSlotName(key.toLowerCase()), getFootSlotName()].concat(_toConsumableArray$1(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(SLOT_NAME_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 class: (isFoot ? this.tfootClass : this.theadClass) || null,\n props: isFoot ? {\n footVariant: footVariant || headVariant || null\n } : {\n headVariant: headVariant || null\n },\n key: isFoot ? 'bv-tfoot' : 'bv-thead'\n }, $trs);\n }\n }\n });\n\n var props$9 = {}; // --- Mixin ---\n // @vue/component\n\n var topRowMixin = extend({\n methods: {\n renderTopRow: function renderTopRow() {\n var fields = this.computedFields,\n stacked = this.stacked,\n tbodyTrClass = this.tbodyTrClass,\n tbodyTrAttr = this.tbodyTrAttr;\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(SLOT_NAME_TOP_ROW) || stacked === true || stacked === '') {\n return h();\n }\n\n return h(BTr, {\n staticClass: 'b-table-top-row',\n class: [isFunction$1(tbodyTrClass) ? tbodyTrClass(null, 'row-top') : tbodyTrClass],\n attrs: isFunction$1(tbodyTrAttr) ? tbodyTrAttr(null, 'row-top') : tbodyTrAttr,\n key: 'b-top-row'\n }, [this.normalizeSlot(SLOT_NAME_TOP_ROW, {\n columns: fields.length,\n fields: fields\n })]);\n }\n }\n });\n\n var props$8 = makePropsConfigurable(sortKeys(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3({}, props$25), props$v), props$t), props$s), props$r), props$q), props$p), props$o), props$n), props$m), props$l), props$k), props$j), props$i), props$e), props$c), props$a), props$9)), NAME_TABLE); // --- Main component ---\n // @vue/component\n\n var BTable = /*#__PURE__*/extend({\n name: NAME_TABLE,\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, captionMixin, colgroupMixin, selectableMixin, emptyMixin, topRowMixin, bottomRowMixin, busyMixin, providerMixin],\n props: props$8 // Render function is provided by `tableRendererMixin`\n\n });\n\n var props$7 = makePropsConfigurable(sortKeys(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3({}, props$25), props$s), props$r), props$o), props$j), props$i), props$e), props$c), props$a)), NAME_TABLE_LITE); // --- Main component ---\n // @vue/component\n\n var BTableLite = /*#__PURE__*/extend({\n name: NAME_TABLE_LITE,\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 // These are pretty lightweight, and are useful for lightweight tables\n captionMixin, colgroupMixin],\n props: props$7 // Render function is provided by `tableRendererMixin`\n\n });\n\n var props$6 = makePropsConfigurable(sortKeys(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3({}, props$25), props$j), props$i)), NAME_TABLE_SIMPLE); // --- Main component ---\n // @vue/component\n\n var BTableSimple = /*#__PURE__*/extend({\n name: NAME_TABLE_SIMPLE,\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 tableRendererMixin, // Table features mixins\n // Stacked requires extra handling by users via\n // the table cell `stacked-heading` prop\n stackedMixin],\n props: props$6,\n computed: {\n isTableSimple: function isTableSimple() {\n return true;\n }\n } // Render function is provided by `tableRendererMixin`\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 isPositiveNumber = function isPositiveNumber(value) {\n return value > 0;\n }; // --- Props ---\n\n\n var props$5 = makePropsConfigurable({\n animation: makeProp(PROP_TYPE_STRING),\n columns: makeProp(PROP_TYPE_NUMBER, 5, isPositiveNumber),\n hideHeader: makeProp(PROP_TYPE_BOOLEAN, false),\n rows: makeProp(PROP_TYPE_NUMBER, 3, isPositiveNumber),\n showFooter: makeProp(PROP_TYPE_BOOLEAN, false),\n tableProps: makeProp(PROP_TYPE_OBJECT, {})\n }, NAME_SKELETON_TABLE); // --- Main component ---\n // @vue/component\n\n var BSkeletonTable = /*#__PURE__*/extend({\n name: NAME_SKELETON_TABLE,\n functional: true,\n props: props$5,\n render: function render(h, _ref) {\n var data = _ref.data,\n props = _ref.props;\n var animation = props.animation,\n columns = props.columns;\n var $th = h('th', [h(BSkeleton, {\n props: {\n animation: animation\n }\n })]);\n var $thTr = h('tr', createArray(columns, $th));\n var $td = h('td', [h(BSkeleton, {\n props: {\n width: '75%',\n animation: animation\n }\n })]);\n var $tdTr = h('tr', createArray(columns, $td));\n var $tbody = h('tbody', createArray(props.rows, $tdTr));\n var $thead = !props.hideHeader ? h('thead', [$thTr]) : h();\n var $tfoot = props.showFooter ? h('tfoot', [$thTr]) : h();\n return h(BTableSimple, a(data, {\n props: _objectSpread2$3({}, props.tableProps)\n }), [$thead, $tbody, $tfoot]);\n }\n });\n\n var props$4 = makePropsConfigurable({\n loading: makeProp(PROP_TYPE_BOOLEAN, false)\n }, NAME_SKELETON_WRAPPER); // --- Main component ---\n // @vue/component\n\n var BSkeletonWrapper = /*#__PURE__*/extend({\n name: NAME_SKELETON_WRAPPER,\n functional: true,\n props: props$4,\n render: function render(h, _ref) {\n var data = _ref.data,\n props = _ref.props,\n slots = _ref.slots,\n scopedSlots = _ref.scopedSlots;\n var $slots = slots();\n var $scopedSlots = scopedSlots || {};\n var slotScope = {};\n\n if (props.loading) {\n return h('div', a(data, {\n attrs: {\n role: 'alert',\n 'aria-live': 'polite',\n 'aria-busy': true\n },\n staticClass: 'b-skeleton-wrapper',\n key: 'loading'\n }), normalizeSlot(SLOT_NAME_LOADING, slotScope, $scopedSlots, $slots));\n }\n\n return normalizeSlot(SLOT_NAME_DEFAULT, slotScope, $scopedSlots, $slots);\n }\n });\n\n var SkeletonPlugin = /*#__PURE__*/pluginFactory({\n components: {\n BSkeleton: BSkeleton,\n BSkeletonIcon: BSkeletonIcon,\n BSkeletonImg: BSkeletonImg,\n BSkeletonTable: BSkeletonTable,\n BSkeletonWrapper: BSkeletonWrapper\n }\n });\n\n var SpinnerPlugin = /*#__PURE__*/pluginFactory({\n components: {\n BSpinner: BSpinner\n }\n });\n\n var _watch$2;\n\n var _makeModelMixin$1 = makeModelMixin('value', {\n type: PROP_TYPE_NUMBER\n }),\n modelMixin$1 = _makeModelMixin$1.mixin,\n modelProps$1 = _makeModelMixin$1.props,\n MODEL_PROP_NAME$1 = _makeModelMixin$1.prop,\n MODEL_EVENT_NAME$1 = _makeModelMixin$1.event; // --- Helper methods ---\n // Filter function to filter out disabled tabs\n\n\n var notDisabled = function notDisabled(tab) {\n return !tab.disabled;\n }; // --- Helper components ---\n // @vue/component\n\n\n var BVTabButton = /*#__PURE__*/extend({\n name: NAME_TAB_BUTTON_HELPER,\n inject: {\n getBvTabs: {\n default:\n /* istanbul ignore next */\n function _default() {\n return function () {\n return {};\n };\n }\n }\n },\n props: {\n controls: makeProp(PROP_TYPE_STRING),\n id: makeProp(PROP_TYPE_STRING),\n noKeyNav: makeProp(PROP_TYPE_BOOLEAN, false),\n posInSet: makeProp(PROP_TYPE_NUMBER),\n setSize: makeProp(PROP_TYPE_NUMBER),\n // Reference to the child <b-tab> instance\n tab: makeProp(),\n tabIndex: makeProp(PROP_TYPE_NUMBER)\n },\n computed: {\n bvTabs: function bvTabs() {\n return this.getBvTabs();\n }\n },\n methods: {\n focus: function focus() {\n attemptFocus(this.$refs.link);\n },\n handleEvent: function handleEvent(event) {\n /* istanbul ignore next */\n if (this.tab.disabled) {\n return;\n }\n\n var type = event.type,\n keyCode = event.keyCode,\n shiftKey = event.shiftKey;\n\n if (type === 'click') {\n stopEvent(event);\n this.$emit(EVENT_NAME_CLICK, event);\n } else if (type === 'keydown' && keyCode === CODE_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 stopEvent(event);\n this.$emit(EVENT_NAME_CLICK, event);\n } else if (type === 'keydown' && !this.noKeyNav) {\n // For keyboard navigation\n if ([CODE_UP, CODE_LEFT, CODE_HOME].indexOf(keyCode) !== -1) {\n stopEvent(event);\n\n if (shiftKey || keyCode === CODE_HOME) {\n this.$emit(EVENT_NAME_FIRST, event);\n } else {\n this.$emit(EVENT_NAME_PREV, event);\n }\n } else if ([CODE_DOWN, CODE_RIGHT, CODE_END].indexOf(keyCode) !== -1) {\n stopEvent(event);\n\n if (shiftKey || keyCode === CODE_END) {\n this.$emit(EVENT_NAME_LAST, event);\n } else {\n this.$emit(EVENT_NAME_NEXT, event);\n }\n }\n }\n }\n },\n render: function render(h) {\n var id = this.id,\n tabIndex = this.tabIndex,\n setSize = this.setSize,\n posInSet = this.posInSet,\n controls = this.controls,\n handleEvent = this.handleEvent;\n var _this$tab = this.tab,\n title = _this$tab.title,\n localActive = _this$tab.localActive,\n disabled = _this$tab.disabled,\n titleItemClass = _this$tab.titleItemClass,\n titleLinkClass = _this$tab.titleLinkClass,\n titleLinkAttributes = _this$tab.titleLinkAttributes;\n var $link = h(BLink, {\n staticClass: 'nav-link',\n class: [{\n active: localActive && !disabled,\n disabled: disabled\n }, titleLinkClass, // Apply <b-tabs> `activeNavItemClass` styles when the tab is active\n localActive ? this.bvTabs.activeNavItemClass : null],\n props: {\n disabled: disabled\n },\n attrs: _objectSpread2$3(_objectSpread2$3({}, titleLinkAttributes), {}, {\n id: id,\n role: 'tab',\n // Roving tab index when keynav enabled\n tabindex: tabIndex,\n 'aria-selected': localActive && !disabled ? 'true' : 'false',\n 'aria-setsize': setSize,\n 'aria-posinset': posInSet,\n 'aria-controls': controls\n }),\n on: {\n click: handleEvent,\n keydown: handleEvent\n },\n ref: 'link'\n }, [this.tab.normalizeSlot(SLOT_NAME_TITLE) || title]);\n return h('li', {\n staticClass: 'nav-item',\n class: [titleItemClass],\n attrs: {\n role: 'presentation'\n }\n }, [$link]);\n }\n }); // --- Props ---\n\n var navProps = omit(props$U, ['tabs', 'isNavBar', 'cardHeader']);\n var props$3 = makePropsConfigurable(sortKeys(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3({}, props$25), modelProps$1), navProps), {}, {\n // Only applied to the currently active `<b-nav-item>`\n activeNavItemClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n // Only applied to the currently active `<b-tab>`\n // This prop is sniffed by the `<b-tab>` child\n activeTabClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n card: makeProp(PROP_TYPE_BOOLEAN, false),\n contentClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n // Synonym for 'bottom'\n end: makeProp(PROP_TYPE_BOOLEAN, false),\n // This prop is sniffed by the `<b-tab>` child\n lazy: makeProp(PROP_TYPE_BOOLEAN, false),\n navClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n navWrapperClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n noFade: makeProp(PROP_TYPE_BOOLEAN, false),\n noKeyNav: makeProp(PROP_TYPE_BOOLEAN, false),\n noNavStyle: makeProp(PROP_TYPE_BOOLEAN, false),\n tag: makeProp(PROP_TYPE_STRING, 'div')\n })), NAME_TABS); // --- Main component ---\n // @vue/component\n\n var BTabs = /*#__PURE__*/extend({\n name: NAME_TABS,\n mixins: [idMixin, modelMixin$1, normalizeSlotMixin],\n provide: function provide() {\n var _this = this;\n\n return {\n getBvTabs: function getBvTabs() {\n return _this;\n }\n };\n },\n props: props$3,\n data: function data() {\n return {\n // Index of current tab\n currentTab: toInteger(this[MODEL_PROP_NAME$1], -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 };\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: (_watch$2 = {}, _defineProperty(_watch$2, MODEL_PROP_NAME$1, function (newValue, oldValue) {\n if (newValue !== oldValue) {\n newValue = toInteger(newValue, -1);\n oldValue = toInteger(oldValue, 0);\n var $tab = this.tabs[newValue];\n\n if ($tab && !$tab.disabled) {\n this.activateTab($tab);\n } else {\n // Try next or prev tabs\n if (newValue < oldValue) {\n this.previousTab();\n } else {\n this.nextTab();\n }\n }\n }\n }), _defineProperty(_watch$2, \"currentTab\", function currentTab(newValue) {\n var index = -1; // Ensure only one tab is active at most\n\n this.tabs.forEach(function ($tab, i) {\n if (i === newValue && !$tab.disabled) {\n $tab.localActive = true;\n index = i;\n } else {\n $tab.localActive = false;\n }\n }); // Update the v-model\n\n this.$emit(MODEL_EVENT_NAME$1, index);\n }), _defineProperty(_watch$2, \"tabs\", function tabs(newValue, oldValue) {\n var _this2 = this;\n\n // We use `_uid` instead of `safeId()`, as the later is changed in a `$nextTick()`\n // if no explicit ID is provided, causing duplicate emits\n if (!looseEqual(newValue.map(function ($tab) {\n return $tab[COMPONENT_UID_KEY];\n }), oldValue.map(function ($tab) {\n return $tab[COMPONENT_UID_KEY];\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,\n // to prevent users from potentially mutating the internal arrays\n _this2.$emit(EVENT_NAME_CHANGED, newValue.slice(), oldValue.slice());\n });\n }\n }), _defineProperty(_watch$2, \"registeredTabs\", function registeredTabs() {\n this.updateTabs();\n }), _watch$2),\n created: function created() {\n // Create private non-reactive props\n this.$_observer = null;\n },\n mounted: function mounted() {\n this.setObserver(true);\n },\n beforeDestroy: function beforeDestroy() {\n this.setObserver(false); // Ensure no references to child instances exist\n\n this.tabs = [];\n },\n methods: {\n registerTab: function registerTab($tab) {\n if (!arrayIncludes(this.registeredTabs, $tab)) {\n this.registeredTabs.push($tab);\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() {\n var _this3 = this;\n\n var on = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n this.$_observer && this.$_observer.disconnect();\n this.$_observer = null;\n\n if (on) {\n /* istanbul ignore next: difficult to test mutation observer in JSDOM */\n var handler = function handler() {\n _this3.$nextTick(function () {\n requestAF(function () {\n _this3.updateTabs();\n });\n });\n }; // Watch for changes to `<b-tab>` sub components\n\n\n this.$_observer = observeDom(this.$refs.content, handler, {\n childList: true,\n subtree: false,\n attributes: true,\n attributeFilter: ['id']\n });\n }\n },\n getTabs: function getTabs() {\n var $tabs = this.registeredTabs; // Dropped intentionally\n // .filter(\n // $tab => $tab.$children.filter($t => $t && $t._isTab).length === 0\n // )\n // DOM Order of Tabs\n\n var order = [];\n /* istanbul ignore next: too difficult to test */\n\n if (IS_BROWSER && $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 `order` array,\n // which will be an empty array before mount\n\n\n return stableSort$1($tabs, function (a, b) {\n return order.indexOf(a.safeId()) - order.indexOf(b.safeId());\n });\n },\n updateTabs: function updateTabs() {\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 } // Ensure only one tab is active at a time\n\n\n $tabs.forEach(function ($tab, index) {\n $tab.localActive = index === tabIndex;\n });\n this.tabs = $tabs;\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 currentTab = this.currentTab,\n $tabs = this.tabs;\n var result = false;\n\n if ($tab) {\n var index = $tabs.indexOf($tab);\n\n if (index !== currentTab && index > -1 && !$tab.disabled) {\n var tabEvent = new BvEvent(EVENT_NAME_ACTIVATE_TAB, {\n cancelable: true,\n vueTarget: this,\n componentId: this.safeId()\n });\n this.$emit(tabEvent.type, index, currentTab, tabEvent);\n\n if (!tabEvent.defaultPrevented) {\n this.currentTab = index;\n result = true;\n }\n }\n } // Couldn't set tab, so ensure v-model is up to date\n\n /* istanbul ignore next: should rarely happen */\n\n\n if (!result && this[MODEL_PROP_NAME$1] !== currentTab) {\n this.$emit(MODEL_EVENT_NAME$1, 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 _this4 = this;\n\n // Wrap in `$nextTick()` to ensure DOM has completed rendering\n this.$nextTick(function () {\n attemptFocus(_this4.getButtonForTab($tab));\n });\n },\n // Emit a click event on a specified `<b-tab>` component instance\n emitTabClick: function emitTabClick(tab, event) {\n if (isEvent(event) && tab && tab.$emit && !tab.disabled) {\n tab.$emit(EVENT_NAME_CLICK, event);\n }\n },\n // Click handler\n clickTab: function clickTab($tab, event) {\n this.activateTab($tab);\n this.emitTabClick($tab, event);\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 _this5 = this;\n\n var align = this.align,\n card = this.card,\n end = this.end,\n fill = this.fill,\n firstTab = this.firstTab,\n justified = this.justified,\n lastTab = this.lastTab,\n nextTab = this.nextTab,\n noKeyNav = this.noKeyNav,\n noNavStyle = this.noNavStyle,\n pills = this.pills,\n previousTab = this.previousTab,\n small = this.small,\n $tabs = this.tabs,\n vertical = this.vertical; // 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 _on;\n\n var safeId = $tab.safeId; // Ensure at least one tab button is focusable when keynav enabled (if possible)\n\n var tabIndex = null;\n\n if (!noKeyNav) {\n // Buttons are not in tab index unless active, or a fallback tab\n tabIndex = -1;\n\n if ($tab === $activeTab || !$activeTab && $tab === $fallbackTab) {\n // Place tab button in tab sequence\n tabIndex = null;\n }\n }\n\n return h(BVTabButton, _defineProperty({\n props: {\n controls: safeId ? safeId() : null,\n id: $tab.controlledBy || (safeId ? safeId(\"_BV_tab_button_\") : null),\n noKeyNav: noKeyNav,\n posInSet: index + 1,\n setSize: $tabs.length,\n tab: $tab,\n tabIndex: tabIndex\n },\n on: (_on = {}, _defineProperty(_on, EVENT_NAME_CLICK, function (event) {\n _this5.clickTab($tab, event);\n }), _defineProperty(_on, EVENT_NAME_FIRST, firstTab), _defineProperty(_on, EVENT_NAME_PREV, previousTab), _defineProperty(_on, EVENT_NAME_NEXT, nextTab), _defineProperty(_on, EVENT_NAME_LAST, lastTab), _on),\n key: $tab[COMPONENT_UID_KEY] || index,\n ref: 'buttons'\n }, REF_FOR_KEY, true));\n });\n var $nav = h(BNav, {\n class: this.localNavClass,\n attrs: {\n role: 'tablist',\n id: this.safeId('_BV_tab_controls_')\n },\n props: {\n fill: fill,\n justified: justified,\n align: align,\n tabs: !noNavStyle && !pills,\n pills: !noNavStyle && pills,\n vertical: vertical,\n small: small,\n cardHeader: card && !vertical\n },\n ref: 'nav'\n }, [this.normalizeSlot(SLOT_NAME_TABS_START) || h(), $buttons, this.normalizeSlot(SLOT_NAME_TABS_END) || h()]);\n $nav = h('div', {\n class: [{\n 'card-header': card && !vertical && !end,\n 'card-footer': card && !vertical && end,\n 'col-auto': vertical\n }, this.navWrapperClass],\n key: 'bv-tabs-nav'\n }, [$nav]);\n var $children = this.normalizeSlot() || [];\n var $empty = h();\n\n if ($children.length === 0) {\n $empty = h('div', {\n class: ['tab-pane', 'active', {\n 'card-body': card\n }],\n key: 'bv-empty-tab'\n }, this.normalizeSlot(SLOT_NAME_EMPTY));\n }\n\n var $content = h('div', {\n staticClass: 'tab-content',\n class: [{\n col: vertical\n }, this.contentClass],\n attrs: {\n id: this.safeId('_BV_tab_container_')\n },\n key: 'bv-content',\n ref: 'content'\n }, [$children, $empty]); // Render final output\n\n return h(this.tag, {\n staticClass: 'tabs',\n class: {\n row: vertical,\n 'no-gutters': vertical && card\n },\n attrs: {\n id: this.safeId()\n }\n }, [end ? $content : h(), $nav, end ? h() : $content]);\n }\n });\n\n var _objectSpread2, _watch$1;\n\n var MODEL_PROP_NAME_ACTIVE = 'active';\n var MODEL_EVENT_NAME_ACTIVE = MODEL_EVENT_NAME_PREFIX + MODEL_PROP_NAME_ACTIVE; // --- Props ---\n\n var props$2 = makePropsConfigurable(sortKeys(_objectSpread2$3(_objectSpread2$3({}, props$25), {}, (_objectSpread2 = {}, _defineProperty(_objectSpread2, MODEL_PROP_NAME_ACTIVE, makeProp(PROP_TYPE_BOOLEAN, false)), _defineProperty(_objectSpread2, \"buttonId\", makeProp(PROP_TYPE_STRING)), _defineProperty(_objectSpread2, \"disabled\", makeProp(PROP_TYPE_BOOLEAN, false)), _defineProperty(_objectSpread2, \"lazy\", makeProp(PROP_TYPE_BOOLEAN, false)), _defineProperty(_objectSpread2, \"noBody\", makeProp(PROP_TYPE_BOOLEAN, false)), _defineProperty(_objectSpread2, \"tag\", makeProp(PROP_TYPE_STRING, 'div')), _defineProperty(_objectSpread2, \"title\", makeProp(PROP_TYPE_STRING)), _defineProperty(_objectSpread2, \"titleItemClass\", makeProp(PROP_TYPE_ARRAY_OBJECT_STRING)), _defineProperty(_objectSpread2, \"titleLinkAttributes\", makeProp(PROP_TYPE_OBJECT)), _defineProperty(_objectSpread2, \"titleLinkClass\", makeProp(PROP_TYPE_ARRAY_OBJECT_STRING)), _objectSpread2))), NAME_TAB); // --- Main component ---\n // @vue/component\n\n var BTab = /*#__PURE__*/extend({\n name: NAME_TAB,\n mixins: [idMixin, normalizeSlotMixin],\n inject: {\n getBvTabs: {\n default: function _default() {\n return function () {\n return {};\n };\n }\n }\n },\n props: props$2,\n data: function data() {\n return {\n localActive: this[MODEL_PROP_NAME_ACTIVE] && !this.disabled\n };\n },\n computed: {\n bvTabs: function bvTabs() {\n return this.getBvTabs();\n },\n // For parent sniffing of child\n _isTab: function _isTab() {\n return true;\n },\n tabClasses: function tabClasses() {\n var active = this.localActive,\n disabled = this.disabled;\n return [{\n active: active,\n disabled: disabled,\n 'card-body': this.bvTabs.card && !this.noBody\n }, // Apply <b-tabs> `activeTabClass` styles when this tab is active\n active ? 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 },\n watch: (_watch$1 = {}, _defineProperty(_watch$1, MODEL_PROP_NAME_ACTIVE, function (newValue, oldValue) {\n if (newValue !== oldValue) {\n if (newValue) {\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(MODEL_EVENT_NAME_ACTIVE, this.localActive);\n }\n }\n }\n }), _defineProperty(_watch$1, \"disabled\", function disabled(newValue, oldValue) {\n if (newValue !== oldValue) {\n var firstTab = this.bvTabs.firstTab;\n\n if (newValue && this.localActive && firstTab) {\n this.localActive = false;\n firstTab();\n }\n }\n }), _defineProperty(_watch$1, \"localActive\", function localActive(newValue) {\n // Make `active` prop work with `.sync` modifier\n this.$emit(MODEL_EVENT_NAME_ACTIVE, newValue);\n }), _watch$1),\n mounted: function mounted() {\n // Inform `<b-tabs>` of our presence\n this.registerTab();\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 var updateButton = this.bvTabs.updateButton;\n\n if (updateButton && this.hasNormalizedSlot(SLOT_NAME_TITLE)) {\n updateButton(this);\n }\n },\n beforeDestroy: function beforeDestroy() {\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 var registerTab = this.bvTabs.registerTab;\n\n if (registerTab) {\n registerTab(this);\n }\n },\n unregisterTab: function unregisterTab() {\n // Inform `<b-tabs>` of our departure\n var unregisterTab = this.bvTabs.unregisterTab;\n\n if (unregisterTab) {\n unregisterTab(this);\n }\n },\n // Public methods\n activate: function activate() {\n // Not inside a `<b-tabs>` component or tab is disabled\n var activateTab = this.bvTabs.activateTab;\n return activateTab && !this.disabled ? activateTab(this) : false;\n },\n deactivate: function deactivate() {\n // Not inside a `<b-tabs>` component or not active to begin with\n var deactivateTab = this.bvTabs.deactivateTab;\n return deactivateTab && this.localActive ? deactivateTab(this) : false;\n }\n },\n render: function render(h) {\n var localActive = this.localActive;\n var $content = h(this.tag, {\n staticClass: 'tab-pane',\n class: this.tabClasses,\n directives: [{\n name: 'show',\n value: localActive\n }],\n attrs: {\n role: 'tabpanel',\n id: this.safeId(),\n 'aria-hidden': localActive ? 'false' : 'true',\n 'aria-labelledby': this.controlledBy || null\n },\n ref: 'panel'\n }, // Render content lazily if requested\n [localActive || !this.computedLazy ? this.normalizeSlot() : 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(obj) {\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 _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n }\n\n function _arrayWithoutHoles(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(iter) {\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n }\n\n function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n }\n\n var inBrowser = typeof window !== 'undefined';\n function freeze(item) {\n if (Array.isArray(item) || _typeof(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(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(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__default['default'].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(passengers),\n order: order\n };\n var keys = Object.keys(this.transports);\n\n if (keys.indexOf(to) === -1) {\n Vue__default['default'].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(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__default['default'].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(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__default['default'].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 Vue__default['default'].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(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(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 // @vue/component\n\n var DefaultTransition = /*#__PURE__*/extend({\n mixins: [normalizeSlotMixin],\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 // Work around a Vue.js bug where `*-enter-to` class is not removed\n // See: https://github.com/vuejs/vue/pull/7901\n // The `*-move` class is also stuck on elements that moved,\n // but there are no JavaScript hooks to handle after move\n // See: https://github.com/vuejs/vue/pull/7906\n requestAF(function () {\n removeClass(el, \"\".concat(_this.name, \"-enter-to\"));\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.normalizeSlot());\n }\n }); // --- Props ---\n\n var props$1 = makePropsConfigurable({\n // Allowed: 'true' or 'false' or `null`\n ariaAtomic: makeProp(PROP_TYPE_STRING),\n ariaLive: makeProp(PROP_TYPE_STRING),\n name: makeProp(PROP_TYPE_STRING, undefined, true),\n // Required\n // Aria role\n role: makeProp(PROP_TYPE_STRING)\n }, NAME_TOASTER); // --- Main component ---\n // @vue/component\n\n var BToaster = /*#__PURE__*/extend({\n name: NAME_TOASTER,\n mixins: [listenOnRootMixin],\n props: props$1,\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 name = this.name;\n this.staticName = name;\n /* istanbul ignore if */\n\n if (wormhole.hasTarget(name)) {\n warn(\"A \\\"<portal-target>\\\" with name \\\"\".concat(name, \"\\\" already exists in the document.\"), NAME_TOASTER);\n this.dead = true;\n } else {\n this.doRender = true;\n }\n },\n beforeDestroy: function beforeDestroy() {\n // Let toasts made with `this.$bvToast.toast()` know that this toaster\n // is being destroyed and should should also destroy/hide themselves\n if (this.doRender) {\n this.emitOnRoot(getRootEventName(NAME_TOASTER, EVENT_NAME_DESTROYED), this.name);\n }\n },\n destroyed: function destroyed() {\n // Remove from DOM if needed\n var $el = this.$el;\n /* istanbul ignore next: difficult to test */\n\n if ($el && $el.parentNode) {\n $el.parentNode.removeChild($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 // Fallback to null to make sure attribute doesn't exist\n role: this.role || null,\n 'aria-live': this.ariaLive,\n 'aria-atomic': this.ariaAtomic\n }\n }, [$target]);\n }\n\n return $toaster;\n }\n });\n\n var _watch;\n\n var _makeModelMixin = makeModelMixin('visible', {\n type: PROP_TYPE_BOOLEAN,\n defaultValue: false,\n event: EVENT_NAME_CHANGE\n }),\n modelMixin = _makeModelMixin.mixin,\n modelProps = _makeModelMixin.props,\n MODEL_PROP_NAME = _makeModelMixin.prop,\n MODEL_EVENT_NAME = _makeModelMixin.event;\n\n var MIN_DURATION = 1000; // --- Props ---\n\n var linkProps = pick$1(props$2f, ['href', 'to']);\n var props = makePropsConfigurable(sortKeys(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3(_objectSpread2$3({}, props$25), modelProps), linkProps), {}, {\n appendToast: makeProp(PROP_TYPE_BOOLEAN, false),\n autoHideDelay: makeProp(PROP_TYPE_NUMBER_STRING, 5000),\n bodyClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n headerClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n headerTag: makeProp(PROP_TYPE_STRING, 'header'),\n // Switches role to 'status' and aria-live to 'polite'\n isStatus: makeProp(PROP_TYPE_BOOLEAN, false),\n noAutoHide: makeProp(PROP_TYPE_BOOLEAN, false),\n noCloseButton: makeProp(PROP_TYPE_BOOLEAN, false),\n noFade: makeProp(PROP_TYPE_BOOLEAN, false),\n noHoverPause: makeProp(PROP_TYPE_BOOLEAN, false),\n solid: makeProp(PROP_TYPE_BOOLEAN, false),\n // Render the toast in place, rather than in a portal-target\n static: makeProp(PROP_TYPE_BOOLEAN, false),\n title: makeProp(PROP_TYPE_STRING),\n toastClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n toaster: makeProp(PROP_TYPE_STRING, 'b-toaster-top-right'),\n variant: makeProp(PROP_TYPE_STRING)\n })), NAME_TOAST); // --- Main component ---\n // @vue/component\n\n var BToast = /*#__PURE__*/extend({\n name: NAME_TOAST,\n mixins: [attrsMixin, idMixin, modelMixin, listenOnRootMixin, normalizeSlotMixin, scopedStyleMixin],\n inheritAttrs: false,\n props: props,\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 dismissStarted: 0,\n resumeDismiss: 0\n };\n },\n computed: {\n toastClasses: function toastClasses() {\n var appendToast = this.appendToast,\n variant = this.variant;\n return _defineProperty({\n 'b-toast-solid': this.solid,\n 'b-toast-append': appendToast,\n 'b-toast-prepend': !appendToast\n }, \"b-toast-\".concat(variant), variant);\n },\n slotScope: function slotScope() {\n var hide = this.hide;\n return {\n hide: 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$3(_objectSpread2$3({}, this.bvAttrs), {}, {\n id: this.safeId(),\n tabindex: '0'\n });\n }\n },\n watch: (_watch = {}, _defineProperty(_watch, MODEL_PROP_NAME, function (newValue) {\n this[newValue ? 'show' : 'hide']();\n }), _defineProperty(_watch, \"localShow\", function localShow(newValue) {\n if (newValue !== this[MODEL_PROP_NAME]) {\n this.$emit(MODEL_EVENT_NAME, newValue);\n }\n }), _defineProperty(_watch, \"toaster\", function toaster() {\n // If toaster target changed, make sure toaster exists\n this.$nextTick(this.ensureToaster);\n }), _defineProperty(_watch, \"static\", function _static(newValue) {\n // If static changes to true, and the toast is showing,\n // ensure the toaster target exists\n if (newValue && this.localShow) {\n this.ensureToaster();\n }\n }), _watch),\n created: function created() {\n // Create private non-reactive props\n this.$_dismissTimer = null;\n },\n mounted: function mounted() {\n var _this = this;\n\n this.isMounted = true;\n this.$nextTick(function () {\n if (_this[MODEL_PROP_NAME]) {\n requestAF(function () {\n _this.show();\n });\n }\n }); // Listen for global $root show events\n\n this.listenOnRoot(getRootActionEventName(NAME_TOAST, EVENT_NAME_SHOW), function (id) {\n if (id === _this.safeId()) {\n _this.show();\n }\n }); // Listen for global $root hide events\n\n this.listenOnRoot(getRootActionEventName(NAME_TOAST, EVENT_NAME_HIDE), 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(getRootEventName(NAME_TOASTER, EVENT_NAME_DESTROYED), function (toaster) {\n /* istanbul ignore next */\n if (toaster === _this.computedToaster) {\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 showEvent = this.buildEvent(EVENT_NAME_SHOW);\n this.emitEvent(showEvent);\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 hideEvent = this.buildEvent(EVENT_NAME_HIDE);\n this.emitEvent(hideEvent);\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$3(_objectSpread2$3({\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(bvEvent) {\n var type = bvEvent.type;\n this.emitOnRoot(getRootEventName(NAME_TOAST, type), bvEvent);\n this.$emit(type, bvEvent);\n },\n ensureToaster: function ensureToaster() {\n if (this.static) {\n return;\n }\n\n var computedToaster = this.computedToaster;\n\n if (!wormhole.hasTarget(computedToaster)) {\n var div = document.createElement('div');\n document.body.appendChild(div);\n var toaster = createNewChildComponent(this.bvEventRoot, BToaster, {\n propsData: {\n name: computedToaster\n }\n });\n toaster.$mount(div);\n }\n },\n startDismissTimer: function startDismissTimer() {\n this.clearDismissTimer();\n\n if (!this.noAutoHide) {\n this.$_dismissTimer = 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.$_dismissTimer);\n this.$_dismissTimer = 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.$_dismissTimer || 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 hiddenEvent = this.buildEvent(EVENT_NAME_SHOWN);\n this.emitEvent(hiddenEvent);\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 hiddenEvent = this.buildEvent(EVENT_NAME_HIDDEN);\n this.emitEvent(hiddenEvent);\n this.doRender = false;\n },\n // Render helper for generating the toast\n makeToast: function makeToast(h) {\n var _this5 = this;\n\n var title = this.title,\n slotScope = this.slotScope;\n var link = isLink$1(this);\n var $headerContent = [];\n var $title = this.normalizeSlot(SLOT_NAME_TOAST_TITLE, slotScope);\n\n if ($title) {\n $headerContent.push($title);\n } else if (title) {\n $headerContent.push(h('strong', {\n staticClass: 'mr-2'\n }, 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 }\n\n var $header = h();\n\n if ($headerContent.length > 0) {\n $header = h(this.headerTag, {\n staticClass: 'toast-header',\n class: this.headerClass\n }, $headerContent);\n }\n\n var $body = h(link ? BLink : 'div', {\n staticClass: 'toast-body',\n class: this.bodyClass,\n props: link ? pluckProps(linkProps, this) : {},\n on: link ? {\n click: this.onLinkClick\n } : {}\n }, this.normalizeSlot(SLOT_NAME_DEFAULT, slotScope));\n return h('div', {\n staticClass: 'toast',\n class: this.toastClass,\n attrs: this.computedAttrs,\n key: \"toast-\".concat(this[COMPONENT_UID_KEY]),\n ref: 'toast'\n }, [$header, $body]);\n }\n },\n render: function render(h) {\n if (!this.doRender || !this.isMounted) {\n return h();\n }\n\n var order = this.order,\n isStatic = this.static,\n isHiding = this.isHiding,\n isStatus = this.isStatus;\n var name = \"b-toast-\".concat(this[COMPONENT_UID_KEY]);\n var $toast = h('div', {\n staticClass: 'b-toast',\n class: this.toastClasses,\n attrs: _objectSpread2$3(_objectSpread2$3({}, isStatic ? {} : this.scopedStyleAttrs), {}, {\n id: this.safeId('_toast_outer'),\n role: isHiding ? null : isStatus ? 'status' : 'alert',\n 'aria-live': isHiding ? null : isStatus ? 'polite' : 'assertive',\n 'aria-atomic': isHiding ? null : 'true'\n }),\n key: name,\n ref: 'b-toast'\n }, [h(BVTransition, {\n props: {\n noFade: this.noFade\n },\n on: this.transitionHandlers\n }, [this.localShow ? this.makeToast(h) : h()])]);\n return h(Portal, {\n props: {\n name: name,\n to: this.computedToaster,\n order: order,\n slim: true,\n disabled: isStatic\n }\n }, [$toast]);\n }\n });\n\n var PROP_NAME = '$bvToast';\n var PROP_NAME_PRIV = '_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 = ['id'].concat(_toConsumableArray$1(keys(omit(props, ['static', 'visible'])))); // Map prop names to toast slot names\n\n var propsToSlots = {\n toastContent: 'default',\n title: 'toast-title'\n }; // --- Helper 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 `$bvToast` VM injection\n\n\n var plugin = function plugin(Vue) {\n // Create a private sub-component constructor that\n // extends BToast and self-destructs after hidden\n // @vue/component\n var BVToastPop = Vue.extend({\n name: NAME_TOAST_POP,\n extends: BToast,\n mixins: [useParentMixin],\n destroyed: function destroyed() {\n // Make sure we not in document any more\n var $el = this.$el;\n\n if ($el && $el.parentNode) {\n $el.parentNode.removeChild($el);\n }\n },\n mounted: function mounted() {\n var _this = this;\n\n // Self destruct handler\n var handleDestroy = function handleDestroy() {\n // Ensure the toast has been force hidden\n _this.localShow = false;\n _this.doRender = false;\n\n _this.$nextTick(function () {\n _this.$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 _this.$destroy();\n });\n });\n });\n }; // Self destruct if parent destroyed\n\n\n this.bvParent.$once(HOOK_EVENT_NAME_DESTROYED, handleDestroy); // Self destruct after hidden\n\n this.$once(EVENT_NAME_HIDDEN, handleDestroy); // Self destruct when toaster is destroyed\n\n this.listenOnRoot(getRootEventName(NAME_TOASTER, EVENT_NAME_DESTROYED), function (toaster) {\n /* istanbul ignore next: hard to test */\n if (toaster === _this.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)) {\n /* istanbul ignore next */\n return;\n } // Create an instance of `BVToastPop` component\n\n\n var toast = createNewChildComponent(parent, BVToastPop, {\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 propsData: _objectSpread2$3(_objectSpread2$3(_objectSpread2$3({}, filterOptions(getComponentConfig(NAME_TOAST))), omit(props, keys(propsToSlots))), {}, {\n // Props that can't be overridden\n static: false,\n visible: true\n })\n }); // Convert certain props to slots\n\n keys(propsToSlots).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[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: getEventRoot(vm)\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)) {\n /* istanbul ignore next */\n return;\n }\n\n makeToast(_objectSpread2$3(_objectSpread2$3({}, filterOptions(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(getRootActionEventName(NAME_TOAST, EVENT_NAME_SHOW), 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(getRootActionEventName(NAME_TOAST, EVENT_NAME_HIDE), 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] = 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)) {\n defineProperty$1(Vue.prototype, PROP_NAME, {\n get: function get() {\n /* istanbul ignore next */\n if (!this || !this[PROP_NAME_PRIV]) {\n warn(\"\\\"\".concat(PROP_NAME, \"\\\" must be accessed from a Vue instance \\\"this\\\" context.\"), NAME_TOAST);\n }\n\n return this[PROP_NAME_PRIV];\n }\n });\n }\n };\n\n var BVToastPlugin = /*#__PURE__*/pluginFactory({\n plugins: {\n plugin: plugin\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 = 'hover focus'; // 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 noninteractiveRE = /^noninteractive$/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$1 = /^o-?\\d+$/i;\n var variantRE = /^v-.+$/i;\n var spacesRE = /\\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 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_TOOLTIP, 'delay', 50),\n boundary: String(getComponentConfig(NAME_TOOLTIP, 'boundary', 'scrollParent')),\n boundaryPadding: toInteger(getComponentConfig(NAME_TOOLTIP, 'boundaryPadding', 5), 0),\n variant: getComponentConfig(NAME_TOOLTIP, 'variant'),\n customClass: getComponentConfig(NAME_TOOLTIP, '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$1(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$3(_objectSpread2$3({}, config), bindings.value);\n } // If title is not provided, try title attribute\n\n\n if (isUndefined(config.title)) {\n // Try attribute\n var attrs = isVue3 ? vnode.props : (vnode.data || {}).attrs;\n config.title = attrs && !isUndefinedOrNull(attrs.title) ? 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.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.test(mod)) {\n // No animation\n config.animation = false;\n } else if (placementRE.test(mod)) {\n // Placement of tooltip\n config.placement = mod;\n } else if (boundaryRE.test(mod)) {\n // Boundary of tooltip\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$1.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 } // 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 (!IS_BROWSER) {\n /* istanbul ignore next */\n return;\n }\n\n var config = parseBindings$1(bindings, vnode);\n\n if (!el[BV_TOOLTIP]) {\n var parent = getInstanceFromDirective(vnode, bindings);\n el[BV_TOOLTIP] = createNewChildComponent(parent, BVTooltip, {\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(EVENT_NAME_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$1(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$1(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 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 SkeletonPlugin: SkeletonPlugin,\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$1 = 'v-b-scrollspy';\n var CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\n var CLASS_NAME_ACTIVE = 'active';\n var SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\n var SELECTOR_NAV_LINKS = '.nav-link';\n var SELECTOR_NAV_ITEMS = '.nav-item';\n var SELECTOR_LIST_ITEMS = '.list-group-item';\n var SELECTOR_DROPDOWN = '.dropdown, .dropup';\n var SELECTOR_DROPDOWN_ITEMS = '.dropdown-item';\n var SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\n var ROOT_EVENT_NAME_ACTIVATE = getRootEventName('BVScrollspy', 'activate');\n var METHOD_OFFSET = 'offset';\n var METHOD_POSITION = 'position';\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 }; // Transition Events\n\n var TransitionEndEvents = ['webkitTransitionEnd', 'transitionend', 'otransitionend', 'oTransitionEnd'];\n /*\n * Utility Methods\n */\n // Better var type detection\n\n var toType = function toType(obj)\n /* istanbul ignore next: not easy to test */\n {\n return toString$1(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(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 BVScrollspy\n /* istanbul ignore next: not easy to test */\n = /*#__PURE__*/function () {\n function BVScrollspy(element, config, $root) {\n _classCallCheck(this, BVScrollspy);\n\n // The element we activate links in\n this.$el = element;\n this.$scroller = null;\n this.$selector = [SELECTOR_NAV_LINKS, SELECTOR_LIST_ITEMS, SELECTOR_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(BVScrollspy, [{\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$3(_objectSpread2$3({}, 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.forEach(function (eventName) {\n eventOn(window, eventName, _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.forEach(function (eventName) {\n eventOff(window, eventName, _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(event) {\n var type = isString(event) ? event : event.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 ? METHOD_POSITION : METHOD_OFFSET;\n var method = this.$config.method === 'auto' ? autoMethod : this.$config.method;\n var methodFn = method === METHOD_POSITION ? position : offset$1;\n var offsetBase = method === METHOD_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 && RX_HREF.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(RX_HREF, '$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(identity) // 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, CLASS_NAME_DROPDOWN_ITEM)) {\n // This is a dropdown item, so find the .dropdown-toggle and set its state\n var dropdown = closest(SELECTOR_DROPDOWN, link);\n\n if (dropdown) {\n _this5.setActiveState(select(SELECTOR_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_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_NAV_LIST_GROUP, el);\n var sibling = el ? el.previousElementSibling : null;\n\n if (sibling && matches(sibling, \"\".concat(SELECTOR_NAV_LINKS, \", \").concat(SELECTOR_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_NAV_ITEMS)) {\n _this5.setActiveState(select(SELECTOR_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(ROOT_EVENT_NAME_ACTIVATE, target, links);\n }\n }\n }, {\n key: \"clear\",\n value: function clear() {\n var _this6 = this;\n\n selectAll(\"\".concat(this.$selector, \", \").concat(SELECTOR_NAV_ITEMS), this.$el).filter(function (el) {\n return hasClass(el, CLASS_NAME_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, CLASS_NAME_ACTIVE);\n } else {\n removeClass(el, CLASS_NAME_ACTIVE);\n }\n }\n }], [{\n key: \"Name\",\n get: function get() {\n return NAME$1;\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 BVScrollspy;\n }();\n\n var BV_SCROLLSPY = '__BV_Scrollspy__'; // Pre-compiled regular expressions\n\n var onlyDigitsRE = /^\\d+$/;\n var offsetRE = /^(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 = 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.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 !!BVScrollspy.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 (!IS_BROWSER) {\n /* istanbul ignore next */\n return;\n }\n\n var config = parseBindings(bindings);\n\n if (el[BV_SCROLLSPY]) {\n el[BV_SCROLLSPY].updateConfig(config, getEventRoot(getInstanceFromDirective(vnode, bindings)));\n } else {\n el[BV_SCROLLSPY] = new BVScrollspy(el, config, getEventRoot(getInstanceFromDirective(vnode, bindings)));\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 applyScrollspy(el, bindings, vnode);\n },\n\n /* istanbul ignore next: not easy to test */\n inserted: function inserted(el, bindings, vnode) {\n applyScrollspy(el, bindings, vnode);\n },\n\n /* istanbul ignore next: not easy to test */\n update: function update(el, bindings, vnode) {\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 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 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 NAME = '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 }; // --- 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","Vue__default","e","_interopDefaultLegacy","ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread2$3","target","i","arguments","length","source","forEach","key","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_typeof$1","obj","Symbol","iterator","constructor","prototype","_classCallCheck","instance","Constructor","TypeError","_defineProperties","props","descriptor","configurable","writable","_createClass","protoProps","staticProps","value","_inherits","subClass","superClass","create","_setPrototypeOf","_getPrototypeOf","o","setPrototypeOf","getPrototypeOf","__proto__","p","_isNativeReflectConstruct","Reflect","construct","sham","Proxy","Boolean","valueOf","call","_construct","Parent","args","Class","a","Function","bind","_wrapNativeSuper","_cache","Map","undefined","fn","toString","indexOf","has","get","set","Wrapper","_objectWithoutProperties","excluded","sourceKeys","_objectWithoutPropertiesLoose","sourceSymbolKeys","propertyIsEnumerable","_assertThisInitialized","ReferenceError","_createSuper","Derived","hasNativeReflectConstruct","result","Super","NewTarget","_possibleConstructorReturn","_get","property","receiver","base","hasOwnProperty","_superPropBase","desc","_slicedToArray","arr","Array","isArray","_arrayWithHoles","_i","_s","_e","_arr","_n","_d","next","done","err","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","_toConsumableArray$1","_arrayLikeToArray","_arrayWithoutHoles$1","iter","from","_iterableToArray$1","_nonIterableSpread$1","minLen","n","slice","name","test","len","arr2","assign","t","r","s","kebab","styleProp","styleList","toUpperCase","c","split","l","trim","replace","style","y","concat","f","isVue3","version","startsWith","REF_FOR_KEY","ALLOWED_FIELDS_IN_DATA","extend","originalExtend","KNOWN_COMPONENTS","originalVModelDynamicCreated","vModelDynamic","created","originalVModelDynamicBeforeUpdate","beforeUpdate","el","binding","vnode","_assign","definition","render","__alreadyPatched","originalRender","h","patchedH","tag","dataObjOrChildren","rawSlots","slots","isTag","includes","attrs","normalizedData","scopedSlots","$hasNormal","functional","_ctx$children","_ctx$children$default","ctx","patchedCtx","data","IGNORED_CHILDREN_KEYS","children","default","k","on","listeners","nextTick","HAS_WINDOW_SUPPORT","window","HAS_DOCUMENT_SUPPORT","document","HAS_NAVIGATOR_SUPPORT","navigator","HAS_PROMISE_SUPPORT","Promise","HAS_MUTATION_OBSERVER_SUPPORT","MutationObserver","WebKitMutationObserver","MozMutationObserver","IS_BROWSER","WINDOW","DOCUMENT","NAVIGATOR","USER_AGENT","userAgent","toLowerCase","IS_JSDOM","checkMultipleVueWarned","MULTIPLE_VUE_WARNING","_watch$k","HAS_PASSIVE_EVENT_SUPPORT","passiveEventSupported","options","passive","addEventListener","removeEventListener","_unused","HAS_TOUCH_SUPPORT","documentElement","maxTouchPoints","HAS_POINTER_EVENT_SUPPORT","PointerEvent","MSPointerEvent","HAS_INTERACTION_OBSERVER_SUPPORT","IntersectionObserverEntry","DEFAULT_BREAKPOINT","RX_ARRAY_NOTATION","RX_BV_PREFIX","RX_DIGITS","RX_EXTENSION","RX_HASH","RX_HASH_ID","RX_HTML_TAGS","RX_HYPHENATE","RX_LOWER_UPPER","RX_NUMBER","RX_PLUS","RX_REGEXP_REPLACE","RX_SPACES","RX_SPACE_SPLIT","RX_STAR","RX_START_SPACE_WORD","RX_TRIM_LEFT","RX_UNDERSCORE","RX_UN_KEBAB","RX_DATE","RX_DATE_SPLIT","RX_TIME","RX_HREF","RX_ENCODED_COMMA","RX_ENCODE_REVERSE","RX_QUERY_START","RX_ASPECT","RX_ASPECT_SEPARATOR","RX_COL_CLASS","RX_ICON_PREFIX","RX_STRIP_LOCALE_MODS","Element","_Object","_super","HTMLElement","_Element","_super2","SVGElement","_Element2","_super3","File","_Object2","_super4","toType$1","isUndefined","isNull","isUndefinedOrNull","isFunction$1","isBoolean","isString","isNumber","isNumeric$1","String","isObject","isPlainObject","isDate","Date","isEvent","Event","isRegExp","toRawType","proto","optionalProps","defineProperty$1","prop","getOwnPropertyNames","clone","pick$1","reduce","omit","mergeDeep","sortKeys","sort","cloneDeep","defaultValue","val","identity","x","getRaw","path","join","steps","every","step","getEnv","fallback","env","process","warn","message","console","warnNotClient","warnNoPromiseSupport","BvConfig","$_config","_this","config","subConfig","some","b","checkMultipleVue","installFactory","_ref","components","directives","plugins","install","installed","setConfig","registerComponents","registerDirectives","registerPlugins","pluginFactory","plugin","use","registerComponent","def","component","registerDirective","directive","HOOK_EVENT_NAME_BEFORE_DESTROY","HOOK_EVENT_NAME_DESTROYED","ROOT_EVENT_NAME_PREFIX","EVENT_OPTIONS_PASSIVE","EVENT_OPTIONS_NO_CAPTURE","capture","PROP_TYPE_ARRAY","PROP_TYPE_BOOLEAN","PROP_TYPE_DATE","PROP_TYPE_FUNCTION","PROP_TYPE_NUMBER","Number","PROP_TYPE_OBJECT","PROP_TYPE_REG_EXP","RegExp","PROP_TYPE_STRING","PROP_TYPE_ARRAY_FUNCTION","PROP_TYPE_ARRAY_OBJECT","PROP_TYPE_ARRAY_OBJECT_STRING","PROP_TYPE_ARRAY_STRING","PROP_TYPE_BOOLEAN_NUMBER","PROP_TYPE_BOOLEAN_NUMBER_STRING","PROP_TYPE_BOOLEAN_STRING","PROP_TYPE_DATE_STRING","PROP_TYPE_FUNCTION_STRING","PROP_TYPE_NUMBER_STRING","PROP_TYPE_NUMBER_OBJECT_STRING","PROP_TYPE_OBJECT_FUNCTION","PROP_TYPE_OBJECT_STRING","arrayIncludes","array","_len","_key","createArray","fillFn","mapFn","map","flattenDeep","item","hasNormalizedSlot","names","$scopedSlots","$slots","normalizeSlot","slot","scope","normalizeSlotMixin","methods","vNodes","toInteger","NaN","integer","parseInt","isNaN","toFloat","float","parseFloat","toFixed","precision","kebabCase","str","pascalCase","_","charAt","startCase","$1","$2","upperFirst","escapeRegExp","spaces","JSON","stringify","lowerCase","ELEMENT_PROTO","TABABLE_SELECTOR","matchesEl","matches","msMatchesSelector","webkitMatchesSelector","closestEl","closest","sel","parentElement","parentNode","nodeType","Node","ELEMENT_NODE","requestAF","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","msRequestAnimationFrame","oRequestAnimationFrame","cb","setTimeout","MutationObs","isElement","getActiveElement","excludes","activeElement","isActiveElement","isVisible","contains","body","getStyle","bcr","getBCR","height","width","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","setStyle","removeStyle","getBoundingClientRect","getCS","getComputedStyle","offset$1","_offset","top","left","getClientRects","win","ownerDocument","defaultView","pageYOffset","pageXOffset","position","parentOffset","elStyles","doc","offsetParent","offsetParentStyles","borderTopWidth","borderLeftWidth","marginTop","marginLeft","getTabables","rootEl","tabIndex","attemptFocus","focus","attemptBlur","blur","_unused2","memoize","cache","argsKey","VueProto","getConfigValue","bvConfig","getComponentConfig","propKey","getBreakpoints","_getBreakpointsCached","getBreakpointsUpCached","breakpoints","prefixPropName","prefix","unprefixPropName","suffixPropName","suffix","makeProp","type","requiredOrValidator","validator","required","copyProps","transformFn","copied","pluckProps","keysToPluck","objToPluck","memo","makePropConfigurable","componentKey","makePropsConfigurable","configurablePropDefaultFnName","hasPropFunction","makeModelMixin","_ref$type","_ref$defaultValue","_ref$validator","_ref$event","event","mixin","model","parseEventOptions","eventOn","eventName","handler","eventOff","eventOnOff","method","stopEvent","_ref$preventDefault","preventDefault","_ref$propagation","propagation","_ref$immediatePropaga","immediatePropagation","stopPropagation","stopImmediatePropagation","getBaseEventName","getRootEventName","getRootActionEventName","actionName","props$2l","ariaLabel","content","textVariant","BButtonClose","componentData","staticClass","class","click","domProps","innerHTML","NO_FADE_PROPS","enterClass","enterActiveClass","enterToClass","leaveClass","leaveActiveClass","leaveToClass","FADE_PROPS","props$2k","appear","mode","noFade","transProps","BVTransition","appearClass","appearActiveClass","appearToClass","css","dataCopy","_makeModelMixin$k","modelMixin$j","modelProps$j","MODEL_PROP_NAME$j","MODEL_EVENT_NAME$j","parseCountDown","show","parseShow","props$2j","dismissLabel","dismissible","fade","variant","AlertPlugin","BAlert","mixins","countDown","localShow","watch","newValue","clearCountDownInterval","$emit","$_countDownTimeout","$nextTick","$_filterTimer","beforeDestroy","dismiss","clearTimeout","$alert","$dismissButton","role","mathMin","Math","min","mathMax","max","mathAbs","abs","mathCeil","ceil","mathFloor","floor","mathPow","pow","mathRound","round","props$2i","aspect","BAspect","computed","padding","ratio","_aspect$split$map2","v","$sizer","paddingBottom","$content","AspectPlugin","safeVueInstance","encodeReserveReplacer","charCodeAt","encode","encodeURIComponent","decode","decodeURIComponent","parseQuery","query","parsed","param","parts","shift","isLink$1","href","to","isRouterLink","computeHref","_ref3","toFallback","hash","results","value2","stringifyQueryObj","BASE_ATTRS","viewBox","focusable","STACKED_ATTRS","props$2h","animation","flipH","flipV","fontScale","rotate","scale","shiftH","shiftV","stacked","title","BVIconBase","_class","hasScale","hasTransforms","hasShift","hasContent","$inner","transform","fontSize","xmlns","fill","iconProps$1","makeIcon","kebabName","iconName","iconNameClass","iconTitle","svgContent","BIconBlank","BIconCalendar","BIconCalendarFill","BIconChevronBarLeft","BIconChevronDoubleLeft","BIconChevronDown","BIconChevronLeft","BIconChevronUp","BIconCircleFill","BIconClock","BIconClockFill","BIconDash","BIconPersonFill","BIconPlus","BIconStar","BIconStarFill","BIconStarHalf","BIconX","findIconComponent","$options","$parent","iconProps","props$2g","icon","BIcon","CODE_DOWN","CODE_END","CODE_ENTER","CODE_HOME","CODE_LEFT","CODE_RIGHT","CODE_SPACE","CODE_UP","compareArrays","equal","looseEqual","aValidType","bValidType","getTime","aHasKey","bHasKey","isEmpty","makePropWatcher","propName","oldValue","$delete","$data","$set","makePropCacheMixin","proxyPropName","attrsMixinVue2","attrsMixinVue3","bvAttrs","$attrs","attrsMixin","getEventRoot","vm","$root","bvEventRoot","PROP$3","listenOnRootMixin","callback","listenOffRoot","registerRootListener","unregisterRootListener","listenOnRoot","$on","listenOnRootOnce","_this2","_callback","$once","$off","emitOnRoot","_this$bvEventRoot","listenersMixinVue2","listenersMixinVue3","bvListeners","$listeners","listenersMixin","ROOT_EVENT_NAME_CLICKED","routerLinkProps","activeClass","append","exact","exactActiveClass","exactPath","exactPathActiveClass","routerTag","nuxtLinkProps","noPrefetch","prefetch","props$2f","active","rel","routerComponentName","BLink","inheritAttrs","computedTag","thisOrParent","hasRouter","$router","hasNuxt","$nuxt","computeTag","computedRel","_ref2","computeRel","computedHref","computedProps","computedAttrs","tabindex","computedListeners","onClick","_arguments","eventIsEvent","suppliedHandler","_event$currentTarget$","currentTarget","__vue__","$el","linkProps$7","props$2e","block","pill","pressed","size","squared","handleFocus","isLink","isToggle","isButton","isNonStandardTag$1","computeClass","computeLinkProps","computeAttrs","button","link","toggle","nonStandardTag","hashLink","autocomplete","BButton","keydown","keyCode","focusin","focusout","SIZES","computeSize","linkProps$6","props$2d","alt","badge","badgeLeft","badgeOffset","badgeTop","badgeVariant","buttonType","rounded","square","src","text","BAvatar","inject","getBvAvatarGroup","localSrc","bvAvatarGroup","computedSize","computedVariant","computedRounded","fontStyle","marginStyle","overlapScale","marginRight","badgeStyle","offset","FONT_SIZE_SCALE","bottom","right","onImgError","_class2","error","$badge","hasBadgeSlot","badgeText","props$2c","overlap","AvatarPlugin","BAvatarGroup","provide","paddingStyle","paddingLeft","paddingRight","linkProps$5","_watch$j","props$2b","BBadge","BadgePlugin","stripTags","htmlOrText","textContent","props$2a","ariaCurrent","html","BBreadcrumbLink","suppliedProps","props$29","BBreadcrumbItem","props$28","items","BBreadcrumb","childNodes","activeDefined","idx","BreadcrumbPlugin","ButtonPlugin","BBtn","BBtnClose","props$27","ariaRole","vertical","BButtonGroup","ButtonGroupPlugin","BBtnGroup","ITEM_SELECTOR","props$26","justify","keyNav","BButtonToolbar","mounted","getItems","focusFirst","focusPrev","index","reverse","focusNext","focusLast","onFocusin","relatedTarget","onKeydown","shiftKey","ButtonToolbarPlugin","BBtnToolbar","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","isLocaleRTL","locale1","locale2","props$25","idMixin","localId_","safeId","_makeModelMixin$j","modelMixin$i","modelProps$i","MODEL_PROP_NAME$i","MODEL_EVENT_NAME$i","props$24","ariaControls","dateDisabledFn","dateFormatOptions","weekday","dateInfoFn","direction","headerTag","hidden","hideHeader","initialDate","labelCalendar","labelCurrentMonth","labelHelp","labelNav","labelNextDecade","labelNextMonth","labelNextYear","labelNoDateSelected","labelPrevDecade","labelPrevMonth","labelPrevYear","labelSelected","labelToday","navButtonVariant","noHighlightToday","noKeyNav","readonly","roleDescription","selectedVariant","showDecadeNav","startWeekday","todayVariant","valueAsDate","weekdayHeaderFormat","BCalendar","selected","selectedYMD","activeYMD","getToday","gridHasFocus","isLive","valueId","widgetId","navId","gridId","gridCaptionId","gridHelpId","activeId","selectedDate","activeDate","computedMin","computedMax","computedWeekStarts","computedLocale","locales","calendar","resolvedOptions","resolveLocale","computedDateDisabledFn","computedDateInfoFn","calendarLocale","fmt","calendarYear","calendarMonth","calendarFirstDay","calendarDaysInMonth","computedTodayVariant","computedNavButtonVariant","isRTL","dir","context","selectedFormatted","formatDateString","activeFormatted","dateDisabled","rtl","dateOutOfRange","rangeFn","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","currentDay","week","j","dayYMD","dayDisabled","dateInfo","label","isThisMonth","info","calendarHeadings","d","old","newYMD","oldYMD","setLive","_this3","activated","deactivated","$refs","grid","_this4","emitSelected","_this5","setGridFocusFlag","onKeydownWrapper","altKey","ctrlKey","checkDate","constrainedToday","onKeydownGrid","onClickDay","clickedDate","gotoPrevDecade","gotoPrevYear","gotoPrevMonth","gotoCurrentMonth","gotoNextMonth","gotoNextYear","gotoNextDecade","onHeaderClick","_this6","hideDecadeNav","todayYMD","highlightToday","$header","for","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","props$23","bgVariant","borderVariant","props$22","titleTag","BCardTitle","props$21","subTitle","subTitleTag","subTitleTextVariant","BCardSubTitle","props$20","bodyClass","overlay","BCardBody","bodyBgVariant","bodyBorderVariant","bodyTextVariant","$title","$subTitle","bodyTag","props$1$","header","headerClass","headerHtml","BCardHeader","headerBgVariant","headerBorderVariant","headerTextVariant","props$1_","footer","footerClass","footerHtml","BCardFooter","footerBgVariant","footerBorderVariant","footerTextVariant","footerTag","BLANK_TEMPLATE","props$1Z","blank","blankColor","center","fluid","fluidGrow","sizes","srcset","thumbnail","BImg","align","color","makeBlankImgSrc","props$1Y","end","start","BCardImg","baseClass","cardImgProps","imgSrc","_watch$i","_watch$h","_watch$g","props$1X","noBody","BCard","imgLeft","imgRight","imgStart","imgEnd","imgBottom","slotScope","$imgFirst","$imgLast","$img","hasHeaderSlot","$footer","OBSERVER_PROP_NAME","VisibilityObserver","margin","once","observer","visible","doneOnce","createObserver","stop","IntersectionObserver","rootMargin","threshold","observe","entries","entry","isIntersecting","intersectionRatio","disconnect","destroy$1","bind$1","modifiers","mod","_prevModifiers","VBVisible","componentUpdated","unbind","imgProps$1","props$1W","blankHeight","blankSrc","blankWidth","BImgLazy","isShown","computedSrc","computedBlank","computedWidth","computedHeight","computedSrcset","computedSizes","updateShowProp","MODEL_EVENT_NAME_PREFIX","doShow","_modifiers","$props","props$1V","BCardImgLazy","props$1U","textTag","BCardText","props$1T","columns","deck","BCardGroup","CardPlugin","noop","observeDom","obs","mutations","changed","mutation","TEXT_NODE","addedNodes","removedNodes","childList","subtree","_makeModelMixin$i","modelMixin$h","modelProps$h","MODEL_PROP_NAME$h","MODEL_EVENT_NAME$h","DIRECTION","dirClass","overlayClass","prev","PointerType","TOUCH","PEN","TransitionEndEvents$1","WebkitTransition","MozTransition","OTransition","transition","props$1S","background","controls","imgHeight","imgWidth","indicators","interval","labelGotoSlide","labelIndicators","labelNext","labelPrev","noAnimation","noHoverPause","noTouch","noWrap","BCarousel","getBvCarousel","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","setInterval","restart","isCycling","calcDirection","currentSlide","nextSlide","called","onceTransEnd","handleClick","handleSwipe","absDeltaX","touchStart","pointerType","clientX","touches","touchMove","touchEnd","idInner","$controls","makeControl","handlerWrapper","$indicators","mouseenter","mouseleave","tagName","imgProps","imgAlt","imgBlank","imgBlankColor","props$1R","caption","captionHtml","captionTag","contentTag","contentVisibleUp","textHtml","BCarouselSlide","bvCarousel","contentClasses","dragstart","$contentChildren","$child","CarouselPlugin","TRANSITION_PROPS","TRANSITION_HANDLERS","enter","scrollHeight","afterEnter","leave","afterLeave","props$1Q","BVCollapse","ROOT_ACTION_EVENT_NAME_TOGGLE$2","ROOT_ACTION_EVENT_NAME_REQUEST_STATE$2","ROOT_EVENT_NAME_ACCORDION","ROOT_EVENT_NAME_STATE$3","ROOT_EVENT_NAME_SYNC_STATE$3","_makeModelMixin$h","modelMixin$g","modelProps$g","MODEL_PROP_NAME$g","MODEL_EVENT_NAME$g","props$1P","accordion","isNav","BCollapse","transitioning","classObject","collapse","close","emitState","handleToggleEvent","handleAccordionEvent","setWindowEvents","handleResize","emitSync","updated","onEnter","onAfterEnter","onLeave","onAfterLeave","checkDisplayBlock","restore","isBlock","display","clickHandler","openedId","openAccordion","isThis","getInstanceFromDirective","bindings","BV_BASE","BV_TOGGLE_ROOT_HANDLER","BV_TOGGLE_CLICK_HANDLER","BV_TOGGLE_STATE","BV_TOGGLE_TARGETS","ROOT_ACTION_EVENT_NAME_TOGGLE$1","ROOT_EVENT_NAME_STATE$2","ROOT_EVENT_NAME_SYNC_STATE$2","ROOT_ACTION_EVENT_NAME_REQUEST_STATE$1","KEYDOWN_KEY_CODES","isNonStandardTag","removeClickListener","removeRootListeners","setToggleState","state","resetProp","handleUpdate","targets","arg","getTargets","addClickListener","VBToggle","addRootListeners","VBTogglePlugin","CollapsePlugin","isBrowser","timeoutDuration","longerTimeoutBrowsers","debounce","resolve","then","scheduled","isFunction","functionToCheck","getStyleComputedProperty","element","getParentNode","nodeName","host","getScrollParent","_getStyleComputedProp","overflow","overflowX","overflowY","getReferenceNode","reference","referenceNode","isIE11","MSInputMethodContext","documentMode","isIE10","isIE","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","_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","filteredAreas","computedPlacement","variation","getReferenceOffsets","getOuterSizes","marginBottom","getOppositePlacement","matched","getPopperOffsets","referenceOffsets","popperRect","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","find","check","runModifiers","ends","modifiersToRun","findIndex","cur","match","enabled","update","isDestroyed","arrowStyles","flipped","positionFixed","flip","originalPlacement","isCreated","onUpdate","onCreate","isModifierEnabled","modifierName","getSupportedPropertyName","prefixes","upperProp","toCheck","destroy","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","vueTarget","componentId","defaultPrevented","clickOutMixin","listenForClickOut","clickOutElement","clickOutEventName","_clickOutHandler","beforeCreate","isClickOut","clickOutHandler","focusInMixin","listenForFocusIn","focusInElement","_focusInHandler","focusInHandler","registry","WeakMap","_watch$f","_methods","_objectSpread2$2","_watch$e","_objectSpread2$1","_watch$d","_watch$c","_watch$b","_watch$a","_watch$9","_watch$8","_watch$7","ROOT_EVENT_NAME_SHOWN","ROOT_EVENT_NAME_HIDDEN","SELECTOR_ITEM","props$1O","boundary","dropleft","dropright","dropup","noFlip","popperOpts","dropdownMixin","getBvDropdown","getBvNavbar","visibleChangePrevented","bvNavbar","inNavbar","toggler","directionClass","boundaryClass","hideDelay","bvEvent","menu","emitEvent","focusToggler","showMenu","hideMenu","$_popper","$_hideTimeout","whileOpenListen","destroyPopper","clearHideTimeout","delete","createPopper","focusMenu","getPopperConfig","updatePopper","popperConfig","isOpen","rootCloseListener","refocus","_event","onMousedown","onEsc","onSplitClick","hideHandler","up","focusItem","props$1N","lazy","menuClass","noCaret","splitButtonType","splitClass","splitHref","splitTo","splitVariant","toggleAttrs","toggleClass","toggleTag","toggleText","BDropdown","dropdownClasses","menuClasses","toggleClasses","commonProps","$buttonChildren","buttonContentDomProps","$split","btnProps","$toggle","mousedown","$menu","linkProps$4","props$1M","linkClass","BDropdownItem","bvDropdown","closeDropdown","props$1L","buttonClass","BDropdownItemButton","props$1K","BDropdownHeader","props$1J","BDropdownDivider","props$1I","inline","novalidate","validated","BForm","props$1H","formClass","BDropdownForm","props$1G","textClass","BDropdownText","props$1F","ariaDescribedby","headerClasses","headerVariant","BDropdownGroup","headerId","ariaDescribedBy","DropdownPlugin","BDd","BDdItem","BDropdownItemBtn","BDdItemButton","BDdItemBtn","BDdHeader","BDdDivider","BDdForm","BDdText","BDdGroup","TYPES$2","props$1E","BEmbed","EmbedPlugin","props$1D","disabledField","htmlField","textField","valueField","formOptionsMixin","formOptions","normalizeOptions","normalizeOption","option","props$1C","BFormDatalist","props$1B","BFormText","props$1A","ariaLive","forceShow","tooltip","BFormInvalidFeedback","props$1z","BFormValidFeedback","props$1y","BFormRow","FormPlugin","BDatalist","BFormFeedback","looseIndexOf","props$1x","autofocus","form","formControlMixin","handleAutofocus","props$1w","plain","formCustomMixin","custom","props$1v","formSizeMixin","sizeFormClass","props$1u","formStateMixin","computedState","stateClass","computedAriaInvalid","ariaInvalid","_makeModelMixin$g","modelMixin$f","modelProps$f","MODEL_PROP_NAME$f","MODEL_EVENT_NAME$f","props$1t","ariaLabelledby","buttonVariant","formRadioCheckMixin","localChecked","isGroup","bvGroup","hasFocus","computedLocalChecked","isChecked","isRadio","isBtnMode","buttons","isPlain","isCustom","isSwitch","switches","switch","isInline","computedName","groupName","computedForm","computedButtonVariant","buttonClasses","computedLocalCheckedWatcher","checked","input","$input","change","handleChange","$button","$label","props$1s","BFormCheckbox","getBvGroup","setIndeterminate","indeterminate","_ref$target","uncheckedValue","props$1r","BFormRadio","PASS_DOWN_ATTRS","_makeModelMixin$f","modelMixin$e","modelProps$e","MODEL_PROP_NAME$e","MODEL_EVENT_NAME$e","props$1q","formRadioCheckGroupMixin","groupClasses","classes","isRadioGroup","optionComponent","$inputs","props$1p","BFormCheckboxGroup","getBvCheckGroup","FormCheckboxPlugin","BCheckbox","BCheck","BCheckboxGroup","BCheckGroup","PROP$2","updateListeners","listener","_ref$value","hasListener","handlerChanged","createListener","VBHover","props$1o","buttonOnly","formattedValue","placeholder","BVFormBtnLabelControl","isHovered","idButton","idLabel","idMenu","idWrapper","computedDir","setFocus","handleHover","hovered","invalid","btnScope","opened","$hidden","_makeModelMixin$e","modelMixin$d","modelProps$d","MODEL_PROP_NAME$d","MODEL_EVENT_NAME$d","calendarProps","formBtnLabelControlProps$1","props$1n","calendarWidth","closeButton","closeButtonVariant","dark","labelCloseButton","labelResetButton","labelTodayButton","noCloseOnSelect","resetButton","resetButtonVariant","resetValue","todayButton","todayButtonVariant","BFormDatepicker","localYMD","localLocale","calendarYM","computedLang","computedResetValue","control","setAndClose","onSelected","onInput","onContext","onTodayButton","onResetButton","onCloseButton","onShow","onShown","onHidden","defaultButtonFn","$createElement","_label","_label2","$calendar","shown","FormDatepickerPlugin","BDatepicker","_makeModelMixin$d","VALUE_EMPTY_DEPRECATED_MSG","isValidValue","modelMixin$c","modelProps$c","MODEL_PROP_NAME$c","MODEL_EVENT_NAME$c","isFile","getDataTransferItemEntry","getAsEntry","webkitGetAsEntry","getAllFileEntriesInDirectory","directoryReader","entryPromises","readDirectoryEntries","readEntries","all","isDirectory","createReader","file","$path","props$1m","accept","browseText","directory","dropPlaceholder","fileNameFormatter","multiple","noDrop","noDropPlaceholder","noTraverse","BFormFile","files","dragging","dropAllowed","computedAccept","extOrType","startMatch","endMatch","rx","computedCapture","webkitdirectory","computedFileNameFormatter","defaultFileNameFormatter","clonedFiles","flattenedFiles","fileNames","labelContent","allowed","filesTraversed","reset","$_form","$form","isFileValid","isFilesArrayValid","setFiles","setInputFiles","dataTransfer","ClipboardEvent","clipboardData","DataTransfer","handleFiles","filteredFiles","focusHandler","onChange","_event$dataTransfer","isDrop","dataTransferItemList","traverseDirectories","kind","getAllFileEntries","webkitRelativePath","onDragenter","_event$dataTransfer2","dropEffect","onDragover","_event$dataTransfer3","onDragleave","onDrop","zIndex","dragenter","dragover","dragleave","drop","FormFilePlugin","BFile","escapeChar","cssEscape","firstCharCode","char","charCode","ALIGN_SELF_VALUES","computeBreakpointClass","breakpoint","breakpointPropMap","BCol","breakpointCol","breakpointOffset","breakpointOrder","col","alignSelf","cols","_classList$push","_keys","hasColClasses","INPUTS","INPUT_SELECTOR","LEGEND_INTERACTIVE_ELEMENTS","BFormGroup","description","feedbackAriaLive","invalidFeedback","labelClass","labelFor","labelSize","labelSrOnly","validFeedback","contentColProps","getColProps","labelAlignClasses","getAlignClasses","labelColProps","isHorizontal","updateAriaDescribedby","propValue","newIds","oldIds","ids","onLegendClick","inputs","isFieldset","labelId","labelTag","$invalidFeedback","invalidFeedbackContent","invalidFeedbackId","$validFeedback","validFeedbackContent","validFeedbackId","$description","descriptionContent","descriptionId","FormGroupPlugin","BFormFieldset","formSelectionMixin","selectionStart","selectionEnd","selectionDirection","_this$$refs$input","setSelectionRange","_this$$refs$input2","setRangeText","_this$$refs$input3","_makeModelMixin$c","modelMixin$b","modelProps$b","MODEL_PROP_NAME$b","MODEL_EVENT_NAME$b","props$1l","formatter","lazyFormatter","number","plaintext","formTextMixin","localValue","vModelValue","modifyValue","computedClass","isRange","isColor","computedDebounce","hasFormatter","stringifyValue","modifiedValue","clearDebounce","$_inputDebounceTimer","formatValue","force","updateValue","doUpdate","composing","onBlur","formValidityMixin","validity","validationMessage","willValidate","setCustomValidity","checkValidity","reportValidity","TYPES$1","props$1k","list","noWheel","BFormInput","localType","setWheelStopper","onWheelFocus","onWheelBlur","stopWheel","FormInputPlugin","BInput","props$1j","BFormRadioGroup","getBvRadioGroup","FormRadioPlugin","BRadio","BRadioGroup","_makeModelMixin$b","modelMixin$a","modelProps$a","MODEL_PROP_NAME$a","MODEL_EVENT_NAME$a","computeStars","stars","clampValue","BVFormRatingStar","focused","hasClear","rating","star","minStar","props$1i","iconClear","iconEmpty","iconFull","iconHalf","noBorder","showClear","showValue","showValueMax","BFormRating","computedStars","computedRating","isInteractive","formattedRating","formatOptions","toLocaleString","amountRtl","onFocus","renderIcon","iconEmptyFn","iconHalfFn","iconFullFn","iconClearFn","$icon","empty","half","full","FormRatingPlugin","BRating","_makeModelMixin$a","props$1h","props$1g","labelField","optionsField","optionsMixin","props$1f","BFormSelectOption","props$1e","BFormSelectOptionGroup","props$1d","selectSize","BFormSelect","computedSelectSize","inputClass","selectedValue","_value","FormSelectPlugin","BSelect","BSelectOption","BSelectOptionGroup","_makeModelMixin$9","modelMixin$9","modelProps$9","MODEL_PROP_NAME$9","MODEL_EVENT_NAME$9","KEY_CODES","props$1c","formatterFn","labelDecrement","labelIncrement","repeatDelay","repeatInterval","repeatStepMultiplier","repeatThreshold","wrap","BFormSpinbutton","spinId","computedInline","computedReadonly","computedRequired","computedStep","computedDelay","delay","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","props$1b","noRemove","removeLabel","BFormTag","onRemove","tagId","tagLabelId","$remove","$tag","_makeModelMixin$8","modelMixin$8","modelProps$8","MODEL_PROP_NAME$8","MODEL_EVENT_NAME$8","TYPES","DEFAULT_INPUT_FOCUS_SELECTOR","cleanTags","tags","processEventValue","props$1a","addButtonText","addButtonVariant","addOnChange","duplicateTagText","ignoreInputFocusSelector","inputAttrs","inputId","inputType","invalidTagText","limit","limitTagsText","noAddOnEnter","noOuterFocus","noTagRemove","removeOnDelete","separator","tagClass","tagPills","tagRemoveLabel","tagRemovedLabel","tagValidator","tagVariant","BFormTags","newTag","removedTags","tagsState","valid","duplicate","focusState","computedInputId","computedInputType","computedInputAttrs","computedInputHandlers","onInputBlur","onInputChange","onInputFocus","onInputInput","onInputKeydown","computedSeparator","computedSeparatorRegExp","computedJoiner","joiner","computeIgnoreInputFocusSelector","disableAddButton","splitTags","validateTag","duplicateTags","hasDuplicateTags","invalidTags","hasInvalidTags","isLimitReached","addTag","parseTags","getInput","invalidAndDuplicates","removeTag","separatorRe","ignoreFocusSelector","onFocusout","_this7","defaultRender","inputHandlers","isDuplicate","isInvalid","$tags","duplicateFeedbackId","limitFeedbackId","outline","minWidth","invisible","tagListId","$field","$ul","$feedback","$invalid","$duplicate","$limit","$output","$removed","hasTags","FormTagsPlugin","BTags","BTag","props$19","maxRows","noAutoShrink","noResize","rows","BFormTextarea","heightInPx","resize","computedRows","computedMinRows","computedMaxRows","setHeight","visibleCallback","computeHeight","$isServer","lineHeight","border","borderBottomWidth","paddingTop","minHeight","oldHeight","contentRows","FormTextareaPlugin","BTextarea","_makeModelMixin$7","modelMixin$7","modelProps$7","MODEL_PROP_NAME$7","MODEL_EVENT_NAME$7","padLeftZeros","parseHMS","hh","mm","ss","_value$split$map2","hours","minutes","seconds","ampm","props$18","hour12","labelAm","labelAmpm","labelHours","labelMinutes","labelNoTimeSelected","labelPm","labelSeconds","minutesStep","secondsStep","showSeconds","BTime","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","makeColon","$spinners","$value","_makeModelMixin$6","modelMixin$6","modelProps$6","MODEL_PROP_NAME$6","MODEL_EVENT_NAME$6","timeProps","formBtnLabelControlProps","props$17","labelNowButton","noCloseButton","nowButton","nowButtonVariant","BFormTimepicker","localHMS","hms","onNowButton","now","getHours","getMinutes","getSeconds","time","$time","FormTimepickerPlugin","BTimepicker","ImagePlugin","props$16","BInputGroupText","props$15","isText","BInputGroupAddon","props$14","BInputGroupAppend","props$13","BInputGroupPrepend","props$12","appendHtml","prepend","prependHtml","BInputGroup","$prepend","hasPrependSlot","$append","hasAppendSlot","InputGroupPlugin","props$11","BContainer","container","props$10","containerFluid","headerLevel","lead","leadHtml","leadTag","BJumbotron","$lead","hasLeadSlot","$children","JumbotronPlugin","COMMON_ALIGNMENT","computeRowColsClass","computeRowColsBreakpoint","rowColsPropList","BRow","rowColsProps","alignContent","alignH","alignV","noGutters","LayoutPlugin","LinkPlugin","props$$","flush","horizontal","BListGroup","actionTags","linkProps$3","props$_","action","BListGroupItem","itemProps","ListGroupPlugin","props$Z","verticalAlign","BMediaAside","props$Y","BMediaBody","props$X","rightAlign","BMedia","$aside","MediaPlugin","PROP$1","listenOnDocumentMixin","listenOffDocument","registerDocumentListener","unregisterDocumentListener","listenDocument","listenOnDocument","PROP","listenOnWindowMixin","listenOffWindow","registerWindowListener","unregisterWindowListener","listenWindow","listenOnWindow","useParentMixin","bvParent","getScopeId","_scopeId","scopedStyleMixin","scopedStyleAttrs","scopeId","createNewChildComponent","Component","BVTransporterTarget","abstract","nodes","updatedNodes","destroyed","$nodes","props$W","BVTransporterVue2","immediate","unmountTarget","mountTarget","$_defaultFn","$_target","beforeMount","updateTarget","getContainer","$container","createElement","appendChild","propsData","defaultFn","$destroy","BVTransporterVue3","Teleport","BVTransporter","BvModalEvent","_BvEvent","trigger","modalManager","modals","baseZIndex","scrollbarWidth","isBodyOverflowing","modalCount","modalsAreOpen","newCount","oldCount","getScrollbarWidth","checkScrollbar","setScrollbar","resetScrollbar","updateModals","registerModal","modal","unregisterModal","splice","_isBeingDestroyed","_isDestroyed","resetModal","getBaseZIndex","div","isTop","_getBCR","_paddingChangedForModal","_marginChangedForModal","actualPadding","actualMargin","_makeModelMixin$5","modelMixin$5","modelProps$5","MODEL_PROP_NAME$5","MODEL_EVENT_NAME$5","BUTTONS","OBSERVER_CONFIG","characterData","props$V","autoFocusButton","busy","buttonSize","cancelDisabled","cancelTitle","cancelTitleHtml","cancelVariant","centered","contentClass","dialogClass","headerCloseContent","headerCloseLabel","headerCloseVariant","hideBackdrop","hideFooter","hideHeaderClose","ignoreEnforceFocusSelector","modalClass","noCloseOnBackdrop","noCloseOnEsc","noEnforceFocus","noStacking","okDisabled","okOnly","okTitle","okTitleHtml","okVariant","returnFocus","scrollable","static","titleClass","titleHtml","titleSrOnly","BModal","isHidden","isTransitioning","isShow","isOpening","isClosing","ignoreBackdropClick","isModalOverflowing","modalId","modalOuterId","modalHeaderId","modalBodyId","modalTitleId","modalContentId","modalFooterId","modalBackdropId","modalClasses","modalStyles","sbWidth","dialogClasses","titleClasses","bodyClasses","footerClasses","_ref4","modalOuterStyle","cancel","onCancel","onClose","ok","onOk","computeIgnoreEnforceFocusSelector","computedModalAttrs","$_returnFocus","showHandler","toggleHandler","modalListener","checkModalOverflow","updateModel","buildEvent","showEvent","hideEvent","triggerEl","onBeforeEnter","setResizeEvent","setEnforceFocus","onBeforeLeave","returnFocusTo","onDialogMousedown","onceModalMouseup","onClickOut","tabables","bottomTrap","topTrap","preventScroll","autoFocus","makeModal","$modalHeader","$closeButton","$body","$modalFooter","$cancelButton","$modalContent","$tabTrapTop","$tabTrapBottom","$modalDialog","$modal","beforeEnter","beforeLeave","$backdrop","ROOT_ACTION_EVENT_NAME_SHOW","PROPERTY","getTarget","_ref$modifiers","getTriggerElement","setRole","oldProp","VBModal","inserted","BASE_PROPS$1","defaultResolver","propsToSlots$1","msgBoxContent","filterOptions$1","BVModalPlugin","BMsgBox","extends","handleDestroy","$route","$watch","makeMsgBox","resolver","msgBox","reject","Error","bvModalEvent","$mount","asyncMsgBox","BvModal","_vm","_root","_this$_root","_this$_root2","_len2","_key2","ModalPlugin","props$U","cardHeader","justified","pills","small","tabs","BNav","linkProps$2","props$T","linkAttrs","linkClasses","BNavItem","BNavText","formProps","props$R","BNavForm","props$Q","BNavItemDropdown","toggleId","menuId","NavPlugin","BNavItemDd","BNavDropdown","BNavDd","props$P","fixed","print","sticky","toggleable","BNavbar","breakpointClass","xs","props$O","BNavbarNav","linkProps$1","_watch$6","_makePropsConfigurabl","_watch$5","_watch$4","props$N","BNavbarBrand","ROOT_EVENT_NAME_STATE$1","ROOT_EVENT_NAME_SYNC_STATE$1","props$M","BNavbarToggle","toggleState","handleStateEvent","expanded","NavbarPlugin","BNavToggle","props$L","BSpinner","POSITION_COVER","props$K","bgColor","noCenter","opacity","overlayTag","spinnerSmall","spinnerType","spinnerVariant","wrapTag","BOverlay","defaultOverlayFn","$overlay","$background","backgroundColor","backdropFilter","OverlayPlugin","_makeModelMixin$4","modelMixin$4","modelProps$4","MODEL_PROP_NAME$4","MODEL_EVENT_NAME$4","sanitizeLimit","sanitizeCurrentPage","numberOfPages","page","onSpaceKey","props$J","ellipsisClass","ellipsisText","firstClass","firstNumber","firstText","hideEllipsis","hideGotoEndButtons","labelFirstPage","labelLastPage","labelNextPage","labelPage","labelPrevPage","lastClass","lastNumber","lastText","nextClass","nextText","pageClass","prevClass","prevText","paginationMixin$1","currentPage","localNumberOfPages","localLimit","btnSize","alignment","styleClass","computedCurrentPage","paginationParams","showFirstDots","showLastDots","numberOfLinks","startNumber","lastPageNumber","pageList","_this$paginationParam","pages","makePageArray","_i2","_i3","handleKeyNav","getButtons","btn","focusCurrent","_safeVueInstance","pageNumbers","_this$paginationParam2","$buttons","isActivePage","pageNumber","noCurrentPage","makeEndBtn","linkTo","btnSlot","btnText","btnClass","pageTest","$btnContent","linkProps","makeEllipsis","isLast","makePageButton","btnContent","makePage","$firstPageBtn","$lastPageBtn","$pagination","sanitizePerPage","sanitizeTotalRows","props$I","perPage","totalRows","BPagination","pageSizeNumberOfPages","clickEvent","pageNum","PaginationPlugin","_linkProps","props$H","baseUrl","linkGen","noPageDetect","pageGen","useRouter","BPaginationNav","computedValue","setNumberOfPages","guessCurrentPage","getPageInfo","_link","makeLink","resolveLink","_link2","pathname","resolveRoute","route","guess","currentRoute","loc","location","currentLink","PaginationNavPlugin","AttachmentMap","AUTO","TOP","RIGHT","BOTTOM","LEFT","TOPLEFT","TOPRIGHT","RIGHTTOP","RIGHTBOTTOM","BOTTOMLEFT","BOTTOMRIGHT","LEFTTOP","LEFTBOTTOM","OffsetMap","props$G","arrowPadding","boundaryPadding","fallbackPlacement","BVPopper","attachment","getAttachment","templateType","getOffset","popperPlacementChange","popperCreate","arrowOffset","renderTemplate","props$F","BVTooltipTemplate","customClass","interactive","templateClasses","noninteractive","templateAttributes","templateListeners","MODAL_SELECTOR","ROOT_EVENT_NAME_MODAL_HIDDEN","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","_this9","currentElement","getInstanceFromElement","tip","eventTarget","_this10","_this11","props$E","BTooltip","localTitle","localContent","templateTitleContent","$_toolpop","updateContent","doOpen","doClose","getComponent","$toolpop","onHide","onDisabled","onEnabled","setTitle","setContent","BVPopoverTemplate","titleDomProps","contentDomProps","BVPopover","props$D","BPopover","BV_POPOVER","validTriggers$1","manual","htmlRE$1","noFadeRE$1","placementRE$1","boundaryRE$1","delayRE$1","delayShowRE$1","delayHideRE$1","offsetRE$2","variantRE$1","spacesRE$1","applyPopover","selectedTriggers","parseBindings$2","__bv_prev_data__","oldData","newData","VBPopoverPlugin","VBPopover","removePopover","PopoverPlugin","props$C","animated","labelHtml","showProgress","striped","BProgressBar","getBvProgress","bvProgress","progressBarClasses","computedAnimated","computedStriped","progressBarStyles","computedProgress","computedShowProgress","computedShowValue","progressBarProps","props$B","ProgressPlugin","BProgress","progressHeight","$childNodes","ROOT_ACTION_EVENT_NAME_REQUEST_STATE","ROOT_ACTION_EVENT_NAME_TOGGLE","ROOT_EVENT_NAME_STATE","ROOT_EVENT_NAME_SYNC_STATE","_makeModelMixin$3","modelMixin$3","modelProps$3","MODEL_PROP_NAME$3","MODEL_EVENT_NAME$3","props$A","backdrop","backdropVariant","closeLabel","noCloseOnRouteChange","noHeader","noHeaderClose","noSlide","shadow","sidebarClass","renderHeader","renderHeaderTitle","$close","renderHeaderClose","renderBody","renderFooter","renderContent","renderBackdrop","onBackdropClick","BSidebar","transitionProps","hasTitle","titleId","fullPath","$_returnFocusEl","handleToggle","handleSync","onTopTrapFocus","enforceFocus","onBottomTrapFocus","$sidebar","SidebarPlugin","props$z","BSkeleton","_props","_watch$3","_watch$2","_objectSpread2","_watch$1","props$y","BSkeletonIcon","props$x","cardImg","noAspect","BSkeletonImg","hasListenerMixin","$events","_events","props$w","BTr","getBvTableTr","getBvTableRowGroup","bvTableRowGroup","inTbody","isTbody","inThead","isThead","inTfoot","isTfoot","isDark","isStacked","isResponsive","isStickyHeader","hasStickyHeader","tableVariant","headVariant","footVariant","isRowDark","trClasses","trAttrs","props$v","bottomRowMixin","renderBottomRow","fields","computedFields","tbodyTrClass","tbodyTrAttr","parseSpan","spanValidator","props$u","colspan","rowspan","stackedHeading","stickyColumn","BTd","bvTableTr","isStackedCell","isStickyColumn","rowVariant","computedColspan","computedRowspan","cellClasses","cellAttrs","headOrFoot","props$t","busyMixin","localBusy","computedBusy","stopIfBusy","renderBusy","props$s","captionMixin","captionId","renderCaption","$caption","hasCaptionSlot","props$r","colgroupMixin","renderColgroup","$colgroup","props$q","emptyFilteredHtml","emptyFilteredText","emptyHtml","emptyText","showEmpty","emptyMixin","renderEmpty","computedItems","$empty","isFiltered","stringifyObjectValues","FIELD_KEY_CELL_VARIANT","FIELD_KEY_ROW_VARIANT","FIELD_KEY_SHOW_DETAILS","IGNORED_FIELD_KEYS","EVENT_FILTER","sanitizeRow","row","ignoreFields","includeFields","fieldsObj","formattedRow","field","filterByFormatted","allowedKeys","props$p","filterDebounce","filterFunction","filterIgnoredFields","filterIncludedFields","filteringMixin","localFilter","filterSanitize","computedFilterIgnored","computedFilterIncluded","computedFilterDebounce","ms","localFiltering","hasProvider","noProviderFiltering","filteredCheck","filteredItems","localItems","localFilterFn","criteria","filterFn","filterFnFactory","defaultFilterFnFactory","clearFilterTimer","deep","newCriteria","timeout","regExp","pattern","lastIndex","computedFieldsObj","normalizeFields","origFields","processField","sample","_makeModelMixin$2","modelMixin$2","modelProps$2","MODEL_PROP_NAME$2","MODEL_EVENT_NAME$2","props$o","primaryKey","itemsMixin","paginatedItems","sortedItems","_safeVueInstance2","sortBy","localSortBy","sortDesc","localSortDesc","apiUrl","getFieldFormatter","props$n","paginationMixin","localPaging","noProviderPaging","ROOT_EVENT_NAME_REFRESHED","ROOT_ACTION_EVENT_NAME_REFRESH","props$m","noProviderSorting","providerMixin","providerTriggerContext","_providerUpdate","refresh","clearSelected","_providerSetLocal","catch","SELECT_MODES","props$l","noSelectOnClick","selectMode","selectable","selectableMixin","selectedRows","selectedLastRow","isSelectable","hasSelectableRowClick","supportsSelectableRows","selectableHasSelection","selectableIsMultiSelect","selectableTableClasses","selectableTableAttrs","setSelectionHandlers","_selectedRows","selectRow","isRowSelected","selectedLastClicked","unselectRow","selectAllRows","selectableRowClasses","selectableRowAttrs","selectionHandler","stableSort$1","compareFn","normalizeValue","SORT_DIRECTIONS","props$k","labelSortAsc","labelSortClear","labelSortDesc","noFooterSorting","noLocalSorting","noSortReset","numeric","sortingMixin","localSorting","isSortable","sortable","sortCompareLocale","nullLast","sortNullLast","sortCompare","localeOptions","sortCompareOptions","usage","sortByFormatted","_ref$sortBy","_ref$formatter","_ref$locale","_ref$localeOptions","_ref$nullLast","aa","bb","localeCompare","defaultSortCompare","handleSort","isFoot","sortChanged","toggleLocalSortDesc","sortDirection","sortKey","sortTheadThClasses","sortIconLeft","sortTheadThAttrs","_field$sortKey","sortTheadThLabel","labelSorting","props$j","stackedMixin","isStackedAlways","stackedTableClasses","props$i","bordered","borderless","captionTop","noBorderCollapse","outlined","responsive","stickyHeader","tableClass","tableRendererMixin","getBvTable","isTableSimple","wrapperClasses","wrapperStyles","maxHeight","tableClasses","tableAttrs","ariaAttrs","_safeVueInstance3","renderThead","renderTbody","renderTfoot","$table","props$h","tbodyTransitionHandlers","tbodyTransitionProps","BTbody","bvTable","isTransitionGroup","tbodyAttrs","tbodyProps","nativeOn","TABLE_TAG_NAMES","filterEvent","textSelectionActive","getSelection","containsNode","props$g","BTh","props$f","detailsTdClass","tbodyRowMixin","getTdValues","tdValue","getThValues","thValue","getFormattedValue","toggleDetailsFactory","hasDetailsSlot","rowHovered","tbodyRowEventStopped","emitTbodyRowEvent","rowUnhovered","renderTbodyRowCell","colIndex","rowIndex","isRowHeader","cellTag","cellVariant","tdClass","thAttr","tdAttr","unformatted","toggleDetails","detailsShowing","rowSelected","$_bodyFieldSlotNameCache","renderTbodyRow","rowShowDetails","hasRowClickHandler","$rows","detailsId","$tds","ariaRowIndex","primaryKeyValue","rowKey","rowId","selectableClasses","selectableAttrs","userTrClasses","userTrAttrs","detailsScope","$details","userDetailsTrClasses","userDetailsTrAttrs","getCellSlotName","props$e","tbodyClass","tbodyMixin","getTbodyTrs","tbody","trs","tr","getTbodyTrIndex","onTbodyRowKeydown","onTBodyRowClicked","onTbodyRowMiddleMouseRowClicked","which","onTbodyRowContextmenu","onTbodyRowDblClicked","renderTopRow","$busy","defaultSlotName","lowercaseSlotName","handlers","auxclick","contextmenu","dblclick","props$d","BTfoot","tfootClasses","tfootAttrs","props$c","footClone","footRowVariant","tfootClass","tfootTrClass","tfootMixin","renderTFootCustom","props$b","BThead","theadClasses","theadAttrs","getHeadSlotName","getFootSlotName","props$a","headRowVariant","theadClass","theadTrClass","theadMixin","fieldClasses","thClass","headClicked","hasHeadClickListener","headerTitle","sortAttrs","sortClass","sortLabel","thStyle","abbr","headerAbbr","slotNames","column","$srLabel","$trs","topRowMixin","props$8","BTable","props$7","BTableLite","props$6","BTableSimple","TableLitePlugin","TableSimplePlugin","TablePlugin","isPositiveNumber","props$5","showFooter","tableProps","BSkeletonTable","$th","$thTr","$td","$tdTr","$tbody","$thead","$tfoot","props$4","loading","BSkeletonWrapper","SkeletonPlugin","SpinnerPlugin","_makeModelMixin$1","modelMixin$1","modelProps$1","MODEL_PROP_NAME$1","MODEL_EVENT_NAME$1","notDisabled","tab","BVTabButton","getBvTabs","posInSet","setSize","bvTabs","_this$tab","localActive","titleItemClass","titleLinkClass","titleLinkAttributes","$link","activeNavItemClass","props$3","activeTabClass","card","navClass","navWrapperClass","noNavStyle","BTabs","currentTab","registeredTabs","localNavClass","$tab","activateTab","previousTab","nextTab","updateTabs","registerTab","unregisterTab","$t","getTabs","$tabs","getButtonForTab","updateButton","$forceUpdate","tabEvent","deactivateTab","focusButton","emitTabClick","clickTab","firstTab","currentIndex","lastTab","$activeTab","$fallbackTab","_on","controlledBy","props$2","TabsPlugin","BTab","_isTab","tabClasses","buttonId","computedNoFade","computedLazy","activate","deactivate","TimePlugin","_typeof","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_nonIterableSpread","inBrowser","pick","acc","transports","sources","Wormhole","trackInstances","open","transport","passengers","_transport$order","Infinity","newTransport","freeze","$_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","newVal","oldVal","temp","newPassengers","combinePassengers","noWrapper","_id$1","portalProps","targetProps","bail","mountTo","targetSlim","targetSlotProps","targetTag","portalTarget","mountEl","_watch","VuePlugin","DefaultTransition","props$1","ariaAtomic","BToaster","doRender","dead","staticName","$toaster","$target","_makeModelMixin","modelMixin","modelProps","MODEL_PROP_NAME","MODEL_EVENT_NAME","appendToast","autoHideDelay","isStatus","noAutoHide","solid","toastClass","toaster","BToast","isMounted","isHiding","dismissStarted","resumeDismiss","toastClasses","computedDuration","computedToaster","transitionHandlers","ensureToaster","$_dismissTimer","clearDismissTimer","setHoverHandler","startDismissTimer","onPause","onUnPause","passed","onLinkClick","hiddenEvent","makeToast","$headerContent","isStatic","$toast","BASE_PROPS","propsToSlots","toastContent","filterOptions","BVToastPlugin","BVToastPop","BvToast","toast","ToastPlugin","BV_TOOLTIP","validTriggers","htmlRE","noninteractiveRE","noFadeRE","placementRE","boundaryRE","delayRE","delayShowRE","delayHideRE","offsetRE$1","variantRE","spacesRE","applyTooltip","parseBindings$1","VBTooltipPlugin","VBTooltip","removeTooltip","TooltipPlugin","componentsPlugin","VBHoverPlugin","VBModalPlugin","SELECTOR_NAV_LINKS","SELECTOR_LIST_ITEMS","SELECTOR_DROPDOWN_ITEMS","ROOT_EVENT_NAME_ACTIVATE","Default","throttle","DefaultType","TransitionEndEvents","toType","toString$1","BVScrollspy","$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","applyScrollspy","parseBindings","VBScrollspyPlugin","VBScrollspy","dispose","removeScrollspy","VBVisiblePlugin","directivesPlugin","BootstrapVue","NAME"],"mappings":"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"}