{"version":3,"sources":["webpack:///./node_modules/bootstrap-vue/esm/components/table/helpers/mixin-bottom-row.js","webpack:///./node_modules/bootstrap-vue/esm/components/table/helpers/mixin-busy.js","webpack:///./node_modules/bootstrap-vue/esm/components/table/helpers/mixin-empty.js","webpack:///./node_modules/bootstrap-vue/esm/components/table/helpers/sanitize-row.js","webpack:///./node_modules/bootstrap-vue/esm/components/table/helpers/stringify-record-values.js","webpack:///./node_modules/bootstrap-vue/esm/components/table/helpers/mixin-filtering.js","webpack:///./node_modules/bootstrap-vue/esm/components/table/helpers/mixin-pagination.js","webpack:///./node_modules/bootstrap-vue/esm/components/table/helpers/mixin-provider.js","webpack:///./node_modules/bootstrap-vue/esm/components/table/helpers/mixin-selectable.js","webpack:///./node_modules/bootstrap-vue/esm/components/table/helpers/mixin-sorting.js","webpack:///./node_modules/bootstrap-vue/esm/components/table/helpers/default-sort-compare.js","webpack:///./node_modules/bootstrap-vue/esm/components/table/helpers/mixin-top-row.js","webpack:///./node_modules/bootstrap-vue/esm/components/table/table.js","webpack:///./node_modules/bootstrap-vue/esm/components/media/media.js","webpack:///./node_modules/bootstrap-vue/esm/components/alert/alert.js","webpack:///./node_modules/bootstrap-vue/esm/components/media/media-aside.js","webpack:///./node_modules/bootstrap-vue/esm/components/media/media-body.js","webpack:///./node_modules/bootstrap-vue/esm/components/tooltip/helpers/bv-popper.js","webpack:///./node_modules/bootstrap-vue/esm/components/tooltip/helpers/bv-tooltip-template.js","webpack:///./node_modules/bootstrap-vue/esm/components/tooltip/helpers/bv-tooltip.js","webpack:///./node_modules/bootstrap-vue/esm/components/tooltip/tooltip.js","webpack:///./node_modules/bootstrap-vue/esm/components/form-checkbox/form-checkbox.js"],"names":["bottomRowMixin","extend","props","methods","renderBottomRow","fields","this","computedFields","stacked","tbodyTrClass","tbodyTrAttr","h","$createElement","hasNormalizedSlot","staticClass","class","attrs","key","normalizeSlot","columns","length","_defineProperty","obj","value","Object","defineProperty","enumerable","configurable","writable","MODEL_PROP_NAME_BUSY","MODEL_EVENT_NAME_BUSY","busyMixin","data","localBusy","computed","computedBusy","watch","newValue","oldValue","$emit","stopIfBusy","event","renderBusy","colspan","emptyFilteredHtml","emptyFilteredText","emptyHtml","emptyText","showEmpty","emptyMixin","renderEmpty","items","computedItems","$empty","isFiltered","domProps","html","role","row","ignoreFields","includeFields","fieldsObj","arguments","undefined","formattedRow","reduce","result","field","filterByFormatted","formatter","allowedKeys","filter","array","_toConsumableArray","arr","_arrayWithoutHoles","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","TypeError","o","minLen","_arrayLikeToArray","n","prototype","toString","call","slice","constructor","name","Array","from","test","iter","Symbol","iterator","isArray","len","i","arr2","DEBOUNCE_DEPRECATED_MSG","concat","filterDebounce","String","filterFunction","filterIgnoredFields","filterIncludedFields","filteringMixin","localFilter","filterSanitize","computedFilterIgnored","identity","computedFilterIncluded","computedFilterDebounce","ms","warn","localFiltering","hasProvider","noProviderFiltering","filteredCheck","filteredItems","localItems","localFilterFn","criteria","filterFn","filterFnFactory","defaultFilterFnFactory","$_filterTimer","clearFilterTimer","deep","handler","newCriteria","_this","timeout","setTimeout","_ref","created","_this2","$nextTick","Boolean","beforeDestroy","clearTimeout","fn","item","_this3","regExp","pattern","replace","RegExp","lastIndex","computedFieldsObj","currentPage","perPage","paginationMixin","localPaging","noProviderPaging","paginatedItems","sortedItems","math","ROOT_EVENT_NAME_REFRESHED","ROOT_ACTION_EVENT_NAME_REFRESH","apiUrl","noProviderSorting","providerMixin","mixins","providerTriggerContext","ctx","sortBy","sortDesc","localSortBy","localSortDesc","_providerUpdate","mounted","listenOnRoot","id","refresh","$off","$on","clearSelected","_providerSetLocal","emitOnRoot","context","then","e","message","_props","_watch","SELECT_MODES","noSelectOnClick","selectMode","selectable","selectedVariant","selectableMixin","selectedRows","selectedLastRow","isSelectable","hasSelectableRowClick","supportsSelectableRows","selectableHasSelection","some","selectableIsMultiSelect","selectableTableClasses","selectableTableAttrs","equal","setSelectionHandlers","_selectedRows","forEach","v","idx","push","beforeMount","selectRow","index","isRowSelected","selectedLastClicked","unselectRow","selectAllRows","selectableRowClasses","variant","dark","selectableRowAttrs","on","method","selectionHandler","selected","shiftKey","ctrlKey","metaKey","a","b","_ref$sortBy","_ref$formatter","_ref$locale","locale","_ref$localeOptions","localeOptions","_ref$nullLast","nullLast","aa","get","bb","localeCompare","ownKeys","object","enumerableOnly","keys","getOwnPropertySymbols","symbols","sym","getOwnPropertyDescriptor","apply","_objectSpread","target","source","getOwnPropertyDescriptors","defineProperties","MODEL_PROP_NAME_SORT_BY","MODEL_EVENT_NAME_SORT_BY","MODEL_PROP_NAME_SORT_DESC","MODEL_EVENT_NAME_SORT_DESC","SORT_DIRECTION_ASC","SORT_DIRECTION_DESC","SORT_DIRECTION_LAST","SORT_DIRECTIONS","labelSortAsc","labelSortClear","labelSortDesc","noFooterSorting","noLocalSorting","noSortReset","numeric","sortingMixin","localSorting","isSortable","f","sortable","sortCompareLocale","sortNullLast","sortCompare","sortCompareOptions","usage","sortByFormatted","getFieldFormatter","handleSort","isFoot","sortChanged","toggleLocalSortDesc","sortDirection","sortKey","sortTheadThClasses","sortIconLeft","sortTheadThAttrs","ariaSort","sortTheadThLabel","labelSorting","topRowMixin","renderTopRow","BTable","noBody","rightAlign","tag","verticalAlign","BMedia","functional","render","slots","scopedSlots","children","$children","slotScope","$slots","$scopedSlots","$aside","right","_makeModelMixin","type","defaultValue","modelMixin","mixin","modelProps","MODEL_PROP_NAME","prop","MODEL_EVENT_NAME","parseCountDown","show","parseShow","dismissLabel","dismissible","fade","BAlert","countDown","localShow","clearCountDownInterval","$_countDownTimeout","dismiss","$alert","$dismissButton","click","noFade","BMediaAside","align","BMediaBody","AttachmentMap","AUTO","TOP","RIGHT","BOTTOM","LEFT","TOPLEFT","TOPRIGHT","RIGHTTOP","RIGHTBOTTOM","BOTTOMLEFT","BOTTOMRIGHT","LEFTTOP","LEFTBOTTOM","OffsetMap","arrowPadding","boundary","boundaryPadding","fallbackPlacement","offset","placement","BVPopper","attachment","getAttachment","templateType","popperConfig","modifiers","getOffset","flip","behavior","arrow","element","preventOverflow","padding","boundariesElement","onCreate","originalPlacement","popperPlacementChange","onUpdate","$_popper","el","popperCreate","handleDestroy","$destroy","$parent","$once","updated","updatePopper","destroyPopper","destroyed","$el","parentNode","removeChild","hide","toUpperCase","$refs","arrowOffset","width","destroy","scheduleUpdate","renderTemplate","appear","beforeEnter","afterEnter","beforeLeave","afterLeave","BVTooltipTemplate","extends","title","content","customClass","interactive","templateClasses","noninteractive","templateAttributes","$attrs","tabindex","scopedStyleAttrs","templateListeners","mouseenter","mouseleave","focusin","focusout","$title","innerHTML","ref","_makePropsConfigurabl","MODAL_SELECTOR","ROOT_EVENT_NAME_MODAL_HIDDEN","SIDEBAR_SELECTOR","CONTAINER_SELECTOR","join","DROPDOWN_CLASS","DROPDOWN_OPEN_SELECTOR","DATA_TITLE_ATTR","triggers","container","delay","disabled","BVTooltip","activeTrigger","hover","focus","computedId","computedDelay","computedTriggers","trim","toLowerCase","split","sort","isWithActiveTrigger","trigger","computedTemplateData","newTriggers","oldTriggers","unListen","listen","handleTemplateUpdate","disable","enable","$_tip","$_hoverTimeout","$_hoverState","$_visibleInterval","$_enabled","$_noop","noop","bind","getTarget","document","body","scopeId","deactivated","forceHide","setWhileOpenListeners","clearHoverTimeout","clearVisibilityInterval","destroyTemplate","getTemplate","updateData","titleUpdated","fixTitle","createTemplateAndShow","getContainer","Template","$tip","parent","propsData","getPlacementTarget","getBoundary","onTemplateShow","onTemplateShown","onTemplateHide","onTemplateHidden","handleEvent","$mount","appendChild","createElement","hideTemplate","clearActiveTriggers","localPlacementTarget","_unused","removeAriaDescribedby","restoreTitle","getTemplateElement","_this4","dropdownOpen","showEvt","buildEvent","cancelable","emitEvent","defaultPrevented","addAriaDescribedby","force","tip","hideEvt","prevHoverState","leave","getTargetId","isInModal","isDropdown","clearInterval","desc","_this5","d","options","relatedTarget","componentId","vueTarget","bvEvent","_this6","setRootListener","_this7","events","$root","doHide","doShow","doDisable","doEnable","setModalListener","setDropdownListener","visibleCheck","setOnTouchStartListener","_this8","setInterval","_this9","documentElement","__vue__","enter","eventTarget","currentTarget","toggle","_this10","_this11","MODEL_PROP_NAME_ENABLED","MODEL_EVENT_NAME_ENABLED","MODEL_PROP_NAME_SHOW","MODEL_EVENT_NAME_SHOW","BTooltip","inheritAttrs","localTitle","localContent","templateData","$props","templateTitleContent","$_toolpop","updateContent","doOpen","doClose","Component","getComponent","$toolpop","_scopeId","onShow","onShown","onHide","onHidden","onDisabled","onEnabled","setTitle","setContent","_objectSpread2","MODEL_PROP_NAME_INDETERMINATE","MODEL_EVENT_NAME_INDETERMINATE","BFormCheckbox","inject","bvGroup","default","isChecked","checked","computedLocalChecked","isRadio","setIndeterminate","computedLocalCheckedWatcher","$input","input","indeterminate","handleChange","_ref$target","uncheckedValue","localChecked","isGroup","state"],"mappings":"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","file":"js/chunk-04244344.6d1e0eda.js","sourcesContent":["import { Vue } from '../../../vue';\nimport { SLOT_NAME_BOTTOM_ROW } from '../../../constants/slots';\nimport { isFunction } from '../../../utils/inspect';\nimport { BTr } from '../tr'; // --- Props ---\n\nexport var props = {}; // --- Mixin ---\n// @vue/component\n\nexport var bottomRowMixin = Vue.extend({\n props: props,\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(tbodyTrClass) ?\n /* istanbul ignore next */\n tbodyTrClass(null, 'row-bottom') : tbodyTrClass],\n attrs: isFunction(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});","function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Vue } from '../../../vue';\nimport { MODEL_EVENT_NAME_PREFIX } from '../../../constants/events';\nimport { PROP_TYPE_BOOLEAN } from '../../../constants/props';\nimport { SLOT_NAME_TABLE_BUSY } from '../../../constants/slots';\nimport { stopEvent } from '../../../utils/events';\nimport { isFunction } from '../../../utils/inspect';\nimport { makeProp } from '../../../utils/props';\nimport { BTr } from '../tr';\nimport { BTd } from '../td'; // --- Constants ---\n\nvar MODEL_PROP_NAME_BUSY = 'busy';\nvar MODEL_EVENT_NAME_BUSY = MODEL_EVENT_NAME_PREFIX + MODEL_PROP_NAME_BUSY; // --- Props ---\n\nexport var props = _defineProperty({}, MODEL_PROP_NAME_BUSY, makeProp(PROP_TYPE_BOOLEAN, false)); // --- Mixin ---\n// @vue/component\n\nexport var busyMixin = Vue.extend({\n props: props,\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(tbodyTrClass) ?\n /* istanbul ignore next */\n tbodyTrClass(null, SLOT_NAME_TABLE_BUSY) : tbodyTrClass],\n attrs: isFunction(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});","import { Vue } from '../../../vue';\nimport { PROP_TYPE_BOOLEAN, PROP_TYPE_STRING } from '../../../constants/props';\nimport { SLOT_NAME_EMPTY, SLOT_NAME_EMPTYFILTERED, SLOT_NAME_TABLE_BUSY } from '../../../constants/slots';\nimport { htmlOrText } from '../../../utils/html';\nimport { isFunction } from '../../../utils/inspect';\nimport { makeProp } from '../../../utils/props';\nimport { BTr } from '../tr';\nimport { BTd } from '../td'; // --- Props ---\n\nexport var props = {\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\nexport var emptyMixin = Vue.extend({\n props: props,\n methods: {\n renderEmpty: function renderEmpty() {\n var items = this.computedItems;\n var h = this.$createElement;\n var $empty = h();\n\n if (this.showEmpty && (!items || items.length === 0) && !(this.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(tbodyTrClass) ?\n /* istanbul ignore next */\n tbodyTrClass(null, 'row-empty') : tbodyTrClass],\n attrs: isFunction(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});","import { arrayIncludes } from '../../../utils/array';\nimport { isArray, isFunction } from '../../../utils/inspect';\nimport { clone, keys, pick } from '../../../utils/object';\nimport { IGNORED_FIELD_KEYS } from './constants'; // Return a copy of a row after all reserved fields have been filtered out\n\nexport 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(filterByFormatted) ?\n /* istanbul ignore next */\n filterByFormatted : filterByFormatted ?\n /* istanbul ignore next */\n field.formatter : null;\n\n if (isFunction(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(formattedRow, allowedKeys);\n};","import { isObject } from '../../../utils/inspect';\nimport { stringifyObjectValues } from '../../../utils/stringify-object-values';\nimport { sanitizeRow } from './sanitize-row'; // Stringifies the values of a record, ignoring any special top level field keys\n// TODO: Add option to stringify `scopedSlot` items\n\nexport var stringifyRecordValues = function stringifyRecordValues(row, ignoreFields, includeFields, fieldsObj) {\n return isObject(row) ? stringifyObjectValues(sanitizeRow(row, ignoreFields, includeFields, fieldsObj)) :\n /* istanbul ignore next */\n '';\n};","function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { 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\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nimport { Vue } from '../../../vue';\nimport { NAME_TABLE } from '../../../constants/components';\nimport { EVENT_NAME_FILTERED } from '../../../constants/events';\nimport { PROP_TYPE_REG_EXP, PROP_TYPE_ARRAY_OBJECT_STRING, PROP_TYPE_FUNCTION, PROP_TYPE_ARRAY, PROP_TYPE_NUMBER_STRING } from '../../../constants/props';\nimport { RX_DIGITS, RX_SPACES } from '../../../constants/regex';\nimport { concat } from '../../../utils/array';\nimport { cloneDeep } from '../../../utils/clone-deep';\nimport { identity } from '../../../utils/identity';\nimport { isFunction, isString, isRegExp } from '../../../utils/inspect';\nimport { looseEqual } from '../../../utils/loose-equal';\nimport { toInteger } from '../../../utils/number';\nimport { hasPropFunction, makeProp } from '../../../utils/props';\nimport { escapeRegExp } from '../../../utils/string';\nimport { warn } from '../../../utils/warn';\nimport { stringifyRecordValues } from './stringify-record-values'; // --- Constants ---\n\nvar DEBOUNCE_DEPRECATED_MSG = 'Prop \"filter-debounce\" is deprecated. Use the debounce feature of \"\" instead.'; // --- Props ---\n\nexport var props = {\n filter: makeProp([].concat(_toConsumableArray(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\nexport var filteringMixin = Vue.extend({\n props: props,\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(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});","import { Vue } from '../../../vue';\nimport { PROP_TYPE_NUMBER_STRING } from '../../../constants/props';\nimport { mathMax } from '../../../utils/math';\nimport { toInteger } from '../../../utils/number';\nimport { makeProp } from '../../../utils/props'; // --- Props ---\n\nexport var props = {\n currentPage: makeProp(PROP_TYPE_NUMBER_STRING, 1),\n perPage: makeProp(PROP_TYPE_NUMBER_STRING, 0)\n}; // --- Mixin ---\n// @vue/component\n\nexport var paginationMixin = Vue.extend({\n props: props,\n computed: {\n localPaging: function localPaging() {\n return this.hasProvider ? !!this.noProviderPaging : true;\n },\n paginatedItems: function paginatedItems() {\n var items = this.sortedItems || this.filteredItems || this.localItems || [];\n var currentPage = mathMax(toInteger(this.currentPage, 1), 1);\n var perPage = mathMax(toInteger(this.perPage, 0), 0); // Apply local pagination\n\n if (this.localPaging && perPage) {\n // Grab the current page of data (which may be past filtered items limit)\n items = items.slice((currentPage - 1) * perPage, currentPage * perPage);\n } // Return the items to display in the table\n\n\n return items;\n }\n }\n});","import { Vue } from '../../../vue';\nimport { NAME_TABLE } from '../../../constants/components';\nimport { EVENT_NAME_REFRESH, EVENT_NAME_REFRESHED } from '../../../constants/events';\nimport { PROP_TYPE_ARRAY_FUNCTION, PROP_TYPE_BOOLEAN, PROP_TYPE_STRING } from '../../../constants/props';\nimport { getRootActionEventName, getRootEventName } from '../../../utils/events';\nimport { isArray, isFunction, isPromise } from '../../../utils/inspect';\nimport { looseEqual } from '../../../utils/loose-equal';\nimport { clone } from '../../../utils/object';\nimport { makeProp } from '../../../utils/props';\nimport { warn } from '../../../utils/warn';\nimport { listenOnRootMixin } from '../../../mixins/listen-on-root'; // --- Constants ---\n\nvar ROOT_EVENT_NAME_REFRESHED = getRootEventName(NAME_TABLE, EVENT_NAME_REFRESHED);\nvar ROOT_ACTION_EVENT_NAME_REFRESH = getRootActionEventName(NAME_TABLE, EVENT_NAME_REFRESH); // --- Props ---\n\nexport var props = {\n // Passed to the context object\n // Not used by `` 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\nexport var providerMixin = Vue.extend({\n mixins: [listenOnRootMixin],\n props: props,\n computed: {\n hasProvider: function hasProvider() {\n return isFunction(this.items);\n },\n providerTriggerContext: function providerTriggerContext() {\n // Used to trigger the provider function via a watcher. Only the fields that\n // are needed for triggering a provider update are included. Note that the\n // regular this.context is sent to the provider during fetches though, as they\n // may need all the prop info.\n var ctx = {\n apiUrl: this.apiUrl,\n filter: null,\n sortBy: null,\n sortDesc: null,\n perPage: null,\n currentPage: null\n };\n\n if (!this.noProviderFiltering) {\n // Either a string, or could be an object or array.\n ctx.filter = this.localFilter;\n }\n\n if (!this.noProviderSorting) {\n ctx.sortBy = this.localSortBy;\n ctx.sortDesc = this.localSortDesc;\n }\n\n if (!this.noProviderPaging) {\n ctx.perPage = this.perPage;\n ctx.currentPage = this.currentPage;\n }\n\n return clone(ctx);\n }\n },\n watch: {\n // Provider update triggering\n items: function items(newValue) {\n // If a new provider has been specified, trigger an update\n if (this.hasProvider || isFunction(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 items = this.items,\n refresh = this.refresh; // Public Method: Force a refresh of the provider function\n\n this.$off(EVENT_NAME_REFRESHED, refresh);\n\n if (this.computedBusy) {\n // Can't force an update when forced busy by user (busy prop === true)\n if (this.localBusy && this.hasProvider) {\n // But if provider running (localBusy), re-schedule refresh once `refreshed` emitted\n this.$on(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 (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});","function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Vue } from '../../../vue';\nimport { EVENT_NAME_CONTEXT_CHANGED, EVENT_NAME_FILTERED, EVENT_NAME_ROW_CLICKED, EVENT_NAME_ROW_SELECTED } from '../../../constants/events';\nimport { PROP_TYPE_BOOLEAN, PROP_TYPE_STRING } from '../../../constants/props';\nimport { arrayIncludes, createArray } from '../../../utils/array';\nimport { identity } from '../../../utils/identity';\nimport { isArray, isNumber } from '../../../utils/inspect';\nimport { looseEqual } from '../../../utils/loose-equal';\nimport { mathMax, mathMin } from '../../../utils/math';\nimport { makeProp } from '../../../utils/props';\nimport { sanitizeRow } from './sanitize-row'; // --- Constants ---\n\nvar SELECT_MODES = ['range', 'multi', 'single']; // --- Props ---\n\nexport var props = {\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\nexport var selectableMixin = Vue.extend({\n props: props,\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 return {\n // TODO:\n // Should this attribute not be included when no-select-on-click is set\n // since this attribute implies keyboard navigation?\n 'aria-multiselectable': !this.isSelectable ? null : this.selectableIsMultiSelect ? 'true' : 'false'\n };\n }\n },\n watch: {\n computedItems: function computedItems(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 this.selectedLastRow = selected ? index : -1;\n }\n }\n\n selectedRows[index] = selected;\n this.selectedRows = selectedRows;\n }\n }\n});","var _props, _watch;\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Vue } from '../../../vue';\nimport { EVENT_NAME_HEAD_CLICKED, EVENT_NAME_SORT_CHANGED, MODEL_EVENT_NAME_PREFIX } from '../../../constants/events';\nimport { PROP_TYPE_ARRAY_STRING, PROP_TYPE_BOOLEAN, PROP_TYPE_FUNCTION, PROP_TYPE_OBJECT, PROP_TYPE_STRING } from '../../../constants/props';\nimport { arrayIncludes } from '../../../utils/array';\nimport { isFunction, isUndefinedOrNull } from '../../../utils/inspect';\nimport { makeProp } from '../../../utils/props';\nimport { stableSort } from '../../../utils/stable-sort';\nimport { trim } from '../../../utils/string';\nimport { defaultSortCompare } from './default-sort-compare'; // --- Constants ---\n\nvar MODEL_PROP_NAME_SORT_BY = 'sortBy';\nvar MODEL_EVENT_NAME_SORT_BY = MODEL_EVENT_NAME_PREFIX + MODEL_PROP_NAME_SORT_BY;\nvar MODEL_PROP_NAME_SORT_DESC = 'sortDesc';\nvar MODEL_EVENT_NAME_SORT_DESC = MODEL_EVENT_NAME_PREFIX + MODEL_PROP_NAME_SORT_DESC;\nvar SORT_DIRECTION_ASC = 'asc';\nvar SORT_DIRECTION_DESC = 'desc';\nvar SORT_DIRECTION_LAST = 'last';\nvar SORT_DIRECTIONS = [SORT_DIRECTION_ASC, SORT_DIRECTION_DESC, SORT_DIRECTION_LAST]; // --- Props ---\n\nexport var props = (_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\nexport var sortingMixin = Vue.extend({\n props: props,\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 sortBy = this.localSortBy,\n sortDesc = this.localSortDesc,\n locale = this.sortCompareLocale,\n nullLast = this.sortNullLast,\n sortCompare = this.sortCompare,\n localSorting = this.localSorting;\n var items = (this.filteredItems || this.localItems || []).slice();\n\n var localeOptions = _objectSpread(_objectSpread({}, 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(sortByFormatted) ?\n /* istanbul ignore next */\n sortByFormatted : sortByFormatted ? this.getFieldFormatter(sortBy) : undefined; // `stableSort` returns a new array, and leaves the original array intact\n\n return stableSort(items, function (a, b) {\n var result = null; // Call user provided `sortCompare` routine first\n\n if (isFunction(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 = {\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, 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, 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, \"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, \"localSortBy\", function localSortBy(newValue, oldValue) {\n if (newValue !== oldValue) {\n this.$emit(MODEL_EVENT_NAME_SORT_BY, newValue);\n }\n }), _watch),\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 {// sortDirection === 'last'\n // Leave at last sort direction from previous column\n }\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 if (!this.isSortable || isFoot && this.noFooterSorting) {\n // No attributes if not a sortable table\n return {};\n }\n\n var sortable = field.sortable; // Assemble the aria-sort attribute value\n\n var ariaSort = sortable && this.localSortBy === key ? this.localSortDesc ? 'descending' : 'ascending' : sortable ? 'none' : null; // Return the attribute\n\n return {\n 'aria-sort': ariaSort\n };\n },\n sortTheadThLabel: function sortTheadThLabel(key, field, isFoot) {\n // A label to be placed in an `.sr-only` element in the header cell\n if (!this.isSortable || isFoot && this.noFooterSorting) {\n // No label if not a sortable table\n return null;\n }\n\n var sortable = field.sortable; // The correctness of these labels is very important for screen-reader users.\n\n var labelSorting = '';\n\n if (sortable) {\n if (this.localSortBy === key) {\n // currently sorted sortable column.\n labelSorting = this.localSortDesc ? this.labelSortAsc : this.labelSortDesc;\n } else {\n // Not currently sorted sortable column.\n // Not using nested ternary's here for clarity/readability\n // Default for ariaLabel\n labelSorting = this.localSortDesc ? this.labelSortDesc : this.labelSortAsc; // Handle sortDirection setting\n\n var sortDirection = this.sortDirection || field.sortDirection;\n\n if (sortDirection === SORT_DIRECTION_ASC) {\n labelSorting = this.labelSortAsc;\n } else if (sortDirection === SORT_DIRECTION_DESC) {\n labelSorting = this.labelSortDesc;\n }\n }\n } else if (!this.noSortReset) {\n // Non sortable column\n labelSorting = this.localSortBy ? this.labelSortClear : '';\n } // Return the sr-only sort label or null if no label\n\n\n return trim(labelSorting) || null;\n }\n }\n});","import { get } from '../../../utils/get';\nimport { isDate, isFunction, isNumber, isNumeric, isUndefinedOrNull } from '../../../utils/inspect';\nimport { toFloat } from '../../../utils/number';\nimport { stringifyObjectValues } from '../../../utils/stringify-object-values';\n\nvar normalizeValue = function normalizeValue(value) {\n if (isUndefinedOrNull(value)) {\n return '';\n }\n\n if (isNumeric(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\nexport 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(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};","import { Vue } from '../../../vue';\nimport { SLOT_NAME_TOP_ROW } from '../../../constants/slots';\nimport { isFunction } from '../../../utils/inspect';\nimport { BTr } from '../tr'; // --- Props ---\n\nexport var props = {}; // --- Mixin ---\n// @vue/component\n\nexport var topRowMixin = Vue.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(tbodyTrClass) ? tbodyTrClass(null, 'row-top') : tbodyTrClass],\n attrs: isFunction(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});","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Vue } from '../../vue';\nimport { NAME_TABLE } from '../../constants/components';\nimport { sortKeys } from '../../utils/object';\nimport { makePropsConfigurable } from '../../utils/props';\nimport { attrsMixin } from '../../mixins/attrs';\nimport { hasListenerMixin } from '../../mixins/has-listener';\nimport { idMixin, props as idProps } from '../../mixins/id';\nimport { normalizeSlotMixin } from '../../mixins/normalize-slot';\nimport { bottomRowMixin, props as bottomRowProps } from './helpers/mixin-bottom-row';\nimport { busyMixin, props as busyProps } from './helpers/mixin-busy';\nimport { captionMixin, props as captionProps } from './helpers/mixin-caption';\nimport { colgroupMixin, props as colgroupProps } from './helpers/mixin-colgroup';\nimport { emptyMixin, props as emptyProps } from './helpers/mixin-empty';\nimport { filteringMixin, props as filteringProps } from './helpers/mixin-filtering';\nimport { itemsMixin, props as itemsProps } from './helpers/mixin-items';\nimport { paginationMixin, props as paginationProps } from './helpers/mixin-pagination';\nimport { providerMixin, props as providerProps } from './helpers/mixin-provider';\nimport { selectableMixin, props as selectableProps } from './helpers/mixin-selectable';\nimport { sortingMixin, props as sortingProps } from './helpers/mixin-sorting';\nimport { stackedMixin, props as stackedProps } from './helpers/mixin-stacked';\nimport { tableRendererMixin, props as tableRendererProps } from './helpers/mixin-table-renderer';\nimport { tbodyMixin, props as tbodyProps } from './helpers/mixin-tbody';\nimport { tfootMixin, props as tfootProps } from './helpers/mixin-tfoot';\nimport { theadMixin, props as theadProps } from './helpers/mixin-thead';\nimport { topRowMixin, props as topRowProps } from './helpers/mixin-top-row'; // --- Props ---\n\nexport var props = makePropsConfigurable(sortKeys(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({}, idProps), bottomRowProps), busyProps), captionProps), colgroupProps), emptyProps), filteringProps), itemsProps), paginationProps), providerProps), selectableProps), sortingProps), stackedProps), tableRendererProps), tbodyProps), tfootProps), theadProps), topRowProps)), NAME_TABLE); // --- Main component ---\n// @vue/component\n\nexport var BTable = /*#__PURE__*/Vue.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 // Render function is provided by `tableRendererMixin`\n\n});","import { Vue, mergeData } from '../../vue';\nimport { NAME_MEDIA } from '../../constants/components';\nimport { PROP_TYPE_BOOLEAN, PROP_TYPE_STRING } from '../../constants/props';\nimport { SLOT_NAME_ASIDE, SLOT_NAME_DEFAULT } from '../../constants/slots';\nimport { normalizeSlot } from '../../utils/normalize-slot';\nimport { makeProp, makePropsConfigurable } from '../../utils/props';\nimport { BMediaAside } from './media-aside';\nimport { BMediaBody } from './media-body'; // --- Props ---\n\nexport var props = 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\nexport var BMedia = /*#__PURE__*/Vue.extend({\n name: NAME_MEDIA,\n functional: true,\n props: props,\n render: function render(h, _ref) {\n var props = _ref.props,\n data = _ref.data,\n slots = _ref.slots,\n scopedSlots = _ref.scopedSlots,\n 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, mergeData(data, {\n staticClass: 'media'\n }), $children);\n }\n});","var _watch;\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { COMPONENT_UID_KEY, Vue } from '../../vue';\nimport { NAME_ALERT } from '../../constants/components';\nimport { EVENT_NAME_DISMISSED, EVENT_NAME_DISMISS_COUNT_DOWN } from '../../constants/events';\nimport { PROP_TYPE_BOOLEAN, PROP_TYPE_BOOLEAN_NUMBER_STRING, PROP_TYPE_STRING } from '../../constants/props';\nimport { SLOT_NAME_DISMISS } from '../../constants/slots';\nimport { requestAF } from '../../utils/dom';\nimport { isBoolean, isNumeric } from '../../utils/inspect';\nimport { makeModelMixin } from '../../utils/model';\nimport { toInteger } from '../../utils/number';\nimport { sortKeys } from '../../utils/object';\nimport { makeProp, makePropsConfigurable } from '../../utils/props';\nimport { normalizeSlotMixin } from '../../mixins/normalize-slot';\nimport { BButtonClose } from '../button/button-close';\nimport { BVTransition } from '../transition/bv-transition'; // --- Constants ---\n\nvar _makeModelMixin = makeModelMixin('show', {\n type: PROP_TYPE_BOOLEAN_NUMBER_STRING,\n defaultValue: false\n}),\n modelMixin = _makeModelMixin.mixin,\n modelProps = _makeModelMixin.props,\n MODEL_PROP_NAME = _makeModelMixin.prop,\n MODEL_EVENT_NAME = _makeModelMixin.event; // --- Helper methods ---\n// Convert `show` value to a number\n\n\nvar 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\nvar 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\nexport var props = makePropsConfigurable(sortKeys(_objectSpread(_objectSpread({}, modelProps), {}, {\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\nexport var BAlert = /*#__PURE__*/Vue.extend({\n name: NAME_ALERT,\n mixins: [modelMixin, normalizeSlotMixin],\n props: props,\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])\n };\n },\n watch: (_watch = {}, _defineProperty(_watch, MODEL_PROP_NAME, function (newValue) {\n this.countDown = parseCountDown(newValue);\n this.localShow = parseShow(newValue);\n }), _defineProperty(_watch, \"countDown\", function countDown(newValue) {\n var _this = this;\n\n this.clearCountDownInterval();\n var show = this[MODEL_PROP_NAME]; // Ignore if `show` transitions to a boolean value\n\n if (isNumeric(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, 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, \"localShow\", function localShow(newValue) {\n var show = this[MODEL_PROP_NAME]; // Only emit dismissed events for dismissible or auto-dismissing alerts\n\n if (!newValue && (this.dismissible || isNumeric(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(show) && show !== newValue) {\n this.$emit(MODEL_EVENT_NAME, newValue);\n }\n }), _watch),\n created: function created() {\n // Create private non-reactive props\n this.$_filterTimer = null;\n var show = this[MODEL_PROP_NAME];\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});","function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Vue, mergeData } from '../../vue';\nimport { NAME_MEDIA_ASIDE } from '../../constants/components';\nimport { PROP_TYPE_BOOLEAN, PROP_TYPE_STRING } from '../../constants/props';\nimport { makeProp, makePropsConfigurable } from '../../utils/props'; // --- Props ---\n\nexport var props = 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\nexport var BMediaAside = /*#__PURE__*/Vue.extend({\n name: NAME_MEDIA_ASIDE,\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 verticalAlign = props.verticalAlign;\n var align = verticalAlign === 'top' ? 'start' : verticalAlign === 'bottom' ? 'end' :\n /* istanbul ignore next */\n verticalAlign;\n return h(props.tag, mergeData(data, {\n staticClass: 'media-aside',\n class: _defineProperty({\n 'media-aside-right': props.right\n }, \"align-self-\".concat(align), align)\n }), children);\n }\n});","import { Vue, mergeData } from '../../vue';\nimport { NAME_MEDIA_BODY } from '../../constants/components';\nimport { PROP_TYPE_STRING } from '../../constants/props';\nimport { makeProp, makePropsConfigurable } from '../../utils/props'; // --- Props ---\n\nexport var props = makePropsConfigurable({\n tag: makeProp(PROP_TYPE_STRING, 'div')\n}, NAME_MEDIA_BODY); // --- Main component ---\n// @vue/component\n\nexport var BMediaBody = /*#__PURE__*/Vue.extend({\n name: NAME_MEDIA_BODY,\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 return h(props.tag, mergeData(data, {\n staticClass: 'media-body'\n }), children);\n }\n});","// Base on-demand component for tooltip / popover templates\n//\n// Currently:\n// Responsible for positioning and transitioning the template\n// Templates are only instantiated when shown, and destroyed when hidden\n//\nimport Popper from 'popper.js';\nimport { Vue } from '../../../vue';\nimport { NAME_POPPER } from '../../../constants/components';\nimport { EVENT_NAME_HIDDEN, EVENT_NAME_HIDE, EVENT_NAME_SHOW, EVENT_NAME_SHOWN, HOOK_EVENT_NAME_DESTROYED } from '../../../constants/events';\nimport { PROP_TYPE_ARRAY_STRING, PROP_TYPE_NUMBER_STRING, PROP_TYPE_STRING } from '../../../constants/props';\nimport { HTMLElement, SVGElement } from '../../../constants/safe-types';\nimport { getCS, requestAF, select } from '../../../utils/dom';\nimport { toFloat } from '../../../utils/number';\nimport { makeProp } from '../../../utils/props';\nimport { BVTransition } from '../../transition/bv-transition'; // --- Constants ---\n\nvar 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};\nvar 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\nexport var props = {\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\nexport var BVPopper = /*#__PURE__*/Vue.extend({\n name: NAME_POPPER,\n props: props,\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.$parent.$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});","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Vue } from '../../../vue';\nimport { NAME_TOOLTIP_TEMPLATE } from '../../../constants/components';\nimport { EVENT_NAME_FOCUSIN, EVENT_NAME_FOCUSOUT, EVENT_NAME_MOUSEENTER, EVENT_NAME_MOUSELEAVE } from '../../../constants/events';\nimport { PROP_TYPE_BOOLEAN, PROP_TYPE_STRING } from '../../../constants/props';\nimport { isFunction } from '../../../utils/inspect';\nimport { makeProp } from '../../../utils/props';\nimport { scopedStyleMixin } from '../../../mixins/scoped-style';\nimport { BVPopper } from './bv-popper'; // --- Props ---\n\nexport var props = {\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\nexport var BVTooltipTemplate = /*#__PURE__*/Vue.extend({\n name: NAME_TOOLTIP_TEMPLATE,\n extends: BVPopper,\n mixins: [scopedStyleMixin],\n props: props,\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 _objectSpread(_objectSpread({}, this.$parent.$parent.$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(title) ? title({}) : title; // Directive versions only\n\n var domProps = this.html && !isFunction(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});","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n// Tooltip \"Class\" (Built as a renderless Vue instance)\n//\n// Handles trigger events, etc.\n// Instantiates template on demand\nimport { COMPONENT_UID_KEY, Vue } from '../../../vue';\nimport { NAME_MODAL, NAME_TOOLTIP_HELPER } from '../../../constants/components';\nimport { EVENT_NAME_DISABLE, EVENT_NAME_DISABLED, EVENT_NAME_ENABLE, EVENT_NAME_ENABLED, EVENT_NAME_FOCUSIN, EVENT_NAME_FOCUSOUT, EVENT_NAME_HIDDEN, EVENT_NAME_HIDE, EVENT_NAME_MOUSEENTER, EVENT_NAME_MOUSELEAVE, EVENT_NAME_SHOW, EVENT_NAME_SHOWN, EVENT_OPTIONS_NO_CAPTURE, HOOK_EVENT_NAME_BEFORE_DESTROY, HOOK_EVENT_NAME_DESTROYED } from '../../../constants/events';\nimport { arrayIncludes, concat, from as arrayFrom } from '../../../utils/array';\nimport { attemptFocus, closest, contains, getAttr, getById, hasAttr, hasClass, isDisabled, isElement, isVisible, removeAttr, requestAF, select, setAttr } from '../../../utils/dom';\nimport { eventOff, eventOn, eventOnOff, getRootActionEventName, getRootEventName } from '../../../utils/events';\nimport { getScopeId } from '../../../utils/get-scope-id';\nimport { identity } from '../../../utils/identity';\nimport { isFunction, isNumber, isPlainObject, isString, isUndefined, isUndefinedOrNull } from '../../../utils/inspect';\nimport { looseEqual } from '../../../utils/loose-equal';\nimport { mathMax } from '../../../utils/math';\nimport { noop } from '../../../utils/noop';\nimport { toInteger } from '../../../utils/number';\nimport { keys } from '../../../utils/object';\nimport { warn } from '../../../utils/warn';\nimport { BvEvent } from '../../../utils/bv-event.class';\nimport { listenOnRootMixin } from '../../../mixins/listen-on-root';\nimport { BVTooltipTemplate } from './bv-tooltip-template'; // --- Constants ---\n// Modal container selector for appending tooltip/popover\n\nvar MODAL_SELECTOR = '.modal-content'; // Modal `$root` hidden event\n\nvar ROOT_EVENT_NAME_MODAL_HIDDEN = getRootEventName(NAME_MODAL, EVENT_NAME_HIDDEN); // Sidebar container selector for appending tooltip/popover\n\nvar SIDEBAR_SELECTOR = '.b-sidebar'; // For finding the container to append to\n\nvar CONTAINER_SELECTOR = [MODAL_SELECTOR, SIDEBAR_SELECTOR].join(', '); // For dropdown sniffing\n\nvar DROPDOWN_CLASS = 'dropdown';\nvar DROPDOWN_OPEN_SELECTOR = '.dropdown-menu.show'; // Data attribute to temporary store the `title` attribute's value\n\nvar 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\nvar 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\nexport var BVTooltip = /*#__PURE__*/Vue.extend({\n name: NAME_TOOLTIP_HELPER,\n mixins: [listenOnRootMixin],\n data: function data() {\n return _objectSpread(_objectSpread({}, 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.$parent) {\n this.$parent.$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.$parent); // 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 = new Template({\n parent: this,\n // The following is not reactive to changes in the props data\n propsData: {\n // These values cannot be changed while template is showing\n id: this.computedId,\n html: this.html,\n placement: this.placement,\n fallbackPlacement: this.fallbackPlacement,\n target: this.getPlacementTarget(),\n boundary: this.getBoundary(),\n // Ensure the following are integers\n offset: toInteger(this.offset, 0),\n arrowPadding: toInteger(this.arrowPadding, 0),\n boundaryPadding: toInteger(this.boundaryPadding, 0)\n }\n }); // We set the initial reactive data (values that can be changed while open)\n\n this.handleTemplateUpdate(); // Template transition phase events (handled once only)\n // When the template has mounted, but not visibly shown yet\n\n $tip.$once(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 showEvt = this.buildEvent(EVENT_NAME_SHOW, {\n cancelable: true\n });\n this.emitEvent(showEvt); // Don't show if event cancelled\n\n /* istanbul ignore if */\n\n if (showEvt.defaultPrevented) {\n // Destroy the template (if for some reason it was created)\n this.destroyTemplate();\n return;\n } // Fix the title attribute on target\n\n\n this.fixTitle(); // Set aria-describedby on target\n\n this.addAriaDescribedby(); // Create and show the tooltip\n\n this.createTemplateAndShow();\n },\n hide: function hide() {\n var force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n // Hide the tooltip\n var tip = this.getTemplateElement();\n /* istanbul ignore if */\n\n if (!tip || !this.localShow) {\n this.restoreTitle();\n return;\n } // Emit cancelable BvEvent 'hide'\n // We disable cancelling if `force` is true\n\n\n var hideEvt = this.buildEvent(EVENT_NAME_HIDE, {\n cancelable: !force\n });\n this.emitEvent(hideEvt);\n /* istanbul ignore if: ignore for now */\n\n if (hideEvt.defaultPrevented) {\n // Don't hide if event cancelled\n return;\n } // Tell the template to hide\n\n\n this.hideTemplate();\n },\n forceHide: function forceHide() {\n // Forcefully hides/destroys the template, regardless of any active triggers\n var tip = this.getTemplateElement();\n\n if (!tip || !this.localShow) {\n /* istanbul ignore next */\n return;\n } // Disable while open listeners/watchers\n // This is also done in the template `hide` 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(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, _objectSpread({\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 looses focus\n\n /* istanbul ignore next */\n eventOn(el, 'focusout', _this6.handleEvent, EVENT_OPTIONS_NO_CAPTURE);\n } else if (trigger === 'hover') {\n eventOn(el, 'mouseenter', _this6.handleEvent, EVENT_OPTIONS_NO_CAPTURE);\n eventOn(el, 'mouseleave', _this6.handleEvent, EVENT_OPTIONS_NO_CAPTURE);\n }\n }, this);\n },\n\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 $root = this.$root;\n\n if ($root) {\n var method = on ? '$on' : '$off';\n var type = this.templateType;\n $root[method](getRootActionEventName(type, EVENT_NAME_HIDE), this.doHide);\n $root[method](getRootActionEventName(type, EVENT_NAME_SHOW), this.doShow);\n $root[method](getRootActionEventName(type, EVENT_NAME_DISABLE), this.doDisable);\n $root[method](getRootActionEventName(type, EVENT_NAME_ENABLE), this.doEnable);\n }\n },\n setWhileOpenListeners: function setWhileOpenListeners(on) {\n // Events that are only registered when the template is showing\n // Modal close events\n this.setModalListener(on); // Dropdown open events (if we are attached to a dropdown)\n\n this.setDropdownListener(on); // Periodic $element visibility check\n // For handling when tip target is in , tabs, carousel, etc\n\n this.visibleCheck(on); // On-touch start listeners\n\n this.setOnTouchStartListener(on);\n },\n // Handler for periodic visibility check\n visibleCheck: function visibleCheck(on) {\n var _this8 = this;\n\n this.clearVisibilityInterval();\n var target = this.getTarget();\n var tip = this.getTemplateElement();\n\n if (on) {\n this.$_visibleInterval = setInterval(function () {\n if (tip && _this8.localShow && (!target.parentNode || !isVisible(target))) {\n // Target element is no longer visible or not in DOM, so force-hide the tooltip\n _this8.forceHide();\n }\n }, 100);\n }\n },\n setModalListener: function setModalListener(on) {\n // Handle case where tooltip/target is in a modal\n if (this.isInModal()) {\n // We can listen for modal hidden events on `$root`\n this.$root[on ? '$on' : '$off'](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 arrayFrom(document.body.children).forEach(function (el) {\n eventOnOff(on, el, 'mouseover', _this9.$_noop);\n });\n }\n },\n setDropdownListener: function setDropdownListener(on) {\n var target = this.getTarget();\n\n if (!target || !this.$root || !this.isDropdown) {\n return;\n } // We can listen for dropdown shown events on its instance\n // TODO:\n // We could grab the ID from the dropdown, and listen for\n // $root events for that particular dropdown id\n // Dropdown shown and hidden events will need to emit\n // Note: Dropdown auto-ID happens in a `$nextTick()` after mount\n // So the ID lookup would need to be done in a `$nextTick()`\n\n\n if (target.__vue__) {\n target.__vue__[on ? '$on' : '$off'](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});","var _makePropsConfigurabl, _watch;\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Vue } from '../../vue';\nimport { NAME_TOOLTIP } from '../../constants/components';\nimport { EVENT_NAME_CLOSE, EVENT_NAME_DISABLE, EVENT_NAME_DISABLED, EVENT_NAME_ENABLE, EVENT_NAME_ENABLED, EVENT_NAME_HIDDEN, EVENT_NAME_HIDE, EVENT_NAME_OPEN, EVENT_NAME_SHOW, EVENT_NAME_SHOWN, MODEL_EVENT_NAME_PREFIX } from '../../constants/events';\nimport { PROP_TYPE_ARRAY_STRING, PROP_TYPE_BOOLEAN, PROP_TYPE_FUNCTION, PROP_TYPE_NUMBER_OBJECT_STRING, PROP_TYPE_NUMBER_STRING, PROP_TYPE_OBJECT, PROP_TYPE_STRING } from '../../constants/props';\nimport { HTMLElement, SVGElement } from '../../constants/safe-types';\nimport { getScopeId } from '../../utils/get-scope-id';\nimport { isUndefinedOrNull } from '../../utils/inspect';\nimport { pick } from '../../utils/object';\nimport { makeProp, makePropsConfigurable } from '../../utils/props';\nimport { normalizeSlotMixin } from '../../mixins/normalize-slot';\nimport { BVTooltip } from './helpers/bv-tooltip'; // --- Constants ---\n\nvar MODEL_PROP_NAME_ENABLED = 'disabled';\nvar MODEL_EVENT_NAME_ENABLED = MODEL_EVENT_NAME_PREFIX + MODEL_PROP_NAME_ENABLED;\nvar MODEL_PROP_NAME_SHOW = 'show';\nvar MODEL_EVENT_NAME_SHOW = MODEL_EVENT_NAME_PREFIX + MODEL_PROP_NAME_SHOW; // --- Props ---\n\nexport var props = 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\nexport var BTooltip = /*#__PURE__*/Vue.extend({\n name: NAME_TOOLTIP,\n mixins: [normalizeSlotMixin],\n inheritAttrs: false,\n props: props,\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 _objectSpread({\n title: this.localTitle,\n content: this.localContent,\n interactive: !this.noninteractive\n }, pick(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 = {}, _defineProperty(_watch, 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, MODEL_PROP_NAME_ENABLED, function (newValue) {\n if (newValue) {\n this.doDisable();\n } else {\n this.doEnable();\n }\n }), _defineProperty(_watch, \"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, \"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, \"templateTitleContent\", function templateTitleContent() {\n this.$nextTick(this.updateContent);\n }), _watch),\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.$parent); // Create the instance\n\n var $toolpop = _this2.$_toolpop = new Component({\n parent: _this2,\n // Pass down the scoped style ID\n _scopeId: scopeId || undefined\n }); // Set the initial data\n\n $toolpop.updateData(_this2.templateData); // Set listeners\n\n $toolpop.$on(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});","var _objectSpread2;\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Vue } from '../../vue';\nimport { NAME_FORM_CHECKBOX } from '../../constants/components';\nimport { EVENT_NAME_CHANGE, MODEL_EVENT_NAME_PREFIX } from '../../constants/events';\nimport { PROP_TYPE_ANY, PROP_TYPE_BOOLEAN } from '../../constants/props';\nimport { isArray } from '../../utils/inspect';\nimport { looseEqual } from '../../utils/loose-equal';\nimport { looseIndexOf } from '../../utils/loose-index-of';\nimport { sortKeys } from '../../utils/object';\nimport { makeProp, makePropsConfigurable } from '../../utils/props';\nimport { MODEL_EVENT_NAME, formRadioCheckMixin, props as formRadioCheckProps } from '../../mixins/form-radio-check'; // --- Constants ---\n\nvar MODEL_PROP_NAME_INDETERMINATE = 'indeterminate';\nvar MODEL_EVENT_NAME_INDETERMINATE = MODEL_EVENT_NAME_PREFIX + MODEL_PROP_NAME_INDETERMINATE; // --- Props ---\n\nexport var props = makePropsConfigurable(sortKeys(_objectSpread(_objectSpread({}, formRadioCheckProps), {}, (_objectSpread2 = {}, _defineProperty(_objectSpread2, MODEL_PROP_NAME_INDETERMINATE, makeProp(PROP_TYPE_BOOLEAN, false)), _defineProperty(_objectSpread2, \"switch\", makeProp(PROP_TYPE_BOOLEAN, false)), _defineProperty(_objectSpread2, \"uncheckedValue\", makeProp(PROP_TYPE_ANY, false)), _defineProperty(_objectSpread2, \"value\", makeProp(PROP_TYPE_ANY, true)), _objectSpread2))), NAME_FORM_CHECKBOX); // --- Main component ---\n// @vue/component\n\nexport var BFormCheckbox = /*#__PURE__*/Vue.extend({\n name: NAME_FORM_CHECKBOX,\n mixins: [formRadioCheckMixin],\n inject: {\n bvGroup: {\n from: 'bvCheckGroup',\n default: null\n }\n },\n props: props,\n computed: {\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, 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});"],"sourceRoot":""}