\n // Needed for lazy modals\n\n\n var outer = h(false);\n\n if (!this.is_hidden) {\n outer = h('div', {\n key: 'modal-outer',\n style: this.modalOuterStyle,\n attrs: {\n id: this.safeId('__BV_modal_outer_')\n }\n }, [modal, tabTrap, backdrop]);\n } // Wrap in
to maintain `this.$el` reference for\n // hide/show method access\n\n\n return h('div', {}, [outer]);\n }\n});\n\nexports.default = _default2;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/bootstrap-vue/es/components/modal/modal.js\n// module id = ESch\n// module chunks = 0","\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _vue = _interopRequireDefault(require(\"../../utils/vue\"));\n\nvar _tooltip = _interopRequireDefault(require(\"../../utils/tooltip.class\"));\n\nvar _warn = _interopRequireDefault(require(\"../../utils/warn\"));\n\nvar _toolpop = _interopRequireDefault(require(\"../../mixins/toolpop\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// @vue/component\nvar _default = _vue.default.extend({\n name: 'BTooltip',\n mixins: [_toolpop.default],\n props: {\n title: {\n type: String,\n default: ''\n },\n triggers: {\n type: [String, Array],\n default: 'hover focus'\n },\n placement: {\n type: String,\n default: 'top'\n }\n },\n data: function data() {\n return {};\n },\n methods: {\n createToolpop: function createToolpop() {\n // getTarget is in toolpop mixin\n var target = this.getTarget();\n /* istanbul ignore else */\n\n if (target) {\n this._toolpop = new _tooltip.default(target, this.getConfig(), this.$root);\n } else {\n this._toolpop = null;\n (0, _warn.default)(\"b-tooltip: 'target' element not found!\");\n }\n\n return this._toolpop;\n }\n },\n render: function render(h) {\n return h('div', {\n class: ['d-none'],\n style: {\n display: 'none'\n },\n attrs: {\n 'aria-hidden': true\n }\n }, [h('div', {\n ref: 'title'\n }, this.$slots.default)]);\n }\n});\n\nexports.default = _default;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/bootstrap-vue/es/components/tooltip/tooltip.js\n// module id = EXyZ\n// module chunks = 0","\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _vue = _interopRequireDefault(require(\"../../utils/vue\"));\n\nvar _id = _interopRequireDefault(require(\"../../mixins/id\"));\n\nvar _form = _interopRequireDefault(require(\"../../mixins/form\"));\n\nvar _formState = _interopRequireDefault(require(\"../../mixins/form-state\"));\n\nvar _formSize = _interopRequireDefault(require(\"../../mixins/form-size\"));\n\nvar _formRadioCheck = _interopRequireDefault(require(\"../../mixins/form-radio-check\"));\n\nvar _looseEqual = _interopRequireDefault(require(\"../../utils/loose-equal\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// @vue/component\nvar _default = _vue.default.extend({\n name: 'BFormRadio',\n mixins: [_id.default, _formRadioCheck.default, // Includes shared render function\n _form.default, _formSize.default, _formState.default],\n inject: {\n bvGroup: {\n from: 'bvRadioGroup',\n default: false\n }\n },\n props: {\n checked: {\n // v-model\n type: [String, Object, Number, Boolean],\n default: null\n }\n },\n computed: {\n // Radio Groups can only have a single value, so determining if checked is simple\n is_Checked: function is_Checked() {\n return (0, _looseEqual.default)(this.value, this.computedLocalChecked);\n },\n // Flags for form-radio-check mixin\n is_Radio: function is_Radio() {\n return true;\n },\n is_Check: function is_Check() {\n return false;\n }\n },\n watch: {\n // Radio Groups can only have a single value, so our watchers are simple\n computedLocalChecked: function computedLocalChecked(newVal, oldVal) {\n this.$emit('input', this.computedLocalChecked);\n }\n },\n methods: {\n handleChange: function handleChange(_ref) {\n var checked = _ref.target.checked;\n var value = this.value;\n this.computedLocalChecked = value; // Change is only emitted on user interaction\n\n this.$emit('change', checked ? value : null); // If this is a child of form-radio-group, we emit a change event on it as well\n\n if (this.is_Group) {\n this.bvGroup.$emit('change', checked ? value : null);\n }\n }\n }\n});\n\nexports.default = _default;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/bootstrap-vue/es/components/form-radio/form-radio.js\n// module id = Ea66\n// module chunks = 0","\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _alert = _interopRequireDefault(require(\"./alert\"));\n\nvar _plugins = require(\"../../utils/plugins\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar components = {\n BAlert: _alert.default\n};\nvar _default = {\n install: (0, _plugins.installFactory)({\n components: components\n })\n};\nexports.default = _default;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/bootstrap-vue/es/components/alert/index.js\n// module id = FEtK\n// module chunks = 0","\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _vue = _interopRequireDefault(require(\"../../utils/vue\"));\n\nvar _id = _interopRequireDefault(require(\"../../mixins/id\"));\n\nvar _form = _interopRequireDefault(require(\"../../mixins/form\"));\n\nvar _formSize = _interopRequireDefault(require(\"../../mixins/form-size\"));\n\nvar _formState = _interopRequireDefault(require(\"../../mixins/form-state\"));\n\nvar _formText = _interopRequireDefault(require(\"../../mixins/form-text\"));\n\nvar _formSelection = _interopRequireDefault(require(\"../../mixins/form-selection\"));\n\nvar _formValidity = _interopRequireDefault(require(\"../../mixins/form-validity\"));\n\nvar _array = require(\"../../utils/array\");\n\nvar _dom = require(\"../../utils/dom\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n// Valid supported input types\nvar TYPES = ['text', 'password', 'email', 'number', 'url', 'tel', 'search', 'range', 'color', 'date', 'time', 'datetime', 'datetime-local', 'month', 'week']; // @vue/component\n\nvar _default = _vue.default.extend({\n name: 'BFormInput',\n mixins: [_id.default, _form.default, _formSize.default, _formState.default, _formText.default, _formSelection.default, _formValidity.default],\n props: {\n // value prop defined in form-text mixin\n // value: { },\n type: {\n type: String,\n default: 'text',\n validator: function validator(type) {\n return (0, _array.arrayIncludes)(TYPES, type);\n }\n },\n noWheel: {\n // Disable mousewheel to prevent wheel from changing values (i.e. number/date).\n type: Boolean,\n default: false\n },\n min: {\n type: [String, Number],\n default: null\n },\n max: {\n type: [String, Number],\n default: null\n },\n step: {\n type: [String, Number],\n default: null\n },\n list: {\n type: String,\n default: null\n }\n },\n computed: {\n localType: function localType() {\n // We only allow certain types\n return (0, _array.arrayIncludes)(TYPES, this.type) ? this.type : 'text';\n }\n },\n watch: {\n noWheel: function noWheel(newVal) {\n this.setWheelStopper(newVal);\n }\n },\n mounted: function mounted() {\n this.setWheelStopper(this.noWheel);\n },\n deactivated: function deactivated() {\n // Turn off listeners when keep-alive component deactivated\n\n /* istanbul ignore next */\n this.setWheelStopper(false);\n },\n activated: function activated() {\n // Turn on listeners (if no-wheel) when keep-alive component activated\n\n /* istanbul ignore next */\n this.setWheelStopper(this.noWheel);\n },\n beforeDestroy: function beforeDestroy() {\n /* istanbul ignore next */\n this.setWheelStopper(false);\n },\n methods: {\n setWheelStopper: function setWheelStopper(on) {\n var input = this.$el; // We use native events, so that we don't interfere with propgation\n\n if (on) {\n (0, _dom.eventOn)(input, 'focus', this.onWheelFocus);\n (0, _dom.eventOn)(input, 'blur', this.onWheelBlur);\n } else {\n (0, _dom.eventOff)(input, 'focus', this.onWheelFocus);\n (0, _dom.eventOff)(input, 'blur', this.onWheelBlur);\n (0, _dom.eventOff)(document, 'wheel', this.stopWheel);\n }\n },\n onWheelFocus: function onWheelFocus(evt) {\n (0, _dom.eventOn)(document, 'wheel', this.stopWheel);\n },\n onWheelBlur: function onWheelBlur(evt) {\n (0, _dom.eventOff)(document, 'wheel', this.stopWheel);\n },\n stopWheel: function stopWheel(evt) {\n evt.preventDefault();\n this.$el.blur();\n }\n },\n render: function render(h) {\n var self = this;\n return h('input', {\n ref: 'input',\n class: self.computedClass,\n directives: [{\n name: 'model',\n rawName: 'v-model',\n value: self.localValue,\n expression: 'localValue'\n }],\n attrs: {\n id: self.safeId(),\n name: self.name,\n form: self.form || null,\n type: self.localType,\n disabled: self.disabled,\n placeholder: self.placeholder,\n required: self.required,\n autocomplete: self.autocomplete || null,\n readonly: self.readonly || self.plaintext,\n min: self.min,\n max: self.max,\n step: self.step,\n list: self.localType !== 'password' ? self.list : null,\n 'aria-required': self.required ? 'true' : null,\n 'aria-invalid': self.computedAriaInvalid\n },\n domProps: {\n value: self.localValue\n },\n on: _objectSpread({}, self.$listeners, {\n input: self.onInput,\n change: self.onChange,\n blur: self.onBlur\n })\n });\n }\n});\n\nexports.default = _default;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/bootstrap-vue/es/components/form-input/form-input.js\n// module id = FGX+\n// module chunks = 0","\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _looseEqual = _interopRequireDefault(require(\"../../../utils/loose-equal\"));\n\nvar _warn = _interopRequireDefault(require(\"../../../utils/warn\"));\n\nvar _inspect = require(\"../../../utils/inspect\");\n\nvar _listenOnRoot = _interopRequireDefault(require(\"../../../mixins/listen-on-root\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar _default = {\n mixins: [_listenOnRoot.default],\n props: {\n noProviderPaging: {\n type: Boolean,\n default: false\n },\n noProviderSorting: {\n type: Boolean,\n default: false\n },\n noProviderFiltering: {\n type: Boolean,\n default: false\n },\n apiUrl: {\n // Passthrough prop. Passed to the context object. Not used by b-table directly\n type: String,\n default: ''\n }\n },\n computed: {\n hasProvider: function hasProvider() {\n return this.items instanceof Function;\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 };\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 ctx;\n }\n },\n watch: {\n // Provider update triggering\n items: function items(newVal, oldVal) {\n // If a new provider has been specified, trigger an update\n if (this.hasProvider || newVal instanceof Function) {\n this.$nextTick(this._providerUpdate);\n }\n },\n providerTriggerContext: function providerTriggerContext(newVal, oldVal) {\n // Trigger the provider to update as the relevant context values have changed.\n if (!(0, _looseEqual.default)(newVal, oldVal)) {\n this.$nextTick(this._providerUpdate);\n }\n }\n },\n mounted: function mounted() {\n var _this = this;\n\n // Call the items provider if necessary\n if (this.hasProvider && (!this.localItems || this.localItems.length === 0)) {\n // Fetch on mount if localItems is empty\n this._providerUpdate();\n } // Listen for global messages to tell us to force refresh the table\n\n\n this.listenOnRoot('bv::refresh::table', function (id) {\n if (id === _this.id || id === _this) {\n _this.refresh();\n }\n });\n },\n methods: {\n refresh: function refresh() {\n // Public Method: Force a refresh of the provider function\n this.$off('refreshed', this.refresh);\n\n if (this.computedBusy) {\n // Can't force an update when forced busy by user (busy prop === true)\n if (this.localBusy && this.hasProvider) {\n // But if provider running (localBusy), re-schedule refresh once `refreshed` emitted\n this.$on('refreshed', this.refresh);\n }\n } else {\n this.clearSelected();\n\n if (this.hasProvider) {\n this.$nextTick(this._providerUpdate);\n } else {\n /* istanbul ignore next */\n this.localItems = (0, _inspect.isArray)(this.items) ? this.items.slice() : [];\n }\n }\n },\n // Provider related methods\n _providerSetLocal: function _providerSetLocal(items) {\n this.localItems = (0, _inspect.isArray)(items) ? items.slice() : [];\n this.localBusy = false;\n this.$emit('refreshed'); // New root emit\n\n if (this.id) {\n this.emitOnRoot('bv::table::refreshed', this.id);\n }\n },\n _providerUpdate: function _providerUpdate() {\n // 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 var _this2 = this;\n\n try {\n // Call provider function passing it the context and optional callback\n var data = this.items(this.context, this._providerSetLocal);\n\n if (data && data.then && (0, _inspect.isFunction)(data.then)) {\n // Provider returned Promise\n data.then(function (items) {\n // Provider resolved with items\n _this2._providerSetLocal(items);\n });\n } else if ((0, _inspect.isArray)(data)) {\n // Provider returned Array data\n this._providerSetLocal(data);\n } else if (this.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 (0, _warn.default)(\"b-table provider function didn't request callback and did not return a promise or data\");\n /* istanbul ignore next */\n\n this.localBusy = false;\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 (0, _warn.default)(\"b-table provider function error [\".concat(e.name, \"] \").concat(e.message));\n this.localBusy = false;\n this.$off('refreshed', this.refresh);\n }\n });\n }\n }\n};\nexports.default = _default;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/bootstrap-vue/es/components/table/helpers/mixin-provider.js\n// module id = FQkT\n// module chunks = 0","\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _keyCodes = _interopRequireDefault(require(\"../utils/key-codes\"));\n\nvar _range = _interopRequireDefault(require(\"../utils/range\"));\n\nvar _toString = _interopRequireDefault(require(\"../utils/to-string\"));\n\nvar _warn = _interopRequireDefault(require(\"../utils/warn\"));\n\nvar _inspect = require(\"../utils/inspect\");\n\nvar _dom = require(\"../utils/dom\");\n\nvar _normalizeSlot = _interopRequireDefault(require(\"../mixins/normalize-slot\"));\n\nvar _link = _interopRequireDefault(require(\"../components/link/link\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/*\n * Common props, computed, data, render function, and methods\n * for
and \n */\n// Threshold of limit size when we start/stop showing ellipsis\nvar ELLIPSIS_THRESHOLD = 3; // Default # of buttons limit\n\nvar DEFAULT_LIMIT = 5; // Make an array of N to N+X\n\nfunction makePageArray(startNum, numPages) {\n return (0, _range.default)(numPages).map(function (value, index) {\n return {\n number: index + startNum,\n classes: null\n };\n });\n} // Sanitize the provided Limit value (converting to a number)\n\n\nfunction sanitizeLimit(value) {\n var limit = parseInt(value, 10) || 1;\n return limit < 1 ? DEFAULT_LIMIT : limit;\n} // Sanitize the provided current page number (converting to a number)\n\n\nfunction sanitizeCurPage(value, numPages) {\n var page = parseInt(value, 10) || 1;\n return page > numPages ? numPages : page < 1 ? 1 : page;\n} // Links don't normally respond to SPACE, so we add that functionality via this handler\n\n\nfunction onSpaceKey(evt) {\n if (evt.keyCode === _keyCodes.default.SPACE) {\n evt.preventDefault(); // Stop page from scrolling\n\n evt.stopImmediatePropagation();\n evt.stopPropagation(); // Trigger the click event on the link\n\n evt.currentTarget.click();\n return false;\n }\n} // Props object\n\n\nvar props = {\n disabled: {\n type: Boolean,\n default: false\n },\n value: {\n type: [Number, String],\n default: null,\n validator: function validator(value) {\n var num = parseInt(value, 10);\n /* istanbul ignore if */\n\n if (!(0, _inspect.isNull)(value) && (isNaN(num) || num < 1)) {\n (0, _warn.default)('pagination: v-model value must be a number greater than 0');\n return false;\n }\n\n return true;\n }\n },\n limit: {\n type: [Number, String],\n default: DEFAULT_LIMIT,\n validator: function validator(value) {\n var num = parseInt(value, 10);\n /* istanbul ignore if */\n\n if (isNaN(num) || num < 1) {\n (0, _warn.default)('pagination: prop \"limit\" must be a number greater than 0');\n return false;\n }\n\n return true;\n }\n },\n size: {\n type: String,\n default: 'md'\n },\n align: {\n type: String,\n default: 'left'\n },\n hideGotoEndButtons: {\n type: Boolean,\n default: false\n },\n ariaLabel: {\n type: String,\n default: 'Pagination'\n },\n labelFirstPage: {\n type: String,\n default: 'Go to first page'\n },\n firstText: {\n type: String,\n default: '«'\n },\n labelPrevPage: {\n type: String,\n default: 'Go to previous page'\n },\n prevText: {\n type: String,\n default: '‹'\n },\n labelNextPage: {\n type: String,\n default: 'Go to next page'\n },\n nextText: {\n type: String,\n default: '›'\n },\n labelLastPage: {\n type: String,\n default: 'Go to last page'\n },\n lastText: {\n type: String,\n default: '»'\n },\n labelPage: {\n type: [String, Function],\n default: 'Go to page'\n },\n hideEllipsis: {\n type: Boolean,\n default: false\n },\n ellipsisText: {\n type: String,\n default: '…'\n } // @vue/component\n\n};\nvar _default = {\n mixins: [_normalizeSlot.default],\n model: {\n prop: 'value',\n event: 'input'\n },\n props: props,\n data: function data() {\n var curr = parseInt(this.value, 10);\n return {\n // -1 signifies no page initially selected\n currentPage: curr > 0 ? curr : -1,\n localNumPages: 1,\n localLimit: DEFAULT_LIMIT\n };\n },\n computed: {\n btnSize: function btnSize() {\n return this.size ? \"pagination-\".concat(this.size) : '';\n },\n alignment: function alignment() {\n var align = this.align;\n\n if (align === 'center') {\n return 'justify-content-center';\n } else if (align === 'end' || align === 'right') {\n return 'justify-content-end';\n } else if (align === 'fill') {\n // The page-items will also have 'flex-fill' added.\n // We ad text centering to make the button appearance better in fill mode.\n return 'text-center';\n }\n\n return '';\n },\n computedCurrentPage: function computedCurrentPage() {\n return sanitizeCurPage(this.currentPage, this.localNumPages);\n },\n paginationParams: function paginationParams() {\n // Determine if we should show the the ellipsis\n var limit = this.limit;\n var numPages = this.localNumPages;\n var curPage = this.computedCurrentPage;\n var hideEllipsis = this.hideEllipsis;\n var showFirstDots = false;\n var showLastDots = false;\n var numLinks = limit;\n var startNum = 1;\n\n if (numPages <= limit) {\n // Special Case: Less pages available than the limit of displayed pages\n numLinks = numPages;\n } else if (curPage < limit - 1 && limit > ELLIPSIS_THRESHOLD) {\n // We are near the beginning of the page list\n if (!hideEllipsis) {\n showLastDots = true;\n numLinks = limit - 1;\n }\n } else if (numPages - curPage + 2 < limit && limit > ELLIPSIS_THRESHOLD) {\n // We are near the end of the list\n if (!hideEllipsis) {\n numLinks = limit - 1;\n showFirstDots = true;\n }\n\n startNum = numPages - numLinks + 1;\n } else {\n // We are somewhere in the middle of the page list\n if (limit > ELLIPSIS_THRESHOLD && !hideEllipsis) {\n numLinks = limit - 2;\n showFirstDots = showLastDots = true;\n }\n\n startNum = curPage - Math.floor(numLinks / 2);\n } // Sanity checks\n\n\n if (startNum < 1) {\n /* istanbul ignore next */\n startNum = 1;\n } else if (startNum > numPages - numLinks) {\n startNum = numPages - numLinks + 1;\n }\n\n return {\n showFirstDots: showFirstDots,\n showLastDots: showLastDots,\n numLinks: numLinks,\n startNum: startNum\n };\n },\n pageList: function pageList() {\n // Generates the pageList array\n var _this$paginationParam = this.paginationParams,\n numLinks = _this$paginationParam.numLinks,\n startNum = _this$paginationParam.startNum;\n var currPage = this.computedCurrentPage; // Generate list of page numbers\n\n var pages = makePageArray(startNum, numLinks); // 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 = currPage - startNum; // THe following is a bootstrap-vue custom utility class\n\n var classes = 'bv-d-xs-down-none';\n\n if (idx === 0) {\n // Keep leftmost 3 buttons visible when current page is first page\n for (var i = 3; i < pages.length; i++) {\n pages[i].classes = classes;\n }\n } else if (idx === pages.length - 1) {\n // Keep rightmost 3 buttons visible when current page is last page\n for (var _i = 0; _i < pages.length - 3; _i++) {\n pages[_i].classes = classes;\n }\n } else {\n // Hide all except current page, current page - 1 and current page + 1\n for (var _i2 = 0; _i2 < idx - 1; _i2++) {\n // hide some left button(s)\n pages[_i2].classes = classes;\n }\n\n for (var _i3 = pages.length - 1; _i3 > idx + 1; _i3--) {\n // hide some right button(s)\n pages[_i3].classes = classes;\n }\n }\n }\n\n return pages;\n }\n },\n watch: {\n value: function value(newValue, oldValue) {\n if (newValue !== oldValue) {\n this.currentPage = sanitizeCurPage(newValue, this.localNumPages);\n }\n },\n currentPage: function currentPage(newValue, oldValue) {\n if (newValue !== oldValue) {\n // Emit null if no page selected\n this.$emit('input', newValue > 0 ? newValue : null);\n }\n },\n limit: function limit(newValue, oldValue) {\n if (newValue !== oldValue) {\n this.localLimit = sanitizeLimit(newValue);\n }\n }\n },\n created: function created() {\n var _this = this;\n\n // Set our default values in data\n this.localLimit = sanitizeLimit(this.limit);\n this.$nextTick(function () {\n // Sanity check\n _this.currentPage = _this.currentPage > _this.localNumPages ? _this.localNumPages : _this.currentPage;\n });\n },\n methods: {\n getButtons: function getButtons() {\n // Return only buttons that are visible\n return (0, _dom.selectAll)('a.page-link', this.$el).filter(function (btn) {\n return (0, _dom.isVisible)(btn);\n });\n },\n setBtnFocus: function setBtnFocus(btn) {\n btn.focus();\n },\n focusCurrent: function focusCurrent() {\n var _this2 = this;\n\n // We do this in next tick to ensure buttons have finished rendering\n this.$nextTick(function () {\n var btn = _this2.getButtons().find(function (el) {\n return parseInt((0, _dom.getAttr)(el, 'aria-posinset'), 10) === _this2.computedCurrentPage;\n });\n\n if (btn && btn.focus) {\n _this2.setBtnFocus(btn);\n } else {\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 next tick to ensure buttons have finished rendering\n this.$nextTick(function () {\n var btn = _this3.getButtons().find(function (el) {\n return !(0, _dom.isDisabled)(el);\n });\n\n if (btn && btn.focus && btn !== document.activeElement) {\n _this3.setBtnFocus(btn);\n }\n });\n },\n focusLast: function focusLast() {\n var _this4 = this;\n\n // We do this in next tick to ensure buttons have finished rendering\n this.$nextTick(function () {\n var btn = _this4.getButtons().reverse().find(function (el) {\n return !(0, _dom.isDisabled)(el);\n });\n\n if (btn && btn.focus && btn !== document.activeElement) {\n _this4.setBtnFocus(btn);\n }\n });\n },\n focusPrev: function focusPrev() {\n var _this5 = this;\n\n // We do this in next tick to ensure buttons have finished rendering\n this.$nextTick(function () {\n var buttons = _this5.getButtons();\n\n var idx = buttons.indexOf(document.activeElement);\n\n if (idx > 0 && !(0, _dom.isDisabled)(buttons[idx - 1]) && buttons[idx - 1].focus) {\n _this5.setBtnFocus(buttons[idx - 1]);\n }\n });\n },\n focusNext: function focusNext() {\n var _this6 = this;\n\n // We do this in next tick to ensure buttons have finished rendering\n this.$nextTick(function () {\n var buttons = _this6.getButtons();\n\n var idx = buttons.indexOf(document.activeElement);\n var cnt = buttons.length - 1;\n\n if (idx < cnt && !(0, _dom.isDisabled)(buttons[idx + 1]) && buttons[idx + 1].focus) {\n _this6.setBtnFocus(buttons[idx + 1]);\n }\n });\n }\n },\n render: function render(h) {\n var _this7 = this;\n\n var buttons = [];\n var numberOfPages = this.localNumPages;\n var disabled = this.disabled;\n var _this$paginationParam2 = this.paginationParams,\n showFirstDots = _this$paginationParam2.showFirstDots,\n showLastDots = _this$paginationParam2.showLastDots;\n var currPage = this.computedCurrentPage;\n var fill = this.align === 'fill'; // Helper function and flag\n\n var isActivePage = function isActivePage(pageNum) {\n return pageNum === currPage;\n };\n\n var noCurrPage = this.currentPage < 1; // Factory function for prev/next/first/last buttons\n\n var makeEndBtn = function makeEndBtn(linkTo, ariaLabel, btnSlot, btnText, pageTest, key) {\n var isDisabled = disabled || isActivePage(pageTest) || noCurrPage || linkTo < 1 || linkTo > numberOfPages;\n var pageNum = linkTo < 1 ? 1 : linkTo > numberOfPages ? numberOfPages : linkTo;\n var scope = {\n disabled: isDisabled,\n page: pageNum,\n index: pageNum - 1\n };\n var btnContent = _this7.normalizeSlot(btnSlot, scope) || (0, _toString.default)(btnText) || h(false);\n var inner = h(isDisabled ? 'span' : _link.default, {\n staticClass: 'page-link',\n props: isDisabled ? {} : _this7.linkProps(linkTo),\n attrs: {\n role: 'menuitem',\n tabindex: isDisabled ? null : '-1',\n 'aria-label': ariaLabel,\n 'aria-controls': _this7.ariaControls || null,\n 'aria-disabled': isDisabled ? 'true' : null\n },\n on: isDisabled ? {} : {\n click: function click(evt) {\n _this7.onClick(linkTo, evt);\n },\n keydown: onSpaceKey\n }\n }, [btnContent]);\n return h('li', {\n key: key,\n staticClass: 'page-item',\n class: {\n disabled: isDisabled,\n 'flex-fill': fill\n },\n attrs: {\n role: 'none presentation',\n 'aria-hidden': isDisabled ? 'true' : null\n }\n }, [inner]);\n }; // Ellipsis factory\n\n\n var makeEllipsis = function makeEllipsis(isLast) {\n return h('li', {\n key: \"ellipsis-\".concat(isLast ? 'last' : 'first'),\n staticClass: 'page-item',\n class: ['disabled', 'bv-d-xs-down-none', fill ? 'flex-fill' : ''],\n attrs: {\n role: 'separator'\n }\n }, [h('span', {\n staticClass: 'page-link'\n }, [_this7.normalizeSlot('ellipsis-text', {}) || (0, _toString.default)(_this7.ellipsisText) || h(false)])]);\n }; // Goto First Page button bookend\n\n\n buttons.push(this.hideGotoEndButtons ? h(false) : makeEndBtn(1, this.labelFirstPage, 'first-text', this.firstText, 1, 'bookend-goto-first')); // Goto Previous page button bookend\n\n buttons.push(makeEndBtn(currPage - 1, this.labelPrevPage, 'prev-text', this.prevText, 1, 'bookend-goto-prev')); // First Ellipsis Bookend\n\n buttons.push(showFirstDots ? makeEllipsis(false) : h(false)); // Individual Page links\n\n this.pageList.forEach(function (page, idx) {\n var active = isActivePage(page.number) && !noCurrPage; // Active page will have tabindex of 0, or if no current page and first page button\n\n var tabIndex = disabled ? null : active || noCurrPage && idx === 0 ? '0' : '-1';\n var attrs = {\n role: 'menuitemradio',\n 'aria-disabled': disabled ? 'true' : null,\n 'aria-controls': _this7.ariaControls || null,\n 'aria-label': (0, _inspect.isFunction)(_this7.labelPage) ? _this7.labelPage(page.number) : \"\".concat(_this7.labelPage, \" \").concat(page.number),\n 'aria-checked': active ? 'true' : 'false',\n 'aria-posinset': page.number,\n 'aria-setsize': numberOfPages,\n // ARIA \"roving tabindex\" method\n tabindex: tabIndex\n };\n var btnContent = (0, _toString.default)(_this7.makePage(page.number));\n var scope = {\n page: page.number,\n index: page.number - 1,\n content: btnContent,\n active: active,\n disabled: disabled\n };\n var inner = h(disabled ? 'span' : _link.default, {\n props: disabled ? {} : _this7.linkProps(page.number),\n staticClass: 'page-link',\n attrs: attrs,\n on: disabled ? {} : {\n click: function click(evt) {\n _this7.onClick(page.number, evt);\n },\n keydown: onSpaceKey\n }\n }, [_this7.normalizeSlot('page', scope) || btnContent]);\n buttons.push(h('li', {\n key: \"page-\".concat(page.number),\n staticClass: 'page-item',\n class: [{\n disabled: disabled,\n active: active,\n 'flex-fill': fill\n }, page.classes],\n attrs: {\n role: 'none presentation'\n }\n }, [inner]));\n }); // Last Ellipsis Bookend\n\n buttons.push(showLastDots ? makeEllipsis(true) : h(false)); // Goto Next page button bookend\n\n buttons.push(makeEndBtn(currPage + 1, this.labelNextPage, 'next-text', this.nextText, numberOfPages, 'bookend-goto-next')); // Goto Last Page button bookend\n\n buttons.push(this.hideGotoEndButtons ? h(false) : makeEndBtn(numberOfPages, this.labelLastPage, 'last-text', this.lastText, numberOfPages, 'bookend-goto-last')); // Assemble the pagination buttons\n\n var pagination = h('ul', {\n ref: 'ul',\n staticClass: 'pagination',\n class: ['b-pagination', this.btnSize, this.alignment],\n attrs: {\n role: 'menubar',\n 'aria-disabled': disabled ? 'true' : 'false',\n 'aria-label': this.ariaLabel || null\n },\n on: {\n keydown: function keydown(evt) {\n var keyCode = evt.keyCode;\n var shift = evt.shiftKey;\n\n if (keyCode === _keyCodes.default.LEFT) {\n evt.preventDefault();\n shift ? _this7.focusFirst() : _this7.focusPrev();\n } else if (keyCode === _keyCodes.default.RIGHT) {\n evt.preventDefault();\n shift ? _this7.focusLast() : _this7.focusNext();\n }\n }\n }\n }, buttons); // if we are pagination-nav, wrap in '