{"version":3,"sources":["webpack:///./node_modules/bootstrap-vue/esm/components/pagination/pagination.js","webpack:///./node_modules/bootstrap-vue/esm/components/form-radio/form-radio-group.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/components/form-spinbutton/form-spinbutton.js","webpack:///./node_modules/bootstrap-vue/esm/components/form-radio/form-radio.js","webpack:///./node_modules/bootstrap-vue/esm/components/form-checkbox/form-checkbox.js"],"names":["ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","target","i","arguments","length","source","forEach","key","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","obj","value","configurable","writable","DEFAULT_PER_PAGE","DEFAULT_TOTAL_ROWS","sanitizePerPage","sanitizeTotalRows","props","ariaControls","perPage","totalRows","BPagination","extend","name","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","BFormRadioGroup","provide","bvRadioGroup","isRadioGroup","bottomRowMixin","renderBottomRow","fields","computedFields","stacked","tbodyTrClass","tbodyTrAttr","h","$createElement","hasNormalizedSlot","staticClass","class","attrs","normalizeSlot","columns","MODEL_PROP_NAME_BUSY","MODEL_EVENT_NAME_BUSY","busyMixin","data","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","_ref","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","id","refresh","$off","$on","clearSelected","_providerSetLocal","emitOnRoot","context","then","e","message","_props","_watch","SELECT_MODES","noSelectOnClick","selectMode","selectable","selectedVariant","selectableMixin","selectedRows","selectedLastRow","isSelectable","hasSelectableRowClick","supportsSelectableRows","selectableHasSelection","some","selectableIsMultiSelect","selectableTableClasses","selectableTableAttrs","equal","setSelectionHandlers","_selectedRows","v","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","functional","render","slots","scopedSlots","children","$children","slotScope","$slots","$scopedSlots","$aside","right","BMediaAside","align","BMediaBody","_makeModelMixin","modelMixin","mixin","modelProps","MODEL_PROP_NAME","prop","MODEL_EVENT_NAME","DEFAULT_MIN","DEFAULT_MAX","DEFAULT_STEP","DEFAULT_REPEAT_DELAY","DEFAULT_REPEAT_INTERVAL","DEFAULT_REPEAT_THRESHOLD","DEFAULT_REPEAT_MULTIPLIER","KEY_CODES","ariaLabel","formatterFn","inline","labelDecrement","labelIncrement","max","min","placeholder","readonly","repeatDelay","repeatInterval","repeatStepMultiplier","repeatThreshold","step","vertical","wrap","BFormSpinbutton","inheritAttrs","localValue","hasFocus","spinId","safeId","computedInline","computedReadonly","disabled","computedRequired","required","computedStep","computedMin","computedMax","computedDelay","delay","computedInterval","interval","computedThreshold","computedStepMultiplier","computedPrecision","split","computedMultiplier","valueAsFixed","toFixed","computedLocale","locales","nf","Intl","NumberFormat","resolvedOptions","computedRTL","defaultFormatter","precision","style","useGrouping","minimumIntegerDigits","minimumFractionDigits","maximumFractionDigits","notation","format","computedFormatter","computedAttrs","bvAttrs","lang","tabindex","title","computedSpinAttrs","state","hasValue","dir","_disabled","clearRepeat","_readonly","$_autoDelayTimer","$_autoRepeatTimer","$_keyIsDown","deactivated","focus","$refs","spinner","blur","emitChange","stepValue","direction","multiplier","onFocusBlur","stepUp","stepDown","onKeydown","keyCode","altKey","propagation","resetTimers","handleStepRepeat","onKeyup","stepper","button","threshold","count","setInterval","onMouseup","_ref2","setMouseup","document","body","_unused","clearInterval","makeButton","label","IconCmp","keyRef","shortcut","btnDisabled","slotName","$icon","scale","scope","currentTarget","mousedown","touchstart","ref","$increment","$decrement","$hidden","form","$spin","sizeFormClass","stateClass","keydown","keyup","BFormRadio","inject","bvGroup","default","computedLocalChecked","_objectSpread2","MODEL_PROP_NAME_INDETERMINATE","MODEL_EVENT_NAME_INDETERMINATE","BFormCheckbox","isChecked","checked","isRadio","setIndeterminate","computedLocalCheckedWatcher","$input","input","indeterminate","handleChange","_ref$target","uncheckedValue","localChecked","isGroup"],"mappings":"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","file":"js/chunk-d00c16b8.c92e21fd.js","sourcesContent":["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 { NAME_FORM_RADIO_GROUP } from '../../constants/components';\nimport { makePropsConfigurable } from '../../utils/props';\nimport { formRadioCheckGroupMixin, props as formRadioCheckGroupProps } from '../../mixins/form-radio-check-group'; // --- Props ---\n\nexport var props = makePropsConfigurable(formRadioCheckGroupProps, NAME_FORM_RADIO_GROUP); // --- Main component ---\n// @vue/component\n\nexport var BFormRadioGroup = /*#__PURE__*/Vue.extend({\n name: NAME_FORM_RADIO_GROUP,\n mixins: [formRadioCheckGroupMixin],\n provide: function provide() {\n return {\n bvRadioGroup: this\n };\n },\n props: props,\n computed: {\n isRadioGroup: function isRadioGroup() {\n return true;\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});","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_FORM_SPINBUTTON } from '../../constants/components';\nimport { EVENT_NAME_CHANGE } from '../../constants/events';\nimport { PROP_TYPE_ARRAY_STRING, PROP_TYPE_BOOLEAN, PROP_TYPE_BOOLEAN_NUMBER, PROP_TYPE_FUNCTION, PROP_TYPE_NUMBER_STRING, PROP_TYPE_STRING } from '../../constants/props';\nimport { CODE_DOWN, CODE_END, CODE_HOME, CODE_PAGEUP, CODE_UP, CODE_PAGEDOWN } from '../../constants/key-codes';\nimport { SLOT_NAME_DECREMENT, SLOT_NAME_INCREMENT } from '../../constants/slots';\nimport { arrayIncludes, concat } from '../../utils/array';\nimport { attemptBlur, attemptFocus } from '../../utils/dom';\nimport { eventOnOff, stopEvent } from '../../utils/events';\nimport { identity } from '../../utils/identity';\nimport { isNull } from '../../utils/inspect';\nimport { isLocaleRTL } from '../../utils/locale';\nimport { mathFloor, mathMax, mathPow, mathRound } from '../../utils/math';\nimport { makeModelMixin } from '../../utils/model';\nimport { toFloat, toInteger } from '../../utils/number';\nimport { omit, sortKeys } from '../../utils/object';\nimport { hasPropFunction, makeProp, makePropsConfigurable } from '../../utils/props';\nimport { toString } from '../../utils/string';\nimport { attrsMixin } from '../../mixins/attrs';\nimport { formSizeMixin, props as formSizeProps } from '../../mixins/form-size';\nimport { formStateMixin, props as formStateProps } from '../../mixins/form-state';\nimport { idMixin, props as idProps } from '../../mixins/id';\nimport { normalizeSlotMixin } from '../../mixins/normalize-slot';\nimport { props as formControlProps } from '../../mixins/form-control';\nimport { BIconPlus, BIconDash } from '../../icons/icons'; // --- Constants ---\n\nvar _makeModelMixin = makeModelMixin('value', {\n // Should this really be String, to match native number inputs?\n type: PROP_TYPE_BOOLEAN_NUMBER\n}),\n modelMixin = _makeModelMixin.mixin,\n modelProps = _makeModelMixin.props,\n MODEL_PROP_NAME = _makeModelMixin.prop,\n MODEL_EVENT_NAME = _makeModelMixin.event; // Default for spin button range and step\n\n\nvar DEFAULT_MIN = 1;\nvar DEFAULT_MAX = 100;\nvar DEFAULT_STEP = 1; // Delay before auto-repeat in ms\n\nvar DEFAULT_REPEAT_DELAY = 500; // Repeat interval in ms\n\nvar DEFAULT_REPEAT_INTERVAL = 100; // Repeat rate increased after number of repeats\n\nvar DEFAULT_REPEAT_THRESHOLD = 10; // Repeat speed multiplier (step multiplier, must be an integer)\n\nvar DEFAULT_REPEAT_MULTIPLIER = 4;\nvar KEY_CODES = [CODE_UP, CODE_DOWN, CODE_HOME, CODE_END, CODE_PAGEUP, CODE_PAGEDOWN]; // --- Props ---\n\nexport var props = makePropsConfigurable(sortKeys(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({}, idProps), modelProps), omit(formControlProps, ['required', 'autofocus'])), formSizeProps), formStateProps), {}, {\n ariaControls: makeProp(PROP_TYPE_STRING),\n ariaLabel: makeProp(PROP_TYPE_STRING),\n formatterFn: makeProp(PROP_TYPE_FUNCTION),\n inline: makeProp(PROP_TYPE_BOOLEAN, false),\n labelDecrement: makeProp(PROP_TYPE_STRING, 'Decrement'),\n labelIncrement: makeProp(PROP_TYPE_STRING, 'Increment'),\n locale: makeProp(PROP_TYPE_ARRAY_STRING),\n max: makeProp(PROP_TYPE_NUMBER_STRING, DEFAULT_MAX),\n min: makeProp(PROP_TYPE_NUMBER_STRING, DEFAULT_MIN),\n placeholder: makeProp(PROP_TYPE_STRING),\n readonly: makeProp(PROP_TYPE_BOOLEAN, false),\n repeatDelay: makeProp(PROP_TYPE_NUMBER_STRING, DEFAULT_REPEAT_DELAY),\n repeatInterval: makeProp(PROP_TYPE_NUMBER_STRING, DEFAULT_REPEAT_INTERVAL),\n repeatStepMultiplier: makeProp(PROP_TYPE_NUMBER_STRING, DEFAULT_REPEAT_MULTIPLIER),\n repeatThreshold: makeProp(PROP_TYPE_NUMBER_STRING, DEFAULT_REPEAT_THRESHOLD),\n step: makeProp(PROP_TYPE_NUMBER_STRING, DEFAULT_STEP),\n vertical: makeProp(PROP_TYPE_BOOLEAN, false),\n wrap: makeProp(PROP_TYPE_BOOLEAN, false)\n})), NAME_FORM_SPINBUTTON); // --- Main Component ---\n// @vue/component\n\nexport var BFormSpinbutton = /*#__PURE__*/Vue.extend({\n name: NAME_FORM_SPINBUTTON,\n // Mixin order is important!\n mixins: [attrsMixin, idMixin, modelMixin, formSizeMixin, formStateMixin, normalizeSlotMixin],\n inheritAttrs: false,\n props: props,\n data: function data() {\n return {\n localValue: toFloat(this[MODEL_PROP_NAME], null),\n hasFocus: false\n };\n },\n computed: {\n spinId: function spinId() {\n return this.safeId();\n },\n computedInline: function computedInline() {\n return this.inline && !this.vertical;\n },\n computedReadonly: function computedReadonly() {\n return this.readonly && !this.disabled;\n },\n computedRequired: function computedRequired() {\n return this.required && !this.computedReadonly && !this.disabled;\n },\n computedStep: function computedStep() {\n return toFloat(this.step, DEFAULT_STEP);\n },\n computedMin: function computedMin() {\n return toFloat(this.min, DEFAULT_MIN);\n },\n computedMax: function computedMax() {\n // We round down to the nearest maximum step value\n var max = toFloat(this.max, DEFAULT_MAX);\n var step = this.computedStep;\n var min = this.computedMin;\n return mathFloor((max - min) / step) * step + min;\n },\n computedDelay: function computedDelay() {\n var delay = toInteger(this.repeatDelay, 0);\n return delay > 0 ? delay : DEFAULT_REPEAT_DELAY;\n },\n computedInterval: function computedInterval() {\n var interval = toInteger(this.repeatInterval, 0);\n return interval > 0 ? interval : DEFAULT_REPEAT_INTERVAL;\n },\n computedThreshold: function computedThreshold() {\n return mathMax(toInteger(this.repeatThreshold, DEFAULT_REPEAT_THRESHOLD), 1);\n },\n computedStepMultiplier: function computedStepMultiplier() {\n return mathMax(toInteger(this.repeatStepMultiplier, DEFAULT_REPEAT_MULTIPLIER), 1);\n },\n computedPrecision: function computedPrecision() {\n // Quick and dirty way to get the number of decimals\n var step = this.computedStep;\n return mathFloor(step) === step ? 0 : (step.toString().split('.')[1] || '').length;\n },\n computedMultiplier: function computedMultiplier() {\n return mathPow(10, this.computedPrecision || 0);\n },\n valueAsFixed: function valueAsFixed() {\n var value = this.localValue;\n return isNull(value) ? '' : value.toFixed(this.computedPrecision);\n },\n computedLocale: function computedLocale() {\n var locales = concat(this.locale).filter(identity);\n var nf = new Intl.NumberFormat(locales);\n return nf.resolvedOptions().locale;\n },\n computedRTL: function computedRTL() {\n return isLocaleRTL(this.computedLocale);\n },\n defaultFormatter: function defaultFormatter() {\n // Returns and `Intl.NumberFormat` formatter method reference\n var precision = this.computedPrecision;\n var nf = new Intl.NumberFormat(this.computedLocale, {\n style: 'decimal',\n useGrouping: false,\n minimumIntegerDigits: 1,\n minimumFractionDigits: precision,\n maximumFractionDigits: precision,\n notation: 'standard'\n }); // Return the format method reference\n\n return nf.format;\n },\n computedFormatter: function computedFormatter() {\n var formatterFn = this.formatterFn;\n return hasPropFunction(formatterFn) ? formatterFn : this.defaultFormatter;\n },\n computedAttrs: function computedAttrs() {\n return _objectSpread(_objectSpread({}, this.bvAttrs), {}, {\n role: 'group',\n lang: this.computedLocale,\n tabindex: this.disabled ? null : '-1',\n title: this.ariaLabel\n });\n },\n computedSpinAttrs: function computedSpinAttrs() {\n var spinId = this.spinId,\n value = this.localValue,\n required = this.computedRequired,\n disabled = this.disabled,\n state = this.state,\n computedFormatter = this.computedFormatter;\n var hasValue = !isNull(value);\n return _objectSpread(_objectSpread({\n dir: this.computedRTL ? 'rtl' : 'ltr'\n }, this.bvAttrs), {}, {\n id: spinId,\n role: 'spinbutton',\n tabindex: disabled ? null : '0',\n 'aria-live': 'off',\n 'aria-label': this.ariaLabel || null,\n 'aria-controls': this.ariaControls || null,\n // TODO: May want to check if the value is in range\n 'aria-invalid': state === false || !hasValue && required ? 'true' : null,\n 'aria-required': required ? 'true' : null,\n // These attrs are required for role spinbutton\n 'aria-valuemin': toString(this.computedMin),\n 'aria-valuemax': toString(this.computedMax),\n // These should be `null` if the value is out of range\n // They must also be non-existent attrs if the value is out of range or `null`\n 'aria-valuenow': hasValue ? value : null,\n 'aria-valuetext': hasValue ? computedFormatter(value) : null\n });\n }\n },\n watch: (_watch = {}, _defineProperty(_watch, MODEL_PROP_NAME, function (value) {\n this.localValue = toFloat(value, null);\n }), _defineProperty(_watch, \"localValue\", function localValue(value) {\n this.$emit(MODEL_EVENT_NAME, value);\n }), _defineProperty(_watch, \"disabled\", function disabled(_disabled) {\n if (_disabled) {\n this.clearRepeat();\n }\n }), _defineProperty(_watch, \"readonly\", function readonly(_readonly) {\n if (_readonly) {\n this.clearRepeat();\n }\n }), _watch),\n created: function created() {\n // Create non reactive properties\n this.$_autoDelayTimer = null;\n this.$_autoRepeatTimer = null;\n this.$_keyIsDown = false;\n },\n beforeDestroy: function beforeDestroy() {\n this.clearRepeat();\n },\n\n /* istanbul ignore next */\n deactivated: function deactivated() {\n this.clearRepeat();\n },\n methods: {\n // --- Public methods ---\n focus: function focus() {\n if (!this.disabled) {\n attemptFocus(this.$refs.spinner);\n }\n },\n blur: function blur() {\n if (!this.disabled) {\n attemptBlur(this.$refs.spinner);\n }\n },\n // --- Private methods ---\n emitChange: function emitChange() {\n this.$emit(EVENT_NAME_CHANGE, this.localValue);\n },\n stepValue: function stepValue(direction) {\n // Sets a new incremented or decremented value, supporting optional wrapping\n // Direction is either +1 or -1 (or a multiple thereof)\n var value = this.localValue;\n\n if (!this.disabled && !isNull(value)) {\n var step = this.computedStep * direction;\n var min = this.computedMin;\n var max = this.computedMax;\n var multiplier = this.computedMultiplier;\n var wrap = this.wrap; // We ensure that the value steps like a native input\n\n value = mathRound((value - min) / step) * step + min + step; // We ensure that precision is maintained (decimals)\n\n value = mathRound(value * multiplier) / multiplier; // Handle if wrapping is enabled\n\n this.localValue = value > max ? wrap ? min : max : value < min ? wrap ? max : min : value;\n }\n },\n onFocusBlur: function onFocusBlur(event) {\n if (!this.disabled) {\n this.hasFocus = event.type === 'focus';\n } else {\n this.hasFocus = false;\n }\n },\n stepUp: function stepUp() {\n var multiplier = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n var value = this.localValue;\n\n if (isNull(value)) {\n this.localValue = this.computedMin;\n } else {\n this.stepValue(+1 * multiplier);\n }\n },\n stepDown: function stepDown() {\n var multiplier = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n var value = this.localValue;\n\n if (isNull(value)) {\n this.localValue = this.wrap ? this.computedMax : this.computedMin;\n } else {\n this.stepValue(-1 * multiplier);\n }\n },\n onKeydown: function onKeydown(event) {\n var keyCode = event.keyCode,\n altKey = event.altKey,\n ctrlKey = event.ctrlKey,\n metaKey = event.metaKey;\n /* istanbul ignore if */\n\n if (this.disabled || this.readonly || altKey || ctrlKey || metaKey) {\n return;\n }\n\n if (arrayIncludes(KEY_CODES, keyCode)) {\n // https://w3c.github.io/aria-practices/#spinbutton\n stopEvent(event, {\n propagation: false\n });\n /* istanbul ignore if */\n\n if (this.$_keyIsDown) {\n // Keypress is already in progress\n return;\n }\n\n this.resetTimers();\n\n if (arrayIncludes([CODE_UP, CODE_DOWN], keyCode)) {\n // The following use the custom auto-repeat handling\n this.$_keyIsDown = true;\n\n if (keyCode === CODE_UP) {\n this.handleStepRepeat(event, this.stepUp);\n } else if (keyCode === CODE_DOWN) {\n this.handleStepRepeat(event, this.stepDown);\n }\n } else {\n // These use native OS key repeating\n if (keyCode === CODE_PAGEUP) {\n this.stepUp(this.computedStepMultiplier);\n } else if (keyCode === CODE_PAGEDOWN) {\n this.stepDown(this.computedStepMultiplier);\n } else if (keyCode === CODE_HOME) {\n this.localValue = this.computedMin;\n } else if (keyCode === CODE_END) {\n this.localValue = this.computedMax;\n }\n }\n }\n },\n onKeyup: function onKeyup(event) {\n // Emit a change event when the keyup happens\n var keyCode = event.keyCode,\n altKey = event.altKey,\n ctrlKey = event.ctrlKey,\n metaKey = event.metaKey;\n /* istanbul ignore if */\n\n if (this.disabled || this.readonly || altKey || ctrlKey || metaKey) {\n return;\n }\n\n if (arrayIncludes(KEY_CODES, keyCode)) {\n stopEvent(event, {\n propagation: false\n });\n this.resetTimers();\n this.$_keyIsDown = false;\n this.emitChange();\n }\n },\n handleStepRepeat: function handleStepRepeat(event, stepper) {\n var _this = this;\n\n var _ref = event || {},\n type = _ref.type,\n button = _ref.button;\n\n if (!this.disabled && !this.readonly) {\n /* istanbul ignore if */\n if (type === 'mousedown' && button) {\n // We only respond to left (main === 0) button clicks\n return;\n }\n\n this.resetTimers(); // Step the counter initially\n\n stepper(1);\n var threshold = this.computedThreshold;\n var multiplier = this.computedStepMultiplier;\n var delay = this.computedDelay;\n var interval = this.computedInterval; // Initiate the delay/repeat interval\n\n this.$_autoDelayTimer = setTimeout(function () {\n var count = 0;\n _this.$_autoRepeatTimer = setInterval(function () {\n // After N initial repeats, we increase the incrementing step amount\n // We do this to minimize screen reader announcements of the value\n // (values are announced every change, which can be chatty for SR users)\n // And to make it easer to select a value when the range is large\n stepper(count < threshold ? 1 : multiplier);\n count++;\n }, interval);\n }, delay);\n }\n },\n onMouseup: function onMouseup(event) {\n // `` listener, only enabled when mousedown starts\n var _ref2 = event || {},\n type = _ref2.type,\n button = _ref2.button;\n /* istanbul ignore if */\n\n\n if (type === 'mouseup' && button) {\n // Ignore non left button (main === 0) mouse button click\n return;\n }\n\n stopEvent(event, {\n propagation: false\n });\n this.resetTimers();\n this.setMouseup(false); // Trigger the change event\n\n this.emitChange();\n },\n setMouseup: function setMouseup(on) {\n // Enable or disabled the body mouseup/touchend handlers\n // Use try/catch to handle case when called server side\n try {\n eventOnOff(on, document.body, 'mouseup', this.onMouseup, false);\n eventOnOff(on, document.body, 'touchend', this.onMouseup, false);\n } catch (_unused) {}\n },\n resetTimers: function resetTimers() {\n clearTimeout(this.$_autoDelayTimer);\n clearInterval(this.$_autoRepeatTimer);\n this.$_autoDelayTimer = null;\n this.$_autoRepeatTimer = null;\n },\n clearRepeat: function clearRepeat() {\n this.resetTimers();\n this.setMouseup(false);\n this.$_keyIsDown = false;\n }\n },\n render: function render(h) {\n var _this2 = this;\n\n var spinId = this.spinId,\n value = this.localValue,\n inline = this.computedInline,\n readonly = this.computedReadonly,\n vertical = this.vertical,\n disabled = this.disabled,\n computedFormatter = this.computedFormatter;\n var hasValue = !isNull(value);\n\n var makeButton = function makeButton(stepper, label, IconCmp, keyRef, shortcut, btnDisabled, slotName) {\n var $icon = h(IconCmp, {\n props: {\n scale: _this2.hasFocus ? 1.5 : 1.25\n },\n attrs: {\n 'aria-hidden': 'true'\n }\n });\n var scope = {\n hasFocus: _this2.hasFocus\n };\n\n var handler = function handler(event) {\n if (!disabled && !readonly) {\n stopEvent(event, {\n propagation: false\n });\n\n _this2.setMouseup(true); // Since we `preventDefault()`, we must manually focus the button\n\n\n attemptFocus(event.currentTarget);\n\n _this2.handleStepRepeat(event, stepper);\n }\n };\n\n return h('button', {\n staticClass: 'btn btn-sm border-0 rounded-0',\n class: {\n 'py-0': !vertical\n },\n attrs: {\n tabindex: '-1',\n type: 'button',\n disabled: disabled || readonly || btnDisabled,\n 'aria-disabled': disabled || readonly || btnDisabled ? 'true' : null,\n 'aria-controls': spinId,\n 'aria-label': label || null,\n 'aria-keyshortcuts': shortcut || null\n },\n on: {\n mousedown: handler,\n touchstart: handler\n },\n key: keyRef || null,\n ref: keyRef\n }, [_this2.normalizeSlot(slotName, scope) || $icon]);\n }; // TODO: Add button disabled state when `wrap` is `false` and at value max/min\n\n\n var $increment = makeButton(this.stepUp, this.labelIncrement, BIconPlus, 'inc', 'ArrowUp', false, SLOT_NAME_INCREMENT);\n var $decrement = makeButton(this.stepDown, this.labelDecrement, BIconDash, 'dec', 'ArrowDown', false, SLOT_NAME_DECREMENT);\n var $hidden = h();\n\n if (this.name && !disabled) {\n $hidden = h('input', {\n attrs: {\n type: 'hidden',\n name: this.name,\n form: this.form || null,\n // TODO: Should this be set to '' if value is out of range?\n value: this.valueAsFixed\n },\n key: 'hidden'\n });\n }\n\n var $spin = h( // We use 'output' element to make this accept a `