{"version":3,"sources":["webpack:///./node_modules/bootstrap-vue/esm/utils/stringify-object-values.js","webpack:///./node_modules/bootstrap-vue/esm/components/form/form.js","webpack:///./node_modules/bootstrap-vue/esm/components/pagination/pagination.js","webpack:///./node_modules/bootstrap-vue/esm/components/table/helpers/mixin-bottom-row.js","webpack:///./node_modules/bootstrap-vue/esm/components/table/helpers/mixin-busy.js","webpack:///./node_modules/bootstrap-vue/esm/components/table/helpers/mixin-empty.js","webpack:///./node_modules/bootstrap-vue/esm/components/table/helpers/sanitize-row.js","webpack:///./node_modules/bootstrap-vue/esm/components/table/helpers/stringify-record-values.js","webpack:///./node_modules/bootstrap-vue/esm/components/table/helpers/mixin-filtering.js","webpack:///./node_modules/bootstrap-vue/esm/components/table/helpers/mixin-pagination.js","webpack:///./node_modules/bootstrap-vue/esm/components/table/helpers/mixin-provider.js","webpack:///./node_modules/bootstrap-vue/esm/components/table/helpers/mixin-selectable.js","webpack:///./node_modules/bootstrap-vue/esm/components/table/helpers/mixin-sorting.js","webpack:///./node_modules/bootstrap-vue/esm/components/table/helpers/default-sort-compare.js","webpack:///./node_modules/bootstrap-vue/esm/components/table/helpers/mixin-top-row.js","webpack:///./node_modules/bootstrap-vue/esm/components/table/table.js","webpack:///./node_modules/bootstrap-vue/esm/components/media/media.js","webpack:///./node_modules/bootstrap-vue/esm/components/media/media-aside.js","webpack:///./node_modules/bootstrap-vue/esm/components/media/media-body.js","webpack:///./node_modules/bootstrap-vue/esm/utils/stable-sort.js","webpack:///./node_modules/bootstrap-vue/esm/directives/visible/visible.js","webpack:///./node_modules/bootstrap-vue/esm/components/form-textarea/form-textarea.js","webpack:///./node_modules/bootstrap-vue/esm/mixins/pagination.js","webpack:///./node_modules/bootstrap-vue/esm/mixins/form-custom.js","webpack:///./node_modules/bootstrap-vue/esm/components/form-file/form-file.js","webpack:///./node_modules/bootstrap-vue/esm/components/card/card-text.js"],"names":["stringifyObjectValues","value","sort","map","k","filter","v","join","props","id","inline","novalidate","validated","BForm","extend","name","functional","render","h","_ref","data","children","class","attrs","ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","target","i","arguments","length","source","forEach","key","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","obj","configurable","writable","DEFAULT_PER_PAGE","DEFAULT_TOTAL_ROWS","sanitizePerPage","sanitizeTotalRows","ariaControls","perPage","totalRows","BPagination","mixins","computed","numberOfPages","result","this","pageSizeNumberOfPages","watch","newValue","oldValue","currentPage","localNumberOfPages","created","_this","$nextTick","methods","onClick","event","pageNumber","_this2","clickEvt","cancelable","vueTarget","$emit","type","defaultPrevented","$el","contains","focusCurrent","makePage","pageNum","linkProps","bottomRowMixin","renderBottomRow","fields","computedFields","stacked","tbodyTrClass","tbodyTrAttr","$createElement","hasNormalizedSlot","staticClass","normalizeSlot","columns","MODEL_PROP_NAME_BUSY","MODEL_EVENT_NAME_BUSY","busyMixin","localBusy","computedBusy","stopIfBusy","renderBusy","colspan","emptyFilteredHtml","emptyFilteredText","emptyHtml","emptyText","showEmpty","emptyMixin","renderEmpty","items","computedItems","$empty","isFiltered","domProps","html","role","row","ignoreFields","includeFields","fieldsObj","undefined","formattedRow","reduce","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","concat","filterDebounce","String","filterFunction","filterIgnoredFields","filterIncludedFields","filteringMixin","localFilter","filterSanitize","computedFilterIgnored","identity","computedFilterIncluded","computedFilterDebounce","ms","warn","localFiltering","hasProvider","noProviderFiltering","filteredCheck","filteredItems","localItems","localFilterFn","criteria","filterFn","filterFnFactory","defaultFilterFnFactory","$_filterTimer","clearFilterTimer","deep","handler","newCriteria","timeout","setTimeout","Boolean","beforeDestroy","clearTimeout","fn","item","_this3","regExp","pattern","replace","RegExp","lastIndex","computedFieldsObj","paginationMixin","localPaging","noProviderPaging","paginatedItems","sortedItems","math","ROOT_EVENT_NAME_REFRESHED","ROOT_ACTION_EVENT_NAME_REFRESH","apiUrl","noProviderSorting","providerMixin","providerTriggerContext","ctx","sortBy","sortDesc","localSortBy","localSortDesc","_providerUpdate","mounted","listenOnRoot","refresh","$off","$on","clearSelected","_providerSetLocal","emitOnRoot","context","then","e","message","_props","_watch","SELECT_MODES","noSelectOnClick","selectMode","selectable","selectedVariant","selectableMixin","selectedRows","selectedLastRow","isSelectable","hasSelectableRowClick","supportsSelectableRows","selectableHasSelection","some","selectableIsMultiSelect","selectableTableClasses","selectableTableAttrs","equal","setSelectionHandlers","_selectedRows","idx","beforeMount","selectRow","index","isRowSelected","selectedLastClicked","unselectRow","selectAllRows","selectableRowClasses","variant","dark","selectableRowAttrs","on","method","selectionHandler","selected","shiftKey","ctrlKey","metaKey","a","b","_ref$sortBy","_ref$formatter","_ref$locale","locale","_ref$localeOptions","localeOptions","_ref$nullLast","nullLast","aa","get","bb","localeCompare","MODEL_PROP_NAME_SORT_BY","MODEL_EVENT_NAME_SORT_BY","MODEL_PROP_NAME_SORT_DESC","MODEL_EVENT_NAME_SORT_DESC","SORT_DIRECTION_ASC","SORT_DIRECTION_DESC","SORT_DIRECTION_LAST","SORT_DIRECTIONS","labelSortAsc","labelSortClear","labelSortDesc","noFooterSorting","noLocalSorting","noSortReset","numeric","sortingMixin","localSorting","isSortable","f","sortable","sortCompareLocale","sortNullLast","sortCompare","sortCompareOptions","usage","sortByFormatted","getFieldFormatter","handleSort","isFoot","sortChanged","toggleLocalSortDesc","sortDirection","sortKey","sortTheadThClasses","sortIconLeft","sortTheadThAttrs","ariaSort","sortTheadThLabel","labelSorting","topRowMixin","renderTopRow","BTable","noBody","rightAlign","tag","verticalAlign","BMedia","slots","scopedSlots","$children","slotScope","$slots","$scopedSlots","$aside","right","BMediaAside","align","BMediaBody","stableSort","compareFn","bind","_classCallCheck","instance","Constructor","_defineProperties","descriptor","_createClass","protoProps","staticProps","OBSERVER_PROP_NAME","VisibilityObserver","el","options","vnode","callback","margin","once","observer","visible","doneOnce","createObserver","stop","IntersectionObserver","root","rootMargin","threshold","_unused","observe","entries","entry","isIntersecting","intersectionRatio","disconnect","destroy","modifiers","mod","toLowerCase","_prevModifiers","_ref2","unbind","VBVisible","componentUpdated","maxRows","noAutoShrink","noResize","rows","wrap","BFormTextarea","directives","listeners","heightInPx","computedStyle","styles","resize","computedRows","height","overflowY","computedMinRows","computedMaxRows","computedAttrs","disabled","required","safeId","form","placeholder","autocomplete","readonly","plaintext","computedAriaInvalid","computedListeners","bvListeners","input","onInput","change","onChange","blur","onBlur","localValue","setHeight","visibleCallback","computeHeight","$isServer","lineHeight","border","borderTopWidth","borderBottomWidth","padding","paddingTop","paddingBottom","offset","minHeight","oldHeight","scrollHeight","contentRows","computedClass","style","ref","_makeModelMixin","defaultValue","validator","modelMixin","mixin","modelProps","MODEL_PROP_NAME","prop","MODEL_EVENT_NAME","ELLIPSIS_THRESHOLD","DEFAULT_LIMIT","makePageArray","startNumber","_","number","classes","sanitizeLimit","limit","sanitizeCurrentPage","val","page","onSpaceKey","keyCode","immediatePropagation","currentTarget","click","ariaLabel","ellipsisClass","ellipsisText","firstClass","firstNumber","firstText","hideEllipsis","hideGotoEndButtons","labelFirstPage","labelLastPage","labelNextPage","labelPage","labelPrevPage","lastClass","lastNumber","lastText","nextClass","nextText","pageClass","pills","prevClass","prevText","size","localLimit","btnSize","alignment","styleClass","computedCurrentPage","paginationParams","showFirstDots","showLastDots","numberOfLinks","lastPageNumber","pageList","_this$paginationParam","pages","_i","_i2","_i3","handleKeyNav","isNav","propagation","focusFirst","focusPrev","focusLast","focusNext","getButtons","btn","find","_this4","reverse","_this5","buttons","indexOf","_this6","_this7","pageNumbers","p","_this$paginationParam2","fill","$buttons","isActivePage","noCurrentPage","makeEndBtn","linkTo","btnSlot","btnText","btnClass","pageTest","isDisabled","scope","$btnContent","$inner","tabindex","keydown","makeEllipsis","isLast","makePageButton","active","tabIndex","btnContent","content","$firstPageBtn","$lastPageBtn","$pagination","plain","formCustomMixin","custom","VALUE_EMPTY_DEPRECATED_MSG","isValidValue","every","getDataTransferItemEntry","getAsEntry","webkitGetAsEntry","getAllFileEntries","dataTransferItemList","traverseDirectories","Promise","all","kind","isDirectory","getAllFileEntriesInDirectory","createReader","isFile","resolve","file","$path","directoryReader","path","entryPromises","readDirectoryEntries","readEntries","accept","browseText","capture","directory","dropPlaceholder","fileNameFormatter","multiple","noDrop","noDropPlaceholder","noTraverse","BFormFile","inheritAttrs","files","dragging","dropAllowed","hasFocus","computedAccept","trim","split","extOrType","startMatch","endMatch","rx","computedCapture","bvAttrs","webkitdirectory","computedFileNameFormatter","defaultFileNameFormatter","clonedFiles","flattenedFiles","fileNames","labelContent","allowed","filesTraversed","names","reset","$_form","$form","isFileValid","isFilesArrayValid","setFiles","setInputFiles","dataTransfer","ClipboardEvent","clipboardData","DataTransfer","add","$refs","$input","_unused2","handleFiles","isDrop","filteredFiles","focusHandler","_event$dataTransfer","webkitRelativePath","onDragenter","_event$dataTransfer2","dropEffect","onDragover","_event$dataTransfer3","onDragleave","onDrop","stateClass","focus","zIndex","focusin","focusout","$label","for","pointerEvents","dragenter","dragover","dragleave","drop","textTag","BCardText"],"mappings":"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","file":"js/chunk-0a2bce7d.d8393d6d.js","sourcesContent":["import { isDate, isObject, isUndefinedOrNull } from './inspect';\nimport { keys } from './object';\nimport { toString } from './string'; // Recursively stringifies the values of an object, space separated, in an\n// SSR safe deterministic way (keys are sorted before stringification)\n//\n// ex:\n// { b: 3, c: { z: 'zzz', d: null, e: 2 }, d: [10, 12, 11], a: 'one' }\n// becomes\n// 'one 3 2 zzz 10 12 11'\n//\n// Strings are returned as-is\n// Numbers get converted to string\n// `null` and `undefined` values are filtered out\n// Dates are converted to their native string format\n\nexport var stringifyObjectValues = function stringifyObjectValues(value) {\n if (isUndefinedOrNull(value)) {\n return '';\n } // Arrays are also object, and keys just returns the array indexes\n // Date objects we convert to strings\n\n\n if (isObject(value) && !isDate(value)) {\n return keys(value).sort() // Sort to prevent SSR issues on pre-rendered sorted tables\n .map(function (k) {\n return stringifyObjectValues(value[k]);\n }).filter(function (v) {\n return !!v;\n }) // Ignore empty strings\n .join(' ');\n }\n\n return toString(value);\n};","import { Vue, mergeData } from '../../vue';\nimport { NAME_FORM } from '../../constants/components';\nimport { PROP_TYPE_BOOLEAN, PROP_TYPE_STRING } from '../../constants/props';\nimport { makeProp, makePropsConfigurable } from '../../utils/props'; // --- Props ---\n\nexport var props = makePropsConfigurable({\n id: makeProp(PROP_TYPE_STRING),\n inline: makeProp(PROP_TYPE_BOOLEAN, false),\n novalidate: makeProp(PROP_TYPE_BOOLEAN, false),\n validated: makeProp(PROP_TYPE_BOOLEAN, false)\n}, NAME_FORM); // --- Main component ---\n// @vue/component\n\nexport var BForm = /*#__PURE__*/Vue.extend({\n name: NAME_FORM,\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('form', mergeData(data, {\n class: {\n 'form-inline': props.inline,\n 'was-validated': props.validated\n },\n attrs: {\n id: props.id,\n novalidate: props.novalidate\n }\n }), children);\n }\n});","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 { Vue } from '../../../vue';\nimport { SLOT_NAME_BOTTOM_ROW } from '../../../constants/slots';\nimport { isFunction } from '../../../utils/inspect';\nimport { BTr } from '../tr'; // --- Props ---\n\nexport var props = {}; // --- Mixin ---\n// @vue/component\n\nexport var bottomRowMixin = Vue.extend({\n props: props,\n methods: {\n renderBottomRow: function renderBottomRow() {\n var fields = this.computedFields,\n stacked = this.stacked,\n tbodyTrClass = this.tbodyTrClass,\n tbodyTrAttr = this.tbodyTrAttr;\n var h = this.$createElement; // Static bottom row slot (hidden in visibly stacked mode as we can't control the data-label)\n // If in *always* stacked mode, we don't bother rendering the row\n\n if (!this.hasNormalizedSlot(SLOT_NAME_BOTTOM_ROW) || stacked === true || stacked === '') {\n return h();\n }\n\n return h(BTr, {\n staticClass: 'b-table-bottom-row',\n class: [isFunction(tbodyTrClass) ?\n /* istanbul ignore next */\n tbodyTrClass(null, 'row-bottom') : tbodyTrClass],\n attrs: isFunction(tbodyTrAttr) ?\n /* istanbul ignore next */\n tbodyTrAttr(null, 'row-bottom') : tbodyTrAttr,\n key: 'b-bottom-row'\n }, this.normalizeSlot(SLOT_NAME_BOTTOM_ROW, {\n columns: fields.length,\n fields: fields\n }));\n }\n }\n});","function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Vue } from '../../../vue';\nimport { MODEL_EVENT_NAME_PREFIX } from '../../../constants/events';\nimport { PROP_TYPE_BOOLEAN } from '../../../constants/props';\nimport { SLOT_NAME_TABLE_BUSY } from '../../../constants/slots';\nimport { stopEvent } from '../../../utils/events';\nimport { isFunction } from '../../../utils/inspect';\nimport { makeProp } from '../../../utils/props';\nimport { BTr } from '../tr';\nimport { BTd } from '../td'; // --- Constants ---\n\nvar MODEL_PROP_NAME_BUSY = 'busy';\nvar MODEL_EVENT_NAME_BUSY = MODEL_EVENT_NAME_PREFIX + MODEL_PROP_NAME_BUSY; // --- Props ---\n\nexport var props = _defineProperty({}, MODEL_PROP_NAME_BUSY, makeProp(PROP_TYPE_BOOLEAN, false)); // --- Mixin ---\n// @vue/component\n\nexport var busyMixin = Vue.extend({\n props: props,\n data: function data() {\n return {\n localBusy: false\n };\n },\n computed: {\n computedBusy: function computedBusy() {\n return this[MODEL_PROP_NAME_BUSY] || this.localBusy;\n }\n },\n watch: {\n localBusy: function localBusy(newValue, oldValue) {\n if (newValue !== oldValue) {\n this.$emit(MODEL_EVENT_NAME_BUSY, newValue);\n }\n }\n },\n methods: {\n // Event handler helper\n stopIfBusy: function stopIfBusy(event) {\n // If table is busy (via provider) then don't propagate\n if (this.computedBusy) {\n stopEvent(event);\n return true;\n }\n\n return false;\n },\n // Render the busy indicator or return `null` if not busy\n renderBusy: function renderBusy() {\n var tbodyTrClass = this.tbodyTrClass,\n tbodyTrAttr = this.tbodyTrAttr;\n var h = this.$createElement; // Return a busy indicator row, or `null` if not busy\n\n if (this.computedBusy && this.hasNormalizedSlot(SLOT_NAME_TABLE_BUSY)) {\n return h(BTr, {\n staticClass: 'b-table-busy-slot',\n class: [isFunction(tbodyTrClass) ?\n /* istanbul ignore next */\n tbodyTrClass(null, SLOT_NAME_TABLE_BUSY) : tbodyTrClass],\n attrs: isFunction(tbodyTrAttr) ?\n /* istanbul ignore next */\n tbodyTrAttr(null, SLOT_NAME_TABLE_BUSY) : tbodyTrAttr,\n key: 'table-busy-slot'\n }, [h(BTd, {\n props: {\n colspan: this.computedFields.length || null\n }\n }, [this.normalizeSlot(SLOT_NAME_TABLE_BUSY)])]);\n } // We return `null` here so that we can determine if we need to\n // render the table items rows or not\n\n\n return null;\n }\n }\n});","import { Vue } from '../../../vue';\nimport { PROP_TYPE_BOOLEAN, PROP_TYPE_STRING } from '../../../constants/props';\nimport { SLOT_NAME_EMPTY, SLOT_NAME_EMPTYFILTERED, SLOT_NAME_TABLE_BUSY } from '../../../constants/slots';\nimport { htmlOrText } from '../../../utils/html';\nimport { isFunction } from '../../../utils/inspect';\nimport { makeProp } from '../../../utils/props';\nimport { BTr } from '../tr';\nimport { BTd } from '../td'; // --- Props ---\n\nexport var props = {\n emptyFilteredHtml: makeProp(PROP_TYPE_STRING),\n emptyFilteredText: makeProp(PROP_TYPE_STRING, 'There are no records matching your request'),\n emptyHtml: makeProp(PROP_TYPE_STRING),\n emptyText: makeProp(PROP_TYPE_STRING, 'There are no records to show'),\n showEmpty: makeProp(PROP_TYPE_BOOLEAN, false)\n}; // --- Mixin ---\n// @vue/component\n\nexport var emptyMixin = Vue.extend({\n props: props,\n methods: {\n renderEmpty: function renderEmpty() {\n var items = this.computedItems;\n var h = this.$createElement;\n var $empty = h();\n\n if (this.showEmpty && (!items || items.length === 0) && !(this.computedBusy && this.hasNormalizedSlot(SLOT_NAME_TABLE_BUSY))) {\n var fields = this.computedFields,\n isFiltered = this.isFiltered,\n emptyText = this.emptyText,\n emptyHtml = this.emptyHtml,\n emptyFilteredText = this.emptyFilteredText,\n emptyFilteredHtml = this.emptyFilteredHtml,\n tbodyTrClass = this.tbodyTrClass,\n tbodyTrAttr = this.tbodyTrAttr;\n $empty = this.normalizeSlot(isFiltered ? SLOT_NAME_EMPTYFILTERED : SLOT_NAME_EMPTY, {\n emptyFilteredHtml: emptyFilteredHtml,\n emptyFilteredText: emptyFilteredText,\n emptyHtml: emptyHtml,\n emptyText: emptyText,\n fields: fields,\n // Not sure why this is included, as it will always be an empty array\n items: items\n });\n\n if (!$empty) {\n $empty = h('div', {\n class: ['text-center', 'my-2'],\n domProps: isFiltered ? htmlOrText(emptyFilteredHtml, emptyFilteredText) : htmlOrText(emptyHtml, emptyText)\n });\n }\n\n $empty = h(BTd, {\n props: {\n colspan: fields.length || null\n }\n }, [h('div', {\n attrs: {\n role: 'alert',\n 'aria-live': 'polite'\n }\n }, [$empty])]);\n $empty = h(BTr, {\n staticClass: 'b-table-empty-row',\n class: [isFunction(tbodyTrClass) ?\n /* istanbul ignore next */\n tbodyTrClass(null, 'row-empty') : tbodyTrClass],\n attrs: isFunction(tbodyTrAttr) ?\n /* istanbul ignore next */\n tbodyTrAttr(null, 'row-empty') : tbodyTrAttr,\n key: isFiltered ? 'b-empty-filtered-row' : 'b-empty-row'\n }, [$empty]);\n }\n\n return $empty;\n }\n }\n});","import { arrayIncludes } from '../../../utils/array';\nimport { isArray, isFunction } from '../../../utils/inspect';\nimport { clone, keys, pick } from '../../../utils/object';\nimport { IGNORED_FIELD_KEYS } from './constants'; // Return a copy of a row after all reserved fields have been filtered out\n\nexport var sanitizeRow = function sanitizeRow(row, ignoreFields, includeFields) {\n var fieldsObj = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n // We first need to format the row based on the field configurations\n // This ensures that we add formatted values for keys that may not\n // exist in the row itself\n var formattedRow = keys(fieldsObj).reduce(function (result, key) {\n var field = fieldsObj[key];\n var filterByFormatted = field.filterByFormatted;\n var formatter = isFunction(filterByFormatted) ?\n /* istanbul ignore next */\n filterByFormatted : filterByFormatted ?\n /* istanbul ignore next */\n field.formatter : null;\n\n if (isFunction(formatter)) {\n result[key] = formatter(row[key], key, row);\n }\n\n return result;\n }, clone(row)); // Determine the allowed keys:\n // - Ignore special fields that start with `_`\n // - Ignore fields in the `ignoreFields` array\n // - Include only fields in the `includeFields` array\n\n var allowedKeys = keys(formattedRow).filter(function (key) {\n return !IGNORED_FIELD_KEYS[key] && !(isArray(ignoreFields) && ignoreFields.length > 0 && arrayIncludes(ignoreFields, key)) && !(isArray(includeFields) && includeFields.length > 0 && !arrayIncludes(includeFields, key));\n });\n return pick(formattedRow, allowedKeys);\n};","import { isObject } from '../../../utils/inspect';\nimport { stringifyObjectValues } from '../../../utils/stringify-object-values';\nimport { sanitizeRow } from './sanitize-row'; // Stringifies the values of a record, ignoring any special top level field keys\n// TODO: Add option to stringify `scopedSlot` items\n\nexport var stringifyRecordValues = function stringifyRecordValues(row, ignoreFields, includeFields, fieldsObj) {\n return isObject(row) ? stringifyObjectValues(sanitizeRow(row, ignoreFields, includeFields, fieldsObj)) :\n /* istanbul ignore next */\n '';\n};","function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nimport { Vue } from '../../../vue';\nimport { NAME_TABLE } from '../../../constants/components';\nimport { EVENT_NAME_FILTERED } from '../../../constants/events';\nimport { PROP_TYPE_REG_EXP, PROP_TYPE_ARRAY_OBJECT_STRING, PROP_TYPE_FUNCTION, PROP_TYPE_ARRAY, PROP_TYPE_NUMBER_STRING } from '../../../constants/props';\nimport { RX_DIGITS, RX_SPACES } from '../../../constants/regex';\nimport { concat } from '../../../utils/array';\nimport { cloneDeep } from '../../../utils/clone-deep';\nimport { identity } from '../../../utils/identity';\nimport { isFunction, isString, isRegExp } from '../../../utils/inspect';\nimport { looseEqual } from '../../../utils/loose-equal';\nimport { toInteger } from '../../../utils/number';\nimport { hasPropFunction, makeProp } from '../../../utils/props';\nimport { escapeRegExp } from '../../../utils/string';\nimport { warn } from '../../../utils/warn';\nimport { stringifyRecordValues } from './stringify-record-values'; // --- Constants ---\n\nvar DEBOUNCE_DEPRECATED_MSG = 'Prop \"filter-debounce\" is deprecated. Use the debounce feature of \"\" instead.'; // --- Props ---\n\nexport var props = {\n filter: makeProp([].concat(_toConsumableArray(PROP_TYPE_ARRAY_OBJECT_STRING), [PROP_TYPE_REG_EXP])),\n filterDebounce: makeProp(PROP_TYPE_NUMBER_STRING, 0, function (value) {\n return RX_DIGITS.test(String(value));\n }),\n filterFunction: makeProp(PROP_TYPE_FUNCTION),\n filterIgnoredFields: makeProp(PROP_TYPE_ARRAY, []),\n filterIncludedFields: makeProp(PROP_TYPE_ARRAY, [])\n}; // --- Mixin ---\n// @vue/component\n\nexport var filteringMixin = Vue.extend({\n props: props,\n data: function data() {\n return {\n // Flag for displaying which empty slot to show and some event triggering\n isFiltered: false,\n // Where we store the copy of the filter criteria after debouncing\n // We pre-set it with the sanitized filter value\n localFilter: this.filterSanitize(this.filter)\n };\n },\n computed: {\n computedFilterIgnored: function computedFilterIgnored() {\n return concat(this.filterIgnoredFields || []).filter(identity);\n },\n computedFilterIncluded: function computedFilterIncluded() {\n return concat(this.filterIncludedFields || []).filter(identity);\n },\n computedFilterDebounce: function computedFilterDebounce() {\n var ms = toInteger(this.filterDebounce, 0);\n /* istanbul ignore next */\n\n if (ms > 0) {\n warn(DEBOUNCE_DEPRECATED_MSG, NAME_TABLE);\n }\n\n return ms;\n },\n localFiltering: function localFiltering() {\n return this.hasProvider ? !!this.noProviderFiltering : true;\n },\n // For watching changes to `filteredItems` vs `localItems`\n filteredCheck: function filteredCheck() {\n var filteredItems = this.filteredItems,\n localItems = this.localItems,\n localFilter = this.localFilter;\n return {\n filteredItems: filteredItems,\n localItems: localItems,\n localFilter: localFilter\n };\n },\n // Sanitized/normalize filter-function prop\n localFilterFn: function localFilterFn() {\n // Return `null` to signal to use internal filter function\n var filterFunction = this.filterFunction;\n return hasPropFunction(filterFunction) ? filterFunction : null;\n },\n // Returns the records in `localItems` that match the filter criteria\n // Returns the original `localItems` array if not sorting\n filteredItems: function filteredItems() {\n // Note the criteria is debounced and sanitized\n var items = this.localItems,\n criteria = this.localFilter; // Resolve the filtering function, when requested\n // We prefer the provided filtering function and fallback to the internal one\n // When no filtering criteria is specified the filtering factories will return `null`\n\n var filterFn = this.localFiltering ? this.filterFnFactory(this.localFilterFn, criteria) || this.defaultFilterFnFactory(criteria) : null; // We only do local filtering when requested and there are records to filter\n\n return filterFn && items.length > 0 ? items.filter(filterFn) : items;\n }\n },\n watch: {\n // Watch for debounce being set to 0\n computedFilterDebounce: function computedFilterDebounce(newValue) {\n if (!newValue && this.$_filterTimer) {\n this.clearFilterTimer();\n this.localFilter = this.filterSanitize(this.filter);\n }\n },\n // Watch for changes to the filter criteria, and debounce if necessary\n filter: {\n // We need a deep watcher in case the user passes\n // an object when using `filter-function`\n deep: true,\n handler: function handler(newCriteria) {\n var _this = this;\n\n var timeout = this.computedFilterDebounce;\n this.clearFilterTimer();\n\n if (timeout && timeout > 0) {\n // If we have a debounce time, delay the update of `localFilter`\n this.$_filterTimer = setTimeout(function () {\n _this.localFilter = _this.filterSanitize(newCriteria);\n }, timeout);\n } else {\n // Otherwise, immediately update `localFilter` with `newFilter` value\n this.localFilter = this.filterSanitize(newCriteria);\n }\n }\n },\n // Watch for changes to the filter criteria and filtered items vs `localItems`\n // Set visual state and emit events as required\n filteredCheck: function filteredCheck(_ref) {\n var filteredItems = _ref.filteredItems,\n localFilter = _ref.localFilter;\n // Determine if the dataset is filtered or not\n var isFiltered = false;\n\n if (!localFilter) {\n // If filter criteria is falsey\n isFiltered = false;\n } else if (looseEqual(localFilter, []) || looseEqual(localFilter, {})) {\n // If filter criteria is an empty array or object\n isFiltered = false;\n } else if (localFilter) {\n // If filter criteria is truthy\n isFiltered = true;\n }\n\n if (isFiltered) {\n this.$emit(EVENT_NAME_FILTERED, filteredItems, filteredItems.length);\n }\n\n this.isFiltered = isFiltered;\n },\n isFiltered: function isFiltered(newValue, oldValue) {\n if (newValue === false && oldValue === true) {\n // We need to emit a filtered event if `isFiltered` transitions from `true` to\n // `false` so that users can update their pagination controls\n var localItems = this.localItems;\n this.$emit(EVENT_NAME_FILTERED, localItems, localItems.length);\n }\n }\n },\n created: function created() {\n var _this2 = this;\n\n // Create private non-reactive props\n this.$_filterTimer = null; // If filter is \"pre-set\", set the criteria\n // This will trigger any watchers/dependents\n // this.localFilter = this.filterSanitize(this.filter)\n // Set the initial filtered state in a `$nextTick()` so that\n // we trigger a filtered event if needed\n\n this.$nextTick(function () {\n _this2.isFiltered = Boolean(_this2.localFilter);\n });\n },\n beforeDestroy: function beforeDestroy() {\n this.clearFilterTimer();\n },\n methods: {\n clearFilterTimer: function clearFilterTimer() {\n clearTimeout(this.$_filterTimer);\n this.$_filterTimer = null;\n },\n filterSanitize: function filterSanitize(criteria) {\n // Sanitizes filter criteria based on internal or external filtering\n if (this.localFiltering && !this.localFilterFn && !(isString(criteria) || isRegExp(criteria))) {\n // If using internal filter function, which only accepts string or RegExp,\n // return '' to signify no filter\n return '';\n } // Could be a string, object or array, as needed by external filter function\n // We use `cloneDeep` to ensure we have a new copy of an object or array\n // without Vue's reactive observers\n\n\n return cloneDeep(criteria);\n },\n // Filter Function factories\n filterFnFactory: function filterFnFactory(filterFn, criteria) {\n // Wrapper factory for external filter functions\n // Wrap the provided filter-function and return a new function\n // Returns `null` if no filter-function defined or if criteria is falsey\n // Rather than directly grabbing `this.computedLocalFilterFn` or `this.filterFunction`\n // we have it passed, so that the caller computed prop will be reactive to changes\n // in the original filter-function (as this routine is a method)\n if (!filterFn || !isFunction(filterFn) || !criteria || looseEqual(criteria, []) || looseEqual(criteria, {})) {\n return null;\n } // Build the wrapped filter test function, passing the criteria to the provided function\n\n\n var fn = function fn(item) {\n // Generated function returns true if the criteria matches part\n // of the serialized data, otherwise false\n return filterFn(item, criteria);\n }; // Return the wrapped function\n\n\n return fn;\n },\n defaultFilterFnFactory: function defaultFilterFnFactory(criteria) {\n var _this3 = this;\n\n // Generates the default filter function, using the given filter criteria\n // Returns `null` if no criteria or criteria format not supported\n if (!criteria || !(isString(criteria) || isRegExp(criteria))) {\n // Built in filter can only support strings or RegExp criteria (at the moment)\n return null;\n } // Build the RegExp needed for filtering\n\n\n var regExp = criteria;\n\n if (isString(regExp)) {\n // Escape special RegExp characters in the string and convert contiguous\n // whitespace to \\s+ matches\n var pattern = escapeRegExp(criteria).replace(RX_SPACES, '\\\\s+'); // Build the RegExp (no need for global flag, as we only need\n // to find the value once in the string)\n\n regExp = new RegExp(\".*\".concat(pattern, \".*\"), 'i');\n } // Generate the wrapped filter test function to use\n\n\n var fn = function fn(item) {\n // This searches all row values (and sub property values) in the entire (excluding\n // special `_` prefixed keys), because we convert the record to a space-separated\n // string containing all the value properties (recursively), even ones that are\n // not visible (not specified in this.fields)\n // Users can ignore filtering on specific fields, or on only certain fields,\n // and can optionall specify searching results of fields with formatter\n //\n // TODO: Enable searching on scoped slots (optional, as it will be SLOW)\n //\n // Generated function returns true if the criteria matches part of\n // the serialized data, otherwise false\n //\n // We set `lastIndex = 0` on the `RegExp` in case someone specifies the `/g` global flag\n regExp.lastIndex = 0;\n return regExp.test(stringifyRecordValues(item, _this3.computedFilterIgnored, _this3.computedFilterIncluded, _this3.computedFieldsObj));\n }; // Return the generated function\n\n\n return fn;\n }\n }\n});","import { Vue } from '../../../vue';\nimport { PROP_TYPE_NUMBER_STRING } from '../../../constants/props';\nimport { mathMax } from '../../../utils/math';\nimport { toInteger } from '../../../utils/number';\nimport { makeProp } from '../../../utils/props'; // --- Props ---\n\nexport var props = {\n currentPage: makeProp(PROP_TYPE_NUMBER_STRING, 1),\n perPage: makeProp(PROP_TYPE_NUMBER_STRING, 0)\n}; // --- Mixin ---\n// @vue/component\n\nexport var paginationMixin = Vue.extend({\n props: props,\n computed: {\n localPaging: function localPaging() {\n return this.hasProvider ? !!this.noProviderPaging : true;\n },\n paginatedItems: function paginatedItems() {\n var items = this.sortedItems || this.filteredItems || this.localItems || [];\n var currentPage = mathMax(toInteger(this.currentPage, 1), 1);\n var perPage = mathMax(toInteger(this.perPage, 0), 0); // Apply local pagination\n\n if (this.localPaging && perPage) {\n // Grab the current page of data (which may be past filtered items limit)\n items = items.slice((currentPage - 1) * perPage, currentPage * perPage);\n } // Return the items to display in the table\n\n\n return items;\n }\n }\n});","import { Vue } from '../../../vue';\nimport { NAME_TABLE } from '../../../constants/components';\nimport { EVENT_NAME_REFRESH, EVENT_NAME_REFRESHED } from '../../../constants/events';\nimport { PROP_TYPE_ARRAY_FUNCTION, PROP_TYPE_BOOLEAN, PROP_TYPE_STRING } from '../../../constants/props';\nimport { getRootActionEventName, getRootEventName } from '../../../utils/events';\nimport { isArray, isFunction, isPromise } from '../../../utils/inspect';\nimport { looseEqual } from '../../../utils/loose-equal';\nimport { clone } from '../../../utils/object';\nimport { makeProp } from '../../../utils/props';\nimport { warn } from '../../../utils/warn';\nimport { listenOnRootMixin } from '../../../mixins/listen-on-root'; // --- Constants ---\n\nvar ROOT_EVENT_NAME_REFRESHED = getRootEventName(NAME_TABLE, EVENT_NAME_REFRESHED);\nvar ROOT_ACTION_EVENT_NAME_REFRESH = getRootActionEventName(NAME_TABLE, EVENT_NAME_REFRESH); // --- Props ---\n\nexport var props = {\n // Passed to the context object\n // Not used by `` directly\n apiUrl: makeProp(PROP_TYPE_STRING),\n // Adds in 'Function' support\n items: makeProp(PROP_TYPE_ARRAY_FUNCTION, []),\n noProviderFiltering: makeProp(PROP_TYPE_BOOLEAN, false),\n noProviderPaging: makeProp(PROP_TYPE_BOOLEAN, false),\n noProviderSorting: makeProp(PROP_TYPE_BOOLEAN, false)\n}; // --- Mixin ---\n// @vue/component\n\nexport var providerMixin = Vue.extend({\n mixins: [listenOnRootMixin],\n props: props,\n computed: {\n hasProvider: function hasProvider() {\n return isFunction(this.items);\n },\n providerTriggerContext: function providerTriggerContext() {\n // Used to trigger the provider function via a watcher. Only the fields that\n // are needed for triggering a provider update are included. Note that the\n // regular this.context is sent to the provider during fetches though, as they\n // may need all the prop info.\n var ctx = {\n apiUrl: this.apiUrl,\n filter: null,\n sortBy: null,\n sortDesc: null,\n perPage: null,\n currentPage: null\n };\n\n if (!this.noProviderFiltering) {\n // Either a string, or could be an object or array.\n ctx.filter = this.localFilter;\n }\n\n if (!this.noProviderSorting) {\n ctx.sortBy = this.localSortBy;\n ctx.sortDesc = this.localSortDesc;\n }\n\n if (!this.noProviderPaging) {\n ctx.perPage = this.perPage;\n ctx.currentPage = this.currentPage;\n }\n\n return clone(ctx);\n }\n },\n watch: {\n // Provider update triggering\n items: function items(newValue) {\n // If a new provider has been specified, trigger an update\n if (this.hasProvider || isFunction(newValue)) {\n this.$nextTick(this._providerUpdate);\n }\n },\n providerTriggerContext: function providerTriggerContext(newValue, oldValue) {\n // Trigger the provider to update as the relevant context values have changed.\n if (!looseEqual(newValue, oldValue)) {\n this.$nextTick(this._providerUpdate);\n }\n }\n },\n mounted: function mounted() {\n var _this = this;\n\n // Call the items provider if necessary\n if (this.hasProvider && (!this.localItems || this.localItems.length === 0)) {\n // Fetch on mount if localItems is empty\n this._providerUpdate();\n } // Listen for global messages to tell us to force refresh the table\n\n\n this.listenOnRoot(ROOT_ACTION_EVENT_NAME_REFRESH, function (id) {\n if (id === _this.id || id === _this) {\n _this.refresh();\n }\n });\n },\n methods: {\n refresh: function refresh() {\n var items = this.items,\n refresh = this.refresh; // Public Method: Force a refresh of the provider function\n\n this.$off(EVENT_NAME_REFRESHED, refresh);\n\n if (this.computedBusy) {\n // Can't force an update when forced busy by user (busy prop === true)\n if (this.localBusy && this.hasProvider) {\n // But if provider running (localBusy), re-schedule refresh once `refreshed` emitted\n this.$on(EVENT_NAME_REFRESHED, refresh);\n }\n } else {\n this.clearSelected();\n\n if (this.hasProvider) {\n this.$nextTick(this._providerUpdate);\n } else {\n /* istanbul ignore next */\n this.localItems = isArray(items) ? items.slice() : [];\n }\n }\n },\n // Provider related methods\n _providerSetLocal: function _providerSetLocal(items) {\n this.localItems = isArray(items) ? items.slice() : [];\n this.localBusy = false;\n this.$emit(EVENT_NAME_REFRESHED); // New root emit\n\n if (this.id) {\n this.emitOnRoot(ROOT_EVENT_NAME_REFRESHED, this.id);\n }\n },\n _providerUpdate: function _providerUpdate() {\n var _this2 = this;\n\n // Refresh the provider function items.\n if (!this.hasProvider) {\n // Do nothing if no provider\n return;\n } // If table is busy, wait until refreshed before calling again\n\n\n if (this.computedBusy) {\n // Schedule a new refresh once `refreshed` is emitted\n this.$nextTick(this.refresh);\n return;\n } // Set internal busy state\n\n\n this.localBusy = true; // Call provider function with context and optional callback after DOM is fully updated\n\n this.$nextTick(function () {\n try {\n // Call provider function passing it the context and optional callback\n var data = _this2.items(_this2.context, _this2._providerSetLocal);\n\n if (isPromise(data)) {\n // Provider returned Promise\n data.then(function (items) {\n // Provider resolved with items\n _this2._providerSetLocal(items);\n });\n } else if (isArray(data)) {\n // Provider returned Array data\n _this2._providerSetLocal(data);\n } else {\n /* istanbul ignore if */\n if (_this2.items.length !== 2) {\n // Check number of arguments provider function requested\n // Provider not using callback (didn't request second argument), so we clear\n // busy state as most likely there was an error in the provider function\n\n /* istanbul ignore next */\n warn(\"Provider function didn't request callback and did not return a promise or data.\", NAME_TABLE);\n _this2.localBusy = false;\n }\n }\n } catch (e)\n /* istanbul ignore next */\n {\n // Provider function borked on us, so we spew out a warning\n // and clear the busy state\n warn(\"Provider function error [\".concat(e.name, \"] \").concat(e.message, \".\"), NAME_TABLE);\n _this2.localBusy = false;\n\n _this2.$off(EVENT_NAME_REFRESHED, _this2.refresh);\n }\n });\n }\n }\n});","function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Vue } from '../../../vue';\nimport { EVENT_NAME_CONTEXT_CHANGED, EVENT_NAME_FILTERED, EVENT_NAME_ROW_CLICKED, EVENT_NAME_ROW_SELECTED } from '../../../constants/events';\nimport { PROP_TYPE_BOOLEAN, PROP_TYPE_STRING } from '../../../constants/props';\nimport { arrayIncludes, createArray } from '../../../utils/array';\nimport { identity } from '../../../utils/identity';\nimport { isArray, isNumber } from '../../../utils/inspect';\nimport { looseEqual } from '../../../utils/loose-equal';\nimport { mathMax, mathMin } from '../../../utils/math';\nimport { makeProp } from '../../../utils/props';\nimport { sanitizeRow } from './sanitize-row'; // --- Constants ---\n\nvar SELECT_MODES = ['range', 'multi', 'single']; // --- Props ---\n\nexport var props = {\n // Disable use of click handlers for row selection\n noSelectOnClick: makeProp(PROP_TYPE_BOOLEAN, false),\n selectMode: makeProp(PROP_TYPE_STRING, 'multi', function (value) {\n return arrayIncludes(SELECT_MODES, value);\n }),\n selectable: makeProp(PROP_TYPE_BOOLEAN, false),\n selectedVariant: makeProp(PROP_TYPE_STRING, 'active')\n}; // --- Mixin ---\n// @vue/component\n\nexport var selectableMixin = Vue.extend({\n props: props,\n data: function data() {\n return {\n selectedRows: [],\n selectedLastRow: -1\n };\n },\n computed: {\n isSelectable: function isSelectable() {\n return this.selectable && this.selectMode;\n },\n hasSelectableRowClick: function hasSelectableRowClick() {\n return this.isSelectable && !this.noSelectOnClick;\n },\n supportsSelectableRows: function supportsSelectableRows() {\n return true;\n },\n selectableHasSelection: function selectableHasSelection() {\n var selectedRows = this.selectedRows;\n return this.isSelectable && selectedRows && selectedRows.length > 0 && selectedRows.some(identity);\n },\n selectableIsMultiSelect: function selectableIsMultiSelect() {\n return this.isSelectable && arrayIncludes(['range', 'multi'], this.selectMode);\n },\n selectableTableClasses: function selectableTableClasses() {\n var _ref;\n\n var isSelectable = this.isSelectable;\n return _ref = {\n 'b-table-selectable': isSelectable\n }, _defineProperty(_ref, \"b-table-select-\".concat(this.selectMode), isSelectable), _defineProperty(_ref, 'b-table-selecting', this.selectableHasSelection), _defineProperty(_ref, 'b-table-selectable-no-click', isSelectable && !this.hasSelectableRowClick), _ref;\n },\n selectableTableAttrs: function selectableTableAttrs() {\n return {\n // TODO:\n // Should this attribute not be included when no-select-on-click is set\n // since this attribute implies keyboard navigation?\n 'aria-multiselectable': !this.isSelectable ? null : this.selectableIsMultiSelect ? 'true' : 'false'\n };\n }\n },\n watch: {\n computedItems: function computedItems(newValue, oldValue) {\n // Reset for selectable\n var equal = false;\n\n if (this.isSelectable && this.selectedRows.length > 0) {\n // Quick check against array length\n equal = isArray(newValue) && isArray(oldValue) && newValue.length === oldValue.length;\n\n for (var i = 0; equal && i < newValue.length; i++) {\n // Look for the first non-loosely equal row, after ignoring reserved fields\n equal = looseEqual(sanitizeRow(newValue[i]), sanitizeRow(oldValue[i]));\n }\n }\n\n if (!equal) {\n this.clearSelected();\n }\n },\n selectable: function selectable(newValue) {\n this.clearSelected();\n this.setSelectionHandlers(newValue);\n },\n selectMode: function selectMode() {\n this.clearSelected();\n },\n hasSelectableRowClick: function hasSelectableRowClick(newValue) {\n this.clearSelected();\n this.setSelectionHandlers(!newValue);\n },\n selectedRows: function selectedRows(_selectedRows, oldValue) {\n var _this = this;\n\n if (this.isSelectable && !looseEqual(_selectedRows, oldValue)) {\n var items = []; // `.forEach()` skips over non-existent indices (on sparse arrays)\n\n _selectedRows.forEach(function (v, idx) {\n if (v) {\n items.push(_this.computedItems[idx]);\n }\n });\n\n this.$emit(EVENT_NAME_ROW_SELECTED, items);\n }\n }\n },\n beforeMount: function beforeMount() {\n // Set up handlers if needed\n if (this.isSelectable) {\n this.setSelectionHandlers(true);\n }\n },\n methods: {\n // Public methods\n selectRow: function selectRow(index) {\n // Select a particular row (indexed based on computedItems)\n if (this.isSelectable && isNumber(index) && index >= 0 && index < this.computedItems.length && !this.isRowSelected(index)) {\n var selectedRows = this.selectableIsMultiSelect ? this.selectedRows.slice() : [];\n selectedRows[index] = true;\n this.selectedLastClicked = -1;\n this.selectedRows = selectedRows;\n }\n },\n unselectRow: function unselectRow(index) {\n // Un-select a particular row (indexed based on `computedItems`)\n if (this.isSelectable && isNumber(index) && this.isRowSelected(index)) {\n var selectedRows = this.selectedRows.slice();\n selectedRows[index] = false;\n this.selectedLastClicked = -1;\n this.selectedRows = selectedRows;\n }\n },\n selectAllRows: function selectAllRows() {\n var length = this.computedItems.length;\n\n if (this.isSelectable && length > 0) {\n this.selectedLastClicked = -1;\n this.selectedRows = this.selectableIsMultiSelect ? createArray(length, true) : [true];\n }\n },\n isRowSelected: function isRowSelected(index) {\n // Determine if a row is selected (indexed based on `computedItems`)\n return !!(isNumber(index) && this.selectedRows[index]);\n },\n clearSelected: function clearSelected() {\n // Clear any active selected row(s)\n this.selectedLastClicked = -1;\n this.selectedRows = [];\n },\n // Internal private methods\n selectableRowClasses: function selectableRowClasses(index) {\n if (this.isSelectable && this.isRowSelected(index)) {\n var variant = this.selectedVariant;\n return _defineProperty({\n 'b-table-row-selected': true\n }, \"\".concat(this.dark ? 'bg' : 'table', \"-\").concat(variant), variant);\n }\n\n return {};\n },\n selectableRowAttrs: function selectableRowAttrs(index) {\n return {\n 'aria-selected': !this.isSelectable ? null : this.isRowSelected(index) ? 'true' : 'false'\n };\n },\n setSelectionHandlers: function setSelectionHandlers(on) {\n var method = on && !this.noSelectOnClick ? '$on' : '$off'; // Handle row-clicked event\n\n this[method](EVENT_NAME_ROW_CLICKED, this.selectionHandler); // Clear selection on filter, pagination, and sort changes\n\n this[method](EVENT_NAME_FILTERED, this.clearSelected);\n this[method](EVENT_NAME_CONTEXT_CHANGED, this.clearSelected);\n },\n selectionHandler: function selectionHandler(item, index, event) {\n /* istanbul ignore if: should never happen */\n if (!this.isSelectable || this.noSelectOnClick) {\n // Don't do anything if table is not in selectable mode\n this.clearSelected();\n return;\n }\n\n var selectMode = this.selectMode,\n selectedLastRow = this.selectedLastRow;\n var selectedRows = this.selectedRows.slice();\n var selected = !selectedRows[index]; // Note 'multi' mode needs no special event handling\n\n if (selectMode === 'single') {\n selectedRows = [];\n } else if (selectMode === 'range') {\n if (selectedLastRow > -1 && event.shiftKey) {\n // range\n for (var idx = mathMin(selectedLastRow, index); idx <= mathMax(selectedLastRow, index); idx++) {\n selectedRows[idx] = true;\n }\n\n selected = true;\n } else {\n if (!(event.ctrlKey || event.metaKey)) {\n // Clear range selection if any\n selectedRows = [];\n selected = true;\n }\n\n this.selectedLastRow = selected ? index : -1;\n }\n }\n\n selectedRows[index] = selected;\n this.selectedRows = selectedRows;\n }\n }\n});","var _props, _watch;\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Vue } from '../../../vue';\nimport { EVENT_NAME_HEAD_CLICKED, EVENT_NAME_SORT_CHANGED, MODEL_EVENT_NAME_PREFIX } from '../../../constants/events';\nimport { PROP_TYPE_ARRAY_STRING, PROP_TYPE_BOOLEAN, PROP_TYPE_FUNCTION, PROP_TYPE_OBJECT, PROP_TYPE_STRING } from '../../../constants/props';\nimport { arrayIncludes } from '../../../utils/array';\nimport { isFunction, isUndefinedOrNull } from '../../../utils/inspect';\nimport { makeProp } from '../../../utils/props';\nimport { stableSort } from '../../../utils/stable-sort';\nimport { trim } from '../../../utils/string';\nimport { defaultSortCompare } from './default-sort-compare'; // --- Constants ---\n\nvar MODEL_PROP_NAME_SORT_BY = 'sortBy';\nvar MODEL_EVENT_NAME_SORT_BY = MODEL_EVENT_NAME_PREFIX + MODEL_PROP_NAME_SORT_BY;\nvar MODEL_PROP_NAME_SORT_DESC = 'sortDesc';\nvar MODEL_EVENT_NAME_SORT_DESC = MODEL_EVENT_NAME_PREFIX + MODEL_PROP_NAME_SORT_DESC;\nvar SORT_DIRECTION_ASC = 'asc';\nvar SORT_DIRECTION_DESC = 'desc';\nvar SORT_DIRECTION_LAST = 'last';\nvar SORT_DIRECTIONS = [SORT_DIRECTION_ASC, SORT_DIRECTION_DESC, SORT_DIRECTION_LAST]; // --- Props ---\n\nexport var props = (_props = {\n labelSortAsc: makeProp(PROP_TYPE_STRING, 'Click to sort Ascending'),\n labelSortClear: makeProp(PROP_TYPE_STRING, 'Click to clear sorting'),\n labelSortDesc: makeProp(PROP_TYPE_STRING, 'Click to sort Descending'),\n noFooterSorting: makeProp(PROP_TYPE_BOOLEAN, false),\n noLocalSorting: makeProp(PROP_TYPE_BOOLEAN, false),\n // Another prop that should have had a better name\n // It should be `noSortClear` (on non-sortable headers)\n // We will need to make sure the documentation is clear on what\n // this prop does (as well as in the code for future reference)\n noSortReset: makeProp(PROP_TYPE_BOOLEAN, false)\n}, _defineProperty(_props, MODEL_PROP_NAME_SORT_BY, makeProp(PROP_TYPE_STRING)), _defineProperty(_props, \"sortCompare\", makeProp(PROP_TYPE_FUNCTION)), _defineProperty(_props, \"sortCompareLocale\", makeProp(PROP_TYPE_ARRAY_STRING)), _defineProperty(_props, \"sortCompareOptions\", makeProp(PROP_TYPE_OBJECT, {\n numeric: true\n})), _defineProperty(_props, MODEL_PROP_NAME_SORT_DESC, makeProp(PROP_TYPE_BOOLEAN, false)), _defineProperty(_props, \"sortDirection\", makeProp(PROP_TYPE_STRING, SORT_DIRECTION_ASC, function (value) {\n return arrayIncludes(SORT_DIRECTIONS, value);\n})), _defineProperty(_props, \"sortIconLeft\", makeProp(PROP_TYPE_BOOLEAN, false)), _defineProperty(_props, \"sortNullLast\", makeProp(PROP_TYPE_BOOLEAN, false)), _props); // --- Mixin ---\n// @vue/component\n\nexport var sortingMixin = Vue.extend({\n props: props,\n data: function data() {\n return {\n localSortBy: this[MODEL_PROP_NAME_SORT_BY] || '',\n localSortDesc: this[MODEL_PROP_NAME_SORT_DESC] || false\n };\n },\n computed: {\n localSorting: function localSorting() {\n return this.hasProvider ? !!this.noProviderSorting : !this.noLocalSorting;\n },\n isSortable: function isSortable() {\n return this.computedFields.some(function (f) {\n return f.sortable;\n });\n },\n // Sorts the filtered items and returns a new array of the sorted items\n // When not sorted, the original items array will be returned\n sortedItems: function sortedItems() {\n var sortBy = this.localSortBy,\n sortDesc = this.localSortDesc,\n locale = this.sortCompareLocale,\n nullLast = this.sortNullLast,\n sortCompare = this.sortCompare,\n localSorting = this.localSorting;\n var items = (this.filteredItems || this.localItems || []).slice();\n\n var localeOptions = _objectSpread(_objectSpread({}, this.sortCompareOptions), {}, {\n usage: 'sort'\n });\n\n if (sortBy && localSorting) {\n var field = this.computedFieldsObj[sortBy] || {};\n var sortByFormatted = field.sortByFormatted;\n var formatter = isFunction(sortByFormatted) ?\n /* istanbul ignore next */\n sortByFormatted : sortByFormatted ? this.getFieldFormatter(sortBy) : undefined; // `stableSort` returns a new array, and leaves the original array intact\n\n return stableSort(items, function (a, b) {\n var result = null; // Call user provided `sortCompare` routine first\n\n if (isFunction(sortCompare)) {\n // TODO:\n // Change the `sortCompare` signature to the one of `defaultSortCompare`\n // with the next major version bump\n result = sortCompare(a, b, sortBy, sortDesc, formatter, localeOptions, locale);\n } // Fallback to built-in `defaultSortCompare` if `sortCompare`\n // is not defined or returns `null`/`false`\n\n\n if (isUndefinedOrNull(result) || result === false) {\n result = defaultSortCompare(a, b, {\n sortBy: sortBy,\n formatter: formatter,\n locale: locale,\n localeOptions: localeOptions,\n nullLast: nullLast\n });\n } // Negate result if sorting in descending order\n\n\n return (result || 0) * (sortDesc ? -1 : 1);\n });\n }\n\n return items;\n }\n },\n watch: (_watch = {\n /* istanbul ignore next: pain in the butt to test */\n isSortable: function isSortable(newValue) {\n if (newValue) {\n if (this.isSortable) {\n this.$on(EVENT_NAME_HEAD_CLICKED, this.handleSort);\n }\n } else {\n this.$off(EVENT_NAME_HEAD_CLICKED, this.handleSort);\n }\n }\n }, _defineProperty(_watch, MODEL_PROP_NAME_SORT_DESC, function (newValue) {\n /* istanbul ignore next */\n if (newValue === this.localSortDesc) {\n return;\n }\n\n this.localSortDesc = newValue || false;\n }), _defineProperty(_watch, MODEL_PROP_NAME_SORT_BY, function (newValue) {\n /* istanbul ignore next */\n if (newValue === this.localSortBy) {\n return;\n }\n\n this.localSortBy = newValue || '';\n }), _defineProperty(_watch, \"localSortDesc\", function localSortDesc(newValue, oldValue) {\n // Emit update to sort-desc.sync\n if (newValue !== oldValue) {\n this.$emit(MODEL_EVENT_NAME_SORT_DESC, newValue);\n }\n }), _defineProperty(_watch, \"localSortBy\", function localSortBy(newValue, oldValue) {\n if (newValue !== oldValue) {\n this.$emit(MODEL_EVENT_NAME_SORT_BY, newValue);\n }\n }), _watch),\n created: function created() {\n if (this.isSortable) {\n this.$on(EVENT_NAME_HEAD_CLICKED, this.handleSort);\n }\n },\n methods: {\n // Handlers\n // Need to move from thead-mixin\n handleSort: function handleSort(key, field, event, isFoot) {\n var _this = this;\n\n if (!this.isSortable) {\n /* istanbul ignore next */\n return;\n }\n\n if (isFoot && this.noFooterSorting) {\n return;\n } // TODO: make this tri-state sorting\n // cycle desc => asc => none => desc => ...\n\n\n var sortChanged = false;\n\n var toggleLocalSortDesc = function toggleLocalSortDesc() {\n var sortDirection = field.sortDirection || _this.sortDirection;\n\n if (sortDirection === SORT_DIRECTION_ASC) {\n _this.localSortDesc = false;\n } else if (sortDirection === SORT_DIRECTION_DESC) {\n _this.localSortDesc = true;\n } else {// sortDirection === 'last'\n // Leave at last sort direction from previous column\n }\n };\n\n if (field.sortable) {\n var sortKey = !this.localSorting && field.sortKey ? field.sortKey : key;\n\n if (this.localSortBy === sortKey) {\n // Change sorting direction on current column\n this.localSortDesc = !this.localSortDesc;\n } else {\n // Start sorting this column ascending\n this.localSortBy = sortKey; // this.localSortDesc = false\n\n toggleLocalSortDesc();\n }\n\n sortChanged = true;\n } else if (this.localSortBy && !this.noSortReset) {\n this.localSortBy = '';\n toggleLocalSortDesc();\n sortChanged = true;\n }\n\n if (sortChanged) {\n // Sorting parameters changed\n this.$emit(EVENT_NAME_SORT_CHANGED, this.context);\n }\n },\n // methods to compute classes and attrs for thead>th cells\n sortTheadThClasses: function sortTheadThClasses(key, field, isFoot) {\n return {\n // If sortable and sortIconLeft are true, then place sort icon on the left\n 'b-table-sort-icon-left': field.sortable && this.sortIconLeft && !(isFoot && this.noFooterSorting)\n };\n },\n sortTheadThAttrs: function sortTheadThAttrs(key, field, isFoot) {\n if (!this.isSortable || isFoot && this.noFooterSorting) {\n // No attributes if not a sortable table\n return {};\n }\n\n var sortable = field.sortable; // Assemble the aria-sort attribute value\n\n var ariaSort = sortable && this.localSortBy === key ? this.localSortDesc ? 'descending' : 'ascending' : sortable ? 'none' : null; // Return the attribute\n\n return {\n 'aria-sort': ariaSort\n };\n },\n sortTheadThLabel: function sortTheadThLabel(key, field, isFoot) {\n // A label to be placed in an `.sr-only` element in the header cell\n if (!this.isSortable || isFoot && this.noFooterSorting) {\n // No label if not a sortable table\n return null;\n }\n\n var sortable = field.sortable; // The correctness of these labels is very important for screen-reader users.\n\n var labelSorting = '';\n\n if (sortable) {\n if (this.localSortBy === key) {\n // currently sorted sortable column.\n labelSorting = this.localSortDesc ? this.labelSortAsc : this.labelSortDesc;\n } else {\n // Not currently sorted sortable column.\n // Not using nested ternary's here for clarity/readability\n // Default for ariaLabel\n labelSorting = this.localSortDesc ? this.labelSortDesc : this.labelSortAsc; // Handle sortDirection setting\n\n var sortDirection = this.sortDirection || field.sortDirection;\n\n if (sortDirection === SORT_DIRECTION_ASC) {\n labelSorting = this.labelSortAsc;\n } else if (sortDirection === SORT_DIRECTION_DESC) {\n labelSorting = this.labelSortDesc;\n }\n }\n } else if (!this.noSortReset) {\n // Non sortable column\n labelSorting = this.localSortBy ? this.labelSortClear : '';\n } // Return the sr-only sort label or null if no label\n\n\n return trim(labelSorting) || null;\n }\n }\n});","import { get } from '../../../utils/get';\nimport { isDate, isFunction, isNumber, isNumeric, isUndefinedOrNull } from '../../../utils/inspect';\nimport { toFloat } from '../../../utils/number';\nimport { stringifyObjectValues } from '../../../utils/stringify-object-values';\n\nvar normalizeValue = function normalizeValue(value) {\n if (isUndefinedOrNull(value)) {\n return '';\n }\n\n if (isNumeric(value)) {\n return toFloat(value, value);\n }\n\n return value;\n}; // Default sort compare routine\n//\n// TODO:\n// Add option to sort by multiple columns (tri-state per column,\n// plus order of columns in sort) where `sortBy` could be an array\n// of objects `[ {key: 'foo', sortDir: 'asc'}, {key:'bar', sortDir: 'desc'} ...]`\n// or an array of arrays `[ ['foo','asc'], ['bar','desc'] ]`\n// Multisort will most likely be handled in `mixin-sort.js` by\n// calling this method for each sortBy\n\n\nexport var defaultSortCompare = function defaultSortCompare(a, b) {\n var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n _ref$sortBy = _ref.sortBy,\n sortBy = _ref$sortBy === void 0 ? null : _ref$sortBy,\n _ref$formatter = _ref.formatter,\n formatter = _ref$formatter === void 0 ? null : _ref$formatter,\n _ref$locale = _ref.locale,\n locale = _ref$locale === void 0 ? undefined : _ref$locale,\n _ref$localeOptions = _ref.localeOptions,\n localeOptions = _ref$localeOptions === void 0 ? {} : _ref$localeOptions,\n _ref$nullLast = _ref.nullLast,\n nullLast = _ref$nullLast === void 0 ? false : _ref$nullLast;\n\n // Get the value by `sortBy`\n var aa = get(a, sortBy, null);\n var bb = get(b, sortBy, null); // Apply user-provided formatter\n\n if (isFunction(formatter)) {\n aa = formatter(aa, sortBy, a);\n bb = formatter(bb, sortBy, b);\n } // Internally normalize value\n // `null` / `undefined` => ''\n // `'0'` => `0`\n\n\n aa = normalizeValue(aa);\n bb = normalizeValue(bb);\n\n if (isDate(aa) && isDate(bb) || isNumber(aa) && isNumber(bb)) {\n // Special case for comparing dates and numbers\n // Internally dates are compared via their epoch number values\n return aa < bb ? -1 : aa > bb ? 1 : 0;\n } else if (nullLast && aa === '' && bb !== '') {\n // Special case when sorting `null` / `undefined` / '' last\n return 1;\n } else if (nullLast && aa !== '' && bb === '') {\n // Special case when sorting `null` / `undefined` / '' last\n return -1;\n } // Do localized string comparison\n\n\n return stringifyObjectValues(aa).localeCompare(stringifyObjectValues(bb), locale, localeOptions);\n};","import { Vue } from '../../../vue';\nimport { SLOT_NAME_TOP_ROW } from '../../../constants/slots';\nimport { isFunction } from '../../../utils/inspect';\nimport { BTr } from '../tr'; // --- Props ---\n\nexport var props = {}; // --- Mixin ---\n// @vue/component\n\nexport var topRowMixin = Vue.extend({\n methods: {\n renderTopRow: function renderTopRow() {\n var fields = this.computedFields,\n stacked = this.stacked,\n tbodyTrClass = this.tbodyTrClass,\n tbodyTrAttr = this.tbodyTrAttr;\n var h = this.$createElement; // Add static Top Row slot (hidden in visibly stacked mode as we can't control the data-label)\n // If in *always* stacked mode, we don't bother rendering the row\n\n if (!this.hasNormalizedSlot(SLOT_NAME_TOP_ROW) || stacked === true || stacked === '') {\n return h();\n }\n\n return h(BTr, {\n staticClass: 'b-table-top-row',\n class: [isFunction(tbodyTrClass) ? tbodyTrClass(null, 'row-top') : tbodyTrClass],\n attrs: isFunction(tbodyTrAttr) ? tbodyTrAttr(null, 'row-top') : tbodyTrAttr,\n key: 'b-top-row'\n }, [this.normalizeSlot(SLOT_NAME_TOP_ROW, {\n columns: fields.length,\n fields: fields\n })]);\n }\n }\n});","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Vue } from '../../vue';\nimport { NAME_TABLE } from '../../constants/components';\nimport { sortKeys } from '../../utils/object';\nimport { makePropsConfigurable } from '../../utils/props';\nimport { attrsMixin } from '../../mixins/attrs';\nimport { hasListenerMixin } from '../../mixins/has-listener';\nimport { idMixin, props as idProps } from '../../mixins/id';\nimport { normalizeSlotMixin } from '../../mixins/normalize-slot';\nimport { bottomRowMixin, props as bottomRowProps } from './helpers/mixin-bottom-row';\nimport { busyMixin, props as busyProps } from './helpers/mixin-busy';\nimport { captionMixin, props as captionProps } from './helpers/mixin-caption';\nimport { colgroupMixin, props as colgroupProps } from './helpers/mixin-colgroup';\nimport { emptyMixin, props as emptyProps } from './helpers/mixin-empty';\nimport { filteringMixin, props as filteringProps } from './helpers/mixin-filtering';\nimport { itemsMixin, props as itemsProps } from './helpers/mixin-items';\nimport { paginationMixin, props as paginationProps } from './helpers/mixin-pagination';\nimport { providerMixin, props as providerProps } from './helpers/mixin-provider';\nimport { selectableMixin, props as selectableProps } from './helpers/mixin-selectable';\nimport { sortingMixin, props as sortingProps } from './helpers/mixin-sorting';\nimport { stackedMixin, props as stackedProps } from './helpers/mixin-stacked';\nimport { tableRendererMixin, props as tableRendererProps } from './helpers/mixin-table-renderer';\nimport { tbodyMixin, props as tbodyProps } from './helpers/mixin-tbody';\nimport { tfootMixin, props as tfootProps } from './helpers/mixin-tfoot';\nimport { theadMixin, props as theadProps } from './helpers/mixin-thead';\nimport { topRowMixin, props as topRowProps } from './helpers/mixin-top-row'; // --- Props ---\n\nexport var props = makePropsConfigurable(sortKeys(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({}, idProps), bottomRowProps), busyProps), captionProps), colgroupProps), emptyProps), filteringProps), itemsProps), paginationProps), providerProps), selectableProps), sortingProps), stackedProps), tableRendererProps), tbodyProps), tfootProps), theadProps), topRowProps)), NAME_TABLE); // --- Main component ---\n// @vue/component\n\nexport var BTable = /*#__PURE__*/Vue.extend({\n name: NAME_TABLE,\n // Order of mixins is important!\n // They are merged from first to last, followed by this component\n mixins: [// General mixins\n attrsMixin, hasListenerMixin, idMixin, normalizeSlotMixin, // Required table mixins\n itemsMixin, tableRendererMixin, stackedMixin, theadMixin, tfootMixin, tbodyMixin, // Table features mixins\n stackedMixin, filteringMixin, sortingMixin, paginationMixin, captionMixin, colgroupMixin, selectableMixin, emptyMixin, topRowMixin, bottomRowMixin, busyMixin, providerMixin],\n props: props // Render function is provided by `tableRendererMixin`\n\n});","import { Vue, mergeData } from '../../vue';\nimport { NAME_MEDIA } from '../../constants/components';\nimport { PROP_TYPE_BOOLEAN, PROP_TYPE_STRING } from '../../constants/props';\nimport { SLOT_NAME_ASIDE, SLOT_NAME_DEFAULT } from '../../constants/slots';\nimport { normalizeSlot } from '../../utils/normalize-slot';\nimport { makeProp, makePropsConfigurable } from '../../utils/props';\nimport { BMediaAside } from './media-aside';\nimport { BMediaBody } from './media-body'; // --- Props ---\n\nexport var props = makePropsConfigurable({\n noBody: makeProp(PROP_TYPE_BOOLEAN, false),\n rightAlign: makeProp(PROP_TYPE_BOOLEAN, false),\n tag: makeProp(PROP_TYPE_STRING, 'div'),\n verticalAlign: makeProp(PROP_TYPE_STRING, 'top')\n}, NAME_MEDIA); // --- Main component ---\n// @vue/component\n\nexport var BMedia = /*#__PURE__*/Vue.extend({\n name: NAME_MEDIA,\n functional: true,\n props: props,\n render: function render(h, _ref) {\n var props = _ref.props,\n data = _ref.data,\n slots = _ref.slots,\n scopedSlots = _ref.scopedSlots,\n children = _ref.children;\n var noBody = props.noBody,\n rightAlign = props.rightAlign,\n verticalAlign = props.verticalAlign;\n var $children = noBody ? children : [];\n\n if (!noBody) {\n var slotScope = {};\n var $slots = slots();\n var $scopedSlots = scopedSlots || {};\n $children.push(h(BMediaBody, normalizeSlot(SLOT_NAME_DEFAULT, slotScope, $scopedSlots, $slots)));\n var $aside = normalizeSlot(SLOT_NAME_ASIDE, slotScope, $scopedSlots, $slots);\n\n if ($aside) {\n $children[rightAlign ? 'push' : 'unshift'](h(BMediaAside, {\n props: {\n right: rightAlign,\n verticalAlign: verticalAlign\n }\n }, $aside));\n }\n }\n\n return h(props.tag, mergeData(data, {\n staticClass: 'media'\n }), $children);\n }\n});","function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Vue, mergeData } from '../../vue';\nimport { NAME_MEDIA_ASIDE } from '../../constants/components';\nimport { PROP_TYPE_BOOLEAN, PROP_TYPE_STRING } from '../../constants/props';\nimport { makeProp, makePropsConfigurable } from '../../utils/props'; // --- Props ---\n\nexport var props = makePropsConfigurable({\n right: makeProp(PROP_TYPE_BOOLEAN, false),\n tag: makeProp(PROP_TYPE_STRING, 'div'),\n verticalAlign: makeProp(PROP_TYPE_STRING, 'top')\n}, NAME_MEDIA_ASIDE); // --- Main component ---\n// @vue/component\n\nexport var BMediaAside = /*#__PURE__*/Vue.extend({\n name: NAME_MEDIA_ASIDE,\n functional: true,\n props: props,\n render: function render(h, _ref) {\n var props = _ref.props,\n data = _ref.data,\n children = _ref.children;\n var verticalAlign = props.verticalAlign;\n var align = verticalAlign === 'top' ? 'start' : verticalAlign === 'bottom' ? 'end' :\n /* istanbul ignore next */\n verticalAlign;\n return h(props.tag, mergeData(data, {\n staticClass: 'media-aside',\n class: _defineProperty({\n 'media-aside-right': props.right\n }, \"align-self-\".concat(align), align)\n }), children);\n }\n});","import { Vue, mergeData } from '../../vue';\nimport { NAME_MEDIA_BODY } from '../../constants/components';\nimport { PROP_TYPE_STRING } from '../../constants/props';\nimport { makeProp, makePropsConfigurable } from '../../utils/props'; // --- Props ---\n\nexport var props = makePropsConfigurable({\n tag: makeProp(PROP_TYPE_STRING, 'div')\n}, NAME_MEDIA_BODY); // --- Main component ---\n// @vue/component\n\nexport var BMediaBody = /*#__PURE__*/Vue.extend({\n name: NAME_MEDIA_BODY,\n functional: true,\n props: props,\n render: function render(h, _ref) {\n var props = _ref.props,\n data = _ref.data,\n children = _ref.children;\n return h(props.tag, mergeData(data, {\n staticClass: 'media-body'\n }), children);\n }\n});","/*\n * Consistent and stable sort function across JavaScript platforms\n *\n * Inconsistent sorts can cause SSR problems between client and server\n * such as in if sortBy is applied to the data on server side render.\n * Chrome and V8 native sorts are inconsistent/unstable\n *\n * This function uses native sort with fallback to index compare when the a and b\n * compare returns 0\n *\n * Algorithm based on:\n * https://stackoverflow.com/questions/1427608/fast-stable-sorting-algorithm-implementation-in-javascript/45422645#45422645\n *\n * @param {array} array to sort\n * @param {function} sort compare function\n * @return {array}\n */\nexport var stableSort = function stableSort(array, compareFn) {\n // Using `.bind(compareFn)` on the wrapped anonymous function improves\n // performance by avoiding the function call setup. We don't use an arrow\n // function here as it binds `this` to the `stableSort` context rather than\n // the `compareFn` context, which wouldn't give us the performance increase.\n return array.map(function (a, index) {\n return [index, a];\n }).sort(function (a, b) {\n return this(a[1], b[1]) || a[0] - b[0];\n }.bind(compareFn)).map(function (e) {\n return e[1];\n });\n};","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\n// v-b-visible\n// Private visibility check directive\n// Based on IntersectionObserver\n//\n// Usage:\n// v-b-visibility..=\"\"\n//\n// Value:\n// : method to be called when visibility state changes, receives one arg:\n// true: element is visible\n// false: element is not visible\n// null: IntersectionObserver not supported\n//\n// Modifiers:\n// : a positive decimal value of pixels away from viewport edge\n// before being considered \"visible\". default is 0\n// : keyword 'once', meaning when the element becomes visible and\n// callback is called observation/notification will stop.\n//\n// When used in a render function:\n// export default {\n// directives: { 'b-visible': VBVisible },\n// render(h) {\n// h(\n// 'div',\n// {\n// directives: [\n// { name: 'b-visible', value=this.callback, modifiers: { '123':true, 'once':true } }\n// ]\n// }\n// )\n// }\nimport { RX_DIGITS } from '../../constants/regex';\nimport { requestAF } from '../../utils/dom';\nimport { isFunction } from '../../utils/inspect';\nimport { looseEqual } from '../../utils/loose-equal';\nimport { clone, keys } from '../../utils/object';\nvar OBSERVER_PROP_NAME = '__bv__visibility_observer';\n\nvar VisibilityObserver = /*#__PURE__*/function () {\n function VisibilityObserver(el, options, vnode) {\n _classCallCheck(this, VisibilityObserver);\n\n this.el = el;\n this.callback = options.callback;\n this.margin = options.margin || 0;\n this.once = options.once || false;\n this.observer = null;\n this.visible = undefined;\n this.doneOnce = false; // Create the observer instance (if possible)\n\n this.createObserver(vnode);\n }\n\n _createClass(VisibilityObserver, [{\n key: \"createObserver\",\n value: function createObserver(vnode) {\n var _this = this;\n\n // Remove any previous observer\n if (this.observer) {\n /* istanbul ignore next */\n this.stop();\n } // Should only be called once and `callback` prop should be a function\n\n\n if (this.doneOnce || !isFunction(this.callback)) {\n /* istanbul ignore next */\n return;\n } // Create the observer instance\n\n\n try {\n // Future: Possibly add in other modifiers for left/right/top/bottom\n // offsets, root element reference, and thresholds\n this.observer = new IntersectionObserver(this.handler.bind(this), {\n // `null` = 'viewport'\n root: null,\n // Pixels away from view port to consider \"visible\"\n rootMargin: this.margin,\n // Intersection ratio of el and root (as a value from 0 to 1)\n threshold: 0\n });\n } catch (_unused) {\n // No IntersectionObserver support, so just stop trying to observe\n this.doneOnce = true;\n this.observer = undefined;\n this.callback(null);\n return;\n } // Start observing in a `$nextTick()` (to allow DOM to complete rendering)\n\n /* istanbul ignore next: IntersectionObserver not supported in JSDOM */\n\n\n vnode.context.$nextTick(function () {\n requestAF(function () {\n // Placed in an `if` just in case we were destroyed before\n // this `requestAnimationFrame` runs\n if (_this.observer) {\n _this.observer.observe(_this.el);\n }\n });\n });\n }\n /* istanbul ignore next */\n\n }, {\n key: \"handler\",\n value: function handler(entries) {\n var entry = entries ? entries[0] : {};\n var isIntersecting = Boolean(entry.isIntersecting || entry.intersectionRatio > 0.0);\n\n if (isIntersecting !== this.visible) {\n this.visible = isIntersecting;\n this.callback(isIntersecting);\n\n if (this.once && this.visible) {\n this.doneOnce = true;\n this.stop();\n }\n }\n }\n }, {\n key: \"stop\",\n value: function stop() {\n /* istanbul ignore next */\n this.observer && this.observer.disconnect();\n this.observer = null;\n }\n }]);\n\n return VisibilityObserver;\n}();\n\nvar destroy = function destroy(el) {\n var observer = el[OBSERVER_PROP_NAME];\n\n if (observer && observer.stop) {\n observer.stop();\n }\n\n delete el[OBSERVER_PROP_NAME];\n};\n\nvar bind = function bind(el, _ref, vnode) {\n var value = _ref.value,\n modifiers = _ref.modifiers;\n // `value` is the callback function\n var options = {\n margin: '0px',\n once: false,\n callback: value\n }; // Parse modifiers\n\n keys(modifiers).forEach(function (mod) {\n /* istanbul ignore else: Until is switched to use this directive */\n if (RX_DIGITS.test(mod)) {\n options.margin = \"\".concat(mod, \"px\");\n } else if (mod.toLowerCase() === 'once') {\n options.once = true;\n }\n }); // Destroy any previous observer\n\n destroy(el); // Create new observer\n\n el[OBSERVER_PROP_NAME] = new VisibilityObserver(el, options, vnode); // Store the current modifiers on the object (cloned)\n\n el[OBSERVER_PROP_NAME]._prevModifiers = clone(modifiers);\n}; // When the directive options may have been updated (or element)\n\n\nvar componentUpdated = function componentUpdated(el, _ref2, vnode) {\n var value = _ref2.value,\n oldValue = _ref2.oldValue,\n modifiers = _ref2.modifiers;\n // Compare value/oldValue and modifiers to see if anything has changed\n // and if so, destroy old observer and create new observer\n\n /* istanbul ignore next */\n modifiers = clone(modifiers);\n /* istanbul ignore next */\n\n if (el && (value !== oldValue || !el[OBSERVER_PROP_NAME] || !looseEqual(modifiers, el[OBSERVER_PROP_NAME]._prevModifiers))) {\n // Re-bind on element\n bind(el, {\n value: value,\n modifiers: modifiers\n }, vnode);\n }\n}; // When directive un-binds from element\n\n\nvar unbind = function unbind(el) {\n // Remove the observer\n destroy(el);\n}; // Export the directive\n\n\nexport var VBVisible = {\n bind: bind,\n componentUpdated: componentUpdated,\n unbind: unbind\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_FORM_TEXTAREA } from '../../constants/components';\nimport { PROP_TYPE_BOOLEAN, PROP_TYPE_NUMBER_STRING, PROP_TYPE_STRING } from '../../constants/props';\nimport { getCS, getStyle, isVisible, requestAF, setStyle } from '../../utils/dom';\nimport { isNull } from '../../utils/inspect';\nimport { mathCeil, mathMax, mathMin } from '../../utils/math';\nimport { toInteger, toFloat } from '../../utils/number';\nimport { sortKeys } from '../../utils/object';\nimport { makeProp, makePropsConfigurable } from '../../utils/props';\nimport { formControlMixin, props as formControlProps } from '../../mixins/form-control';\nimport { formSelectionMixin } from '../../mixins/form-selection';\nimport { formSizeMixin, props as formSizeProps } from '../../mixins/form-size';\nimport { formStateMixin, props as formStateProps } from '../../mixins/form-state';\nimport { formTextMixin, props as formTextProps } from '../../mixins/form-text';\nimport { formValidityMixin } from '../../mixins/form-validity';\nimport { idMixin, props as idProps } from '../../mixins/id';\nimport { listenOnRootMixin } from '../../mixins/listen-on-root';\nimport { listenersMixin } from '../../mixins/listeners';\nimport { VBVisible } from '../../directives/visible/visible'; // --- Props ---\n\nexport var props = makePropsConfigurable(sortKeys(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({}, idProps), formControlProps), formSizeProps), formStateProps), formTextProps), {}, {\n maxRows: makeProp(PROP_TYPE_NUMBER_STRING),\n // When in auto resize mode, disable shrinking to content height\n noAutoShrink: makeProp(PROP_TYPE_BOOLEAN, false),\n // Disable the resize handle of textarea\n noResize: makeProp(PROP_TYPE_BOOLEAN, false),\n rows: makeProp(PROP_TYPE_NUMBER_STRING, 2),\n // 'soft', 'hard' or 'off'\n // Browser default is 'soft'\n wrap: makeProp(PROP_TYPE_STRING, 'soft')\n})), NAME_FORM_TEXTAREA); // --- Main component ---\n// @vue/component\n\nexport var BFormTextarea = /*#__PURE__*/Vue.extend({\n name: NAME_FORM_TEXTAREA,\n directives: {\n 'b-visible': VBVisible\n },\n // Mixin order is important!\n mixins: [listenersMixin, idMixin, listenOnRootMixin, formControlMixin, formSizeMixin, formStateMixin, formTextMixin, formSelectionMixin, formValidityMixin],\n props: props,\n data: function data() {\n return {\n heightInPx: null\n };\n },\n computed: {\n computedStyle: function computedStyle() {\n var styles = {\n // Setting `noResize` to true will disable the ability for the user to\n // manually resize the textarea. We also disable when in auto height mode\n resize: !this.computedRows || this.noResize ? 'none' : null\n };\n\n if (!this.computedRows) {\n // Conditionally set the computed CSS height when auto rows/height is enabled\n // We avoid setting the style to `null`, which can override user manual resize handle\n styles.height = this.heightInPx; // We always add a vertical scrollbar to the textarea when auto-height is\n // enabled so that the computed height calculation returns a stable value\n\n styles.overflowY = 'scroll';\n }\n\n return styles;\n },\n computedMinRows: function computedMinRows() {\n // Ensure rows is at least 2 and positive (2 is the native textarea value)\n // A value of 1 can cause issues in some browsers, and most browsers\n // only support 2 as the smallest value\n return mathMax(toInteger(this.rows, 2), 2);\n },\n computedMaxRows: function computedMaxRows() {\n return mathMax(this.computedMinRows, toInteger(this.maxRows, 0));\n },\n computedRows: function computedRows() {\n // This is used to set the attribute 'rows' on the textarea\n // If auto-height is enabled, then we return `null` as we use CSS to control height\n return this.computedMinRows === this.computedMaxRows ? this.computedMinRows : null;\n },\n computedAttrs: function computedAttrs() {\n var disabled = this.disabled,\n required = this.required;\n return {\n id: this.safeId(),\n name: this.name || null,\n form: this.form || null,\n disabled: disabled,\n placeholder: this.placeholder || null,\n required: required,\n autocomplete: this.autocomplete || null,\n readonly: this.readonly || this.plaintext,\n rows: this.computedRows,\n wrap: this.wrap || null,\n 'aria-required': this.required ? 'true' : null,\n 'aria-invalid': this.computedAriaInvalid\n };\n },\n computedListeners: function computedListeners() {\n return _objectSpread(_objectSpread({}, this.bvListeners), {}, {\n input: this.onInput,\n change: this.onChange,\n blur: this.onBlur\n });\n }\n },\n watch: {\n localValue: function localValue() {\n this.setHeight();\n }\n },\n mounted: function mounted() {\n this.setHeight();\n },\n methods: {\n // Called by intersection observer directive\n\n /* istanbul ignore next */\n visibleCallback: function visibleCallback(visible) {\n if (visible) {\n // We use a `$nextTick()` here just to make sure any\n // transitions or portalling have completed\n this.$nextTick(this.setHeight);\n }\n },\n setHeight: function setHeight() {\n var _this = this;\n\n this.$nextTick(function () {\n requestAF(function () {\n _this.heightInPx = _this.computeHeight();\n });\n });\n },\n\n /* istanbul ignore next: can't test getComputedStyle in JSDOM */\n computeHeight: function computeHeight() {\n if (this.$isServer || !isNull(this.computedRows)) {\n return null;\n }\n\n var el = this.$el; // Element must be visible (not hidden) and in document\n // Must be checked after above checks\n\n if (!isVisible(el)) {\n return null;\n } // Get current computed styles\n\n\n var computedStyle = getCS(el); // Height of one line of text in px\n\n var lineHeight = toFloat(computedStyle.lineHeight, 1); // Calculate height of border and padding\n\n var border = toFloat(computedStyle.borderTopWidth, 0) + toFloat(computedStyle.borderBottomWidth, 0);\n var padding = toFloat(computedStyle.paddingTop, 0) + toFloat(computedStyle.paddingBottom, 0); // Calculate offset\n\n var offset = border + padding; // Minimum height for min rows (which must be 2 rows or greater for cross-browser support)\n\n var minHeight = lineHeight * this.computedMinRows + offset; // Get the current style height (with `px` units)\n\n var oldHeight = getStyle(el, 'height') || computedStyle.height; // Probe scrollHeight by temporarily changing the height to `auto`\n\n setStyle(el, 'height', 'auto');\n var scrollHeight = el.scrollHeight; // Place the original old height back on the element, just in case `computedProp`\n // returns the same value as before\n\n setStyle(el, 'height', oldHeight); // Calculate content height in 'rows' (scrollHeight includes padding but not border)\n\n var contentRows = mathMax((scrollHeight - padding) / lineHeight, 2); // Calculate number of rows to display (limited within min/max rows)\n\n var rows = mathMin(mathMax(contentRows, this.computedMinRows), this.computedMaxRows); // Calculate the required height of the textarea including border and padding (in pixels)\n\n var height = mathMax(mathCeil(rows * lineHeight + offset), minHeight); // Computed height remains the larger of `oldHeight` and new `height`,\n // when height is in `sticky` mode (prop `no-auto-shrink` is true)\n\n if (this.noAutoShrink && toFloat(oldHeight, 0) > height) {\n return oldHeight;\n } // Return the new computed CSS height in px units\n\n\n return \"\".concat(height, \"px\");\n }\n },\n render: function render(h) {\n return h('textarea', {\n class: this.computedClass,\n style: this.computedStyle,\n directives: [{\n name: 'b-visible',\n value: this.visibleCallback,\n // If textarea is within 640px of viewport, consider it visible\n modifiers: {\n '640': true\n }\n }],\n attrs: this.computedAttrs,\n domProps: {\n value: this.localValue\n },\n on: this.computedListeners,\n ref: 'input'\n });\n }\n});","var _watch;\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { Vue } from '../vue';\nimport { NAME_PAGINATION } from '../constants/components';\nimport { CODE_DOWN, CODE_LEFT, CODE_RIGHT, CODE_SPACE, CODE_UP } from '../constants/key-codes';\nimport { PROP_TYPE_ARRAY_OBJECT_STRING, PROP_TYPE_BOOLEAN, PROP_TYPE_BOOLEAN_NUMBER_STRING, PROP_TYPE_FUNCTION_STRING, PROP_TYPE_NUMBER_STRING, PROP_TYPE_STRING } from '../constants/props';\nimport { SLOT_NAME_ELLIPSIS_TEXT, SLOT_NAME_FIRST_TEXT, SLOT_NAME_LAST_TEXT, SLOT_NAME_NEXT_TEXT, SLOT_NAME_PAGE, SLOT_NAME_PREV_TEXT } from '../constants/slots';\nimport { createArray } from '../utils/array';\nimport { attemptFocus, getActiveElement, getAttr, isDisabled, isVisible, selectAll } from '../utils/dom';\nimport { stopEvent } from '../utils/events';\nimport { isFunction, isNull } from '../utils/inspect';\nimport { mathFloor, mathMax, mathMin } from '../utils/math';\nimport { makeModelMixin } from '../utils/model';\nimport { toInteger } from '../utils/number';\nimport { sortKeys } from '../utils/object';\nimport { hasPropFunction, makeProp, makePropsConfigurable } from '../utils/props';\nimport { toString } from '../utils/string';\nimport { warn } from '../utils/warn';\nimport { normalizeSlotMixin } from '../mixins/normalize-slot';\nimport { BLink } from '../components/link/link'; // Common props, computed, data, render function, and methods\n// for `` and ``\n// --- Constants ---\n\nvar _makeModelMixin = makeModelMixin('value', {\n type: PROP_TYPE_BOOLEAN_NUMBER_STRING,\n defaultValue: null,\n\n /* istanbul ignore next */\n validator: function validator(value) {\n if (!isNull(value) && toInteger(value, 0) < 1) {\n warn('\"v-model\" value must be a number greater than \"0\"', NAME_PAGINATION);\n return false;\n }\n\n return true;\n }\n}),\n modelMixin = _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 }; // Threshold of limit size when we start/stop showing ellipsis\n\nvar ELLIPSIS_THRESHOLD = 3; // Default # of buttons limit\n\nvar DEFAULT_LIMIT = 5; // --- Helper methods ---\n// Make an array of N to N+X\n\nvar makePageArray = function makePageArray(startNumber, numberOfPages) {\n return createArray(numberOfPages, function (_, i) {\n return {\n number: startNumber + i,\n classes: null\n };\n });\n}; // Sanitize the provided limit value (converting to a number)\n\n\nvar sanitizeLimit = function sanitizeLimit(value) {\n var limit = toInteger(value) || 1;\n return limit < 1 ? DEFAULT_LIMIT : limit;\n}; // Sanitize the provided current page number (converting to a number)\n\n\nvar sanitizeCurrentPage = function sanitizeCurrentPage(val, numberOfPages) {\n var page = toInteger(val) || 1;\n return page > numberOfPages ? numberOfPages : page < 1 ? 1 : page;\n}; // Links don't normally respond to SPACE, so we add that\n// functionality via this handler\n\n\nvar onSpaceKey = function onSpaceKey(event) {\n if (event.keyCode === CODE_SPACE) {\n // Stop page from scrolling\n stopEvent(event, {\n immediatePropagation: true\n }); // Trigger the click event on the link\n\n event.currentTarget.click();\n return false;\n }\n}; // --- Props ---\n\n\nexport var props = makePropsConfigurable(sortKeys(_objectSpread(_objectSpread({}, modelProps), {}, {\n align: makeProp(PROP_TYPE_STRING, 'left'),\n ariaLabel: makeProp(PROP_TYPE_STRING, 'Pagination'),\n disabled: makeProp(PROP_TYPE_BOOLEAN, false),\n ellipsisClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n ellipsisText: makeProp(PROP_TYPE_STRING, \"\\u2026\"),\n // '…'\n firstClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n firstNumber: makeProp(PROP_TYPE_BOOLEAN, false),\n firstText: makeProp(PROP_TYPE_STRING, \"\\xAB\"),\n // '«'\n hideEllipsis: makeProp(PROP_TYPE_BOOLEAN, false),\n hideGotoEndButtons: makeProp(PROP_TYPE_BOOLEAN, false),\n labelFirstPage: makeProp(PROP_TYPE_STRING, 'Go to first page'),\n labelLastPage: makeProp(PROP_TYPE_STRING, 'Go to last page'),\n labelNextPage: makeProp(PROP_TYPE_STRING, 'Go to next page'),\n labelPage: makeProp(PROP_TYPE_FUNCTION_STRING, 'Go to page'),\n labelPrevPage: makeProp(PROP_TYPE_STRING, 'Go to previous page'),\n lastClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n lastNumber: makeProp(PROP_TYPE_BOOLEAN, false),\n lastText: makeProp(PROP_TYPE_STRING, \"\\xBB\"),\n // '»'\n limit: makeProp(PROP_TYPE_NUMBER_STRING, DEFAULT_LIMIT,\n /* istanbul ignore next */\n function (value) {\n if (toInteger(value, 0) < 1) {\n warn('Prop \"limit\" must be a number greater than \"0\"', NAME_PAGINATION);\n return false;\n }\n\n return true;\n }),\n nextClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n nextText: makeProp(PROP_TYPE_STRING, \"\\u203A\"),\n // '›'\n pageClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n pills: makeProp(PROP_TYPE_BOOLEAN, false),\n prevClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n prevText: makeProp(PROP_TYPE_STRING, \"\\u2039\"),\n // '‹'\n size: makeProp(PROP_TYPE_STRING)\n})), 'pagination'); // --- Mixin ---\n// @vue/component\n\nexport var paginationMixin = Vue.extend({\n mixins: [modelMixin, normalizeSlotMixin],\n props: props,\n data: function data() {\n // `-1` signifies no page initially selected\n var currentPage = toInteger(this[MODEL_PROP_NAME], 0);\n currentPage = currentPage > 0 ? currentPage : -1;\n return {\n currentPage: currentPage,\n localNumberOfPages: 1,\n localLimit: DEFAULT_LIMIT\n };\n },\n computed: {\n btnSize: function btnSize() {\n var size = this.size;\n return size ? \"pagination-\".concat(size) : '';\n },\n alignment: function alignment() {\n var align = this.align;\n\n if (align === 'center') {\n return 'justify-content-center';\n } else if (align === 'end' || align === 'right') {\n return 'justify-content-end';\n } else if (align === 'fill') {\n // The page-items will also have 'flex-fill' added\n // We add text centering to make the button appearance better in fill mode\n return 'text-center';\n }\n\n return '';\n },\n styleClass: function styleClass() {\n return this.pills ? 'b-pagination-pills' : '';\n },\n computedCurrentPage: function computedCurrentPage() {\n return sanitizeCurrentPage(this.currentPage, this.localNumberOfPages);\n },\n paginationParams: function paginationParams() {\n // Determine if we should show the the ellipsis\n var limit = this.localLimit,\n numberOfPages = this.localNumberOfPages,\n currentPage = this.computedCurrentPage,\n hideEllipsis = this.hideEllipsis,\n firstNumber = this.firstNumber,\n lastNumber = this.lastNumber;\n var showFirstDots = false;\n var showLastDots = false;\n var numberOfLinks = limit;\n var startNumber = 1;\n\n if (numberOfPages <= limit) {\n // Special case: Less pages available than the limit of displayed pages\n numberOfLinks = numberOfPages;\n } else if (currentPage < limit - 1 && limit > ELLIPSIS_THRESHOLD) {\n if (!hideEllipsis || lastNumber) {\n showLastDots = true;\n numberOfLinks = limit - (firstNumber ? 0 : 1);\n }\n\n numberOfLinks = mathMin(numberOfLinks, limit);\n } else if (numberOfPages - currentPage + 2 < limit && limit > ELLIPSIS_THRESHOLD) {\n if (!hideEllipsis || firstNumber) {\n showFirstDots = true;\n numberOfLinks = limit - (lastNumber ? 0 : 1);\n }\n\n startNumber = numberOfPages - numberOfLinks + 1;\n } else {\n // We are somewhere in the middle of the page list\n if (limit > ELLIPSIS_THRESHOLD) {\n numberOfLinks = limit - (hideEllipsis ? 0 : 2);\n showFirstDots = !!(!hideEllipsis || firstNumber);\n showLastDots = !!(!hideEllipsis || lastNumber);\n }\n\n startNumber = currentPage - mathFloor(numberOfLinks / 2);\n } // Sanity checks\n\n /* istanbul ignore if */\n\n\n if (startNumber < 1) {\n startNumber = 1;\n showFirstDots = false;\n } else if (startNumber > numberOfPages - numberOfLinks) {\n startNumber = numberOfPages - numberOfLinks + 1;\n showLastDots = false;\n }\n\n if (showFirstDots && firstNumber && startNumber < 4) {\n numberOfLinks = numberOfLinks + 2;\n startNumber = 1;\n showFirstDots = false;\n }\n\n var lastPageNumber = startNumber + numberOfLinks - 1;\n\n if (showLastDots && lastNumber && lastPageNumber > numberOfPages - 3) {\n numberOfLinks = numberOfLinks + (lastPageNumber === numberOfPages - 2 ? 2 : 3);\n showLastDots = false;\n } // Special handling for lower limits (where ellipsis are never shown)\n\n\n if (limit <= ELLIPSIS_THRESHOLD) {\n if (firstNumber && startNumber === 1) {\n numberOfLinks = mathMin(numberOfLinks + 1, numberOfPages, limit + 1);\n } else if (lastNumber && numberOfPages === startNumber + numberOfLinks - 1) {\n startNumber = mathMax(startNumber - 1, 1);\n numberOfLinks = mathMin(numberOfPages - startNumber + 1, numberOfPages, limit + 1);\n }\n }\n\n numberOfLinks = mathMin(numberOfLinks, numberOfPages - startNumber + 1);\n return {\n showFirstDots: showFirstDots,\n showLastDots: showLastDots,\n numberOfLinks: numberOfLinks,\n startNumber: startNumber\n };\n },\n pageList: function pageList() {\n // Generates the pageList array\n var _this$paginationParam = this.paginationParams,\n numberOfLinks = _this$paginationParam.numberOfLinks,\n startNumber = _this$paginationParam.startNumber;\n var currentPage = this.computedCurrentPage; // Generate list of page numbers\n\n var pages = makePageArray(startNumber, numberOfLinks); // We limit to a total of 3 page buttons on XS screens\n // So add classes to page links to hide them for XS breakpoint\n // Note: Ellipsis will also be hidden on XS screens\n // TODO: Make this visual limit configurable based on breakpoint(s)\n\n if (pages.length > 3) {\n var idx = currentPage - startNumber; // THe following is a bootstrap-vue custom utility class\n\n var classes = 'bv-d-xs-down-none';\n\n if (idx === 0) {\n // Keep leftmost 3 buttons visible when current page is first page\n for (var i = 3; i < pages.length; i++) {\n pages[i].classes = classes;\n }\n } else if (idx === pages.length - 1) {\n // Keep rightmost 3 buttons visible when current page is last page\n for (var _i = 0; _i < pages.length - 3; _i++) {\n pages[_i].classes = classes;\n }\n } else {\n // Hide all except current page, current page - 1 and current page + 1\n for (var _i2 = 0; _i2 < idx - 1; _i2++) {\n // hide some left button(s)\n pages[_i2].classes = classes;\n }\n\n for (var _i3 = pages.length - 1; _i3 > idx + 1; _i3--) {\n // hide some right button(s)\n pages[_i3].classes = classes;\n }\n }\n }\n\n return pages;\n }\n },\n watch: (_watch = {}, _defineProperty(_watch, MODEL_PROP_NAME, function (newValue, oldValue) {\n if (newValue !== oldValue) {\n this.currentPage = sanitizeCurrentPage(newValue, this.localNumberOfPages);\n }\n }), _defineProperty(_watch, \"currentPage\", function currentPage(newValue, oldValue) {\n if (newValue !== oldValue) {\n // Emit `null` if no page selected\n this.$emit(MODEL_EVENT_NAME, newValue > 0 ? newValue : null);\n }\n }), _defineProperty(_watch, \"limit\", function limit(newValue, oldValue) {\n if (newValue !== oldValue) {\n this.localLimit = sanitizeLimit(newValue);\n }\n }), _watch),\n created: function created() {\n var _this = this;\n\n // Set our default values in data\n this.localLimit = sanitizeLimit(this.limit);\n this.$nextTick(function () {\n // Sanity check\n _this.currentPage = _this.currentPage > _this.localNumberOfPages ? _this.localNumberOfPages : _this.currentPage;\n });\n },\n methods: {\n handleKeyNav: function handleKeyNav(event) {\n var keyCode = event.keyCode,\n shiftKey = event.shiftKey;\n /* istanbul ignore if */\n\n if (this.isNav) {\n // We disable left/right keyboard navigation in ``\n return;\n }\n\n if (keyCode === CODE_LEFT || keyCode === CODE_UP) {\n stopEvent(event, {\n propagation: false\n });\n shiftKey ? this.focusFirst() : this.focusPrev();\n } else if (keyCode === CODE_RIGHT || keyCode === CODE_DOWN) {\n stopEvent(event, {\n propagation: false\n });\n shiftKey ? this.focusLast() : this.focusNext();\n }\n },\n getButtons: function getButtons() {\n // Return only buttons that are visible\n return selectAll('button.page-link, a.page-link', this.$el).filter(function (btn) {\n return isVisible(btn);\n });\n },\n focusCurrent: function focusCurrent() {\n var _this2 = this;\n\n // We do this in `$nextTick()` to ensure buttons have finished rendering\n this.$nextTick(function () {\n var btn = _this2.getButtons().find(function (el) {\n return toInteger(getAttr(el, 'aria-posinset'), 0) === _this2.computedCurrentPage;\n });\n\n if (!attemptFocus(btn)) {\n // Fallback if current page is not in button list\n _this2.focusFirst();\n }\n });\n },\n focusFirst: function focusFirst() {\n var _this3 = this;\n\n // We do this in `$nextTick()` to ensure buttons have finished rendering\n this.$nextTick(function () {\n var btn = _this3.getButtons().find(function (el) {\n return !isDisabled(el);\n });\n\n attemptFocus(btn);\n });\n },\n focusLast: function focusLast() {\n var _this4 = this;\n\n // We do this in `$nextTick()` to ensure buttons have finished rendering\n this.$nextTick(function () {\n var btn = _this4.getButtons().reverse().find(function (el) {\n return !isDisabled(el);\n });\n\n attemptFocus(btn);\n });\n },\n focusPrev: function focusPrev() {\n var _this5 = this;\n\n // We do this in `$nextTick()` to ensure buttons have finished rendering\n this.$nextTick(function () {\n var buttons = _this5.getButtons();\n\n var index = buttons.indexOf(getActiveElement());\n\n if (index > 0 && !isDisabled(buttons[index - 1])) {\n attemptFocus(buttons[index - 1]);\n }\n });\n },\n focusNext: function focusNext() {\n var _this6 = this;\n\n // We do this in `$nextTick()` to ensure buttons have finished rendering\n this.$nextTick(function () {\n var buttons = _this6.getButtons();\n\n var index = buttons.indexOf(getActiveElement());\n\n if (index < buttons.length - 1 && !isDisabled(buttons[index + 1])) {\n attemptFocus(buttons[index + 1]);\n }\n });\n }\n },\n render: function render(h) {\n var _this7 = this;\n\n var disabled = this.disabled,\n labelPage = this.labelPage,\n ariaLabel = this.ariaLabel,\n isNav = this.isNav,\n numberOfPages = this.localNumberOfPages,\n currentPage = this.computedCurrentPage;\n var pageNumbers = this.pageList.map(function (p) {\n return p.number;\n });\n var _this$paginationParam2 = this.paginationParams,\n showFirstDots = _this$paginationParam2.showFirstDots,\n showLastDots = _this$paginationParam2.showLastDots;\n var fill = this.align === 'fill';\n var $buttons = []; // Helper function and flag\n\n var isActivePage = function isActivePage(pageNumber) {\n return pageNumber === currentPage;\n };\n\n var noCurrentPage = this.currentPage < 1; // Factory function for prev/next/first/last buttons\n\n var makeEndBtn = function makeEndBtn(linkTo, ariaLabel, btnSlot, btnText, btnClass, pageTest, key) {\n var isDisabled = disabled || isActivePage(pageTest) || noCurrentPage || linkTo < 1 || linkTo > numberOfPages;\n var pageNumber = linkTo < 1 ? 1 : linkTo > numberOfPages ? numberOfPages : linkTo;\n var scope = {\n disabled: isDisabled,\n page: pageNumber,\n index: pageNumber - 1\n };\n var $btnContent = _this7.normalizeSlot(btnSlot, scope) || toString(btnText) || h();\n var $inner = h(isDisabled ? 'span' : isNav ? BLink : 'button', {\n staticClass: 'page-link',\n class: {\n 'flex-grow-1': !isNav && !isDisabled && fill\n },\n props: isDisabled || !isNav ? {} : _this7.linkProps(linkTo),\n attrs: {\n role: isNav ? null : 'menuitem',\n type: isNav || isDisabled ? null : 'button',\n tabindex: isDisabled || isNav ? null : '-1',\n 'aria-label': ariaLabel,\n 'aria-controls': _this7.ariaControls || null,\n 'aria-disabled': isDisabled ? 'true' : null\n },\n on: isDisabled ? {} : {\n '!click': function click(event) {\n _this7.onClick(event, linkTo);\n },\n keydown: onSpaceKey\n }\n }, [$btnContent]);\n return h('li', {\n key: key,\n staticClass: 'page-item',\n class: [{\n disabled: isDisabled,\n 'flex-fill': fill,\n 'd-flex': fill && !isNav && !isDisabled\n }, btnClass],\n attrs: {\n role: isNav ? null : 'presentation',\n 'aria-hidden': isDisabled ? 'true' : null\n }\n }, [$inner]);\n }; // Ellipsis factory\n\n\n var makeEllipsis = function makeEllipsis(isLast) {\n return h('li', {\n staticClass: 'page-item',\n class: ['disabled', 'bv-d-xs-down-none', fill ? 'flex-fill' : '', _this7.ellipsisClass],\n attrs: {\n role: 'separator'\n },\n key: \"ellipsis-\".concat(isLast ? 'last' : 'first')\n }, [h('span', {\n staticClass: 'page-link'\n }, [_this7.normalizeSlot(SLOT_NAME_ELLIPSIS_TEXT) || toString(_this7.ellipsisText) || h()])]);\n }; // Page button factory\n\n\n var makePageButton = function makePageButton(page, idx) {\n var pageNumber = page.number;\n var active = isActivePage(pageNumber) && !noCurrentPage; // Active page will have tabindex of 0, or if no current page and first page button\n\n var tabIndex = disabled ? null : active || noCurrentPage && idx === 0 ? '0' : '-1';\n var attrs = {\n role: isNav ? null : 'menuitemradio',\n type: isNav || disabled ? null : 'button',\n 'aria-disabled': disabled ? 'true' : null,\n 'aria-controls': _this7.ariaControls || null,\n 'aria-label': hasPropFunction(labelPage) ?\n /* istanbul ignore next */\n labelPage(pageNumber) : \"\".concat(isFunction(labelPage) ? labelPage() : labelPage, \" \").concat(pageNumber),\n 'aria-checked': isNav ? null : active ? 'true' : 'false',\n 'aria-current': isNav && active ? 'page' : null,\n 'aria-posinset': isNav ? null : pageNumber,\n 'aria-setsize': isNav ? null : numberOfPages,\n // ARIA \"roving tabindex\" method (except in `isNav` mode)\n tabindex: isNav ? null : tabIndex\n };\n var btnContent = toString(_this7.makePage(pageNumber));\n var scope = {\n page: pageNumber,\n index: pageNumber - 1,\n content: btnContent,\n active: active,\n disabled: disabled\n };\n var $inner = h(disabled ? 'span' : isNav ? BLink : 'button', {\n props: disabled || !isNav ? {} : _this7.linkProps(pageNumber),\n staticClass: 'page-link',\n class: {\n 'flex-grow-1': !isNav && !disabled && fill\n },\n attrs: attrs,\n on: disabled ? {} : {\n '!click': function click(event) {\n _this7.onClick(event, pageNumber);\n },\n keydown: onSpaceKey\n }\n }, [_this7.normalizeSlot(SLOT_NAME_PAGE, scope) || btnContent]);\n return h('li', {\n staticClass: 'page-item',\n class: [{\n disabled: disabled,\n active: active,\n 'flex-fill': fill,\n 'd-flex': fill && !isNav && !disabled\n }, page.classes, _this7.pageClass],\n attrs: {\n role: isNav ? null : 'presentation'\n },\n key: \"page-\".concat(pageNumber)\n }, [$inner]);\n }; // Goto first page button\n // Don't render button when `hideGotoEndButtons` or `firstNumber` is set\n\n\n var $firstPageBtn = h();\n\n if (!this.firstNumber && !this.hideGotoEndButtons) {\n $firstPageBtn = makeEndBtn(1, this.labelFirstPage, SLOT_NAME_FIRST_TEXT, this.firstText, this.firstClass, 1, 'pagination-goto-first');\n }\n\n $buttons.push($firstPageBtn); // Goto previous page button\n\n $buttons.push(makeEndBtn(currentPage - 1, this.labelPrevPage, SLOT_NAME_PREV_TEXT, this.prevText, this.prevClass, 1, 'pagination-goto-prev')); // Show first (1) button?\n\n $buttons.push(this.firstNumber && pageNumbers[0] !== 1 ? makePageButton({\n number: 1\n }, 0) : h()); // First ellipsis\n\n $buttons.push(showFirstDots ? makeEllipsis(false) : h()); // Individual page links\n\n this.pageList.forEach(function (page, idx) {\n var offset = showFirstDots && _this7.firstNumber && pageNumbers[0] !== 1 ? 1 : 0;\n $buttons.push(makePageButton(page, idx + offset));\n }); // Last ellipsis\n\n $buttons.push(showLastDots ? makeEllipsis(true) : h()); // Show last page button?\n\n $buttons.push(this.lastNumber && pageNumbers[pageNumbers.length - 1] !== numberOfPages ? makePageButton({\n number: numberOfPages\n }, -1) : h()); // Goto next page button\n\n $buttons.push(makeEndBtn(currentPage + 1, this.labelNextPage, SLOT_NAME_NEXT_TEXT, this.nextText, this.nextClass, numberOfPages, 'pagination-goto-next')); // Goto last page button\n // Don't render button when `hideGotoEndButtons` or `lastNumber` is set\n\n var $lastPageBtn = h();\n\n if (!this.lastNumber && !this.hideGotoEndButtons) {\n $lastPageBtn = makeEndBtn(numberOfPages, this.labelLastPage, SLOT_NAME_LAST_TEXT, this.lastText, this.lastClass, numberOfPages, 'pagination-goto-last');\n }\n\n $buttons.push($lastPageBtn); // Assemble the pagination buttons\n\n var $pagination = h('ul', {\n staticClass: 'pagination',\n class: ['b-pagination', this.btnSize, this.alignment, this.styleClass],\n attrs: {\n role: isNav ? null : 'menubar',\n 'aria-disabled': disabled ? 'true' : 'false',\n 'aria-label': isNav ? null : ariaLabel || null\n },\n // We disable keyboard left/right nav when ``\n on: isNav ? {} : {\n keydown: this.handleKeyNav\n },\n ref: 'ul'\n }, $buttons); // If we are ``, wrap in `