{"version":3,"sources":["webpack:///./node_modules/bootstrap-vue/esm/components/layout/form-row.js","webpack:///./node_modules/bootstrap-vue/esm/components/table/tr.js","webpack:///./node_modules/bootstrap-vue/esm/components/table/helpers/mixin-bottom-row.js","webpack:///./node_modules/bootstrap-vue/esm/components/table/td.js","webpack:///./node_modules/bootstrap-vue/esm/components/table/helpers/mixin-busy.js","webpack:///./node_modules/bootstrap-vue/esm/components/table/helpers/mixin-caption.js","webpack:///./node_modules/bootstrap-vue/esm/components/table/helpers/mixin-colgroup.js","webpack:///./node_modules/bootstrap-vue/esm/components/table/helpers/mixin-empty.js","webpack:///./node_modules/bootstrap-vue/esm/components/table/helpers/constants.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/normalize-fields.js","webpack:///./node_modules/bootstrap-vue/esm/components/table/helpers/mixin-items.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-stacked.js","webpack:///./node_modules/bootstrap-vue/esm/components/table/helpers/mixin-table-renderer.js","webpack:///./node_modules/bootstrap-vue/esm/components/table/tbody.js","webpack:///./node_modules/bootstrap-vue/esm/components/table/helpers/filter-event.js","webpack:///./node_modules/bootstrap-vue/esm/components/table/helpers/text-selection-active.js","webpack:///./node_modules/bootstrap-vue/esm/components/table/th.js","webpack:///./node_modules/bootstrap-vue/esm/components/table/helpers/mixin-tbody-row.js","webpack:///./node_modules/bootstrap-vue/esm/components/table/helpers/mixin-tbody.js","webpack:///./node_modules/bootstrap-vue/esm/components/table/tfoot.js","webpack:///./node_modules/bootstrap-vue/esm/components/table/helpers/mixin-tfoot.js","webpack:///./node_modules/bootstrap-vue/esm/components/table/thead.js","webpack:///./node_modules/bootstrap-vue/esm/components/table/helpers/mixin-thead.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/table/table-lite.js","webpack:///./node_modules/bootstrap-vue/esm/components/table/table-simple.js","webpack:///./node_modules/bootstrap-vue/esm/components/table/index.js","webpack:///./node_modules/bootstrap-vue/esm/components/link/link.js","webpack:///./node_modules/bootstrap-vue/esm/components/layout/col.js","webpack:///./node_modules/bootstrap-vue/esm/components/pagination/pagination.js","webpack:///./node_modules/bootstrap-vue/esm/components/pagination/index.js","webpack:///./node_modules/bootstrap-vue/esm/components/transition/bv-transition.js","webpack:///./node_modules/bootstrap-vue/esm/components/transporter/transporter.js","webpack:///./node_modules/bootstrap-vue/esm/components/modal/helpers/bv-modal-event.class.js","webpack:///./node_modules/bootstrap-vue/esm/components/modal/helpers/modal-manager.js","webpack:///./node_modules/bootstrap-vue/esm/components/modal/modal.js","webpack:///./node_modules/bootstrap-vue/esm/components/modal/helpers/bv-modal.js","webpack:///./node_modules/bootstrap-vue/esm/components/modal/index.js"],"names":["props","tag","BFormRow","extend","name","functional","render","h","_ref","data","children","staticClass","ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","target","i","arguments","length","source","forEach","key","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","obj","value","configurable","writable","LIGHT","DARK","variant","BTr","mixins","attrs","listeners","provide","bvTableTr","this","inject","bvTableRowGroup","default","inheritAttrs","computed","inTbody","isTbody","inThead","isThead","inTfoot","isTfoot","isDark","isStacked","isResponsive","isStickyHeader","hasStickyHeader","tableVariant","headVariant","footVariant","isRowDark","trClasses","concat","trAttrs","role","bvAttrs","class","on","bvListeners","normalizeSlot","bottomRowMixin","methods","renderBottomRow","fields","computedFields","stacked","tbodyTrClass","tbodyTrAttr","$createElement","hasNormalizedSlot","columns","colspan","rowspan","stackedHeading","stickyColumn","BTd","isStackedCell","isStickyColumn","rowVariant","computedColspan","computedRowspan","cellClasses","cellAttrs","headOrFoot","scope","$content","MODEL_PROP_NAME_BUSY","MODEL_EVENT_NAME_BUSY","busyMixin","localBusy","computedBusy","watch","newValue","oldValue","$emit","stopIfBusy","event","renderBusy","caption","captionHtml","captionMixin","captionId","safeId","renderCaption","$caption","hasCaptionSlot","id","domProps","html","ref","colgroupMixin","renderColgroup","$colgroup","emptyFilteredHtml","emptyFilteredText","emptyHtml","emptyText","showEmpty","emptyMixin","renderEmpty","items","computedItems","$empty","isFiltered","FIELD_KEY_CELL_VARIANT","FIELD_KEY_ROW_VARIANT","FIELD_KEY_SHOW_DETAILS","IGNORED_FIELD_KEYS","reduce","result","EVENT_FILTER","join","row","ignoreFields","includeFields","fieldsObj","undefined","formattedRow","field","filterByFormatted","formatter","allowedKeys","array","_toConsumableArray","arr","_arrayWithoutHoles","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","TypeError","o","minLen","_arrayLikeToArray","n","prototype","toString","call","slice","constructor","Array","from","test","iter","Symbol","iterator","isArray","len","arr2","DEBOUNCE_DEPRECATED_MSG","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","created","_this2","$nextTick","Boolean","beforeDestroy","clearTimeout","fn","item","_this3","regExp","pattern","replace","RegExp","lastIndex","computedFieldsObj","label","origFields","f","sample","k","memo","_makeModelMixin","type","defaultValue","modelMixin","mixin","modelProps","MODEL_PROP_NAME","prop","MODEL_EVENT_NAME","primaryKey","itemsMixin","$parent","paginatedItems","sortedItems","context","sortBy","localSortBy","sortDesc","localSortDesc","perPage","math","currentPage","apiUrl","mounted","getFieldFormatter","paginationMixin","localPaging","noProviderPaging","ROOT_EVENT_NAME_REFRESHED","ROOT_ACTION_EVENT_NAME_REFRESH","noProviderSorting","providerMixin","providerTriggerContext","ctx","_providerUpdate","listenOnRoot","refresh","$off","$on","clearSelected","_providerSetLocal","emitOnRoot","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","v","idx","beforeMount","selectRow","index","isRowSelected","selectedLastClicked","unselectRow","selectAllRows","selectableRowClasses","dark","selectableRowAttrs","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","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","sortable","sortCompareLocale","sortNullLast","sortCompare","sortCompareOptions","usage","sortByFormatted","handleSort","isFoot","sortChanged","toggleLocalSortDesc","sortDirection","sortKey","sortTheadThClasses","sortIconLeft","sortTheadThAttrs","ariaSort","sortTheadThLabel","labelSorting","stackedMixin","isStackedAlways","stackedTableClasses","bordered","borderless","captionTop","fixed","hover","noBorderCollapse","outlined","responsive","small","stickyHeader","striped","tableClass","tableRendererMixin","bvTable","wrapperClasses","wrapperStyles","maxHeight","tableClasses","isTableSimple","border","tableAttrs","ariaAttrs","$refs","rowCount","renderThead","renderTbody","renderTfoot","$table","style","tbodyTransitionHandlers","tbodyTransitionProps","BTbody","isTransitionGroup","tbodyAttrs","tbodyProps","nativeOn","TABLE_TAG_NAMES","el","disabled","indexOf","tagName","labelFor","input","document","sel","trim","containsNode","BTh","extends","detailsTdClass","tbodyRowMixin","getTdValues","tdValue","getThValues","thValue","getFormattedValue","toggleDetailsFactory","hasDetailsSlot","$set","rowHovered","tbodyRowEvtStopped","emitTbodyRowEvent","rowUnhovered","renderTbodyRowCell","colIndex","rowIndex","isRowHeader","formatted","cellTag","cellVariant","tdClass","thAttr","tdAttr","slotScope","unformatted","toggleDetails","detailsShowing","rowSelected","slotName","$_bodyFieldSlotNameCache","$childNodes","renderTbodyRow","rowShowDetails","hasRowClickHandler","$listeners","$rows","detailsId","$tds","map","ariaRowIndex","primaryKeyValue","rowKey","rowId","selectableClasses","selectableAttrs","userTrClasses","userTrAttrs","tabindex","mouseenter","mouseleave","refInFor","detailsScope","$details","userDetailsTrClasses","userDetailsTrAttrs","getCellSlotName","tbodyClass","tbodyMixin","getTbodyTrs","tbody","$el","trs","tr","getTbodyTrIndex","hasListener","onTbodyRowKeydown","keyCode","tabIndex","onTBodyRowClicked","shift","onTbodyRowMiddleMouseRowClicked","which","onTbodyRowContextmenu","onTbodyRowDblClicked","renderTopRow","$busy","cache","defaultSlotName","lowercaseSlotName","toLowerCase","handlers","auxclick","contextmenu","dblclick","click","keydown","$tbody","$props","BTfoot","tfootClasses","tfootAttrs","footClone","footRowVariant","tfootClass","tfootTrClass","tfootMixin","renderTFootCustom","BThead","theadClasses","theadAttrs","getHeadSlotName","getFootSlotName","headRowVariant","theadClass","theadTrClass","theadMixin","fieldClasses","thClass","headClicked","hasHeadClickListener","noop","makeCell","labelHtml","ariaLabel","headerTitle","sortAttrs","sortClass","sortLabel","thStyle","abbr","headerAbbr","title","slotNames","column","$srLabel","$cells","$trs","topRowMixin","BTable","BTableLite","BTableSimple","TableLitePlugin","components","TableSimplePlugin","TablePlugin","plugins","ROOT_EVENT_NAME_CLICKED","routerLinkProps","activeClass","append","exact","exactActiveClass","routerTag","to","nuxtLinkProps","noPrefetch","prefetch","active","href","rel","routerComponentName","BLink","computedTag","isRouterLink","computedRel","computedHref","computedProps","computedAttrs","computedListeners","onClick","_arguments","eventIsEvent","suppliedHandler","immediatePropagation","currentTarget","__vue__","propagation","focus","blur","ALIGN_SELF_VALUES","computeBreakpoint","breakpoint","className","computeBreakpointClass","breakpointPropMap","generateProps","breakpoints","breakpointCol","breakpointOffset","breakpointOrder","col","offset","order","alignSelf","cols","BCol","_classList$push","classList","_keys","c","hasColClasses","DEFAULT_PER_PAGE","DEFAULT_TOTAL_ROWS","pagination","ariaControls","totalRows","BPagination","numberOfPages","pageSizeNumberOfPages","localNumberOfPages","pageNumber","clickEvt","cancelable","vueTarget","defaultPrevented","contains","focusCurrent","makePage","pageNum","linkProps","PaginationPlugin","NO_FADE_PROPS","enterClass","enterActiveClass","enterToClass","leaveClass","leaveActiveClass","leaveToClass","FADE_PROPS","appear","mode","noFade","transProps","BVTransition","appearClass","appearActiveClass","appearToClass","css","BVTransporterTarget","abstract","nodes","vm","updatedNodes","destroyed","$nodes","text","container","BVTransporter","immediate","unmountTarget","mountTarget","$_defaultFn","$_target","updated","updateTarget","getContainer","$container","createElement","appendChild","parent","propsData","defaultFn","$scopedSlots","$slots","$destroy","_typeof","_classCallCheck","instance","Constructor","_defineProperties","descriptor","_createClass","protoProps","staticProps","_get","property","receiver","Reflect","base","_superPropBase","desc","hasOwnProperty","_getPrototypeOf","_inherits","subClass","superClass","create","_setPrototypeOf","p","setPrototypeOf","__proto__","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","Super","NewTarget","construct","_possibleConstructorReturn","self","_assertThisInitialized","ReferenceError","sham","Proxy","Date","getPrototypeOf","_BvEvent","BvModalEvent","_super","eventInit","trigger","DEFAULT_ZINDEX","SELECTOR_FIXED_CONTENT","SELECTOR_STICKY_CONTENT","SELECTOR_NAVBAR_TOGGLER","ModalManager","modals","baseZIndex","scrollbarWidth","isBodyOverflowing","modalCount","modalsAreOpen","newCount","oldCount","getScrollbarWidth","checkScrollbar","setScrollbar","body","resetScrollbar","updateModals","registerModal","modal","$once","unregisterModal","splice","_isBeingDestroyed","_isDestroyed","resetModal","getBaseZIndex","div","zIndex","removeChild","width","clientWidth","isTop","_getBCR","left","right","window","innerWidth","_paddingChangedForModal","_marginChangedForModal","actualPadding","paddingRight","actualMargin","marginRight","modalManager","TRIGGER_BACKDROP","TRIGGER_ESC","TRIGGER_FORCE","TRIGGER_TOGGLE","BUTTON_CANCEL","BUTTON_CLOSE","BUTTON_OK","BUTTONS","OBSERVER_CONFIG","subtree","childList","characterData","attributes","attributeFilter","autoFocusButton","bodyBgVariant","bodyClass","bodyTextVariant","busy","buttonSize","cancelDisabled","cancelTitle","cancelTitleHtml","cancelVariant","centered","contentClass","dialogClass","footerBgVariant","footerBorderVariant","footerClass","footerTextVariant","headerBgVariant","headerBorderVariant","headerClass","headerCloseContent","headerCloseLabel","headerCloseVariant","headerTextVariant","hideBackdrop","hideFooter","hideHeader","hideHeaderClose","ignoreEnforceFocusSelector","lazy","modalClass","noCloseOnBackdrop","noCloseOnEsc","noEnforceFocus","noStacking","okDisabled","okOnly","okTitle","okTitleHtml","okVariant","returnFocus","scrollable","size","static","titleClass","titleHtml","titleSrOnly","titleTag","BModal","isHidden","isVisible","isTransitioning","isShow","isBlock","isOpening","isClosing","ignoreBackdropClick","isModalOverflowing","modalId","modalOuterId","modalHeaderId","modalBodyId","modalTitleId","modalContentId","modalFooterId","modalBackdropId","modalClasses","fade","show","modalStyles","sbWidth","paddingLeft","display","dialogClasses","headerClasses","_ref2","titleClasses","bodyClasses","_ref3","footerClasses","_ref4","modalOuterStyle","position","cancel","onCancel","close","onClose","hide","ok","onOk","visible","computeIgnoreEnforceFocusSelector","scopedStyleAttrs","computedModalAttrs","$_observer","$_returnFocus","showHandler","hideHandler","toggleHandler","modalListener","setObserver","disconnect","content","checkModalOverflow","bind","updateModel","buildEvent","options","relatedTarget","componentId","getActiveElement","showEvt","emitEvent","doShow","hideEvt","toggle","triggerEl","activeElement","listenOnRootOnce","onBeforeEnter","setResizeEvent","onEnter","onAfterEnter","setEnforceFocus","focusFirst","onBeforeLeave","onLeave","onAfterLeave","_this4","returnFocusTo","bvEvent","onDialogMousedown","_this5","onceModalMouseup","onClickOut","onEsc","focusHandler","tabables","bottomTrap","topTrap","preventScroll","listenDocument","listenWindow","_this6","autoFocus","scrollTop","scrollHeight","documentElement","clientHeight","makeModal","$header","$modalHeader","$closeButton","textVariant","$body","$footer","$modalFooter","$cancelButton","$okButton","$modalContent","$tabTrapTop","$tabTrapBottom","$modalDialog","mousedown","$modal","directives","beforeEnter","enter","afterEnter","beforeLeave","leave","afterLeave","$backdrop","PROP_NAME","PROP_NAME_PRIV","BASE_PROPS","defaultResolver","propsToSlots","msgBoxContent","Vue","BMsgBox","parentNode","handleDestroy","$router","$route","$watch","asyncMsgBox","resolver","msgBox","Promise","resolve","reject","resolved","Error","bvModalEvt","$mount","makeMsgBox","BvModal","_vm","_root","$root","_this$_root","_len","args","_key","_this$_root2","_len2","_key2","beforeCreate","BVModalPlugin","plugin","ModalPlugin","VBModal"],"mappings":"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","file":"js/chunk-vendors~f414210c.9e4381ab.js","sourcesContent":["import { Vue, mergeData } from '../../vue';\nimport { NAME_FORM_ROW } 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_FORM_ROW); // --- Main component ---\n// @vue/component\n\nexport var BFormRow = /*#__PURE__*/Vue.extend({\n name: NAME_FORM_ROW,\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: 'form-row'\n }), children);\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_TR } from '../../constants/components';\nimport { PROP_TYPE_STRING } from '../../constants/props';\nimport { makeProp, makePropsConfigurable } from '../../utils/props';\nimport { attrsMixin } from '../../mixins/attrs';\nimport { listenersMixin } from '../../mixins/listeners';\nimport { normalizeSlotMixin } from '../../mixins/normalize-slot'; // --- Constants ---\n\nvar LIGHT = 'light';\nvar DARK = 'dark'; // --- Props ---\n\nexport var props = makePropsConfigurable({\n variant: makeProp(PROP_TYPE_STRING)\n}, NAME_TR); // --- Main component ---\n// TODO:\n// In Bootstrap v5, we won't need \"sniffing\" as table element variants properly inherit\n// to the child elements, so this can be converted to a functional component\n// @vue/component\n\nexport var BTr = /*#__PURE__*/Vue.extend({\n name: NAME_TR,\n mixins: [attrsMixin, listenersMixin, normalizeSlotMixin],\n provide: function provide() {\n return {\n bvTableTr: this\n };\n },\n inject: {\n bvTableRowGroup: {\n default:\n /* istanbul ignore next */\n function _default() {\n return {};\n }\n }\n },\n inheritAttrs: false,\n props: props,\n computed: {\n // Sniffed by `` / ``\n inTbody: function inTbody() {\n return this.bvTableRowGroup.isTbody;\n },\n // Sniffed by `` / ``\n inThead: function inThead() {\n return this.bvTableRowGroup.isThead;\n },\n // Sniffed by `` / ``\n inTfoot: function inTfoot() {\n return this.bvTableRowGroup.isTfoot;\n },\n // Sniffed by `` / ``\n isDark: function isDark() {\n return this.bvTableRowGroup.isDark;\n },\n // Sniffed by `` / ``\n isStacked: function isStacked() {\n return this.bvTableRowGroup.isStacked;\n },\n // Sniffed by `` / ``\n isResponsive: function isResponsive() {\n return this.bvTableRowGroup.isResponsive;\n },\n // Sniffed by `` / ``\n // Sticky headers are only supported in thead\n isStickyHeader: function isStickyHeader() {\n return this.bvTableRowGroup.isStickyHeader;\n },\n // Sniffed by / `` / ``\n // Needed to handle header background classes, due to lack of\n // background color inheritance with Bootstrap v4 table CSS\n hasStickyHeader: function hasStickyHeader() {\n return !this.isStacked && this.bvTableRowGroup.hasStickyHeader;\n },\n // Sniffed by `` / ``\n tableVariant: function tableVariant() {\n return this.bvTableRowGroup.tableVariant;\n },\n // Sniffed by `` / ``\n headVariant: function headVariant() {\n return this.inThead ? this.bvTableRowGroup.headVariant : null;\n },\n // Sniffed by `` / ``\n footVariant: function footVariant() {\n return this.inTfoot ? this.bvTableRowGroup.footVariant : null;\n },\n isRowDark: function isRowDark() {\n return this.headVariant === LIGHT || this.footVariant === LIGHT ?\n /* istanbul ignore next */\n false : this.headVariant === DARK || this.footVariant === DARK ?\n /* istanbul ignore next */\n true : this.isDark;\n },\n trClasses: function trClasses() {\n var variant = this.variant;\n return [variant ? \"\".concat(this.isRowDark ? 'bg' : 'table', \"-\").concat(variant) : null];\n },\n trAttrs: function trAttrs() {\n return _objectSpread({\n role: 'row'\n }, this.bvAttrs);\n }\n },\n render: function render(h) {\n return h('tr', {\n class: this.trClasses,\n attrs: this.trAttrs,\n // Pass native listeners to child\n on: this.bvListeners\n }, this.normalizeSlot());\n }\n});","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 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_CELL } from '../../constants/components';\nimport { PROP_TYPE_BOOLEAN, PROP_TYPE_NUMBER_STRING, PROP_TYPE_STRING } from '../../constants/props';\nimport { isTag } from '../../utils/dom';\nimport { isUndefinedOrNull } from '../../utils/inspect';\nimport { toInteger } from '../../utils/number';\nimport { makeProp, makePropsConfigurable } from '../../utils/props';\nimport { toString } from '../../utils/string';\nimport { attrsMixin } from '../../mixins/attrs';\nimport { listenersMixin } from '../../mixins/listeners';\nimport { normalizeSlotMixin } from '../../mixins/normalize-slot'; // --- Helper methods ---\n// Parse a rowspan or colspan into a digit (or `null` if < `1` )\n\nvar parseSpan = function parseSpan(value) {\n value = toInteger(value, 0);\n return value > 0 ? value : null;\n};\n/* istanbul ignore next */\n\n\nvar spanValidator = function spanValidator(value) {\n return isUndefinedOrNull(value) || parseSpan(value) > 0;\n}; // --- Props ---\n\n\nexport var props = makePropsConfigurable({\n colspan: makeProp(PROP_TYPE_NUMBER_STRING, null, spanValidator),\n rowspan: makeProp(PROP_TYPE_NUMBER_STRING, null, spanValidator),\n stackedHeading: makeProp(PROP_TYPE_STRING),\n stickyColumn: makeProp(PROP_TYPE_BOOLEAN, false),\n variant: makeProp(PROP_TYPE_STRING)\n}, NAME_TABLE_CELL); // --- Main component ---\n// TODO:\n// In Bootstrap v5, we won't need \"sniffing\" as table element variants properly inherit\n// to the child elements, so this can be converted to a functional component\n// @vue/component\n\nexport var BTd = /*#__PURE__*/Vue.extend({\n name: NAME_TABLE_CELL,\n // Mixin order is important!\n mixins: [attrsMixin, listenersMixin, normalizeSlotMixin],\n inject: {\n bvTableTr: {\n default:\n /* istanbul ignore next */\n function _default() {\n return {};\n }\n }\n },\n inheritAttrs: false,\n props: props,\n computed: {\n // Overridden by ``\n tag: function tag() {\n return 'td';\n },\n inTbody: function inTbody() {\n return this.bvTableTr.inTbody;\n },\n inThead: function inThead() {\n return this.bvTableTr.inThead;\n },\n inTfoot: function inTfoot() {\n return this.bvTableTr.inTfoot;\n },\n isDark: function isDark() {\n return this.bvTableTr.isDark;\n },\n isStacked: function isStacked() {\n return this.bvTableTr.isStacked;\n },\n // We only support stacked-heading in tbody in stacked mode\n isStackedCell: function isStackedCell() {\n return this.inTbody && this.isStacked;\n },\n isResponsive: function isResponsive() {\n return this.bvTableTr.isResponsive;\n },\n // Needed to handle header background classes, due to lack of\n // background color inheritance with Bootstrap v4 table CSS\n // Sticky headers only apply to cells in table `thead`\n isStickyHeader: function isStickyHeader() {\n return this.bvTableTr.isStickyHeader;\n },\n // Needed to handle header background classes, due to lack of\n // background color inheritance with Bootstrap v4 table CSS\n hasStickyHeader: function hasStickyHeader() {\n return this.bvTableTr.hasStickyHeader;\n },\n // Needed to handle background classes, due to lack of\n // background color inheritance with Bootstrap v4 table CSS\n // Sticky column cells are only available in responsive\n // mode (horizontal scrolling) or when sticky header mode\n // Applies to cells in `thead`, `tbody` and `tfoot`\n isStickyColumn: function isStickyColumn() {\n return !this.isStacked && (this.isResponsive || this.hasStickyHeader) && this.stickyColumn;\n },\n rowVariant: function rowVariant() {\n return this.bvTableTr.variant;\n },\n headVariant: function headVariant() {\n return this.bvTableTr.headVariant;\n },\n footVariant: function footVariant() {\n return this.bvTableTr.footVariant;\n },\n tableVariant: function tableVariant() {\n return this.bvTableTr.tableVariant;\n },\n computedColspan: function computedColspan() {\n return parseSpan(this.colspan);\n },\n computedRowspan: function computedRowspan() {\n return parseSpan(this.rowspan);\n },\n // We use computed props here for improved performance by caching\n // the results of the string interpolation\n cellClasses: function cellClasses() {\n var variant = this.variant,\n headVariant = this.headVariant,\n isStickyColumn = this.isStickyColumn;\n\n if (!variant && this.isStickyHeader && !headVariant || !variant && isStickyColumn && this.inTfoot && !this.footVariant || !variant && isStickyColumn && this.inThead && !headVariant || !variant && isStickyColumn && this.inTbody) {\n // Needed for sticky-header mode as Bootstrap v4 table cells do\n // not inherit parent's `background-color`\n variant = this.rowVariant || this.tableVariant || 'b-table-default';\n }\n\n return [variant ? \"\".concat(this.isDark ? 'bg' : 'table', \"-\").concat(variant) : null, isStickyColumn ? 'b-table-sticky-column' : null];\n },\n cellAttrs: function cellAttrs() {\n var stackedHeading = this.stackedHeading; // We use computed props here for improved performance by caching\n // the results of the object spread (Object.assign)\n\n var headOrFoot = this.inThead || this.inTfoot; // Make sure col/rowspan's are > 0 or null\n\n var colspan = this.computedColspan;\n var rowspan = this.computedRowspan; // Default role and scope\n\n var role = 'cell';\n var scope = null; // Compute role and scope\n // We only add scopes with an explicit span of 1 or greater\n\n if (headOrFoot) {\n // Header or footer cells\n role = 'columnheader';\n scope = colspan > 0 ? 'colspan' : 'col';\n } else if (isTag(this.tag, 'th')) {\n // th's in tbody\n role = 'rowheader';\n scope = rowspan > 0 ? 'rowgroup' : 'row';\n }\n\n return _objectSpread(_objectSpread({\n colspan: colspan,\n rowspan: rowspan,\n role: role,\n scope: scope\n }, this.bvAttrs), {}, {\n // Add in the stacked cell label data-attribute if in\n // stacked mode (if a stacked heading label is provided)\n 'data-label': this.isStackedCell && !isUndefinedOrNull(stackedHeading) ?\n /* istanbul ignore next */\n toString(stackedHeading) : null\n });\n }\n },\n render: function render(h) {\n var $content = [this.normalizeSlot()];\n return h(this.tag, {\n class: this.cellClasses,\n attrs: this.cellAttrs,\n // Transfer any native listeners\n on: this.bvListeners\n }, [this.isStackedCell ? h('div', [$content]) : $content]);\n }\n});","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_STRING } from '../../../constants/props';\nimport { SLOT_NAME_TABLE_CAPTION } from '../../../constants/slots';\nimport { htmlOrText } from '../../../utils/html';\nimport { makeProp } from '../../../utils/props'; // --- Props ---\n\nexport var props = {\n caption: makeProp(PROP_TYPE_STRING),\n captionHtml: makeProp(PROP_TYPE_STRING) // `caption-top` is part of table-render mixin (styling)\n // captionTop: makeProp(PROP_TYPE_BOOLEAN, false)\n\n}; // --- Mixin ---\n// @vue/component\n\nexport var captionMixin = Vue.extend({\n props: props,\n computed: {\n captionId: function captionId() {\n return this.isStacked ? this.safeId('_caption_') : null;\n }\n },\n methods: {\n renderCaption: function renderCaption() {\n var caption = this.caption,\n captionHtml = this.captionHtml;\n var h = this.$createElement;\n var $caption = h();\n var hasCaptionSlot = this.hasNormalizedSlot(SLOT_NAME_TABLE_CAPTION);\n\n if (hasCaptionSlot || caption || captionHtml) {\n $caption = h('caption', {\n attrs: {\n id: this.captionId\n },\n domProps: hasCaptionSlot ? {} : htmlOrText(captionHtml, caption),\n key: 'caption',\n ref: 'caption'\n }, this.normalizeSlot(SLOT_NAME_TABLE_CAPTION));\n }\n\n return $caption;\n }\n }\n});","import { Vue } from '../../../vue';\nimport { SLOT_NAME_TABLE_COLGROUP } from '../../../constants/slots'; // --- Props ---\n\nexport var props = {}; // --- Mixin ---\n// @vue/component\n\nexport var colgroupMixin = Vue.extend({\n methods: {\n renderColgroup: function renderColgroup() {\n var fields = this.computedFields;\n var h = this.$createElement;\n var $colgroup = h();\n\n if (this.hasNormalizedSlot(SLOT_NAME_TABLE_COLGROUP)) {\n $colgroup = h('colgroup', {\n key: 'colgroup'\n }, [this.normalizeSlot(SLOT_NAME_TABLE_COLGROUP, {\n columns: fields.length,\n fields: fields\n })]);\n }\n\n return $colgroup;\n }\n }\n});","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});","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// Constants used by table helpers\nexport var FIELD_KEY_CELL_VARIANT = '_cellVariants';\nexport var FIELD_KEY_ROW_VARIANT = '_rowVariant';\nexport var FIELD_KEY_SHOW_DETAILS = '_showDetails'; // Object of item keys that should be ignored for headers and\n// stringification and filter events\n\nexport var IGNORED_FIELD_KEYS = [FIELD_KEY_CELL_VARIANT, FIELD_KEY_ROW_VARIANT, FIELD_KEY_SHOW_DETAILS].reduce(function (result, key) {\n return _objectSpread(_objectSpread({}, result), {}, _defineProperty({}, key, true));\n}, {}); // Filter CSS selector for click/dblclick/etc. events\n// If any of these selectors match the clicked element, we ignore the event\n\nexport var EVENT_FILTER = ['a', 'a *', // Include content inside links\n'button', 'button *', // Include content inside buttons\n'input:not(.disabled):not([disabled])', 'select:not(.disabled):not([disabled])', 'textarea:not(.disabled):not([disabled])', '[role=\"link\"]', '[role=\"link\"] *', '[role=\"button\"]', '[role=\"button\"] *', '[tabindex]:not(.disabled):not([disabled])'].join(',');","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 { identity } from '../../../utils/identity';\nimport { isArray, isFunction, isObject, isString } from '../../../utils/inspect';\nimport { clone, keys } from '../../../utils/object';\nimport { startCase } from '../../../utils/string';\nimport { IGNORED_FIELD_KEYS } from './constants'; // Private function to massage field entry into common object format\n\nvar processField = function processField(key, value) {\n var field = null;\n\n if (isString(value)) {\n // Label shortcut\n field = {\n key: key,\n label: value\n };\n } else if (isFunction(value)) {\n // Formatter shortcut\n field = {\n key: key,\n formatter: value\n };\n } else if (isObject(value)) {\n field = clone(value);\n field.key = field.key || key;\n } else if (value !== false) {\n // Fallback to just key\n\n /* istanbul ignore next */\n field = {\n key: key\n };\n }\n\n return field;\n}; // We normalize fields into an array of objects\n// [ { key:..., label:..., ...}, {...}, ..., {..}]\n\n\nexport var normalizeFields = function normalizeFields(origFields, items) {\n var fields = [];\n\n if (isArray(origFields)) {\n // Normalize array Form\n origFields.filter(identity).forEach(function (f) {\n if (isString(f)) {\n fields.push({\n key: f,\n label: startCase(f)\n });\n } else if (isObject(f) && f.key && isString(f.key)) {\n // Full object definition. We use assign so that we don't mutate the original\n fields.push(clone(f));\n } else if (isObject(f) && keys(f).length === 1) {\n // Shortcut object (i.e. { 'foo_bar': 'This is Foo Bar' }\n var key = keys(f)[0];\n var field = processField(key, f[key]);\n\n if (field) {\n fields.push(field);\n }\n }\n });\n } // If no field provided, take a sample from first record (if exits)\n\n\n if (fields.length === 0 && isArray(items) && items.length > 0) {\n var sample = items[0];\n keys(sample).forEach(function (k) {\n if (!IGNORED_FIELD_KEYS[k]) {\n fields.push({\n key: k,\n label: startCase(k)\n });\n }\n });\n } // Ensure we have a unique array of fields and that they have String labels\n\n\n var memo = {};\n return fields.filter(function (f) {\n if (!memo[f.key]) {\n memo[f.key] = true;\n f.label = isString(f.label) ? f.label : startCase(f.key);\n return true;\n }\n\n return false;\n });\n};","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 { EVENT_NAME_CONTEXT_CHANGED } from '../../../constants/events';\nimport { PROP_TYPE_ARRAY, PROP_TYPE_STRING } from '../../../constants/props';\nimport { isArray, isFunction, isString } from '../../../utils/inspect';\nimport { looseEqual } from '../../../utils/loose-equal';\nimport { mathMax } from '../../../utils/math';\nimport { makeModelMixin } from '../../../utils/model';\nimport { toInteger } from '../../../utils/number';\nimport { clone, sortKeys } from '../../../utils/object';\nimport { makeProp } from '../../../utils/props';\nimport { normalizeFields } from './normalize-fields'; // --- Constants ---\n\nvar _makeModelMixin = makeModelMixin('value', {\n type: PROP_TYPE_ARRAY,\n defaultValue: []\n}),\n modelMixin = _makeModelMixin.mixin,\n modelProps = _makeModelMixin.props,\n MODEL_PROP_NAME = _makeModelMixin.prop,\n MODEL_EVENT_NAME = _makeModelMixin.event;\n\nexport { MODEL_PROP_NAME, MODEL_EVENT_NAME }; // --- Props ---\n\nexport var props = sortKeys(_objectSpread(_objectSpread({}, modelProps), {}, _defineProperty({\n fields: makeProp(PROP_TYPE_ARRAY, null),\n // Provider mixin adds in `Function` type\n items: makeProp(PROP_TYPE_ARRAY, []),\n // Primary key for record\n // If provided the value in each row must be unique!\n primaryKey: makeProp(PROP_TYPE_STRING)\n}, MODEL_PROP_NAME, makeProp(PROP_TYPE_ARRAY, [])))); // --- Mixin ---\n// @vue/component\n\nexport var itemsMixin = Vue.extend({\n mixins: [modelMixin],\n props: props,\n data: function data() {\n var items = this.items;\n return {\n // Our local copy of the items\n // Must be an array\n localItems: isArray(items) ? items.slice() : []\n };\n },\n computed: {\n computedFields: function computedFields() {\n // We normalize fields into an array of objects\n // `[ { key:..., label:..., ...}, {...}, ..., {..}]`\n return normalizeFields(this.fields, this.localItems);\n },\n computedFieldsObj: function computedFieldsObj() {\n // Fields as a simple lookup hash object\n // Mainly for formatter lookup and use in `scopedSlots` for convenience\n // If the field has a formatter, it normalizes formatter to a\n // function ref or `undefined` if no formatter\n var $parent = this.$parent;\n return this.computedFields.reduce(function (obj, f) {\n // We use object spread here so we don't mutate the original field object\n obj[f.key] = clone(f);\n\n if (f.formatter) {\n // Normalize formatter to a function ref or `undefined`\n var formatter = f.formatter;\n\n if (isString(formatter) && isFunction($parent[formatter])) {\n formatter = $parent[formatter];\n } else if (!isFunction(formatter)) {\n /* istanbul ignore next */\n formatter = undefined;\n } // Return formatter function or `undefined` if none\n\n\n obj[f.key].formatter = formatter;\n }\n\n return obj;\n }, {});\n },\n computedItems: function computedItems() {\n // Fallback if various mixins not provided\n return (this.paginatedItems || this.sortedItems || this.filteredItems || this.localItems ||\n /* istanbul ignore next */\n []).slice();\n },\n context: function context() {\n // Current state of sorting, filtering and pagination props/values\n return {\n filter: this.localFilter,\n sortBy: this.localSortBy,\n sortDesc: this.localSortDesc,\n perPage: mathMax(toInteger(this.perPage, 0), 0),\n currentPage: mathMax(toInteger(this.currentPage, 0), 1),\n apiUrl: this.apiUrl\n };\n }\n },\n watch: {\n items: function items(newValue) {\n // Set `localItems`/`filteredItems` to a copy of the provided array\n this.localItems = isArray(newValue) ? newValue.slice() : [];\n },\n // Watch for changes on `computedItems` and update the `v-model`\n computedItems: function computedItems(newValue, oldValue) {\n if (!looseEqual(newValue, oldValue)) {\n this.$emit(MODEL_EVENT_NAME, newValue);\n }\n },\n // Watch for context changes\n context: function context(newValue, oldValue) {\n // Emit context information for external paging/filtering/sorting handling\n if (!looseEqual(newValue, oldValue)) {\n this.$emit(EVENT_NAME_CONTEXT_CHANGED, newValue);\n }\n }\n },\n mounted: function mounted() {\n // Initially update the `v-model` of displayed items\n this.$emit(MODEL_EVENT_NAME, this.computedItems);\n },\n methods: {\n // Method to get the formatter method for a given field key\n getFieldFormatter: function getFieldFormatter(key) {\n var field = this.computedFieldsObj[key]; // `this.computedFieldsObj` has pre-normalized the formatter to a\n // function ref if present, otherwise `undefined`\n\n return field ? field.formatter : undefined;\n }\n }\n});","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};","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 { PROP_TYPE_BOOLEAN_STRING } from '../../../constants/props';\nimport { makeProp } from '../../../utils/props'; // --- Props ---\n\nexport var props = {\n stacked: makeProp(PROP_TYPE_BOOLEAN_STRING, false)\n}; // --- Mixin ---\n// @vue/component\n\nexport var stackedMixin = Vue.extend({\n props: props,\n computed: {\n isStacked: function isStacked() {\n var stacked = this.stacked; // `true` when always stacked, or returns breakpoint specified\n\n return stacked === '' ? true : stacked;\n },\n isStackedAlways: function isStackedAlways() {\n return this.isStacked === true;\n },\n stackedTableClasses: function stackedTableClasses() {\n var isStackedAlways = this.isStackedAlways;\n return _defineProperty({\n 'b-table-stacked': isStackedAlways\n }, \"b-table-stacked-\".concat(this.stacked), !isStackedAlways && this.isStacked);\n }\n }\n});","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 { PROP_TYPE_ARRAY_OBJECT_STRING, PROP_TYPE_BOOLEAN, PROP_TYPE_BOOLEAN_STRING, PROP_TYPE_STRING } from '../../../constants/props';\nimport { identity } from '../../../utils/identity';\nimport { isBoolean } from '../../../utils/inspect';\nimport { makeProp } from '../../../utils/props';\nimport { toString } from '../../../utils/string';\nimport { attrsMixin } from '../../../mixins/attrs'; // Main `` render mixin\n// Includes all main table styling options\n// --- Props ---\n\nexport var props = {\n bordered: makeProp(PROP_TYPE_BOOLEAN, false),\n borderless: makeProp(PROP_TYPE_BOOLEAN, false),\n captionTop: makeProp(PROP_TYPE_BOOLEAN, false),\n dark: makeProp(PROP_TYPE_BOOLEAN, false),\n fixed: makeProp(PROP_TYPE_BOOLEAN, false),\n hover: makeProp(PROP_TYPE_BOOLEAN, false),\n noBorderCollapse: makeProp(PROP_TYPE_BOOLEAN, false),\n outlined: makeProp(PROP_TYPE_BOOLEAN, false),\n responsive: makeProp(PROP_TYPE_BOOLEAN_STRING, false),\n small: makeProp(PROP_TYPE_BOOLEAN, false),\n // If a string, it is assumed to be the table `max-height` value\n stickyHeader: makeProp(PROP_TYPE_BOOLEAN_STRING, false),\n striped: makeProp(PROP_TYPE_BOOLEAN, false),\n tableClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n tableVariant: makeProp(PROP_TYPE_STRING)\n}; // --- Mixin ---\n// @vue/component\n\nexport var tableRendererMixin = Vue.extend({\n mixins: [attrsMixin],\n provide: function provide() {\n return {\n bvTable: this\n };\n },\n // Don't place attributes on root element automatically,\n // as table could be wrapped in responsive `
`\n inheritAttrs: false,\n props: props,\n computed: {\n // Layout related computed props\n isResponsive: function isResponsive() {\n var responsive = this.responsive;\n return responsive === '' ? true : responsive;\n },\n isStickyHeader: function isStickyHeader() {\n var stickyHeader = this.stickyHeader;\n stickyHeader = stickyHeader === '' ? true : stickyHeader;\n return this.isStacked ? false : stickyHeader;\n },\n wrapperClasses: function wrapperClasses() {\n var isResponsive = this.isResponsive;\n return [this.isStickyHeader ? 'b-table-sticky-header' : '', isResponsive === true ? 'table-responsive' : isResponsive ? \"table-responsive-\".concat(this.responsive) : ''].filter(identity);\n },\n wrapperStyles: function wrapperStyles() {\n var isStickyHeader = this.isStickyHeader;\n return isStickyHeader && !isBoolean(isStickyHeader) ? {\n maxHeight: isStickyHeader\n } : {};\n },\n tableClasses: function tableClasses() {\n var hover = this.hover,\n tableVariant = this.tableVariant;\n hover = this.isTableSimple ? hover : hover && this.computedItems.length > 0 && !this.computedBusy;\n return [// User supplied classes\n this.tableClass, // Styling classes\n {\n 'table-striped': this.striped,\n 'table-hover': hover,\n 'table-dark': this.dark,\n 'table-bordered': this.bordered,\n 'table-borderless': this.borderless,\n 'table-sm': this.small,\n // The following are b-table custom styles\n border: this.outlined,\n 'b-table-fixed': this.fixed,\n 'b-table-caption-top': this.captionTop,\n 'b-table-no-border-collapse': this.noBorderCollapse\n }, tableVariant ? \"\".concat(this.dark ? 'bg' : 'table', \"-\").concat(tableVariant) : '', // Stacked table classes\n this.stackedTableClasses, // Selectable classes\n this.selectableTableClasses];\n },\n tableAttrs: function tableAttrs() {\n var items = this.computedItems,\n filteredItems = this.filteredItems,\n fields = this.computedFields,\n selectableTableAttrs = this.selectableTableAttrs;\n var ariaAttrs = this.isTableSimple ? {} : {\n 'aria-busy': this.computedBusy ? 'true' : 'false',\n 'aria-colcount': toString(fields.length),\n // Preserve user supplied `aria-describedby`, if provided\n 'aria-describedby': this.bvAttrs['aria-describedby'] || this.$refs.caption ? this.captionId : null\n };\n var rowCount = items && filteredItems && filteredItems.length > items.length ? toString(filteredItems.length) : null;\n return _objectSpread(_objectSpread(_objectSpread({\n // We set `aria-rowcount` before merging in `$attrs`,\n // in case user has supplied their own\n 'aria-rowcount': rowCount\n }, this.bvAttrs), {}, {\n // Now we can override any `$attrs` here\n id: this.safeId(),\n role: 'table'\n }, ariaAttrs), selectableTableAttrs);\n }\n },\n render: function render(h) {\n var wrapperClasses = this.wrapperClasses,\n renderCaption = this.renderCaption,\n renderColgroup = this.renderColgroup,\n renderThead = this.renderThead,\n renderTbody = this.renderTbody,\n renderTfoot = this.renderTfoot;\n var $content = [];\n\n if (this.isTableSimple) {\n $content.push(this.normalizeSlot());\n } else {\n // Build the `
`\n\n $content.push(renderColgroup ? renderColgroup() : null); // Build the ``\n\n $content.push(renderThead ? renderThead() : null); // Build the ``\n\n $content.push(renderTbody ? renderTbody() : null); // Build the ``\n\n $content.push(renderTfoot ? renderTfoot() : null);\n } // Assemble `
` (from caption mixin)\n $content.push(renderCaption ? renderCaption() : null); // Build the `
`\n\n\n var $table = h('table', {\n staticClass: 'table b-table',\n class: this.tableClasses,\n attrs: this.tableAttrs,\n key: 'b-table'\n }, $content.filter(identity)); // Add responsive/sticky wrapper if needed and return table\n\n return wrapperClasses.length > 0 ? h('div', {\n class: wrapperClasses,\n style: this.wrapperStyles,\n key: 'wrap'\n }, [$table]) : $table;\n }\n});","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_TBODY } from '../../constants/components';\nimport { PROP_TYPE_OBJECT } from '../../constants/props';\nimport { makeProp, makePropsConfigurable } from '../../utils/props';\nimport { attrsMixin } from '../../mixins/attrs';\nimport { listenersMixin } from '../../mixins/listeners';\nimport { normalizeSlotMixin } from '../../mixins/normalize-slot'; // --- Props ---\n\nexport var props = makePropsConfigurable({\n tbodyTransitionHandlers: makeProp(PROP_TYPE_OBJECT),\n tbodyTransitionProps: makeProp(PROP_TYPE_OBJECT)\n}, NAME_TBODY); // --- Main component ---\n// TODO:\n// In Bootstrap v5, we won't need \"sniffing\" as table element variants properly inherit\n// to the child elements, so this can be converted to a functional component\n// @vue/component\n\nexport var BTbody = /*#__PURE__*/Vue.extend({\n name: NAME_TBODY,\n mixins: [attrsMixin, listenersMixin, normalizeSlotMixin],\n provide: function provide() {\n return {\n bvTableRowGroup: this\n };\n },\n inject: {\n // Sniffed by `` / `` / ``\n bvTable: {\n default:\n /* istanbul ignore next */\n function _default() {\n return {};\n }\n }\n },\n inheritAttrs: false,\n props: props,\n computed: {\n // Sniffed by `` / `` / ``\n isTbody: function isTbody() {\n return true;\n },\n // Sniffed by `` / `` / ``\n isDark: function isDark() {\n return this.bvTable.dark;\n },\n // Sniffed by `` / `` / ``\n isStacked: function isStacked() {\n return this.bvTable.isStacked;\n },\n // Sniffed by `` / `` / ``\n isResponsive: function isResponsive() {\n return this.bvTable.isResponsive;\n },\n // Sniffed by `` / `` / ``\n // Sticky headers are only supported in thead\n isStickyHeader: function isStickyHeader() {\n return false;\n },\n // Sniffed by `` / `` / ``\n // Needed to handle header background classes, due to lack of\n // background color inheritance with Bootstrap v4 table CSS\n hasStickyHeader: function hasStickyHeader() {\n return !this.isStacked && this.bvTable.stickyHeader;\n },\n // Sniffed by `` / `` / ``\n tableVariant: function tableVariant() {\n return this.bvTable.tableVariant;\n },\n isTransitionGroup: function isTransitionGroup() {\n return this.tbodyTransitionProps || this.tbodyTransitionHandlers;\n },\n tbodyAttrs: function tbodyAttrs() {\n return _objectSpread({\n role: 'rowgroup'\n }, this.bvAttrs);\n },\n tbodyProps: function tbodyProps() {\n var tbodyTransitionProps = this.tbodyTransitionProps;\n return tbodyTransitionProps ? _objectSpread(_objectSpread({}, tbodyTransitionProps), {}, {\n tag: 'tbody'\n }) : {};\n }\n },\n render: function render(h) {\n var data = {\n props: this.tbodyProps,\n attrs: this.tbodyAttrs\n };\n\n if (this.isTransitionGroup) {\n // We use native listeners if a transition group for any delegated events\n data.on = this.tbodyTransitionHandlers || {};\n data.nativeOn = this.bvListeners;\n } else {\n // Otherwise we place any listeners on the tbody element\n data.on = this.bvListeners;\n }\n\n return h(this.isTransitionGroup ? 'transition-group' : 'tbody', data, this.normalizeSlot());\n }\n});","import { closest, getAttr, getById, matches, select } from '../../../utils/dom';\nimport { EVENT_FILTER } from './constants';\nvar TABLE_TAG_NAMES = ['TD', 'TH', 'TR']; // Returns `true` if we should ignore the click/double-click/keypress event\n// Avoids having the user need to use `@click.stop` on the form control\n\nexport var filterEvent = function filterEvent(event) {\n // Exit early when we don't have a target element\n if (!event || !event.target) {\n /* istanbul ignore next */\n return false;\n }\n\n var el = event.target; // Exit early when element is disabled or a table element\n\n if (el.disabled || TABLE_TAG_NAMES.indexOf(el.tagName) !== -1) {\n return false;\n } // Ignore the click when it was inside a dropdown menu\n\n\n if (closest('.dropdown-menu', el)) {\n return true;\n }\n\n var label = el.tagName === 'LABEL' ? el : closest('label', el); // If the label's form control is not disabled then we don't propagate event\n // Modern browsers have `label.control` that references the associated input, but IE 11\n // does not have this property on the label element, so we resort to DOM lookups\n\n if (label) {\n var labelFor = getAttr(label, 'for');\n var input = labelFor ? getById(labelFor) : select('input, select, textarea', label);\n\n if (input && !input.disabled) {\n return true;\n }\n } // Otherwise check if the event target matches one of the selectors in the\n // event filter (i.e. anchors, non disabled inputs, etc.)\n // Return `true` if we should ignore the event\n\n\n return matches(el, EVENT_FILTER);\n};","import { getSel, isElement } from '../../../utils/dom'; // Helper to determine if a there is an active text selection on the document page\n// Used to filter out click events caused by the mouse up at end of selection\n//\n// Accepts an element as only argument to test to see if selection overlaps or is\n// contained within the element\n\nexport var textSelectionActive = function textSelectionActive() {\n var el = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : document;\n var sel = getSel();\n return sel && sel.toString().trim() !== '' && sel.containsNode && isElement(el) ?\n /* istanbul ignore next */\n sel.containsNode(el, true) : false;\n};","import { Vue } from '../../vue';\nimport { NAME_TH } from '../../constants/components';\nimport { makePropsConfigurable } from '../../utils/props';\nimport { BTd, props as BTdProps } from './td'; // --- Props ---\n\nexport var props = makePropsConfigurable(BTdProps, NAME_TH); // --- Main component ---\n// TODO:\n// In Bootstrap v5, we won't need \"sniffing\" as table element variants properly inherit\n// to the child elements, so this can be converted to a functional component\n// @vue/component\n\nexport var BTh = /*#__PURE__*/Vue.extend({\n name: NAME_TH,\n extends: BTd,\n props: props,\n computed: {\n tag: function tag() {\n return 'th';\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\nfunction _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 { EVENT_NAME_ROW_CLICKED, EVENT_NAME_ROW_HOVERED, EVENT_NAME_ROW_UNHOVERED } from '../../../constants/events';\nimport { PROP_TYPE_ARRAY_OBJECT_STRING, PROP_TYPE_FUNCTION, PROP_TYPE_OBJECT_FUNCTION } from '../../../constants/props';\nimport { SLOT_NAME_ROW_DETAILS } from '../../../constants/slots';\nimport { get } from '../../../utils/get';\nimport { isFunction, isString, isUndefinedOrNull } from '../../../utils/inspect';\nimport { makeProp } from '../../../utils/props';\nimport { toString } from '../../../utils/string';\nimport { BTr } from '../tr';\nimport { BTd } from '../td';\nimport { BTh } from '../th';\nimport { FIELD_KEY_CELL_VARIANT, FIELD_KEY_ROW_VARIANT, FIELD_KEY_SHOW_DETAILS } from './constants'; // --- Props ---\n\nexport var props = {\n detailsTdClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n tbodyTrAttr: makeProp(PROP_TYPE_OBJECT_FUNCTION),\n tbodyTrClass: makeProp([].concat(_toConsumableArray(PROP_TYPE_ARRAY_OBJECT_STRING), [PROP_TYPE_FUNCTION]))\n}; // --- Mixin ---\n// @vue/component\n\nexport var tbodyRowMixin = Vue.extend({\n props: props,\n methods: {\n // Methods for computing classes, attributes and styles for table cells\n getTdValues: function getTdValues(item, key, tdValue, defaultValue) {\n var $parent = this.$parent;\n\n if (tdValue) {\n var value = get(item, key, '');\n\n if (isFunction(tdValue)) {\n return tdValue(value, key, item);\n } else if (isString(tdValue) && isFunction($parent[tdValue])) {\n return $parent[tdValue](value, key, item);\n }\n\n return tdValue;\n }\n\n return defaultValue;\n },\n getThValues: function getThValues(item, key, thValue, type, defaultValue) {\n var $parent = this.$parent;\n\n if (thValue) {\n var value = get(item, key, '');\n\n if (isFunction(thValue)) {\n return thValue(value, key, item, type);\n } else if (isString(thValue) && isFunction($parent[thValue])) {\n return $parent[thValue](value, key, item, type);\n }\n\n return thValue;\n }\n\n return defaultValue;\n },\n // Method to get the value for a field\n getFormattedValue: function getFormattedValue(item, field) {\n var key = field.key;\n var formatter = this.getFieldFormatter(key);\n var value = get(item, key, null);\n\n if (isFunction(formatter)) {\n value = formatter(value, key, item);\n }\n\n return isUndefinedOrNull(value) ? '' : value;\n },\n // Factory function methods\n toggleDetailsFactory: function toggleDetailsFactory(hasDetailsSlot, item) {\n var _this = this;\n\n // Returns a function to toggle a row's details slot\n return function () {\n if (hasDetailsSlot) {\n _this.$set(item, FIELD_KEY_SHOW_DETAILS, !item[FIELD_KEY_SHOW_DETAILS]);\n }\n };\n },\n // Row event handlers\n rowHovered: function rowHovered(event) {\n // `mouseenter` handler (non-bubbling)\n // `this.tbodyRowEvtStopped` from tbody mixin\n if (!this.tbodyRowEvtStopped(event)) {\n // `this.emitTbodyRowEvent` from tbody mixin\n this.emitTbodyRowEvent(EVENT_NAME_ROW_HOVERED, event);\n }\n },\n rowUnhovered: function rowUnhovered(event) {\n // `mouseleave` handler (non-bubbling)\n // `this.tbodyRowEvtStopped` from tbody mixin\n if (!this.tbodyRowEvtStopped(event)) {\n // `this.emitTbodyRowEvent` from tbody mixin\n this.emitTbodyRowEvent(EVENT_NAME_ROW_UNHOVERED, event);\n }\n },\n // Renders a TD or TH for a row's field\n renderTbodyRowCell: function renderTbodyRowCell(field, colIndex, item, rowIndex) {\n var _this2 = this;\n\n var isStacked = this.isStacked;\n var key = field.key,\n label = field.label,\n isRowHeader = field.isRowHeader;\n var h = this.$createElement;\n var hasDetailsSlot = this.hasNormalizedSlot(SLOT_NAME_ROW_DETAILS);\n var formatted = this.getFormattedValue(item, field);\n var stickyColumn = !isStacked && (this.isResponsive || this.stickyHeader) && field.stickyColumn; // We only uses the helper components for sticky columns to\n // improve performance of BTable/BTableLite by reducing the\n // total number of vue instances created during render\n\n var cellTag = stickyColumn ? isRowHeader ? BTh : BTd : isRowHeader ? 'th' : 'td';\n var cellVariant = item[FIELD_KEY_CELL_VARIANT] && item[FIELD_KEY_CELL_VARIANT][key] ? item[FIELD_KEY_CELL_VARIANT][key] : field.variant || null;\n var data = {\n // For the Vue key, we concatenate the column index and\n // field key (as field keys could be duplicated)\n // TODO: Although we do prevent duplicate field keys...\n // So we could change this to: `row-${rowIndex}-cell-${key}`\n class: [field.class ? field.class : '', this.getTdValues(item, key, field.tdClass, '')],\n props: {},\n attrs: _objectSpread({\n 'aria-colindex': String(colIndex + 1)\n }, isRowHeader ? this.getThValues(item, key, field.thAttr, 'row', {}) : this.getTdValues(item, key, field.tdAttr, {})),\n key: \"row-\".concat(rowIndex, \"-cell-\").concat(colIndex, \"-\").concat(key)\n };\n\n if (stickyColumn) {\n // We are using the helper BTd or BTh\n data.props = {\n stackedHeading: isStacked ? label : null,\n stickyColumn: true,\n variant: cellVariant\n };\n } else {\n // Using native TD or TH element, so we need to\n // add in the attributes and variant class\n data.attrs['data-label'] = isStacked && !isUndefinedOrNull(label) ? toString(label) : null;\n data.attrs.role = isRowHeader ? 'rowheader' : 'cell';\n data.attrs.scope = isRowHeader ? 'row' : null; // Add in the variant class\n\n if (cellVariant) {\n data.class.push(\"\".concat(this.dark ? 'bg' : 'table', \"-\").concat(cellVariant));\n }\n }\n\n var slotScope = {\n item: item,\n index: rowIndex,\n field: field,\n unformatted: get(item, key, ''),\n value: formatted,\n toggleDetails: this.toggleDetailsFactory(hasDetailsSlot, item),\n detailsShowing: Boolean(item[FIELD_KEY_SHOW_DETAILS])\n }; // If table supports selectable mode, then add in the following scope\n // this.supportsSelectableRows will be undefined if mixin isn't loaded\n\n if (this.supportsSelectableRows) {\n slotScope.rowSelected = this.isRowSelected(rowIndex);\n\n slotScope.selectRow = function () {\n return _this2.selectRow(rowIndex);\n };\n\n slotScope.unselectRow = function () {\n return _this2.unselectRow(rowIndex);\n };\n } // The new `v-slot` syntax doesn't like a slot name starting with\n // a square bracket and if using in-document HTML templates, the\n // v-slot attributes are lower-cased by the browser.\n // Switched to round bracket syntax to prevent confusion with\n // dynamic slot name syntax.\n // We look for slots in this order: `cell(${key})`, `cell(${key.toLowerCase()})`, 'cell()'\n // Slot names are now cached by mixin tbody in `this.$_bodyFieldSlotNameCache`\n // Will be `null` if no slot (or fallback slot) exists\n\n\n var slotName = this.$_bodyFieldSlotNameCache[key];\n var $childNodes = slotName ? this.normalizeSlot(slotName, slotScope) : toString(formatted);\n\n if (this.isStacked) {\n // We wrap in a DIV to ensure rendered as a single cell when visually stacked!\n $childNodes = [h('div', [$childNodes])];\n } // Render either a td or th cell\n\n\n return h(cellTag, data, [$childNodes]);\n },\n // Renders an item's row (or rows if details supported)\n renderTbodyRow: function renderTbodyRow(item, rowIndex) {\n var _this3 = this;\n\n var fields = this.computedFields,\n striped = this.striped,\n primaryKey = this.primaryKey,\n currentPage = this.currentPage,\n perPage = this.perPage,\n tbodyTrClass = this.tbodyTrClass,\n tbodyTrAttr = this.tbodyTrAttr;\n var h = this.$createElement;\n var hasDetailsSlot = this.hasNormalizedSlot(SLOT_NAME_ROW_DETAILS);\n var rowShowDetails = item[FIELD_KEY_SHOW_DETAILS] && hasDetailsSlot;\n var hasRowClickHandler = this.$listeners[EVENT_NAME_ROW_CLICKED] || this.hasSelectableRowClick; // We can return more than one TR if rowDetails enabled\n\n var $rows = []; // Details ID needed for `aria-details` when details showing\n // We set it to `null` when not showing so that attribute\n // does not appear on the element\n\n var detailsId = rowShowDetails ? this.safeId(\"_details_\".concat(rowIndex, \"_\")) : null; // For each item data field in row\n\n var $tds = fields.map(function (field, colIndex) {\n return _this3.renderTbodyRowCell(field, colIndex, item, rowIndex);\n }); // Calculate the row number in the dataset (indexed from 1)\n\n var ariaRowIndex = null;\n\n if (currentPage && perPage && perPage > 0) {\n ariaRowIndex = String((currentPage - 1) * perPage + rowIndex + 1);\n } // Create a unique :key to help ensure that sub components are re-rendered rather than\n // re-used, which can cause issues. If a primary key is not provided we use the rendered\n // rows index within the tbody.\n // See: https://github.com/bootstrap-vue/bootstrap-vue/issues/2410\n\n\n var primaryKeyValue = toString(get(item, primaryKey)) || null;\n var rowKey = primaryKeyValue || toString(rowIndex); // If primary key is provided, use it to generate a unique ID on each tbody > tr\n // In the format of '{tableId}__row_{primaryKeyValue}'\n\n var rowId = primaryKeyValue ? this.safeId(\"_row_\".concat(primaryKeyValue)) : null; // Selectable classes and attributes\n\n var selectableClasses = this.selectableRowClasses ? this.selectableRowClasses(rowIndex) : {};\n var selectableAttrs = this.selectableRowAttrs ? this.selectableRowAttrs(rowIndex) : {}; // Additional classes and attributes\n\n var userTrClasses = isFunction(tbodyTrClass) ? tbodyTrClass(item, 'row') : tbodyTrClass;\n var userTrAttrs = isFunction(tbodyTrAttr) ?\n /* istanbul ignore next */\n tbodyTrAttr(item, 'row') : tbodyTrAttr; // Add the item row\n\n $rows.push(h(BTr, {\n class: [userTrClasses, selectableClasses, rowShowDetails ? 'b-table-has-details' : ''],\n props: {\n variant: item[FIELD_KEY_ROW_VARIANT] || null\n },\n attrs: _objectSpread(_objectSpread({\n id: rowId\n }, userTrAttrs), {}, {\n // Users cannot override the following attributes\n tabindex: hasRowClickHandler ? '0' : null,\n 'data-pk': primaryKeyValue || null,\n 'aria-details': detailsId,\n 'aria-owns': detailsId,\n 'aria-rowindex': ariaRowIndex\n }, selectableAttrs),\n on: {\n // Note: These events are not A11Y friendly!\n mouseenter: this.rowHovered,\n mouseleave: this.rowUnhovered\n },\n key: \"__b-table-row-\".concat(rowKey, \"__\"),\n ref: 'item-rows',\n refInFor: true\n }, $tds)); // Row Details slot\n\n if (rowShowDetails) {\n var detailsScope = {\n item: item,\n index: rowIndex,\n fields: fields,\n toggleDetails: this.toggleDetailsFactory(hasDetailsSlot, item)\n }; // If table supports selectable mode, then add in the following scope\n // this.supportsSelectableRows will be undefined if mixin isn't loaded\n\n if (this.supportsSelectableRows) {\n detailsScope.rowSelected = this.isRowSelected(rowIndex);\n\n detailsScope.selectRow = function () {\n return _this3.selectRow(rowIndex);\n };\n\n detailsScope.unselectRow = function () {\n return _this3.unselectRow(rowIndex);\n };\n } // Render the details slot in a TD\n\n\n var $details = h(BTd, {\n props: {\n colspan: fields.length\n },\n class: this.detailsTdClass\n }, [this.normalizeSlot(SLOT_NAME_ROW_DETAILS, detailsScope)]); // Add a hidden row to keep table row striping consistent when details showing\n // Only added if the table is striped\n\n if (striped) {\n $rows.push( // We don't use `BTr` here as we don't need the extra functionality\n h('tr', {\n staticClass: 'd-none',\n attrs: {\n 'aria-hidden': 'true',\n role: 'presentation'\n },\n key: \"__b-table-details-stripe__\".concat(rowKey)\n }));\n } // Add the actual details row\n\n\n var userDetailsTrClasses = isFunction(this.tbodyTrClass) ?\n /* istanbul ignore next */\n this.tbodyTrClass(item, SLOT_NAME_ROW_DETAILS) : this.tbodyTrClass;\n var userDetailsTrAttrs = isFunction(this.tbodyTrAttr) ?\n /* istanbul ignore next */\n this.tbodyTrAttr(item, SLOT_NAME_ROW_DETAILS) : this.tbodyTrAttr;\n $rows.push(h(BTr, {\n staticClass: 'b-table-details',\n class: [userDetailsTrClasses],\n props: {\n variant: item[FIELD_KEY_ROW_VARIANT] || null\n },\n attrs: _objectSpread(_objectSpread({}, userDetailsTrAttrs), {}, {\n // Users cannot override the following attributes\n id: detailsId,\n tabindex: '-1'\n }),\n key: \"__b-table-details__\".concat(rowKey)\n }, [$details]));\n } else if (hasDetailsSlot) {\n // Only add the placeholder if a the table has a row-details slot defined (but not shown)\n $rows.push(h());\n\n if (striped) {\n // Add extra placeholder if table is striped\n $rows.push(h());\n }\n } // Return the row(s)\n\n\n return $rows;\n }\n }\n});","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 { EVENT_NAME_ROW_CLICKED, EVENT_NAME_ROW_CONTEXTMENU, EVENT_NAME_ROW_DBLCLICKED, EVENT_NAME_ROW_MIDDLE_CLICKED } from '../../../constants/events';\nimport { CODE_DOWN, CODE_END, CODE_ENTER, CODE_HOME, CODE_SPACE, CODE_UP } from '../../../constants/key-codes';\nimport { PROP_TYPE_ARRAY_OBJECT_STRING } from '../../../constants/props';\nimport { arrayIncludes, from as arrayFrom } from '../../../utils/array';\nimport { attemptFocus, closest, isActiveElement, isElement } from '../../../utils/dom';\nimport { stopEvent } from '../../../utils/events';\nimport { sortKeys } from '../../../utils/object';\nimport { makeProp, pluckProps } from '../../../utils/props';\nimport { BTbody, props as BTbodyProps } from '../tbody';\nimport { filterEvent } from './filter-event';\nimport { textSelectionActive } from './text-selection-active';\nimport { tbodyRowMixin, props as tbodyRowProps } from './mixin-tbody-row'; // --- Helper methods ---\n\nvar getCellSlotName = function getCellSlotName(value) {\n return \"cell(\".concat(value || '', \")\");\n}; // --- Props ---\n\n\nexport var props = sortKeys(_objectSpread(_objectSpread(_objectSpread({}, BTbodyProps), tbodyRowProps), {}, {\n tbodyClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING)\n})); // --- Mixin ---\n// @vue/component\n\nexport var tbodyMixin = Vue.extend({\n mixins: [tbodyRowMixin],\n props: props,\n beforeDestroy: function beforeDestroy() {\n this.$_bodyFieldSlotNameCache = null;\n },\n methods: {\n // Returns all the item TR elements (excludes detail and spacer rows)\n // `this.$refs['item-rows']` is an array of item TR components/elements\n // Rows should all be `` components, but we map to TR elements\n // Also note that `this.$refs['item-rows']` may not always be in document order\n getTbodyTrs: function getTbodyTrs() {\n var $refs = this.$refs;\n var tbody = $refs.tbody ? $refs.tbody.$el || $refs.tbody : null;\n var trs = ($refs['item-rows'] || []).map(function (tr) {\n return tr.$el || tr;\n });\n return tbody && tbody.children && tbody.children.length > 0 && trs && trs.length > 0 ? arrayFrom(tbody.children).filter(function (tr) {\n return arrayIncludes(trs, tr);\n }) :\n /* istanbul ignore next */\n [];\n },\n // Returns index of a particular TBODY item TR\n // We set `true` on closest to include self in result\n getTbodyTrIndex: function getTbodyTrIndex(el) {\n /* istanbul ignore next: should not normally happen */\n if (!isElement(el)) {\n return -1;\n }\n\n var tr = el.tagName === 'TR' ? el : closest('tr', el, true);\n return tr ? this.getTbodyTrs().indexOf(tr) : -1;\n },\n // Emits a row event, with the item object, row index and original event\n emitTbodyRowEvent: function emitTbodyRowEvent(type, event) {\n if (type && this.hasListener(type) && event && event.target) {\n var rowIndex = this.getTbodyTrIndex(event.target);\n\n if (rowIndex > -1) {\n // The array of TRs correlate to the `computedItems` array\n var item = this.computedItems[rowIndex];\n this.$emit(type, item, rowIndex, event);\n }\n }\n },\n tbodyRowEvtStopped: function tbodyRowEvtStopped(event) {\n return this.stopIfBusy && this.stopIfBusy(event);\n },\n // Delegated row event handlers\n onTbodyRowKeydown: function onTbodyRowKeydown(event) {\n // Keyboard navigation and row click emulation\n var target = event.target,\n keyCode = event.keyCode;\n\n if (this.tbodyRowEvtStopped(event) || target.tagName !== 'TR' || !isActiveElement(target) || target.tabIndex !== 0) {\n // Early exit if not an item row TR\n return;\n }\n\n if (arrayIncludes([CODE_ENTER, CODE_SPACE], keyCode)) {\n // Emulated click for keyboard users, transfer to click handler\n stopEvent(event);\n this.onTBodyRowClicked(event);\n } else if (arrayIncludes([CODE_UP, CODE_DOWN, CODE_HOME, CODE_END], keyCode)) {\n // Keyboard navigation\n var rowIndex = this.getTbodyTrIndex(target);\n\n if (rowIndex > -1) {\n stopEvent(event);\n var trs = this.getTbodyTrs();\n var shift = event.shiftKey;\n\n if (keyCode === CODE_HOME || shift && keyCode === CODE_UP) {\n // Focus first row\n attemptFocus(trs[0]);\n } else if (keyCode === CODE_END || shift && keyCode === CODE_DOWN) {\n // Focus last row\n attemptFocus(trs[trs.length - 1]);\n } else if (keyCode === CODE_UP && rowIndex > 0) {\n // Focus previous row\n attemptFocus(trs[rowIndex - 1]);\n } else if (keyCode === CODE_DOWN && rowIndex < trs.length - 1) {\n // Focus next row\n attemptFocus(trs[rowIndex + 1]);\n }\n }\n }\n },\n onTBodyRowClicked: function onTBodyRowClicked(event) {\n // Don't emit event when the table is busy, the user clicked\n // on a non-disabled control or is selecting text\n if (this.tbodyRowEvtStopped(event) || filterEvent(event) || textSelectionActive(this.$el)) {\n return;\n }\n\n this.emitTbodyRowEvent(EVENT_NAME_ROW_CLICKED, event);\n },\n onTbodyRowMiddleMouseRowClicked: function onTbodyRowMiddleMouseRowClicked(event) {\n if (!this.tbodyRowEvtStopped(event) && event.which === 2) {\n this.emitTbodyRowEvent(EVENT_NAME_ROW_MIDDLE_CLICKED, event);\n }\n },\n onTbodyRowContextmenu: function onTbodyRowContextmenu(event) {\n if (!this.tbodyRowEvtStopped(event)) {\n this.emitTbodyRowEvent(EVENT_NAME_ROW_CONTEXTMENU, event);\n }\n },\n onTbodyRowDblClicked: function onTbodyRowDblClicked(event) {\n if (!this.tbodyRowEvtStopped(event) && !filterEvent(event)) {\n this.emitTbodyRowEvent(EVENT_NAME_ROW_DBLCLICKED, event);\n }\n },\n // Render the tbody element and children\n // Note:\n // Row hover handlers are handled by the tbody-row mixin\n // As mouseenter/mouseleave events do not bubble\n renderTbody: function renderTbody() {\n var _this = this;\n\n var items = this.computedItems,\n renderBusy = this.renderBusy,\n renderTopRow = this.renderTopRow,\n renderEmpty = this.renderEmpty,\n renderBottomRow = this.renderBottomRow;\n var h = this.$createElement;\n var hasRowClickHandler = this.hasListener(EVENT_NAME_ROW_CLICKED) || this.hasSelectableRowClick; // Prepare the tbody rows\n\n var $rows = []; // Add the item data rows or the busy slot\n\n var $busy = renderBusy ? renderBusy() : null;\n\n if ($busy) {\n // If table is busy and a busy slot, then return only the busy \"row\" indicator\n $rows.push($busy);\n } else {\n // Table isn't busy, or we don't have a busy slot\n // Create a slot cache for improved performance when looking up cell slot names\n // Values will be keyed by the field's `key` and will store the slot's name\n // Slots could be dynamic (i.e. `v-if`), so we must compute on each render\n // Used by tbody-row mixin render helper\n var cache = {};\n var defaultSlotName = getCellSlotName();\n defaultSlotName = this.hasNormalizedSlot(defaultSlotName) ? defaultSlotName : null;\n this.computedFields.forEach(function (field) {\n var key = field.key;\n var slotName = getCellSlotName(key);\n var lowercaseSlotName = getCellSlotName(key.toLowerCase());\n cache[key] = _this.hasNormalizedSlot(slotName) ? slotName : _this.hasNormalizedSlot(lowercaseSlotName) ?\n /* istanbul ignore next */\n lowercaseSlotName : defaultSlotName;\n }); // Created as a non-reactive property so to not trigger component updates\n // Must be a fresh object each render\n\n this.$_bodyFieldSlotNameCache = cache; // Add static top row slot (hidden in visibly stacked mode\n // as we can't control `data-label` attr)\n\n $rows.push(renderTopRow ? renderTopRow() : h()); // Render the rows\n\n items.forEach(function (item, rowIndex) {\n // Render the individual item row (rows if details slot)\n $rows.push(_this.renderTbodyRow(item, rowIndex));\n }); // Empty items / empty filtered row slot (only shows if `items.length < 1`)\n\n $rows.push(renderEmpty ? renderEmpty() : h()); // Static bottom row slot (hidden in visibly stacked mode\n // as we can't control `data-label` attr)\n\n $rows.push(renderBottomRow ? renderBottomRow() : h());\n } // Note: these events will only emit if a listener is registered\n\n\n var handlers = {\n auxclick: this.onTbodyRowMiddleMouseRowClicked,\n // TODO:\n // Perhaps we do want to automatically prevent the\n // default context menu from showing if there is a\n // `row-contextmenu` listener registered\n contextmenu: this.onTbodyRowContextmenu,\n // The following event(s) is not considered A11Y friendly\n dblclick: this.onTbodyRowDblClicked // Hover events (`mouseenter`/`mouseleave`) are handled by `tbody-row` mixin\n\n }; // Add in click/keydown listeners if needed\n\n if (hasRowClickHandler) {\n handlers.click = this.onTBodyRowClicked;\n handlers.keydown = this.onTbodyRowKeydown;\n } // Assemble rows into the tbody\n\n\n var $tbody = h(BTbody, {\n class: this.tbodyClass || null,\n props: pluckProps(BTbodyProps, this.$props),\n // BTbody transfers all native event listeners to the root element\n // TODO: Only set the handlers if the table is not busy\n on: handlers,\n ref: 'tbody'\n }, $rows); // Return the assembled tbody\n\n return $tbody;\n }\n }\n});","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_TFOOT } from '../../constants/components';\nimport { PROP_TYPE_STRING } from '../../constants/props';\nimport { makeProp, makePropsConfigurable } from '../../utils/props';\nimport { attrsMixin } from '../../mixins/attrs';\nimport { listenersMixin } from '../../mixins/listeners';\nimport { normalizeSlotMixin } from '../../mixins/normalize-slot'; // --- Props ---\n\nexport var props = makePropsConfigurable({\n // Supported values: 'lite', 'dark', or null\n footVariant: makeProp(PROP_TYPE_STRING)\n}, NAME_TFOOT); // --- Main component ---\n// TODO:\n// In Bootstrap v5, we won't need \"sniffing\" as table element variants properly inherit\n// to the child elements, so this can be converted to a functional component\n// @vue/component\n\nexport var BTfoot = /*#__PURE__*/Vue.extend({\n name: NAME_TFOOT,\n mixins: [attrsMixin, listenersMixin, normalizeSlotMixin],\n provide: function provide() {\n return {\n bvTableRowGroup: this\n };\n },\n inject: {\n // Sniffed by `` / `` / ``\n bvTable: {\n default:\n /* istanbul ignore next */\n function _default() {\n return {};\n }\n }\n },\n inheritAttrs: false,\n props: props,\n computed: {\n // Sniffed by `` / `` / ``\n isTfoot: function isTfoot() {\n return true;\n },\n // Sniffed by `` / `` / ``\n isDark: function isDark() {\n return this.bvTable.dark;\n },\n // Sniffed by `` / `` / ``\n isStacked: function isStacked() {\n return this.bvTable.isStacked;\n },\n // Sniffed by `` / `` / ``\n isResponsive: function isResponsive() {\n return this.bvTable.isResponsive;\n },\n // Sniffed by `` / `` / ``\n // Sticky headers are only supported in thead\n isStickyHeader: function isStickyHeader() {\n return false;\n },\n // Sniffed by `` / `` / ``\n // Needed to handle header background classes, due to lack of\n // background color inheritance with Bootstrap v4 table CSS\n hasStickyHeader: function hasStickyHeader() {\n return !this.isStacked && this.bvTable.stickyHeader;\n },\n // Sniffed by `` / `` / ``\n tableVariant: function tableVariant() {\n return this.bvTable.tableVariant;\n },\n tfootClasses: function tfootClasses() {\n return [this.footVariant ? \"thead-\".concat(this.footVariant) : null];\n },\n tfootAttrs: function tfootAttrs() {\n return _objectSpread(_objectSpread({}, this.bvAttrs), {}, {\n role: 'rowgroup'\n });\n }\n },\n render: function render(h) {\n return h('tfoot', {\n class: this.tfootClasses,\n attrs: this.tfootAttrs,\n // Pass down any native listeners\n on: this.bvListeners\n }, this.normalizeSlot());\n }\n});","import { Vue } from '../../../vue';\nimport { PROP_TYPE_ARRAY_OBJECT_STRING, PROP_TYPE_BOOLEAN, PROP_TYPE_STRING } from '../../../constants/props';\nimport { SLOT_NAME_CUSTOM_FOOT } from '../../../constants/slots';\nimport { makeProp } from '../../../utils/props';\nimport { BTfoot } from '../tfoot'; // --- Props ---\n\nexport var props = {\n footClone: makeProp(PROP_TYPE_BOOLEAN, false),\n // Any Bootstrap theme variant (or custom)\n // Falls back to `headRowVariant`\n footRowVariant: makeProp(PROP_TYPE_STRING),\n // 'dark', 'light', or `null` (or custom)\n footVariant: makeProp(PROP_TYPE_STRING),\n tfootClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n tfootTrClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING)\n}; // --- Mixin ---\n// @vue/component\n\nexport var tfootMixin = Vue.extend({\n props: props,\n methods: {\n renderTFootCustom: function renderTFootCustom() {\n var h = this.$createElement;\n\n if (this.hasNormalizedSlot(SLOT_NAME_CUSTOM_FOOT)) {\n return h(BTfoot, {\n class: this.tfootClass || null,\n props: {\n footVariant: this.footVariant || this.headVariant || null\n },\n key: 'bv-tfoot-custom'\n }, this.normalizeSlot(SLOT_NAME_CUSTOM_FOOT, {\n items: this.computedItems.slice(),\n fields: this.computedFields.slice(),\n columns: this.computedFields.length\n }));\n }\n\n return h();\n },\n renderTfoot: function renderTfoot() {\n // Passing true to renderThead will make it render a tfoot\n return this.footClone ? this.renderThead(true) : this.renderTFootCustom();\n }\n }\n});","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_THEAD } from '../../constants/components';\nimport { PROP_TYPE_STRING } from '../../constants/props';\nimport { makeProp, makePropsConfigurable } from '../../utils/props';\nimport { attrsMixin } from '../../mixins/attrs';\nimport { listenersMixin } from '../../mixins/listeners';\nimport { normalizeSlotMixin } from '../../mixins/normalize-slot'; // --- Props ---\n\nexport var props = makePropsConfigurable({\n // Also sniffed by `` / `` / ``\n // Supported values: 'lite', 'dark', or `null`\n headVariant: makeProp(PROP_TYPE_STRING)\n}, NAME_THEAD); // --- Main component ---\n// TODO:\n// In Bootstrap v5, we won't need \"sniffing\" as table element variants properly inherit\n// to the child elements, so this can be converted to a functional component\n// @vue/component\n\nexport var BThead = /*#__PURE__*/Vue.extend({\n name: NAME_THEAD,\n mixins: [attrsMixin, listenersMixin, normalizeSlotMixin],\n provide: function provide() {\n return {\n bvTableRowGroup: this\n };\n },\n inject: {\n // Sniffed by `` / `` / ``\n bvTable: {\n default:\n /* istanbul ignore next */\n function _default() {\n return {};\n }\n }\n },\n inheritAttrs: false,\n props: props,\n computed: {\n // Sniffed by `` / `` / ``\n isThead: function isThead() {\n return true;\n },\n // Sniffed by `` / `` / ``\n isDark: function isDark() {\n return this.bvTable.dark;\n },\n // Sniffed by `` / `` / ``\n isStacked: function isStacked() {\n return this.bvTable.isStacked;\n },\n // Sniffed by `` / `` / ``\n isResponsive: function isResponsive() {\n return this.bvTable.isResponsive;\n },\n // Sniffed by `` / `` / ``\n // Needed to handle header background classes, due to lack of\n // background color inheritance with Bootstrap v4 table CSS\n // Sticky headers only apply to cells in table `thead`\n isStickyHeader: function isStickyHeader() {\n return !this.isStacked && this.bvTable.stickyHeader;\n },\n // Sniffed by `` / `` / ``\n // Needed to handle header background classes, due to lack of\n // background color inheritance with Bootstrap v4 table CSS\n hasStickyHeader: function hasStickyHeader() {\n return !this.isStacked && this.bvTable.stickyHeader;\n },\n // Sniffed by `` / `` / ``\n tableVariant: function tableVariant() {\n return this.bvTable.tableVariant;\n },\n theadClasses: function theadClasses() {\n return [this.headVariant ? \"thead-\".concat(this.headVariant) : null];\n },\n theadAttrs: function theadAttrs() {\n return _objectSpread({\n role: 'rowgroup'\n }, this.bvAttrs);\n }\n },\n render: function render(h) {\n return h('thead', {\n class: this.theadClasses,\n attrs: this.theadAttrs,\n // Pass down any native listeners\n on: this.bvListeners\n }, this.normalizeSlot());\n }\n});","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\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 } from '../../../constants/events';\nimport { CODE_ENTER, CODE_SPACE } from '../../../constants/key-codes';\nimport { PROP_TYPE_ARRAY_OBJECT_STRING, PROP_TYPE_STRING } from '../../../constants/props';\nimport { SLOT_NAME_THEAD_TOP } from '../../../constants/slots';\nimport { stopEvent } from '../../../utils/events';\nimport { htmlOrText } from '../../../utils/html';\nimport { identity } from '../../../utils/identity';\nimport { isUndefinedOrNull } from '../../../utils/inspect';\nimport { noop } from '../../../utils/noop';\nimport { makeProp } from '../../../utils/props';\nimport { startCase } from '../../../utils/string';\nimport { BThead } from '../thead';\nimport { BTfoot } from '../tfoot';\nimport { BTr } from '../tr';\nimport { BTh } from '../th';\nimport { filterEvent } from './filter-event';\nimport { textSelectionActive } from './text-selection-active'; // --- Helper methods ---\n\nvar getHeadSlotName = function getHeadSlotName(value) {\n return \"head(\".concat(value || '', \")\");\n};\n\nvar getFootSlotName = function getFootSlotName(value) {\n return \"foot(\".concat(value || '', \")\");\n}; // --- Props ---\n\n\nexport var props = {\n // Any Bootstrap theme variant (or custom)\n headRowVariant: makeProp(PROP_TYPE_STRING),\n // 'light', 'dark' or `null` (or custom)\n headVariant: makeProp(PROP_TYPE_STRING),\n theadClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n theadTrClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING)\n}; // --- Mixin ---\n// @vue/component\n\nexport var theadMixin = Vue.extend({\n props: props,\n methods: {\n fieldClasses: function fieldClasses(field) {\n // Header field (
) classes\n return [field.class ? field.class : '', field.thClass ? field.thClass : ''];\n },\n headClicked: function headClicked(event, field, isFoot) {\n if (this.stopIfBusy && this.stopIfBusy(event)) {\n // If table is busy (via provider) then don't propagate\n return;\n } else if (filterEvent(event)) {\n // Clicked on a non-disabled control so ignore\n return;\n } else if (textSelectionActive(this.$el)) {\n // User is selecting text, so ignore\n\n /* istanbul ignore next: JSDOM doesn't support getSelection() */\n return;\n }\n\n stopEvent(event);\n this.$emit(EVENT_NAME_HEAD_CLICKED, field.key, field, event, isFoot);\n },\n renderThead: function renderThead() {\n var _this = this;\n\n var isFoot = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var fields = this.computedFields,\n isSortable = this.isSortable,\n isSelectable = this.isSelectable,\n headVariant = this.headVariant,\n footVariant = this.footVariant,\n headRowVariant = this.headRowVariant,\n footRowVariant = this.footRowVariant;\n var h = this.$createElement; // In always stacked mode, we don't bother rendering the head/foot\n // Or if no field headings (empty table)\n\n if (this.isStackedAlways || fields.length === 0) {\n return h();\n }\n\n var hasHeadClickListener = isSortable || this.hasListener(EVENT_NAME_HEAD_CLICKED); // Reference to `selectAllRows` and `clearSelected()`, if table is selectable\n\n var selectAllRows = isSelectable ? this.selectAllRows : noop;\n var clearSelected = isSelectable ? this.clearSelected : noop; // Helper function to generate a field cell\n\n var makeCell = function makeCell(field, colIndex) {\n var label = field.label,\n labelHtml = field.labelHtml,\n variant = field.variant,\n stickyColumn = field.stickyColumn,\n key = field.key;\n var ariaLabel = null;\n\n if (!field.label.trim() && !field.headerTitle) {\n // In case field's label and title are empty/blank\n // We need to add a hint about what the column is about for non-sighted users\n\n /* istanbul ignore next */\n ariaLabel = startCase(field.key);\n }\n\n var on = {};\n\n if (hasHeadClickListener) {\n on.click = function (event) {\n _this.headClicked(event, field, isFoot);\n };\n\n on.keydown = function (event) {\n var keyCode = event.keyCode;\n\n if (keyCode === CODE_ENTER || keyCode === CODE_SPACE) {\n _this.headClicked(event, field, isFoot);\n }\n };\n }\n\n var sortAttrs = isSortable ? _this.sortTheadThAttrs(key, field, isFoot) : {};\n var sortClass = isSortable ? _this.sortTheadThClasses(key, field, isFoot) : null;\n var sortLabel = isSortable ? _this.sortTheadThLabel(key, field, isFoot) : null;\n var data = {\n class: [_this.fieldClasses(field), sortClass],\n props: {\n variant: variant,\n stickyColumn: stickyColumn\n },\n style: field.thStyle || {},\n attrs: _objectSpread(_objectSpread({\n // We only add a `tabindex` of `0` if there is a head-clicked listener\n // and the current field is sortable\n tabindex: hasHeadClickListener && field.sortable ? '0' : null,\n abbr: field.headerAbbr || null,\n title: field.headerTitle || null,\n 'aria-colindex': colIndex + 1,\n 'aria-label': ariaLabel\n }, _this.getThValues(null, key, field.thAttr, isFoot ? 'foot' : 'head', {})), sortAttrs),\n on: on,\n key: key\n }; // Handle edge case where in-document templates are used with new\n // `v-slot:name` syntax where the browser lower-cases the v-slot's\n // name (attributes become lower cased when parsed by the browser)\n // We have replaced the square bracket syntax with round brackets\n // to prevent confusion with dynamic slot names\n\n var slotNames = [getHeadSlotName(key), getHeadSlotName(key.toLowerCase()), getHeadSlotName()]; // Footer will fallback to header slot names\n\n if (isFoot) {\n slotNames = [getFootSlotName(key), getFootSlotName(key.toLowerCase()), getFootSlotName()].concat(_toConsumableArray(slotNames));\n }\n\n var scope = {\n label: label,\n column: key,\n field: field,\n isFoot: isFoot,\n // Add in row select methods\n selectAllRows: selectAllRows,\n clearSelected: clearSelected\n };\n var $content = _this.normalizeSlot(slotNames, scope) || h('div', {\n domProps: htmlOrText(labelHtml, label)\n });\n var $srLabel = sortLabel ? h('span', {\n staticClass: 'sr-only'\n }, \" (\".concat(sortLabel, \")\")) : null; // Return the header cell\n\n return h(BTh, data, [$content, $srLabel].filter(identity));\n }; // Generate the array of cells\n\n\n var $cells = fields.map(makeCell).filter(identity); // Generate the row(s)\n\n var $trs = [];\n\n if (isFoot) {\n $trs.push(h(BTr, {\n class: this.tfootTrClass,\n props: {\n variant: isUndefinedOrNull(footRowVariant) ? headRowVariant :\n /* istanbul ignore next */\n footRowVariant\n }\n }, $cells));\n } else {\n var scope = {\n columns: fields.length,\n fields: fields,\n // Add in row select methods\n selectAllRows: selectAllRows,\n clearSelected: clearSelected\n };\n $trs.push(this.normalizeSlot(SLOT_NAME_THEAD_TOP, scope) || h());\n $trs.push(h(BTr, {\n class: this.theadTrClass,\n props: {\n variant: headRowVariant\n }\n }, $cells));\n }\n\n return h(isFoot ? BTfoot : BThead, {\n class: (isFoot ? this.tfootClass : this.theadClass) || null,\n props: isFoot ? {\n footVariant: footVariant || headVariant || null\n } : {\n headVariant: headVariant || null\n },\n key: isFoot ? 'bv-tfoot' : 'bv-thead'\n }, $trs);\n }\n }\n});","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});","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_LITE } 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 { captionMixin, props as captionProps } from './helpers/mixin-caption';\nimport { colgroupMixin, props as colgroupProps } from './helpers/mixin-colgroup';\nimport { itemsMixin, props as itemsProps } from './helpers/mixin-items';\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'; // --- Props ---\n\nexport var props = makePropsConfigurable(sortKeys(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({}, idProps), captionProps), colgroupProps), itemsProps), stackedProps), tableRendererProps), tbodyProps), tfootProps), theadProps)), NAME_TABLE_LITE); // --- Main component ---\n// @vue/component\n\nexport var BTableLite = /*#__PURE__*/Vue.extend({\n name: NAME_TABLE_LITE,\n // Order of mixins is important!\n // They are merged from first to last, followed by this component\n mixins: [// General mixins\n attrsMixin, hasListenerMixin, idMixin, normalizeSlotMixin, // Required table mixins\n itemsMixin, tableRendererMixin, stackedMixin, theadMixin, tfootMixin, tbodyMixin, // Table features mixins\n // These are pretty lightweight, and are useful for lightweight tables\n captionMixin, colgroupMixin],\n props: props // Render function is provided by `tableRendererMixin`\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_SIMPLE } 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 { stackedMixin, props as stackedProps } from './helpers/mixin-stacked';\nimport { tableRendererMixin, props as tableRendererProps } from './helpers/mixin-table-renderer'; // --- Props ---\n\nexport var props = makePropsConfigurable(sortKeys(_objectSpread(_objectSpread(_objectSpread({}, idProps), stackedProps), tableRendererProps)), NAME_TABLE_SIMPLE); // --- Main component ---\n// @vue/component\n\nexport var BTableSimple = /*#__PURE__*/Vue.extend({\n name: NAME_TABLE_SIMPLE,\n // Order of mixins is important!\n // They are merged from first to last, followed by this component\n mixins: [// General mixins\n attrsMixin, hasListenerMixin, idMixin, normalizeSlotMixin, // Required table mixins\n tableRendererMixin, // Table features mixins\n // Stacked requires extra handling by users via\n // the table cell `stacked-heading` prop\n stackedMixin],\n props: props,\n computed: {\n isTableSimple: function isTableSimple() {\n return true;\n }\n } // Render function is provided by `tableRendererMixin`\n\n});","import { BTable } from './table';\nimport { BTableLite } from './table-lite';\nimport { BTableSimple } from './table-simple';\nimport { BTbody } from './tbody';\nimport { BThead } from './thead';\nimport { BTfoot } from './tfoot';\nimport { BTr } from './tr';\nimport { BTd } from './td';\nimport { BTh } from './th';\nimport { pluginFactory } from '../../utils/plugins';\nvar TableLitePlugin = /*#__PURE__*/pluginFactory({\n components: {\n BTableLite: BTableLite\n }\n});\nvar TableSimplePlugin = /*#__PURE__*/pluginFactory({\n components: {\n BTableSimple: BTableSimple,\n BTbody: BTbody,\n BThead: BThead,\n BTfoot: BTfoot,\n BTr: BTr,\n BTd: BTd,\n BTh: BTh\n }\n});\nvar TablePlugin = /*#__PURE__*/pluginFactory({\n components: {\n BTable: BTable\n },\n plugins: {\n TableLitePlugin: TableLitePlugin,\n TableSimplePlugin: TableSimplePlugin\n }\n});\nexport { // Plugins\nTablePlugin, TableLitePlugin, TableSimplePlugin // Table components\n, BTable, BTableLite, BTableSimple // Helper components\n, BTbody, BThead, BTfoot, BTr, BTd, BTh };","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\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_LINK } from '../../constants/components';\nimport { EVENT_NAME_CLICK } from '../../constants/events';\nimport { PROP_TYPE_ARRAY_STRING, PROP_TYPE_BOOLEAN, PROP_TYPE_OBJECT_STRING, PROP_TYPE_STRING } from '../../constants/props';\nimport { concat } from '../../utils/array';\nimport { attemptBlur, attemptFocus, isTag } from '../../utils/dom';\nimport { getRootEventName, stopEvent } from '../../utils/events';\nimport { isBoolean, isEvent, isFunction, isUndefined } from '../../utils/inspect';\nimport { sortKeys } from '../../utils/object';\nimport { makeProp, makePropsConfigurable, pluckProps } from '../../utils/props';\nimport { computeHref, computeRel, computeTag, isRouterLink as _isRouterLink } from '../../utils/router';\nimport { attrsMixin } from '../../mixins/attrs';\nimport { listenOnRootMixin } from '../../mixins/listen-on-root';\nimport { listenersMixin } from '../../mixins/listeners';\nimport { normalizeSlotMixin } from '../../mixins/normalize-slot'; // --- Constants ---\n\nvar ROOT_EVENT_NAME_CLICKED = getRootEventName(NAME_LINK, 'clicked'); // --- Props ---\n// `` specific props\n\nexport var routerLinkProps = {\n activeClass: makeProp(PROP_TYPE_STRING),\n append: makeProp(PROP_TYPE_BOOLEAN, false),\n event: makeProp(PROP_TYPE_ARRAY_STRING, EVENT_NAME_CLICK),\n exact: makeProp(PROP_TYPE_BOOLEAN, false),\n exactActiveClass: makeProp(PROP_TYPE_STRING),\n replace: makeProp(PROP_TYPE_BOOLEAN, false),\n routerTag: makeProp(PROP_TYPE_STRING, 'a'),\n to: makeProp(PROP_TYPE_OBJECT_STRING)\n}; // `` specific props\n\nexport var nuxtLinkProps = {\n noPrefetch: makeProp(PROP_TYPE_BOOLEAN, false),\n // Must be `null` to fall back to the value defined in the\n // `nuxt.config.js` configuration file for `router.prefetchLinks`\n // We convert `null` to `undefined`, so that Nuxt.js will use the\n // compiled default\n // Vue treats `undefined` as default of `false` for Boolean props,\n // so we must set it as `null` here to be a true tri-state prop\n prefetch: makeProp(PROP_TYPE_BOOLEAN, null)\n}; // All `` props\n\nexport var props = makePropsConfigurable(sortKeys(_objectSpread(_objectSpread(_objectSpread({}, nuxtLinkProps), routerLinkProps), {}, {\n active: makeProp(PROP_TYPE_BOOLEAN, false),\n disabled: makeProp(PROP_TYPE_BOOLEAN, false),\n href: makeProp(PROP_TYPE_STRING),\n // Must be `null` if no value provided\n rel: makeProp(PROP_TYPE_STRING, null),\n // To support 3rd party router links based on `` (i.e. `g-link` for Gridsome)\n // Default is to auto choose between `` and ``\n // Gridsome doesn't provide a mechanism to auto detect and has caveats\n // such as not supporting FQDN URLs or hash only URLs\n routerComponentName: makeProp(PROP_TYPE_STRING),\n target: makeProp(PROP_TYPE_STRING, '_self')\n})), NAME_LINK); // --- Main component ---\n// @vue/component\n\nexport var BLink = /*#__PURE__*/Vue.extend({\n name: NAME_LINK,\n // Mixin order is important!\n mixins: [attrsMixin, listenersMixin, listenOnRootMixin, normalizeSlotMixin],\n inheritAttrs: false,\n props: props,\n computed: {\n computedTag: function computedTag() {\n // We don't pass `this` as the first arg as we need reactivity of the props\n var to = this.to,\n disabled = this.disabled,\n routerComponentName = this.routerComponentName;\n return computeTag({\n to: to,\n disabled: disabled,\n routerComponentName: routerComponentName\n }, this);\n },\n isRouterLink: function isRouterLink() {\n return _isRouterLink(this.computedTag);\n },\n computedRel: function computedRel() {\n // We don't pass `this` as the first arg as we need reactivity of the props\n var target = this.target,\n rel = this.rel;\n return computeRel({\n target: target,\n rel: rel\n });\n },\n computedHref: function computedHref() {\n // We don't pass `this` as the first arg as we need reactivity of the props\n var to = this.to,\n href = this.href;\n return computeHref({\n to: to,\n href: href\n }, this.computedTag);\n },\n computedProps: function computedProps() {\n var prefetch = this.prefetch;\n return this.isRouterLink ? _objectSpread(_objectSpread({}, pluckProps(_objectSpread(_objectSpread({}, routerLinkProps), nuxtLinkProps), this)), {}, {\n // Coerce `prefetch` value `null` to be `undefined`\n prefetch: isBoolean(prefetch) ? prefetch : undefined,\n // Pass `router-tag` as `tag` prop\n tag: this.routerTag\n }) : {};\n },\n computedAttrs: function computedAttrs() {\n var bvAttrs = this.bvAttrs,\n href = this.computedHref,\n rel = this.computedRel,\n disabled = this.disabled,\n target = this.target,\n routerTag = this.routerTag,\n isRouterLink = this.isRouterLink;\n return _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, bvAttrs), href ? {\n href: href\n } : {}), isRouterLink && !isTag(routerTag, 'a') ? {} : {\n rel: rel,\n target: target\n }), {}, {\n tabindex: disabled ? '-1' : isUndefined(bvAttrs.tabindex) ? null : bvAttrs.tabindex,\n 'aria-disabled': disabled ? 'true' : null\n });\n },\n computedListeners: function computedListeners() {\n return _objectSpread(_objectSpread({}, this.bvListeners), {}, {\n // We want to overwrite any click handler since our callback\n // will invoke the user supplied handler(s) if `!this.disabled`\n click: this.onClick\n });\n }\n },\n methods: {\n onClick: function onClick(event) {\n var _arguments = arguments;\n var eventIsEvent = isEvent(event);\n var isRouterLink = this.isRouterLink;\n var suppliedHandler = this.bvListeners.click;\n\n if (eventIsEvent && this.disabled) {\n // Stop event from bubbling up\n // Kill the event loop attached to this specific `EventTarget`\n // Needed to prevent `vue-router` for doing its thing\n stopEvent(event, {\n immediatePropagation: true\n });\n } else {\n /* istanbul ignore next: difficult to test, but we know it works */\n if (isRouterLink && event.currentTarget.__vue__) {\n // Router links do not emit instance `click` events, so we\n // add in an `$emit('click', event)` on its Vue instance\n event.currentTarget.__vue__.$emit(EVENT_NAME_CLICK, event);\n } // Call the suppliedHandler(s), if any provided\n\n\n concat(suppliedHandler).filter(function (h) {\n return isFunction(h);\n }).forEach(function (handler) {\n handler.apply(void 0, _toConsumableArray(_arguments));\n }); // Emit the global `$root` click event\n\n this.emitOnRoot(ROOT_EVENT_NAME_CLICKED, event); // TODO: Remove deprecated 'clicked::link' event with next major release\n\n this.emitOnRoot('clicked::link', event);\n } // Stop scroll-to-top behavior or navigation on\n // regular links when href is just '#'\n\n\n if (eventIsEvent && !isRouterLink && this.computedHref === '#') {\n stopEvent(event, {\n propagation: false\n });\n }\n },\n focus: function focus() {\n attemptFocus(this.$el);\n },\n blur: function blur() {\n attemptBlur(this.$el);\n }\n },\n render: function render(h) {\n var active = this.active,\n disabled = this.disabled;\n return h(this.computedTag, _defineProperty({\n class: {\n active: active,\n disabled: disabled\n },\n attrs: this.computedAttrs,\n props: this.computedProps\n }, this.isRouterLink ? 'nativeOn' : 'on', this.computedListeners), this.normalizeSlot());\n }\n});","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 { mergeData } from '../../vue';\nimport { NAME_COL } from '../../constants/components';\nimport { PROP_TYPE_BOOLEAN, PROP_TYPE_BOOLEAN_NUMBER_STRING, PROP_TYPE_NUMBER_STRING, PROP_TYPE_STRING } from '../../constants/props';\nimport { RX_COL_CLASS } from '../../constants/regex';\nimport { arrayIncludes } from '../../utils/array';\nimport { getBreakpointsUpCached } from '../../utils/config';\nimport { identity } from '../../utils/identity';\nimport { isUndefinedOrNull } from '../../utils/inspect';\nimport { memoize } from '../../utils/memoize';\nimport { assign, create, keys, sortKeys } from '../../utils/object';\nimport { makeProp, makePropsConfigurable, suffixPropName } from '../../utils/props';\nimport { lowerCase } from '../../utils/string'; // --- Constants ---\n\nvar ALIGN_SELF_VALUES = ['auto', 'start', 'end', 'center', 'baseline', 'stretch']; // --- Helper methods ---\n// Compute a breakpoint class name\n\nvar computeBreakpoint = function computeBreakpoint(type, breakpoint, value) {\n var className = type;\n\n if (isUndefinedOrNull(value) || value === false) {\n return undefined;\n }\n\n if (breakpoint) {\n className += \"-\".concat(breakpoint);\n } // Handling the boolean style prop when accepting `[Boolean, String, Number]`\n // means Vue will not convert `` to `sm: true` for us\n // Since the default is `false`, '' indicates the prop's presence\n\n\n if (type === 'col' && (value === '' || value === true)) {\n // .col-md\n return lowerCase(className);\n } // .order-md-6\n\n\n className += \"-\".concat(value);\n return lowerCase(className);\n}; // Memoized function for better performance on generating class names\n\n\nvar computeBreakpointClass = memoize(computeBreakpoint); // Cached copy of the breakpoint prop names\n\nvar breakpointPropMap = create(null); // --- Props ---\n// Prop generator for lazy generation of props\n\nexport var generateProps = function generateProps() {\n // Grab the breakpoints from the cached config (exclude the '' (xs) breakpoint)\n var breakpoints = getBreakpointsUpCached().filter(identity); // i.e. 'col-sm', 'col-md-6', 'col-lg-auto', ...\n\n var breakpointCol = breakpoints.reduce(function (props, breakpoint) {\n props[breakpoint] = makeProp(PROP_TYPE_BOOLEAN_NUMBER_STRING);\n return props;\n }, create(null)); // i.e. 'offset-md-1', 'offset-lg-12', ...\n\n var breakpointOffset = breakpoints.reduce(function (props, breakpoint) {\n props[suffixPropName(breakpoint, 'offset')] = makeProp(PROP_TYPE_NUMBER_STRING);\n return props;\n }, create(null)); // i.e. 'order-md-1', 'order-lg-12', ...\n\n var breakpointOrder = breakpoints.reduce(function (props, breakpoint) {\n props[suffixPropName(breakpoint, 'order')] = makeProp(PROP_TYPE_NUMBER_STRING);\n return props;\n }, create(null)); // For loop doesn't need to check `.hasOwnProperty()`\n // when using an object created from `null`\n\n breakpointPropMap = assign(create(null), {\n col: keys(breakpointCol),\n offset: keys(breakpointOffset),\n order: keys(breakpointOrder)\n }); // Return the generated props\n\n return makePropsConfigurable(sortKeys(_objectSpread(_objectSpread(_objectSpread(_objectSpread({}, breakpointCol), breakpointOffset), breakpointOrder), {}, {\n // Flex alignment\n alignSelf: makeProp(PROP_TYPE_STRING, null, function (value) {\n return arrayIncludes(ALIGN_SELF_VALUES, value);\n }),\n // Generic flexbox 'col' (xs)\n col: makeProp(PROP_TYPE_BOOLEAN, false),\n // i.e. 'col-1', 'col-2', 'col-auto', ...\n cols: makeProp(PROP_TYPE_NUMBER_STRING),\n offset: makeProp(PROP_TYPE_NUMBER_STRING),\n order: makeProp(PROP_TYPE_NUMBER_STRING),\n tag: makeProp(PROP_TYPE_STRING, 'div')\n })), NAME_COL);\n}; // --- Main component ---\n// We do not use Vue.extend here as that would evaluate the props\n// immediately, which we do not want to happen\n// @vue/component\n\nexport var BCol = {\n name: NAME_COL,\n functional: true,\n\n get props() {\n // Allow props to be lazy evaled on first access and\n // then they become a non-getter afterwards.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/get#Smart_self-overwriting_lazy_getters\n delete this.props; // eslint-disable-next-line no-return-assign\n\n return this.props = generateProps();\n },\n\n render: function render(h, _ref) {\n var _classList$push;\n\n var props = _ref.props,\n data = _ref.data,\n children = _ref.children;\n var cols = props.cols,\n offset = props.offset,\n order = props.order,\n alignSelf = props.alignSelf;\n var classList = []; // Loop through `col`, `offset`, `order` breakpoint props\n\n for (var type in breakpointPropMap) {\n // Returns colSm, offset, offsetSm, orderMd, etc.\n var _keys = breakpointPropMap[type];\n\n for (var i = 0; i < _keys.length; i++) {\n // computeBreakpoint(col, colSm => Sm, value=[String, Number, Boolean])\n var c = computeBreakpointClass(type, _keys[i].replace(type, ''), props[_keys[i]]); // If a class is returned, push it onto the array.\n\n if (c) {\n classList.push(c);\n }\n }\n }\n\n var hasColClasses = classList.some(function (className) {\n return RX_COL_CLASS.test(className);\n });\n classList.push((_classList$push = {\n // Default to .col if no other col-{bp}-* classes generated nor `cols` specified.\n col: props.col || !hasColClasses && !cols\n }, _defineProperty(_classList$push, \"col-\".concat(cols), cols), _defineProperty(_classList$push, \"offset-\".concat(offset), offset), _defineProperty(_classList$push, \"order-\".concat(order), order), _defineProperty(_classList$push, \"align-self-\".concat(alignSelf), alignSelf), _classList$push));\n return h(props.tag, mergeData(data, {\n class: classList\n }), children);\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_PAGINATION } from '../../constants/components';\nimport { EVENT_NAME_CHANGE, EVENT_NAME_PAGE_CLICK } from '../../constants/events';\nimport { PROP_TYPE_NUMBER_STRING, PROP_TYPE_STRING } from '../../constants/props';\nimport { BvEvent } from '../../utils/bv-event.class';\nimport { attemptFocus, isVisible } from '../../utils/dom';\nimport { isUndefinedOrNull } from '../../utils/inspect';\nimport { mathCeil, mathMax } from '../../utils/math';\nimport { toInteger } from '../../utils/number';\nimport { sortKeys } from '../../utils/object';\nimport { makeProp, makePropsConfigurable } from '../../utils/props';\nimport { MODEL_PROP_NAME, paginationMixin, props as paginationProps } from '../../mixins/pagination'; // --- Constants ---\n\nvar DEFAULT_PER_PAGE = 20;\nvar DEFAULT_TOTAL_ROWS = 0; // --- Helper methods ---\n// Sanitize the provided per page number (converting to a number)\n\nvar sanitizePerPage = function sanitizePerPage(value) {\n return mathMax(toInteger(value) || DEFAULT_PER_PAGE, 1);\n}; // Sanitize the provided total rows number (converting to a number)\n\n\nvar sanitizeTotalRows = function sanitizeTotalRows(value) {\n return mathMax(toInteger(value) || DEFAULT_TOTAL_ROWS, 0);\n}; // --- Props ---\n\n\nexport var props = makePropsConfigurable(sortKeys(_objectSpread(_objectSpread({}, paginationProps), {}, {\n ariaControls: makeProp(PROP_TYPE_STRING),\n perPage: makeProp(PROP_TYPE_NUMBER_STRING, DEFAULT_PER_PAGE),\n totalRows: makeProp(PROP_TYPE_NUMBER_STRING, DEFAULT_TOTAL_ROWS)\n})), NAME_PAGINATION); // --- Main component ---\n// @vue/component\n\nexport var BPagination = /*#__PURE__*/Vue.extend({\n name: NAME_PAGINATION,\n // The render function is brought in via the `paginationMixin`\n mixins: [paginationMixin],\n props: props,\n computed: {\n numberOfPages: function numberOfPages() {\n var result = mathCeil(sanitizeTotalRows(this.totalRows) / sanitizePerPage(this.perPage));\n return result < 1 ? 1 : result;\n },\n // Used for watching changes to `perPage` and `numberOfPages`\n pageSizeNumberOfPages: function pageSizeNumberOfPages() {\n return {\n perPage: sanitizePerPage(this.perPage),\n totalRows: sanitizeTotalRows(this.totalRows),\n numberOfPages: this.numberOfPages\n };\n }\n },\n watch: {\n pageSizeNumberOfPages: function pageSizeNumberOfPages(newValue, oldValue) {\n if (!isUndefinedOrNull(oldValue)) {\n if (newValue.perPage !== oldValue.perPage && newValue.totalRows === oldValue.totalRows) {\n // If the page size changes, reset to page 1\n this.currentPage = 1;\n } else if (newValue.numberOfPages !== oldValue.numberOfPages && this.currentPage > newValue.numberOfPages) {\n // If `numberOfPages` changes and is less than\n // the `currentPage` number, reset to page 1\n this.currentPage = 1;\n }\n }\n\n this.localNumberOfPages = newValue.numberOfPages;\n }\n },\n created: function created() {\n var _this = this;\n\n // Set the initial page count\n this.localNumberOfPages = this.numberOfPages; // Set the initial page value\n\n var currentPage = toInteger(this[MODEL_PROP_NAME], 0);\n\n if (currentPage > 0) {\n this.currentPage = currentPage;\n } else {\n this.$nextTick(function () {\n // If this value parses to `NaN` or a value less than `1`\n // trigger an initial emit of `null` if no page specified\n _this.currentPage = 0;\n });\n }\n },\n methods: {\n // These methods are used by the render function\n onClick: function onClick(event, pageNumber) {\n var _this2 = this;\n\n // Dont do anything if clicking the current active page\n if (pageNumber === this.currentPage) {\n return;\n }\n\n var target = event.target; // Emit a user-cancelable `page-click` event\n\n var clickEvt = new BvEvent(EVENT_NAME_PAGE_CLICK, {\n cancelable: true,\n vueTarget: this,\n target: target\n });\n this.$emit(clickEvt.type, clickEvt, pageNumber);\n\n if (clickEvt.defaultPrevented) {\n return;\n } // Update the `v-model`\n\n\n this.currentPage = pageNumber; // Emit event triggered by user interaction\n\n this.$emit(EVENT_NAME_CHANGE, this.currentPage); // Keep the current button focused if possible\n\n this.$nextTick(function () {\n if (isVisible(target) && _this2.$el.contains(target)) {\n attemptFocus(target);\n } else {\n _this2.focusCurrent();\n }\n });\n },\n makePage: function makePage(pageNum) {\n return pageNum;\n },\n\n /* istanbul ignore next */\n linkProps: function linkProps() {\n // No props, since we render a plain button\n return {};\n }\n }\n});","import { BPagination } from './pagination';\nimport { pluginFactory } from '../../utils/plugins';\nvar PaginationPlugin = /*#__PURE__*/pluginFactory({\n components: {\n BPagination: BPagination\n }\n});\nexport { PaginationPlugin, BPagination };","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// Generic Bootstrap v4 fade (no-fade) transition component\n//\n// Assumes that `show` class is not required when\n// the transition has finished the enter transition\n// (show and fade classes are only applied during transition)\nimport { Vue, mergeData } from '../../vue';\nimport { NAME_TRANSITION } from '../../constants/components';\nimport { PROP_TYPE_BOOLEAN, PROP_TYPE_OBJECT, PROP_TYPE_STRING } from '../../constants/props';\nimport { isPlainObject } from '../../utils/inspect';\nimport { makeProp } from '../../utils/props'; // --- Constants ---\n\nvar NO_FADE_PROPS = {\n name: '',\n enterClass: '',\n enterActiveClass: '',\n enterToClass: 'show',\n leaveClass: 'show',\n leaveActiveClass: '',\n leaveToClass: ''\n};\n\nvar FADE_PROPS = _objectSpread(_objectSpread({}, NO_FADE_PROPS), {}, {\n enterActiveClass: 'fade',\n leaveActiveClass: 'fade'\n}); // --- Props ---\n\n\nexport var props = {\n // Has no effect if `trans-props` provided\n appear: makeProp(PROP_TYPE_BOOLEAN, false),\n // Can be overridden by user supplied `trans-props`\n mode: makeProp(PROP_TYPE_STRING),\n // Only applicable to the built in transition\n // Has no effect if `trans-props` provided\n noFade: makeProp(PROP_TYPE_BOOLEAN, false),\n // For user supplied transitions (if needed)\n transProps: makeProp(PROP_TYPE_OBJECT)\n}; // --- Main component ---\n// @vue/component\n\nexport var BVTransition = /*#__PURE__*/Vue.extend({\n name: NAME_TRANSITION,\n functional: true,\n props: props,\n render: function render(h, _ref) {\n var children = _ref.children,\n data = _ref.data,\n props = _ref.props;\n var transProps = props.transProps;\n\n if (!isPlainObject(transProps)) {\n transProps = props.noFade ? NO_FADE_PROPS : FADE_PROPS;\n\n if (props.appear) {\n // Default the appear classes to equal the enter classes\n transProps = _objectSpread(_objectSpread({}, transProps), {}, {\n appear: true,\n appearClass: transProps.enterClass,\n appearActiveClass: transProps.enterActiveClass,\n appearToClass: transProps.enterToClass\n });\n }\n }\n\n transProps = _objectSpread(_objectSpread({\n mode: props.mode\n }, transProps), {}, {\n // We always need `css` true\n css: true\n });\n return h('transition', // Any transition event listeners will get merged here\n mergeData(data, {\n props: transProps\n }), children);\n }\n});","import { Vue } from '../../vue';\nimport { NAME_TRANSPORTER, NAME_TRANSPORTER_TARGET } from '../../constants/components';\nimport { IS_BROWSER } from '../../constants/env';\nimport { PROP_TYPE_ARRAY_FUNCTION, PROP_TYPE_BOOLEAN, PROP_TYPE_STRING } from '../../constants/props';\nimport { HTMLElement } from '../../constants/safe-types';\nimport { concat } from '../../utils/array';\nimport { removeNode, select } from '../../utils/dom';\nimport { identity } from '../../utils/identity';\nimport { isFunction, isString } from '../../utils/inspect';\nimport { normalizeSlotMixin } from '../../mixins/normalize-slot';\nimport { makeProp } from '../../utils/props'; // --- Helper components ---\n// BVTransporter/BVTransporterTarget:\n//\n// Single root node portaling of content, which retains parent/child hierarchy\n// Unlike Portal-Vue where portaled content is no longer a descendent of its\n// intended parent components\n//\n// Private components for use by Tooltips, Popovers and Modals\n//\n// Based on vue-simple-portal\n// https://github.com/LinusBorg/vue-simple-portal\n// Transporter target used by BVTransporter\n// Supports only a single root element\n// @vue/component\n\nvar BVTransporterTarget = /*#__PURE__*/Vue.extend({\n // As an abstract component, it doesn't appear in the $parent chain of\n // components, which means the next parent of any component rendered inside\n // of this one will be the parent from which is was portal'd\n abstract: true,\n name: NAME_TRANSPORTER_TARGET,\n props: {\n // Even though we only support a single root element,\n // VNodes are always passed as an array\n nodes: makeProp(PROP_TYPE_ARRAY_FUNCTION)\n },\n data: function data(vm) {\n return {\n updatedNodes: vm.nodes\n };\n },\n destroyed: function destroyed() {\n removeNode(this.$el);\n },\n render: function render(h) {\n var updatedNodes = this.updatedNodes;\n var $nodes = isFunction(updatedNodes) ? updatedNodes({}) : updatedNodes;\n $nodes = concat($nodes).filter(identity);\n\n if ($nodes && $nodes.length > 0 && !$nodes[0].text) {\n return $nodes[0];\n }\n /* istanbul ignore next */\n\n\n return h();\n }\n}); // --- Props ---\n\nexport var props = {\n // String: CSS selector,\n // HTMLElement: Element reference\n // Mainly needed for tooltips/popovers inside modals\n container: makeProp([HTMLElement, PROP_TYPE_STRING], 'body'),\n disabled: makeProp(PROP_TYPE_BOOLEAN, false),\n // This should be set to match the root element type\n tag: makeProp(PROP_TYPE_STRING, 'div')\n}; // --- Main component ---\n// @vue/component\n\nexport var BVTransporter = /*#__PURE__*/Vue.extend({\n name: NAME_TRANSPORTER,\n mixins: [normalizeSlotMixin],\n props: props,\n watch: {\n disabled: {\n immediate: true,\n handler: function handler(disabled) {\n disabled ? this.unmountTarget() : this.$nextTick(this.mountTarget);\n }\n }\n },\n created: function created() {\n // Create private non-reactive props\n this.$_defaultFn = null;\n this.$_target = null;\n },\n beforeMount: function beforeMount() {\n this.mountTarget();\n },\n updated: function updated() {\n // We need to make sure that all children have completed updating\n // before rendering in the target\n // `vue-simple-portal` has the this in a `$nextTick()`,\n // while `portal-vue` doesn't\n // Just trying to see if the `$nextTick()` delay is required or not\n // Since all slots in Vue 2.6.x are always functions\n this.updateTarget();\n },\n beforeDestroy: function beforeDestroy() {\n this.unmountTarget();\n this.$_defaultFn = null;\n },\n methods: {\n // Get the element which the target should be appended to\n getContainer: function getContainer() {\n /* istanbul ignore else */\n if (IS_BROWSER) {\n var container = this.container;\n return isString(container) ? select(container) : container;\n } else {\n return null;\n }\n },\n // Mount the target\n mountTarget: function mountTarget() {\n if (!this.$_target) {\n var $container = this.getContainer();\n\n if ($container) {\n var $el = document.createElement('div');\n $container.appendChild($el);\n this.$_target = new BVTransporterTarget({\n el: $el,\n parent: this,\n propsData: {\n // Initial nodes to be rendered\n nodes: concat(this.normalizeSlot())\n }\n });\n }\n }\n },\n // Update the content of the target\n updateTarget: function updateTarget() {\n if (IS_BROWSER && this.$_target) {\n var defaultFn = this.$scopedSlots.default;\n\n if (!this.disabled) {\n /* istanbul ignore else: only applicable in Vue 2.5.x */\n if (defaultFn && this.$_defaultFn !== defaultFn) {\n // We only update the target component if the scoped slot\n // function is a fresh one. The new slot syntax (since Vue 2.6)\n // can cache unchanged slot functions and we want to respect that here\n this.$_target.updatedNodes = defaultFn;\n } else if (!defaultFn) {\n // We also need to be back compatible with non-scoped default slot (i.e. 2.5.x)\n this.$_target.updatedNodes = this.$slots.default;\n }\n } // Update the scoped slot function cache\n\n\n this.$_defaultFn = defaultFn;\n }\n },\n // Unmount the target\n unmountTarget: function unmountTarget() {\n this.$_target && this.$_target.$destroy();\n this.$_target = null;\n }\n },\n render: function render(h) {\n // This component has no root element, so only a single VNode is allowed\n if (this.disabled) {\n var $nodes = concat(this.normalizeSlot()).filter(identity);\n\n if ($nodes.length > 0 && !$nodes[0].text) {\n return $nodes[0];\n }\n }\n\n return h();\n }\n});","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _get(target, property, receiver) { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { BvEvent } from '../../../utils/bv-event.class';\nimport { defineProperties, readonlyDescriptor } from '../../../utils/object';\n\nvar BvModalEvent = /*#__PURE__*/function (_BvEvent) {\n _inherits(BvModalEvent, _BvEvent);\n\n var _super = _createSuper(BvModalEvent);\n\n function BvModalEvent(type) {\n var _this;\n\n var eventInit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _classCallCheck(this, BvModalEvent);\n\n _this = _super.call(this, type, eventInit); // Freeze our new props as readonly, but leave them enumerable\n\n defineProperties(_assertThisInitialized(_this), {\n trigger: readonlyDescriptor()\n });\n return _this;\n }\n\n _createClass(BvModalEvent, null, [{\n key: \"Defaults\",\n get: function get() {\n return _objectSpread(_objectSpread({}, _get(_getPrototypeOf(BvModalEvent), \"Defaults\", this)), {}, {\n trigger: null\n });\n }\n }]);\n\n return BvModalEvent;\n}(BvEvent); // Named exports\n\n\nexport { BvModalEvent };","/**\n * Private ModalManager helper\n * Handles controlling modal stacking zIndexes and body adjustments/classes\n */\nimport { Vue } from '../../../vue';\nimport { IS_BROWSER } from '../../../constants/env';\nimport { HOOK_EVENT_NAME_BEFORE_DESTROY } from '../../../constants/events';\nimport { addClass, getAttr, getBCR, getCS, getStyle, hasAttr, removeAttr, removeClass, requestAF, selectAll, setAttr, setStyle } from '../../../utils/dom';\nimport { isNull } from '../../../utils/inspect';\nimport { toFloat, toInteger } from '../../../utils/number'; // --- Constants ---\n// Default modal backdrop z-index\n\nvar DEFAULT_ZINDEX = 1040; // Selectors for padding/margin adjustments\n\nvar SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\nvar SELECTOR_STICKY_CONTENT = '.sticky-top';\nvar SELECTOR_NAVBAR_TOGGLER = '.navbar-toggler'; // --- Main component ---\n// @vue/component\n\nvar ModalManager = /*#__PURE__*/Vue.extend({\n data: function data() {\n return {\n modals: [],\n baseZIndex: null,\n scrollbarWidth: null,\n isBodyOverflowing: false\n };\n },\n computed: {\n modalCount: function modalCount() {\n return this.modals.length;\n },\n modalsAreOpen: function modalsAreOpen() {\n return this.modalCount > 0;\n }\n },\n watch: {\n modalCount: function modalCount(newCount, oldCount) {\n if (IS_BROWSER) {\n this.getScrollbarWidth();\n\n if (newCount > 0 && oldCount === 0) {\n // Transitioning to modal(s) open\n this.checkScrollbar();\n this.setScrollbar();\n addClass(document.body, 'modal-open');\n } else if (newCount === 0 && oldCount > 0) {\n // Transitioning to modal(s) closed\n this.resetScrollbar();\n removeClass(document.body, 'modal-open');\n }\n\n setAttr(document.body, 'data-modal-open-count', String(newCount));\n }\n },\n modals: function modals(newValue) {\n var _this = this;\n\n this.checkScrollbar();\n requestAF(function () {\n _this.updateModals(newValue || []);\n });\n }\n },\n methods: {\n // Public methods\n registerModal: function registerModal(modal) {\n var _this2 = this;\n\n // Register the modal if not already registered\n if (modal && this.modals.indexOf(modal) === -1) {\n // Add modal to modals array\n this.modals.push(modal);\n modal.$once(HOOK_EVENT_NAME_BEFORE_DESTROY, function () {\n _this2.unregisterModal(modal);\n });\n }\n },\n unregisterModal: function unregisterModal(modal) {\n var index = this.modals.indexOf(modal);\n\n if (index > -1) {\n // Remove modal from modals array\n this.modals.splice(index, 1); // Reset the modal's data\n\n if (!(modal._isBeingDestroyed || modal._isDestroyed)) {\n this.resetModal(modal);\n }\n }\n },\n getBaseZIndex: function getBaseZIndex() {\n if (isNull(this.baseZIndex) && IS_BROWSER) {\n // Create a temporary `div.modal-backdrop` to get computed z-index\n var div = document.createElement('div');\n addClass(div, 'modal-backdrop');\n addClass(div, 'd-none');\n setStyle(div, 'display', 'none');\n document.body.appendChild(div);\n this.baseZIndex = toInteger(getCS(div).zIndex, DEFAULT_ZINDEX);\n document.body.removeChild(div);\n }\n\n return this.baseZIndex || DEFAULT_ZINDEX;\n },\n getScrollbarWidth: function getScrollbarWidth() {\n if (isNull(this.scrollbarWidth) && IS_BROWSER) {\n // Create a temporary `div.measure-scrollbar` to get computed z-index\n var div = document.createElement('div');\n addClass(div, 'modal-scrollbar-measure');\n document.body.appendChild(div);\n this.scrollbarWidth = getBCR(div).width - div.clientWidth;\n document.body.removeChild(div);\n }\n\n return this.scrollbarWidth || 0;\n },\n // Private methods\n updateModals: function updateModals(modals) {\n var _this3 = this;\n\n var baseZIndex = this.getBaseZIndex();\n var scrollbarWidth = this.getScrollbarWidth();\n modals.forEach(function (modal, index) {\n // We update data values on each modal\n modal.zIndex = baseZIndex + index;\n modal.scrollbarWidth = scrollbarWidth;\n modal.isTop = index === _this3.modals.length - 1;\n modal.isBodyOverflowing = _this3.isBodyOverflowing;\n });\n },\n resetModal: function resetModal(modal) {\n if (modal) {\n modal.zIndex = this.getBaseZIndex();\n modal.isTop = true;\n modal.isBodyOverflowing = false;\n }\n },\n checkScrollbar: function checkScrollbar() {\n // Determine if the body element is overflowing\n var _getBCR = getBCR(document.body),\n left = _getBCR.left,\n right = _getBCR.right;\n\n this.isBodyOverflowing = left + right < window.innerWidth;\n },\n setScrollbar: function setScrollbar() {\n var body = document.body; // Storage place to cache changes to margins and padding\n // Note: This assumes the following element types are not added to the\n // document after the modal has opened.\n\n body._paddingChangedForModal = body._paddingChangedForModal || [];\n body._marginChangedForModal = body._marginChangedForModal || [];\n\n if (this.isBodyOverflowing) {\n var scrollbarWidth = this.scrollbarWidth; // Adjust fixed content padding\n\n /* istanbul ignore next: difficult to test in JSDOM */\n\n selectAll(SELECTOR_FIXED_CONTENT).forEach(function (el) {\n var actualPadding = getStyle(el, 'paddingRight') || '';\n setAttr(el, 'data-padding-right', actualPadding);\n setStyle(el, 'paddingRight', \"\".concat(toFloat(getCS(el).paddingRight, 0) + scrollbarWidth, \"px\"));\n\n body._paddingChangedForModal.push(el);\n }); // Adjust sticky content margin\n\n /* istanbul ignore next: difficult to test in JSDOM */\n\n selectAll(SELECTOR_STICKY_CONTENT).forEach(function (el)\n /* istanbul ignore next */\n {\n var actualMargin = getStyle(el, 'marginRight') || '';\n setAttr(el, 'data-margin-right', actualMargin);\n setStyle(el, 'marginRight', \"\".concat(toFloat(getCS(el).marginRight, 0) - scrollbarWidth, \"px\"));\n\n body._marginChangedForModal.push(el);\n }); // Adjust margin\n\n /* istanbul ignore next: difficult to test in JSDOM */\n\n selectAll(SELECTOR_NAVBAR_TOGGLER).forEach(function (el)\n /* istanbul ignore next */\n {\n var actualMargin = getStyle(el, 'marginRight') || '';\n setAttr(el, 'data-margin-right', actualMargin);\n setStyle(el, 'marginRight', \"\".concat(toFloat(getCS(el).marginRight, 0) + scrollbarWidth, \"px\"));\n\n body._marginChangedForModal.push(el);\n }); // Adjust body padding\n\n var actualPadding = getStyle(body, 'paddingRight') || '';\n setAttr(body, 'data-padding-right', actualPadding);\n setStyle(body, 'paddingRight', \"\".concat(toFloat(getCS(body).paddingRight, 0) + scrollbarWidth, \"px\"));\n }\n },\n resetScrollbar: function resetScrollbar() {\n var body = document.body;\n\n if (body._paddingChangedForModal) {\n // Restore fixed content padding\n body._paddingChangedForModal.forEach(function (el) {\n /* istanbul ignore next: difficult to test in JSDOM */\n if (hasAttr(el, 'data-padding-right')) {\n setStyle(el, 'paddingRight', getAttr(el, 'data-padding-right') || '');\n removeAttr(el, 'data-padding-right');\n }\n });\n }\n\n if (body._marginChangedForModal) {\n // Restore sticky content and navbar-toggler margin\n body._marginChangedForModal.forEach(function (el) {\n /* istanbul ignore next: difficult to test in JSDOM */\n if (hasAttr(el, 'data-margin-right')) {\n setStyle(el, 'marginRight', getAttr(el, 'data-margin-right') || '');\n removeAttr(el, 'data-margin-right');\n }\n });\n }\n\n body._paddingChangedForModal = null;\n body._marginChangedForModal = null; // Restore body padding\n\n if (hasAttr(body, 'data-padding-right')) {\n setStyle(body, 'paddingRight', getAttr(body, 'data-padding-right') || '');\n removeAttr(body, 'data-padding-right');\n }\n }\n }\n}); // Create and export our modal manager instance\n\nexport var modalManager = new ModalManager();","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 { COMPONENT_UID_KEY, Vue } from '../../vue';\nimport { NAME_MODAL } from '../../constants/components';\nimport { IS_BROWSER } from '../../constants/env';\nimport { EVENT_NAME_CANCEL, EVENT_NAME_CHANGE, EVENT_NAME_CLOSE, EVENT_NAME_HIDDEN, EVENT_NAME_HIDE, EVENT_NAME_OK, EVENT_NAME_SHOW, EVENT_NAME_SHOWN, EVENT_NAME_TOGGLE, EVENT_OPTIONS_NO_CAPTURE } from '../../constants/events';\nimport { CODE_ESC } from '../../constants/key-codes';\nimport { PROP_TYPE_ARRAY_OBJECT_STRING, PROP_TYPE_ARRAY_STRING, PROP_TYPE_BOOLEAN, PROP_TYPE_OBJECT, PROP_TYPE_STRING } from '../../constants/props';\nimport { HTMLElement } from '../../constants/safe-types';\nimport { SLOT_NAME_DEFAULT, SLOT_NAME_MODAL_BACKDROP, SLOT_NAME_MODAL_CANCEL, SLOT_NAME_MODAL_FOOTER, SLOT_NAME_MODAL_HEADER, SLOT_NAME_MODAL_HEADER_CLOSE, SLOT_NAME_MODAL_OK, SLOT_NAME_MODAL_TITLE } from '../../constants/slots';\nimport { arrayIncludes, concat } from '../../utils/array';\nimport { attemptFocus, closest, contains, getActiveElement as _getActiveElement, getTabables, requestAF, select } from '../../utils/dom';\nimport { getRootActionEventName, getRootEventName, eventOn, eventOff } from '../../utils/events';\nimport { htmlOrText } from '../../utils/html';\nimport { identity } from '../../utils/identity';\nimport { isString, isUndefinedOrNull } from '../../utils/inspect';\nimport { makeModelMixin } from '../../utils/model';\nimport { sortKeys } from '../../utils/object';\nimport { observeDom } from '../../utils/observe-dom';\nimport { makeProp, makePropsConfigurable } from '../../utils/props';\nimport { attrsMixin } from '../../mixins/attrs';\nimport { idMixin, props as idProps } from '../../mixins/id';\nimport { listenOnDocumentMixin } from '../../mixins/listen-on-document';\nimport { listenOnRootMixin } from '../../mixins/listen-on-root';\nimport { listenOnWindowMixin } from '../../mixins/listen-on-window';\nimport { normalizeSlotMixin } from '../../mixins/normalize-slot';\nimport { scopedStyleMixin } from '../../mixins/scoped-style';\nimport { BButton } from '../button/button';\nimport { BButtonClose } from '../button/button-close';\nimport { BVTransition } from '../transition/bv-transition';\nimport { BVTransporter } from '../transporter/transporter';\nimport { BvModalEvent } from './helpers/bv-modal-event.class';\nimport { modalManager } from './helpers/modal-manager'; // --- Constants ---\n\nvar _makeModelMixin = makeModelMixin('visible', {\n type: PROP_TYPE_BOOLEAN,\n defaultValue: false,\n event: EVENT_NAME_CHANGE\n}),\n modelMixin = _makeModelMixin.mixin,\n modelProps = _makeModelMixin.props,\n MODEL_PROP_NAME = _makeModelMixin.prop,\n MODEL_EVENT_NAME = _makeModelMixin.event;\n\nvar TRIGGER_BACKDROP = 'backdrop';\nvar TRIGGER_ESC = 'esc';\nvar TRIGGER_FORCE = 'FORCE';\nvar TRIGGER_TOGGLE = 'toggle';\nvar BUTTON_CANCEL = 'cancel'; // TODO: This should be renamed to 'close'\n\nvar BUTTON_CLOSE = 'headerclose';\nvar BUTTON_OK = 'ok';\nvar BUTTONS = [BUTTON_CANCEL, BUTTON_CLOSE, BUTTON_OK]; // `ObserveDom` config to detect changes in modal content\n// so that we can adjust the modal padding if needed\n\nvar OBSERVER_CONFIG = {\n subtree: true,\n childList: true,\n characterData: true,\n attributes: true,\n attributeFilter: ['style', 'class']\n}; // --- Props ---\n\nexport var props = makePropsConfigurable(sortKeys(_objectSpread(_objectSpread(_objectSpread({}, idProps), modelProps), {}, {\n ariaLabel: makeProp(PROP_TYPE_STRING),\n autoFocusButton: makeProp(PROP_TYPE_STRING, null,\n /* istanbul ignore next */\n function (value) {\n return isUndefinedOrNull(value) || arrayIncludes(BUTTONS, value);\n }),\n bodyBgVariant: makeProp(PROP_TYPE_STRING),\n bodyClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n bodyTextVariant: makeProp(PROP_TYPE_STRING),\n busy: makeProp(PROP_TYPE_BOOLEAN, false),\n buttonSize: makeProp(PROP_TYPE_STRING),\n cancelDisabled: makeProp(PROP_TYPE_BOOLEAN, false),\n cancelTitle: makeProp(PROP_TYPE_STRING, 'Cancel'),\n cancelTitleHtml: makeProp(PROP_TYPE_STRING),\n cancelVariant: makeProp(PROP_TYPE_STRING, 'secondary'),\n centered: makeProp(PROP_TYPE_BOOLEAN, false),\n contentClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n dialogClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n footerBgVariant: makeProp(PROP_TYPE_STRING),\n footerBorderVariant: makeProp(PROP_TYPE_STRING),\n footerClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n footerTextVariant: makeProp(PROP_TYPE_STRING),\n headerBgVariant: makeProp(PROP_TYPE_STRING),\n headerBorderVariant: makeProp(PROP_TYPE_STRING),\n headerClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n headerCloseContent: makeProp(PROP_TYPE_STRING, '×'),\n headerCloseLabel: makeProp(PROP_TYPE_STRING, 'Close'),\n headerCloseVariant: makeProp(PROP_TYPE_STRING),\n headerTextVariant: makeProp(PROP_TYPE_STRING),\n // TODO: Rename to `noBackdrop` and deprecate `hideBackdrop`\n hideBackdrop: makeProp(PROP_TYPE_BOOLEAN, false),\n // TODO: Rename to `noFooter` and deprecate `hideFooter`\n hideFooter: makeProp(PROP_TYPE_BOOLEAN, false),\n // TODO: Rename to `noHeader` and deprecate `hideHeader`\n hideHeader: makeProp(PROP_TYPE_BOOLEAN, false),\n // TODO: Rename to `noHeaderClose` and deprecate `hideHeaderClose`\n hideHeaderClose: makeProp(PROP_TYPE_BOOLEAN, false),\n ignoreEnforceFocusSelector: makeProp(PROP_TYPE_ARRAY_STRING),\n lazy: makeProp(PROP_TYPE_BOOLEAN, false),\n modalClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n noCloseOnBackdrop: makeProp(PROP_TYPE_BOOLEAN, false),\n noCloseOnEsc: makeProp(PROP_TYPE_BOOLEAN, false),\n noEnforceFocus: makeProp(PROP_TYPE_BOOLEAN, false),\n noFade: makeProp(PROP_TYPE_BOOLEAN, false),\n noStacking: makeProp(PROP_TYPE_BOOLEAN, false),\n okDisabled: makeProp(PROP_TYPE_BOOLEAN, false),\n okOnly: makeProp(PROP_TYPE_BOOLEAN, false),\n okTitle: makeProp(PROP_TYPE_STRING, 'OK'),\n okTitleHtml: makeProp(PROP_TYPE_STRING),\n okVariant: makeProp(PROP_TYPE_STRING, 'primary'),\n // HTML Element, CSS selector string or Vue component instance\n returnFocus: makeProp([HTMLElement, PROP_TYPE_OBJECT, PROP_TYPE_STRING]),\n scrollable: makeProp(PROP_TYPE_BOOLEAN, false),\n size: makeProp(PROP_TYPE_STRING, 'md'),\n static: makeProp(PROP_TYPE_BOOLEAN, false),\n title: makeProp(PROP_TYPE_STRING),\n titleClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n titleHtml: makeProp(PROP_TYPE_STRING),\n titleSrOnly: makeProp(PROP_TYPE_BOOLEAN, false),\n titleTag: makeProp(PROP_TYPE_STRING, 'h5')\n})), NAME_MODAL); // --- Main component ---\n// @vue/component\n\nexport var BModal = /*#__PURE__*/Vue.extend({\n name: NAME_MODAL,\n mixins: [attrsMixin, idMixin, modelMixin, listenOnDocumentMixin, listenOnRootMixin, listenOnWindowMixin, normalizeSlotMixin, scopedStyleMixin],\n inheritAttrs: false,\n props: props,\n data: function data() {\n return {\n isHidden: true,\n // If modal should not be in document\n isVisible: false,\n // Controls modal visible state\n isTransitioning: false,\n // Used for style control\n isShow: false,\n // Used for style control\n isBlock: false,\n // Used for style control\n isOpening: false,\n // To signal that the modal is in the process of opening\n isClosing: false,\n // To signal that the modal is in the process of closing\n ignoreBackdropClick: false,\n // Used to signify if click out listener should ignore the click\n isModalOverflowing: false,\n // The following items are controlled by the modalManager instance\n scrollbarWidth: 0,\n zIndex: modalManager.getBaseZIndex(),\n isTop: true,\n isBodyOverflowing: false\n };\n },\n computed: {\n modalId: function modalId() {\n return this.safeId();\n },\n modalOuterId: function modalOuterId() {\n return this.safeId('__BV_modal_outer_');\n },\n modalHeaderId: function modalHeaderId() {\n return this.safeId('__BV_modal_header_');\n },\n modalBodyId: function modalBodyId() {\n return this.safeId('__BV_modal_body_');\n },\n modalTitleId: function modalTitleId() {\n return this.safeId('__BV_modal_title_');\n },\n modalContentId: function modalContentId() {\n return this.safeId('__BV_modal_content_');\n },\n modalFooterId: function modalFooterId() {\n return this.safeId('__BV_modal_footer_');\n },\n modalBackdropId: function modalBackdropId() {\n return this.safeId('__BV_modal_backdrop_');\n },\n modalClasses: function modalClasses() {\n return [{\n fade: !this.noFade,\n show: this.isShow\n }, this.modalClass];\n },\n modalStyles: function modalStyles() {\n var sbWidth = \"\".concat(this.scrollbarWidth, \"px\");\n return {\n paddingLeft: !this.isBodyOverflowing && this.isModalOverflowing ? sbWidth : '',\n paddingRight: this.isBodyOverflowing && !this.isModalOverflowing ? sbWidth : '',\n // Needed to fix issue https://github.com/bootstrap-vue/bootstrap-vue/issues/3457\n // Even though we are using v-show, we must ensure 'none' is restored in the styles\n display: this.isBlock ? 'block' : 'none'\n };\n },\n dialogClasses: function dialogClasses() {\n var _ref;\n\n return [(_ref = {}, _defineProperty(_ref, \"modal-\".concat(this.size), this.size), _defineProperty(_ref, 'modal-dialog-centered', this.centered), _defineProperty(_ref, 'modal-dialog-scrollable', this.scrollable), _ref), this.dialogClass];\n },\n headerClasses: function headerClasses() {\n var _ref2;\n\n return [(_ref2 = {}, _defineProperty(_ref2, \"bg-\".concat(this.headerBgVariant), this.headerBgVariant), _defineProperty(_ref2, \"text-\".concat(this.headerTextVariant), this.headerTextVariant), _defineProperty(_ref2, \"border-\".concat(this.headerBorderVariant), this.headerBorderVariant), _ref2), this.headerClass];\n },\n titleClasses: function titleClasses() {\n return [{\n 'sr-only': this.titleSrOnly\n }, this.titleClass];\n },\n bodyClasses: function bodyClasses() {\n var _ref3;\n\n return [(_ref3 = {}, _defineProperty(_ref3, \"bg-\".concat(this.bodyBgVariant), this.bodyBgVariant), _defineProperty(_ref3, \"text-\".concat(this.bodyTextVariant), this.bodyTextVariant), _ref3), this.bodyClass];\n },\n footerClasses: function footerClasses() {\n var _ref4;\n\n return [(_ref4 = {}, _defineProperty(_ref4, \"bg-\".concat(this.footerBgVariant), this.footerBgVariant), _defineProperty(_ref4, \"text-\".concat(this.footerTextVariant), this.footerTextVariant), _defineProperty(_ref4, \"border-\".concat(this.footerBorderVariant), this.footerBorderVariant), _ref4), this.footerClass];\n },\n modalOuterStyle: function modalOuterStyle() {\n // Styles needed for proper stacking of modals\n return {\n position: 'absolute',\n zIndex: this.zIndex\n };\n },\n slotScope: function slotScope() {\n return {\n cancel: this.onCancel,\n close: this.onClose,\n hide: this.hide,\n ok: this.onOk,\n visible: this.isVisible\n };\n },\n computeIgnoreEnforceFocusSelector: function computeIgnoreEnforceFocusSelector() {\n // Normalize to an single selector with selectors separated by `,`\n return concat(this.ignoreEnforceFocusSelector).filter(identity).join(',').trim();\n },\n computedAttrs: function computedAttrs() {\n // If the parent has a scoped style attribute, and the modal\n // is portalled, add the scoped attribute to the modal wrapper\n var scopedStyleAttrs = !this.static ? this.scopedStyleAttrs : {};\n return _objectSpread(_objectSpread(_objectSpread({}, scopedStyleAttrs), this.bvAttrs), {}, {\n id: this.modalOuterId\n });\n },\n computedModalAttrs: function computedModalAttrs() {\n var isVisible = this.isVisible,\n ariaLabel = this.ariaLabel;\n return {\n id: this.modalId,\n role: 'dialog',\n 'aria-hidden': isVisible ? null : 'true',\n 'aria-modal': isVisible ? 'true' : null,\n 'aria-label': ariaLabel,\n 'aria-labelledby': this.hideHeader || ariaLabel || // TODO: Rename slot to `title` and deprecate `modal-title`\n !(this.hasNormalizedSlot(SLOT_NAME_MODAL_TITLE) || this.titleHtml || this.title) ? null : this.modalTitleId,\n 'aria-describedby': this.modalBodyId\n };\n }\n },\n watch: _defineProperty({}, MODEL_PROP_NAME, function (newValue, oldValue) {\n if (newValue !== oldValue) {\n this[newValue ? 'show' : 'hide']();\n }\n }),\n created: function created() {\n // Define non-reactive properties\n this.$_observer = null;\n this.$_returnFocus = this.returnFocus || null;\n },\n mounted: function mounted() {\n // Set initial z-index as queried from the DOM\n this.zIndex = modalManager.getBaseZIndex(); // Listen for events from others to either open or close ourselves\n // and listen to all modals to enable/disable enforce focus\n\n this.listenOnRoot(getRootActionEventName(NAME_MODAL, EVENT_NAME_SHOW), this.showHandler);\n this.listenOnRoot(getRootActionEventName(NAME_MODAL, EVENT_NAME_HIDE), this.hideHandler);\n this.listenOnRoot(getRootActionEventName(NAME_MODAL, EVENT_NAME_TOGGLE), this.toggleHandler); // Listen for `bv:modal::show events`, and close ourselves if the\n // opening modal not us\n\n this.listenOnRoot(getRootEventName(NAME_MODAL, EVENT_NAME_SHOW), this.modalListener); // Initially show modal?\n\n if (this[MODEL_PROP_NAME] === true) {\n this.$nextTick(this.show);\n }\n },\n beforeDestroy: function beforeDestroy() {\n // Ensure everything is back to normal\n this.setObserver(false);\n\n if (this.isVisible) {\n this.isVisible = false;\n this.isShow = false;\n this.isTransitioning = false;\n }\n },\n methods: {\n setObserver: function setObserver() {\n var on = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n this.$_observer && this.$_observer.disconnect();\n this.$_observer = null;\n\n if (on) {\n this.$_observer = observeDom(this.$refs.content, this.checkModalOverflow.bind(this), OBSERVER_CONFIG);\n }\n },\n // Private method to update the v-model\n updateModel: function updateModel(value) {\n if (value !== this[MODEL_PROP_NAME]) {\n this.$emit(MODEL_EVENT_NAME, value);\n }\n },\n // Private method to create a BvModalEvent object\n buildEvent: function buildEvent(type) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return new BvModalEvent(type, _objectSpread(_objectSpread({\n // Default options\n cancelable: false,\n target: this.$refs.modal || this.$el || null,\n relatedTarget: null,\n trigger: null\n }, options), {}, {\n // Options that can't be overridden\n vueTarget: this,\n componentId: this.modalId\n }));\n },\n // Public method to show modal\n show: function show() {\n if (this.isVisible || this.isOpening) {\n // If already open, or in the process of opening, do nothing\n\n /* istanbul ignore next */\n return;\n }\n /* istanbul ignore next */\n\n\n if (this.isClosing) {\n // If we are in the process of closing, wait until hidden before re-opening\n\n /* istanbul ignore next */\n this.$once(EVENT_NAME_HIDDEN, this.show);\n /* istanbul ignore next */\n\n return;\n }\n\n this.isOpening = true; // Set the element to return focus to when closed\n\n this.$_returnFocus = this.$_returnFocus || this.getActiveElement();\n var showEvt = this.buildEvent(EVENT_NAME_SHOW, {\n cancelable: true\n });\n this.emitEvent(showEvt); // Don't show if canceled\n\n if (showEvt.defaultPrevented || this.isVisible) {\n this.isOpening = false; // Ensure the v-model reflects the current state\n\n this.updateModel(false);\n return;\n } // Show the modal\n\n\n this.doShow();\n },\n // Public method to hide modal\n hide: function hide() {\n var trigger = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n\n if (!this.isVisible || this.isClosing) {\n /* istanbul ignore next */\n return;\n }\n\n this.isClosing = true;\n var hideEvt = this.buildEvent(EVENT_NAME_HIDE, {\n cancelable: trigger !== TRIGGER_FORCE,\n trigger: trigger || null\n }); // We emit specific event for one of the three built-in buttons\n\n if (trigger === BUTTON_OK) {\n this.$emit(EVENT_NAME_OK, hideEvt);\n } else if (trigger === BUTTON_CANCEL) {\n this.$emit(EVENT_NAME_CANCEL, hideEvt);\n } else if (trigger === BUTTON_CLOSE) {\n this.$emit(EVENT_NAME_CLOSE, hideEvt);\n }\n\n this.emitEvent(hideEvt); // Hide if not canceled\n\n if (hideEvt.defaultPrevented || !this.isVisible) {\n this.isClosing = false; // Ensure v-model reflects current state\n\n this.updateModel(true);\n return;\n } // Stop observing for content changes\n\n\n this.setObserver(false); // Trigger the hide transition\n\n this.isVisible = false; // Update the v-model\n\n this.updateModel(false);\n },\n // Public method to toggle modal visibility\n toggle: function toggle(triggerEl) {\n if (triggerEl) {\n this.$_returnFocus = triggerEl;\n }\n\n if (this.isVisible) {\n this.hide(TRIGGER_TOGGLE);\n } else {\n this.show();\n }\n },\n // Private method to get the current document active element\n getActiveElement: function getActiveElement() {\n // Returning focus to `document.body` may cause unwanted scrolls,\n // so we exclude setting focus on body\n var activeElement = _getActiveElement(IS_BROWSER ? [document.body] : []); // Preset the fallback return focus value if it is not set\n // `document.activeElement` should be the trigger element that was clicked or\n // in the case of using the v-model, which ever element has current focus\n // Will be overridden by some commands such as toggle, etc.\n // Note: On IE 11, `document.activeElement` may be `null`\n // So we test it for truthiness first\n // https://github.com/bootstrap-vue/bootstrap-vue/issues/3206\n\n\n return activeElement && activeElement.focus ? activeElement : null;\n },\n // Private method to finish showing modal\n doShow: function doShow() {\n var _this = this;\n\n /* istanbul ignore next: commenting out for now until we can test stacking */\n if (modalManager.modalsAreOpen && this.noStacking) {\n // If another modal(s) is already open, wait for it(them) to close\n this.listenOnRootOnce(getRootEventName(NAME_MODAL, EVENT_NAME_HIDDEN), this.doShow);\n return;\n }\n\n modalManager.registerModal(this); // Place modal in DOM\n\n this.isHidden = false;\n this.$nextTick(function () {\n // We do this in `$nextTick()` to ensure the modal is in DOM first\n // before we show it\n _this.isVisible = true;\n _this.isOpening = false; // Update the v-model\n\n _this.updateModel(true);\n\n _this.$nextTick(function () {\n // Observe changes in modal content and adjust if necessary\n // In a `$nextTick()` in case modal content is lazy\n _this.setObserver(true);\n });\n });\n },\n // Transition handlers\n onBeforeEnter: function onBeforeEnter() {\n this.isTransitioning = true;\n this.setResizeEvent(true);\n },\n onEnter: function onEnter() {\n var _this2 = this;\n\n this.isBlock = true; // We add the `show` class 1 frame later\n // `requestAF()` runs the callback before the next repaint, so we need\n // two calls to guarantee the next frame has been rendered\n\n requestAF(function () {\n requestAF(function () {\n _this2.isShow = true;\n });\n });\n },\n onAfterEnter: function onAfterEnter() {\n var _this3 = this;\n\n this.checkModalOverflow();\n this.isTransitioning = false; // We use `requestAF()` to allow transition hooks to complete\n // before passing control over to the other handlers\n // This will allow users to not have to use `$nextTick()` or `requestAF()`\n // when trying to pre-focus an element\n\n requestAF(function () {\n _this3.emitEvent(_this3.buildEvent(EVENT_NAME_SHOWN));\n\n _this3.setEnforceFocus(true);\n\n _this3.$nextTick(function () {\n // Delayed in a `$nextTick()` to allow users time to pre-focus\n // an element if the wish\n _this3.focusFirst();\n });\n });\n },\n onBeforeLeave: function onBeforeLeave() {\n this.isTransitioning = true;\n this.setResizeEvent(false);\n this.setEnforceFocus(false);\n },\n onLeave: function onLeave() {\n // Remove the 'show' class\n this.isShow = false;\n },\n onAfterLeave: function onAfterLeave() {\n var _this4 = this;\n\n this.isBlock = false;\n this.isTransitioning = false;\n this.isModalOverflowing = false;\n this.isHidden = true;\n this.$nextTick(function () {\n _this4.isClosing = false;\n modalManager.unregisterModal(_this4);\n\n _this4.returnFocusTo(); // TODO: Need to find a way to pass the `trigger` property\n // to the `hidden` event, not just only the `hide` event\n\n\n _this4.emitEvent(_this4.buildEvent(EVENT_NAME_HIDDEN));\n });\n },\n emitEvent: function emitEvent(bvEvent) {\n var type = bvEvent.type; // We emit on `$root` first in case a global listener wants to cancel\n // the event first before the instance emits its event\n\n this.emitOnRoot(getRootEventName(NAME_MODAL, type), bvEvent, bvEvent.componentId);\n this.$emit(type, bvEvent);\n },\n // UI event handlers\n onDialogMousedown: function onDialogMousedown() {\n var _this5 = this;\n\n // Watch to see if the matching mouseup event occurs outside the dialog\n // And if it does, cancel the clickOut handler\n var modal = this.$refs.modal;\n\n var onceModalMouseup = function onceModalMouseup(event) {\n eventOff(modal, 'mouseup', onceModalMouseup, EVENT_OPTIONS_NO_CAPTURE);\n\n if (event.target === modal) {\n _this5.ignoreBackdropClick = true;\n }\n };\n\n eventOn(modal, 'mouseup', onceModalMouseup, EVENT_OPTIONS_NO_CAPTURE);\n },\n onClickOut: function onClickOut(event) {\n if (this.ignoreBackdropClick) {\n // Click was initiated inside the modal content, but finished outside.\n // Set by the above onDialogMousedown handler\n this.ignoreBackdropClick = false;\n return;\n } // Do nothing if not visible, backdrop click disabled, or element\n // that generated click event is no longer in document body\n\n\n if (!this.isVisible || this.noCloseOnBackdrop || !contains(document.body, event.target)) {\n return;\n } // If backdrop clicked, hide modal\n\n\n if (!contains(this.$refs.content, event.target)) {\n this.hide(TRIGGER_BACKDROP);\n }\n },\n onOk: function onOk() {\n this.hide(BUTTON_OK);\n },\n onCancel: function onCancel() {\n this.hide(BUTTON_CANCEL);\n },\n onClose: function onClose() {\n this.hide(BUTTON_CLOSE);\n },\n onEsc: function onEsc(event) {\n // If ESC pressed, hide modal\n if (event.keyCode === CODE_ESC && this.isVisible && !this.noCloseOnEsc) {\n this.hide(TRIGGER_ESC);\n }\n },\n // Document focusin listener\n focusHandler: function focusHandler(event) {\n // If focus leaves modal content, bring it back\n var content = this.$refs.content;\n var target = event.target;\n\n if (this.noEnforceFocus || !this.isTop || !this.isVisible || !content || document === target || contains(content, target) || this.computeIgnoreEnforceFocusSelector && closest(this.computeIgnoreEnforceFocusSelector, target, true)) {\n return;\n }\n\n var tabables = getTabables(this.$refs.content);\n var bottomTrap = this.$refs['bottom-trap'];\n var topTrap = this.$refs['top-trap'];\n\n if (bottomTrap && target === bottomTrap) {\n // If user pressed TAB out of modal into our bottom trab trap element\n // Find the first tabable element in the modal content and focus it\n if (attemptFocus(tabables[0])) {\n // Focus was successful\n return;\n }\n } else if (topTrap && target === topTrap) {\n // If user pressed CTRL-TAB out of modal and into our top tab trap element\n // Find the last tabable element in the modal content and focus it\n if (attemptFocus(tabables[tabables.length - 1])) {\n // Focus was successful\n return;\n }\n } // Otherwise focus the modal content container\n\n\n attemptFocus(content, {\n preventScroll: true\n });\n },\n // Turn on/off focusin listener\n setEnforceFocus: function setEnforceFocus(on) {\n this.listenDocument(on, 'focusin', this.focusHandler);\n },\n // Resize listener\n setResizeEvent: function setResizeEvent(on) {\n this.listenWindow(on, 'resize', this.checkModalOverflow);\n this.listenWindow(on, 'orientationchange', this.checkModalOverflow);\n },\n // Root listener handlers\n showHandler: function showHandler(id, triggerEl) {\n if (id === this.modalId) {\n this.$_returnFocus = triggerEl || this.getActiveElement();\n this.show();\n }\n },\n hideHandler: function hideHandler(id) {\n if (id === this.modalId) {\n this.hide('event');\n }\n },\n toggleHandler: function toggleHandler(id, triggerEl) {\n if (id === this.modalId) {\n this.toggle(triggerEl);\n }\n },\n modalListener: function modalListener(bvEvent) {\n // If another modal opens, close this one if stacking not permitted\n if (this.noStacking && bvEvent.vueTarget !== this) {\n this.hide();\n }\n },\n // Focus control handlers\n focusFirst: function focusFirst() {\n var _this6 = this;\n\n // Don't try and focus if we are SSR\n if (IS_BROWSER) {\n requestAF(function () {\n var modal = _this6.$refs.modal;\n var content = _this6.$refs.content;\n\n var activeElement = _this6.getActiveElement(); // If the modal contains the activeElement, we don't do anything\n\n\n if (modal && content && !(activeElement && contains(content, activeElement))) {\n var ok = _this6.$refs['ok-button'];\n var cancel = _this6.$refs['cancel-button'];\n var close = _this6.$refs['close-button']; // Focus the appropriate button or modal content wrapper\n\n var autoFocus = _this6.autoFocusButton;\n /* istanbul ignore next */\n\n var el = autoFocus === BUTTON_OK && ok ? ok.$el || ok : autoFocus === BUTTON_CANCEL && cancel ? cancel.$el || cancel : autoFocus === BUTTON_CLOSE && close ? close.$el || close : content; // Focus the element\n\n attemptFocus(el);\n\n if (el === content) {\n // Make sure top of modal is showing (if longer than the viewport)\n _this6.$nextTick(function () {\n modal.scrollTop = 0;\n });\n }\n }\n });\n }\n },\n returnFocusTo: function returnFocusTo() {\n // Prefer `returnFocus` prop over event specified\n // `return_focus` value\n var el = this.returnFocus || this.$_returnFocus || null;\n this.$_returnFocus = null;\n this.$nextTick(function () {\n // Is el a string CSS selector?\n el = isString(el) ? select(el) : el;\n\n if (el) {\n // Possibly could be a component reference\n el = el.$el || el;\n attemptFocus(el);\n }\n });\n },\n checkModalOverflow: function checkModalOverflow() {\n if (this.isVisible) {\n var modal = this.$refs.modal;\n this.isModalOverflowing = modal.scrollHeight > document.documentElement.clientHeight;\n }\n },\n makeModal: function makeModal(h) {\n // Modal header\n var $header = h();\n\n if (!this.hideHeader) {\n // TODO: Rename slot to `header` and deprecate `modal-header`\n var $modalHeader = this.normalizeSlot(SLOT_NAME_MODAL_HEADER, this.slotScope);\n\n if (!$modalHeader) {\n var $closeButton = h();\n\n if (!this.hideHeaderClose) {\n $closeButton = h(BButtonClose, {\n props: {\n content: this.headerCloseContent,\n disabled: this.isTransitioning,\n ariaLabel: this.headerCloseLabel,\n textVariant: this.headerCloseVariant || this.headerTextVariant\n },\n on: {\n click: this.onClose\n },\n ref: 'close-button'\n }, // TODO: Rename slot to `header-close` and deprecate `modal-header-close`\n [this.normalizeSlot(SLOT_NAME_MODAL_HEADER_CLOSE)]);\n }\n\n $modalHeader = [h(this.titleTag, {\n staticClass: 'modal-title',\n class: this.titleClasses,\n attrs: {\n id: this.modalTitleId\n },\n // TODO: Rename slot to `title` and deprecate `modal-title`\n domProps: this.hasNormalizedSlot(SLOT_NAME_MODAL_TITLE) ? {} : htmlOrText(this.titleHtml, this.title)\n }, // TODO: Rename slot to `title` and deprecate `modal-title`\n this.normalizeSlot(SLOT_NAME_MODAL_TITLE, this.slotScope)), $closeButton];\n }\n\n $header = h('header', {\n staticClass: 'modal-header',\n class: this.headerClasses,\n attrs: {\n id: this.modalHeaderId\n },\n ref: 'header'\n }, [$modalHeader]);\n } // Modal body\n\n\n var $body = h('div', {\n staticClass: 'modal-body',\n class: this.bodyClasses,\n attrs: {\n id: this.modalBodyId\n },\n ref: 'body'\n }, this.normalizeSlot(SLOT_NAME_DEFAULT, this.slotScope)); // Modal footer\n\n var $footer = h();\n\n if (!this.hideFooter) {\n // TODO: Rename slot to `footer` and deprecate `modal-footer`\n var $modalFooter = this.normalizeSlot(SLOT_NAME_MODAL_FOOTER, this.slotScope);\n\n if (!$modalFooter) {\n var $cancelButton = h();\n\n if (!this.okOnly) {\n $cancelButton = h(BButton, {\n props: {\n variant: this.cancelVariant,\n size: this.buttonSize,\n disabled: this.cancelDisabled || this.busy || this.isTransitioning\n },\n // TODO: Rename slot to `cancel-button` and deprecate `modal-cancel`\n domProps: this.hasNormalizedSlot(SLOT_NAME_MODAL_CANCEL) ? {} : htmlOrText(this.cancelTitleHtml, this.cancelTitle),\n on: {\n click: this.onCancel\n },\n ref: 'cancel-button'\n }, // TODO: Rename slot to `cancel-button` and deprecate `modal-cancel`\n this.normalizeSlot(SLOT_NAME_MODAL_CANCEL));\n }\n\n var $okButton = h(BButton, {\n props: {\n variant: this.okVariant,\n size: this.buttonSize,\n disabled: this.okDisabled || this.busy || this.isTransitioning\n },\n // TODO: Rename slot to `ok-button` and deprecate `modal-ok`\n domProps: this.hasNormalizedSlot(SLOT_NAME_MODAL_OK) ? {} : htmlOrText(this.okTitleHtml, this.okTitle),\n on: {\n click: this.onOk\n },\n ref: 'ok-button'\n }, // TODO: Rename slot to `ok-button` and deprecate `modal-ok`\n this.normalizeSlot(SLOT_NAME_MODAL_OK));\n $modalFooter = [$cancelButton, $okButton];\n }\n\n $footer = h('footer', {\n staticClass: 'modal-footer',\n class: this.footerClasses,\n attrs: {\n id: this.modalFooterId\n },\n ref: 'footer'\n }, [$modalFooter]);\n } // Assemble modal content\n\n\n var $modalContent = h('div', {\n staticClass: 'modal-content',\n class: this.contentClass,\n attrs: {\n id: this.modalContentId,\n tabindex: '-1'\n },\n ref: 'content'\n }, [$header, $body, $footer]); // Tab traps to prevent page from scrolling to next element in\n // tab index during enforce-focus tab cycle\n\n var $tabTrapTop = h();\n var $tabTrapBottom = h();\n\n if (this.isVisible && !this.noEnforceFocus) {\n $tabTrapTop = h('span', {\n attrs: {\n tabindex: '0'\n },\n ref: 'top-trap'\n });\n $tabTrapBottom = h('span', {\n attrs: {\n tabindex: '0'\n },\n ref: 'bottom-trap'\n });\n } // Modal dialog wrapper\n\n\n var $modalDialog = h('div', {\n staticClass: 'modal-dialog',\n class: this.dialogClasses,\n on: {\n mousedown: this.onDialogMousedown\n },\n ref: 'dialog'\n }, [$tabTrapTop, $modalContent, $tabTrapBottom]); // Modal\n\n var $modal = h('div', {\n staticClass: 'modal',\n class: this.modalClasses,\n style: this.modalStyles,\n attrs: this.computedModalAttrs,\n on: {\n keydown: this.onEsc,\n click: this.onClickOut\n },\n directives: [{\n name: 'show',\n value: this.isVisible\n }],\n ref: 'modal'\n }, [$modalDialog]); // Wrap modal in transition\n // Sadly, we can't use `BVTransition` here due to the differences in\n // transition durations for `.modal` and `.modal-dialog`\n // At least until https://github.com/vuejs/vue/issues/9986 is resolved\n\n $modal = h('transition', {\n props: {\n enterClass: '',\n enterToClass: '',\n enterActiveClass: '',\n leaveClass: '',\n leaveActiveClass: '',\n leaveToClass: ''\n },\n on: {\n beforeEnter: this.onBeforeEnter,\n enter: this.onEnter,\n afterEnter: this.onAfterEnter,\n beforeLeave: this.onBeforeLeave,\n leave: this.onLeave,\n afterLeave: this.onAfterLeave\n }\n }, [$modal]); // Modal backdrop\n\n var $backdrop = h();\n\n if (!this.hideBackdrop && this.isVisible) {\n $backdrop = h('div', {\n staticClass: 'modal-backdrop',\n attrs: {\n id: this.modalBackdropId\n }\n }, // TODO: Rename slot to `backdrop` and deprecate `modal-backdrop`\n this.normalizeSlot(SLOT_NAME_MODAL_BACKDROP));\n }\n\n $backdrop = h(BVTransition, {\n props: {\n noFade: this.noFade\n }\n }, [$backdrop]); // Assemble modal and backdrop in an outer
\n\n return h('div', {\n style: this.modalOuterStyle,\n attrs: this.computedAttrs,\n key: \"modal-outer-\".concat(this[COMPONENT_UID_KEY])\n }, [$modal, $backdrop]);\n }\n },\n render: function render(h) {\n if (this.static) {\n return this.lazy && this.isHidden ? h() : this.makeModal(h);\n } else {\n return this.isHidden ? h() : h(BVTransporter, [this.makeModal(h)]);\n }\n }\n});","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\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\nfunction _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\n// Plugin for adding `$bvModal` property to all Vue instances\nimport { NAME_MODAL, NAME_MSG_BOX } from '../../../constants/components';\nimport { EVENT_NAME_HIDDEN, EVENT_NAME_HIDE, HOOK_EVENT_NAME_BEFORE_DESTROY, HOOK_EVENT_NAME_DESTROYED } from '../../../constants/events';\nimport { concat } from '../../../utils/array';\nimport { getComponentConfig } from '../../../utils/config';\nimport { requestAF } from '../../../utils/dom';\nimport { getRootActionEventName } from '../../../utils/events';\nimport { isUndefined, isFunction } from '../../../utils/inspect';\nimport { assign, defineProperties, defineProperty, hasOwnProperty, keys, omit, readonlyDescriptor } from '../../../utils/object';\nimport { pluginFactory } from '../../../utils/plugins';\nimport { warn, warnNotClient, warnNoPromiseSupport } from '../../../utils/warn';\nimport { BModal, props as modalProps } from '../modal'; // --- Constants ---\n\nvar PROP_NAME = '$bvModal';\nvar PROP_NAME_PRIV = '_bv__modal'; // Base modal props that are allowed\n// Some may be ignored or overridden on some message boxes\n// Prop ID is allowed, but really only should be used for testing\n// We need to add it in explicitly as it comes from the `idMixin`\n\nvar BASE_PROPS = ['id'].concat(_toConsumableArray(keys(omit(modalProps, ['busy', 'lazy', 'noStacking', 'static', 'visible'])))); // Fallback event resolver (returns undefined)\n\nvar defaultResolver = function defaultResolver() {}; // Map prop names to modal slot names\n\n\nvar propsToSlots = {\n msgBoxContent: 'default',\n title: 'modal-title',\n okTitle: 'modal-ok',\n cancelTitle: 'modal-cancel'\n}; // --- Helper methods ---\n// Method to filter only recognized props that are not undefined\n\nvar filterOptions = function filterOptions(options) {\n return BASE_PROPS.reduce(function (memo, key) {\n if (!isUndefined(options[key])) {\n memo[key] = options[key];\n }\n\n return memo;\n }, {});\n}; // Method to install `$bvModal` VM injection\n\n\nvar plugin = function plugin(Vue) {\n // Create a private sub-component that extends BModal\n // which self-destructs after hidden\n // @vue/component\n var BMsgBox = Vue.extend({\n name: NAME_MSG_BOX,\n extends: BModal,\n destroyed: function destroyed() {\n // Make sure we not in document any more\n if (this.$el && this.$el.parentNode) {\n this.$el.parentNode.removeChild(this.$el);\n }\n },\n mounted: function mounted() {\n var _this = this;\n\n // Self destruct handler\n var handleDestroy = function handleDestroy() {\n _this.$nextTick(function () {\n // In a `requestAF()` to release control back to application\n requestAF(function () {\n _this.$destroy();\n });\n });\n }; // Self destruct if parent destroyed\n\n\n this.$parent.$once(HOOK_EVENT_NAME_DESTROYED, handleDestroy); // Self destruct after hidden\n\n this.$once(EVENT_NAME_HIDDEN, handleDestroy); // Self destruct on route change\n\n /* istanbul ignore if */\n\n if (this.$router && this.$route) {\n // Destroy ourselves if route changes\n\n /* istanbul ignore next */\n this.$once(HOOK_EVENT_NAME_BEFORE_DESTROY, this.$watch('$router', handleDestroy));\n } // Show the `BMsgBox`\n\n\n this.show();\n }\n }); // Method to generate the on-demand modal message box\n // Returns a promise that resolves to a value returned by the resolve\n\n var asyncMsgBox = function asyncMsgBox($parent, props) {\n var resolver = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : defaultResolver;\n\n if (warnNotClient(PROP_NAME) || warnNoPromiseSupport(PROP_NAME)) {\n /* istanbul ignore next */\n return;\n } // Create an instance of `BMsgBox` component\n\n\n var msgBox = new BMsgBox({\n // We set parent as the local VM so these modals can emit events on\n // the app `$root`, as needed by things like tooltips and popovers\n // And it helps to ensure `BMsgBox` is destroyed when parent is destroyed\n parent: $parent,\n // Preset the prop values\n propsData: _objectSpread(_objectSpread(_objectSpread({}, filterOptions(getComponentConfig(NAME_MODAL))), {}, {\n // Defaults that user can override\n hideHeaderClose: true,\n hideHeader: !(props.title || props.titleHtml)\n }, omit(props, keys(propsToSlots))), {}, {\n // Props that can't be overridden\n lazy: false,\n busy: false,\n visible: false,\n noStacking: false,\n noEnforceFocus: false\n })\n }); // Convert certain props to scoped slots\n\n keys(propsToSlots).forEach(function (prop) {\n if (!isUndefined(props[prop])) {\n // Can be a string, or array of VNodes.\n // Alternatively, user can use HTML version of prop to pass an HTML string.\n msgBox.$slots[propsToSlots[prop]] = concat(props[prop]);\n }\n }); // Return a promise that resolves when hidden, or rejects on destroyed\n\n return new Promise(function (resolve, reject) {\n var resolved = false;\n msgBox.$once(HOOK_EVENT_NAME_DESTROYED, function () {\n if (!resolved) {\n /* istanbul ignore next */\n reject(new Error('BootstrapVue MsgBox destroyed before resolve'));\n }\n });\n msgBox.$on(EVENT_NAME_HIDE, function (bvModalEvt) {\n if (!bvModalEvt.defaultPrevented) {\n var result = resolver(bvModalEvt); // If resolver didn't cancel hide, we resolve\n\n if (!bvModalEvt.defaultPrevented) {\n resolved = true;\n resolve(result);\n }\n }\n }); // Create a mount point (a DIV) and mount the msgBo which will trigger it to show\n\n var div = document.createElement('div');\n document.body.appendChild(div);\n msgBox.$mount(div);\n });\n }; // Private utility method to open a user defined message box and returns a promise.\n // Not to be used directly by consumers, as this method may change calling syntax\n\n\n var makeMsgBox = function makeMsgBox($parent, content) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var resolver = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n if (!content || warnNoPromiseSupport(PROP_NAME) || warnNotClient(PROP_NAME) || !isFunction(resolver)) {\n /* istanbul ignore next */\n return;\n }\n\n return asyncMsgBox($parent, _objectSpread(_objectSpread({}, filterOptions(options)), {}, {\n msgBoxContent: content\n }), resolver);\n }; // BvModal instance class\n\n\n var BvModal = /*#__PURE__*/function () {\n function BvModal(vm) {\n _classCallCheck(this, BvModal);\n\n // Assign the new properties to this instance\n assign(this, {\n _vm: vm,\n _root: vm.$root\n }); // Set these properties as read-only and non-enumerable\n\n defineProperties(this, {\n _vm: readonlyDescriptor(),\n _root: readonlyDescriptor()\n });\n } // --- Instance methods ---\n // Show modal with the specified ID args are for future use\n\n\n _createClass(BvModal, [{\n key: \"show\",\n value: function show(id) {\n if (id && this._root) {\n var _this$_root;\n\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n (_this$_root = this._root).$emit.apply(_this$_root, [getRootActionEventName(NAME_MODAL, 'show'), id].concat(args));\n }\n } // Hide modal with the specified ID args are for future use\n\n }, {\n key: \"hide\",\n value: function hide(id) {\n if (id && this._root) {\n var _this$_root2;\n\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n (_this$_root2 = this._root).$emit.apply(_this$_root2, [getRootActionEventName(NAME_MODAL, 'hide'), id].concat(args));\n }\n } // The following methods require Promise support!\n // IE 11 and others do not support Promise natively, so users\n // should have a Polyfill loaded (which they need anyways for IE 11 support)\n // Open a message box with OK button only and returns a promise\n\n }, {\n key: \"msgBoxOk\",\n value: function msgBoxOk(message) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n // Pick the modal props we support from options\n var props = _objectSpread(_objectSpread({}, options), {}, {\n // Add in overrides and our content prop\n okOnly: true,\n okDisabled: false,\n hideFooter: false,\n msgBoxContent: message\n });\n\n return makeMsgBox(this._vm, message, props, function () {\n // Always resolve to true for OK\n return true;\n });\n } // Open a message box modal with OK and CANCEL buttons\n // and returns a promise\n\n }, {\n key: \"msgBoxConfirm\",\n value: function msgBoxConfirm(message) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n // Set the modal props we support from options\n var props = _objectSpread(_objectSpread({}, options), {}, {\n // Add in overrides and our content prop\n okOnly: false,\n okDisabled: false,\n cancelDisabled: false,\n hideFooter: false\n });\n\n return makeMsgBox(this._vm, message, props, function (bvModalEvt) {\n var trigger = bvModalEvt.trigger;\n return trigger === 'ok' ? true : trigger === 'cancel' ? false : null;\n });\n }\n }]);\n\n return BvModal;\n }(); // Add our instance mixin\n\n\n Vue.mixin({\n beforeCreate: function beforeCreate() {\n // Because we need access to `$root` for `$emits`, and VM for parenting,\n // we have to create a fresh instance of `BvModal` for each VM\n this[PROP_NAME_PRIV] = new BvModal(this);\n }\n }); // Define our read-only `$bvModal` instance property\n // Placed in an if just in case in HMR mode\n\n if (!hasOwnProperty(Vue.prototype, PROP_NAME)) {\n defineProperty(Vue.prototype, PROP_NAME, {\n get: function get() {\n /* istanbul ignore next */\n if (!this || !this[PROP_NAME_PRIV]) {\n warn(\"\\\"\".concat(PROP_NAME, \"\\\" must be accessed from a Vue instance \\\"this\\\" context.\"), NAME_MODAL);\n }\n\n return this[PROP_NAME_PRIV];\n }\n });\n }\n};\n\nexport var BVModalPlugin = /*#__PURE__*/pluginFactory({\n plugins: {\n plugin: plugin\n }\n});","import { BModal } from './modal';\nimport { VBModal } from '../../directives/modal/modal';\nimport { BVModalPlugin } from './helpers/bv-modal';\nimport { pluginFactory } from '../../utils/plugins';\nvar ModalPlugin = /*#__PURE__*/pluginFactory({\n components: {\n BModal: BModal\n },\n directives: {\n VBModal: VBModal\n },\n // $bvModal injection\n plugins: {\n BVModalPlugin: BVModalPlugin\n }\n});\nexport { ModalPlugin, BModal };"],"sourceRoot":""}