\n\n return h('div', {\n style: this.modalOuterStyle,\n attrs: this.computedAttrs,\n key: \"modal-outer-\".concat(this._uid)\n }, [$modal, $backdrop]);\n }\n },\n render: function render(h) {\n if (this.static) {\n return this.lazy && this.isHidden ? h() : this.makeModal(h);\n } else {\n return this.isHidden ? h() : h(BTransporterSingle, [this.makeModal(h)]);\n }\n }\n});","
\r\n \r\n
\r\n
\r\n {{ yesActionText }} \r\n {{ noActionText }} \r\n \r\n
\r\n \r\n\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ConfirmationModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ConfirmationModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ConfirmationModal.vue?vue&type=template&id=22619240&scoped=true&\"\nimport script from \"./ConfirmationModal.vue?vue&type=script&lang=js&\"\nexport * from \"./ConfirmationModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"22619240\",\n null\n \n)\n\nexport default component.exports","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 '../../utils/vue';\nimport { mergeData } from 'vue-functional-data-merge';\nimport identity from '../../utils/identity';\nimport { isUndefinedOrNull } from '../../utils/inspect';\nimport { mathMax } from '../../utils/math';\nimport { toFloat } from '../../utils/number'; // Common icon props (should be cloned/spread before using)\n\nexport var commonIconProps = {\n variant: {\n type: String,\n default: null\n },\n fontScale: {\n type: [Number, String],\n default: 1\n },\n scale: {\n type: [Number, String],\n default: 1\n },\n rotate: {\n type: [Number, String],\n default: 0\n },\n flipH: {\n type: Boolean,\n default: false\n },\n flipV: {\n type: Boolean,\n default: false\n },\n shiftH: {\n type: [Number, String],\n default: 0\n },\n shiftV: {\n type: [Number, String],\n default: 0\n },\n animation: {\n type: String,\n default: null\n }\n}; // Base attributes needed on all icons\n\nvar baseAttrs = {\n viewBox: '0 0 16 16',\n width: '1em',\n height: '1em',\n focusable: 'false',\n role: 'img',\n alt: 'icon'\n}; // Attributes that are nulled out when stacked\n\nvar stackedAttrs = {\n width: null,\n height: null,\n focusable: null,\n role: null,\n alt: null\n}; // Shared private base component to reduce bundle/runtime size\n// @vue/component\n\nexport var BVIconBase = /*#__PURE__*/Vue.extend({\n name: 'BVIconBase',\n functional: true,\n props: _objectSpread({\n content: {\n type: String\n },\n stacked: {\n type: Boolean,\n default: false\n }\n }, commonIconProps),\n render: function render(h, _ref) {\n var _class;\n\n var data = _ref.data,\n props = _ref.props,\n children = _ref.children;\n var fontScale = mathMax(toFloat(props.fontScale, 1), 0) || 1;\n var scale = mathMax(toFloat(props.scale, 1), 0) || 1;\n var rotate = toFloat(props.rotate, 0);\n var shiftH = toFloat(props.shiftH, 0);\n var shiftV = toFloat(props.shiftV, 0);\n var flipH = props.flipH;\n var flipV = props.flipV;\n var animation = props.animation; // Compute the transforms\n // Note that order is important as SVG transforms are applied in order from\n // left to right and we want flipping/scale to occur before rotation\n // Note shifting is applied separately\n // Assumes that the viewbox is `0 0 16 16` (`8 8` is the center)\n\n var hasScale = flipH || flipV || scale !== 1;\n var hasTransforms = hasScale || rotate;\n var hasShift = shiftH || shiftV;\n var transforms = [hasTransforms ? 'translate(8 8)' : null, hasScale ? \"scale(\".concat((flipH ? -1 : 1) * scale, \" \").concat((flipV ? -1 : 1) * scale, \")\") : null, rotate ? \"rotate(\".concat(rotate, \")\") : null, hasTransforms ? 'translate(-8 -8)' : null].filter(identity); // Handling stacked icons\n\n var isStacked = props.stacked;\n var hasContent = !isUndefinedOrNull(props.content); // We wrap the content in a `
` for handling the transforms (except shift)\n\n var $inner = h('g', {\n attrs: {\n transform: transforms.join(' ') || null\n },\n domProps: hasContent ? {\n innerHTML: props.content || ''\n } : {}\n }, children); // If needed, we wrap in an additional `` in order to handle the shifting\n\n if (hasShift) {\n $inner = h('g', {\n attrs: {\n transform: \"translate(\".concat(16 * shiftH / 16, \" \").concat(-16 * shiftV / 16, \")\")\n }\n }, [$inner]);\n }\n\n if (isStacked) {\n // Wrap in an additional `` for proper\n // animation handling if stacked\n $inner = h('g', {}, [$inner]);\n }\n\n return h('svg', mergeData({\n staticClass: 'b-icon bi',\n class: (_class = {}, _defineProperty(_class, \"text-\".concat(props.variant), !!props.variant), _defineProperty(_class, \"b-icon-animation-\".concat(animation), !!animation), _class),\n attrs: baseAttrs,\n style: isStacked ? {} : {\n fontSize: fontScale === 1 ? null : \"\".concat(fontScale * 100, \"%\")\n }\n }, // Merge in user supplied data\n data, // If icon is stacked, null out some attrs\n isStacked ? {\n attrs: stackedAttrs\n } : {}, // These cannot be overridden by users\n {\n attrs: {\n xmlns: isStacked ? null : 'http://www.w3.org/2000/svg',\n fill: 'currentColor'\n }\n }), [$inner]);\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 '../../utils/vue';\nimport { mergeData } from 'vue-functional-data-merge';\nimport { kebabCase, pascalCase, trim } from '../../utils/string';\nimport { commonIconProps, BVIconBase } from './icon-base';\n/**\n * Icon component generator function\n *\n * @param {string} icon name (minus the leading `BIcon`)\n * @param {string} raw `innerHTML` for SVG\n * @return {VueComponent}\n */\n\nexport var makeIcon = function makeIcon(name, content) {\n // For performance reason we pre-compute some values, so that\n // they are not computed on each render of the icon component\n var iconName = \"BIcon\".concat(pascalCase(name));\n var iconNameClass = \"bi-\".concat(kebabCase(name));\n var svgContent = trim(content || ''); // Return the icon component definition\n\n return /*#__PURE__*/Vue.extend({\n name: iconName,\n functional: true,\n props: _objectSpread(_objectSpread({}, commonIconProps), {}, {\n stacked: {\n type: Boolean,\n default: false\n }\n }),\n render: function render(h, _ref) {\n var data = _ref.data,\n props = _ref.props;\n return h(BVIconBase, mergeData(data, {\n staticClass: iconNameClass,\n props: _objectSpread(_objectSpread({}, props), {}, {\n content: svgContent\n })\n }));\n }\n });\n};","// --- BEGIN AUTO-GENERATED FILE ---\n//\n// @IconsVersion: 1.0.0-alpha4\n// @Generated: 2020-05-22T20:50:38.778Z\n//\n// This file is generated on each build. Do not edit this file!\n\n/*!\n * BootstrapVue Icons, generated from Bootstrap Icons 1.0.0-alpha4\n *\n * @link https://icons.getbootstrap.com/\n * @license MIT\n * https://github.com/twbs/icons/blob/master/LICENSE.md\n */\nimport { makeIcon } from './helpers/make-icon'; // --- BootstrapVue custom icons ---\n\nexport var BIconBlank = /*#__PURE__*/makeIcon('Blank', ''); // --- Bootstrap Icons ---\n// eslint-disable-next-line\n\nexport var BIconAlarm = /*#__PURE__*/makeIcon('Alarm', ' '); // eslint-disable-next-line\n\nexport var BIconAlarmFill = /*#__PURE__*/makeIcon('AlarmFill', ' '); // eslint-disable-next-line\n\nexport var BIconAlt = /*#__PURE__*/makeIcon('Alt', ' '); // eslint-disable-next-line\n\nexport var BIconApp = /*#__PURE__*/makeIcon('App', ' '); // eslint-disable-next-line\n\nexport var BIconAppIndicator = /*#__PURE__*/makeIcon('AppIndicator', ' '); // eslint-disable-next-line\n\nexport var BIconArchive = /*#__PURE__*/makeIcon('Archive', ' '); // eslint-disable-next-line\n\nexport var BIconArchiveFill = /*#__PURE__*/makeIcon('ArchiveFill', ' '); // eslint-disable-next-line\n\nexport var BIconArrow90degDown = /*#__PURE__*/makeIcon('Arrow90degDown', ' '); // eslint-disable-next-line\n\nexport var BIconArrow90degLeft = /*#__PURE__*/makeIcon('Arrow90degLeft', ' '); // eslint-disable-next-line\n\nexport var BIconArrow90degRight = /*#__PURE__*/makeIcon('Arrow90degRight', ' '); // eslint-disable-next-line\n\nexport var BIconArrow90degUp = /*#__PURE__*/makeIcon('Arrow90degUp', ' '); // eslint-disable-next-line\n\nexport var BIconArrowBarDown = /*#__PURE__*/makeIcon('ArrowBarDown', ' '); // eslint-disable-next-line\n\nexport var BIconArrowBarLeft = /*#__PURE__*/makeIcon('ArrowBarLeft', ' '); // eslint-disable-next-line\n\nexport var BIconArrowBarRight = /*#__PURE__*/makeIcon('ArrowBarRight', ' '); // eslint-disable-next-line\n\nexport var BIconArrowBarUp = /*#__PURE__*/makeIcon('ArrowBarUp', ' '); // eslint-disable-next-line\n\nexport var BIconArrowClockwise = /*#__PURE__*/makeIcon('ArrowClockwise', ' '); // eslint-disable-next-line\n\nexport var BIconArrowCounterclockwise = /*#__PURE__*/makeIcon('ArrowCounterclockwise', ' '); // eslint-disable-next-line\n\nexport var BIconArrowDown = /*#__PURE__*/makeIcon('ArrowDown', ' '); // eslint-disable-next-line\n\nexport var BIconArrowDownCircle = /*#__PURE__*/makeIcon('ArrowDownCircle', ' '); // eslint-disable-next-line\n\nexport var BIconArrowDownCircleFill = /*#__PURE__*/makeIcon('ArrowDownCircleFill', ' '); // eslint-disable-next-line\n\nexport var BIconArrowDownLeft = /*#__PURE__*/makeIcon('ArrowDownLeft', ' '); // eslint-disable-next-line\n\nexport var BIconArrowDownLeftCircle = /*#__PURE__*/makeIcon('ArrowDownLeftCircle', ' '); // eslint-disable-next-line\n\nexport var BIconArrowDownLeftCircleFill = /*#__PURE__*/makeIcon('ArrowDownLeftCircleFill', ' '); // eslint-disable-next-line\n\nexport var BIconArrowDownLeftSquare = /*#__PURE__*/makeIcon('ArrowDownLeftSquare', ' '); // eslint-disable-next-line\n\nexport var BIconArrowDownLeftSquareFill = /*#__PURE__*/makeIcon('ArrowDownLeftSquareFill', ' '); // eslint-disable-next-line\n\nexport var BIconArrowDownRight = /*#__PURE__*/makeIcon('ArrowDownRight', ' '); // eslint-disable-next-line\n\nexport var BIconArrowDownRightCircle = /*#__PURE__*/makeIcon('ArrowDownRightCircle', ' '); // eslint-disable-next-line\n\nexport var BIconArrowDownRightCircleFill = /*#__PURE__*/makeIcon('ArrowDownRightCircleFill', ' '); // eslint-disable-next-line\n\nexport var BIconArrowDownRightSquare = /*#__PURE__*/makeIcon('ArrowDownRightSquare', ' '); // eslint-disable-next-line\n\nexport var BIconArrowDownRightSquareFill = /*#__PURE__*/makeIcon('ArrowDownRightSquareFill', ' '); // eslint-disable-next-line\n\nexport var BIconArrowDownShort = /*#__PURE__*/makeIcon('ArrowDownShort', ' '); // eslint-disable-next-line\n\nexport var BIconArrowDownSquare = /*#__PURE__*/makeIcon('ArrowDownSquare', ' '); // eslint-disable-next-line\n\nexport var BIconArrowDownSquareFill = /*#__PURE__*/makeIcon('ArrowDownSquareFill', ' '); // eslint-disable-next-line\n\nexport var BIconArrowDownUp = /*#__PURE__*/makeIcon('ArrowDownUp', ' '); // eslint-disable-next-line\n\nexport var BIconArrowLeft = /*#__PURE__*/makeIcon('ArrowLeft', ' '); // eslint-disable-next-line\n\nexport var BIconArrowLeftCircle = /*#__PURE__*/makeIcon('ArrowLeftCircle', ' '); // eslint-disable-next-line\n\nexport var BIconArrowLeftCircleFill = /*#__PURE__*/makeIcon('ArrowLeftCircleFill', ' '); // eslint-disable-next-line\n\nexport var BIconArrowLeftRight = /*#__PURE__*/makeIcon('ArrowLeftRight', ' '); // eslint-disable-next-line\n\nexport var BIconArrowLeftShort = /*#__PURE__*/makeIcon('ArrowLeftShort', ' '); // eslint-disable-next-line\n\nexport var BIconArrowLeftSquare = /*#__PURE__*/makeIcon('ArrowLeftSquare', ' '); // eslint-disable-next-line\n\nexport var BIconArrowLeftSquareFill = /*#__PURE__*/makeIcon('ArrowLeftSquareFill', ' '); // eslint-disable-next-line\n\nexport var BIconArrowRepeat = /*#__PURE__*/makeIcon('ArrowRepeat', ' '); // eslint-disable-next-line\n\nexport var BIconArrowReturnLeft = /*#__PURE__*/makeIcon('ArrowReturnLeft', ' '); // eslint-disable-next-line\n\nexport var BIconArrowReturnRight = /*#__PURE__*/makeIcon('ArrowReturnRight', ' '); // eslint-disable-next-line\n\nexport var BIconArrowRight = /*#__PURE__*/makeIcon('ArrowRight', ' '); // eslint-disable-next-line\n\nexport var BIconArrowRightCircle = /*#__PURE__*/makeIcon('ArrowRightCircle', ' '); // eslint-disable-next-line\n\nexport var BIconArrowRightCircleFill = /*#__PURE__*/makeIcon('ArrowRightCircleFill', ' '); // eslint-disable-next-line\n\nexport var BIconArrowRightShort = /*#__PURE__*/makeIcon('ArrowRightShort', ' '); // eslint-disable-next-line\n\nexport var BIconArrowRightSquare = /*#__PURE__*/makeIcon('ArrowRightSquare', ' '); // eslint-disable-next-line\n\nexport var BIconArrowRightSquareFill = /*#__PURE__*/makeIcon('ArrowRightSquareFill', ' '); // eslint-disable-next-line\n\nexport var BIconArrowUp = /*#__PURE__*/makeIcon('ArrowUp', ' '); // eslint-disable-next-line\n\nexport var BIconArrowUpCircle = /*#__PURE__*/makeIcon('ArrowUpCircle', ' '); // eslint-disable-next-line\n\nexport var BIconArrowUpCircleFill = /*#__PURE__*/makeIcon('ArrowUpCircleFill', ' '); // eslint-disable-next-line\n\nexport var BIconArrowUpLeft = /*#__PURE__*/makeIcon('ArrowUpLeft', ' '); // eslint-disable-next-line\n\nexport var BIconArrowUpLeftCircle = /*#__PURE__*/makeIcon('ArrowUpLeftCircle', ' '); // eslint-disable-next-line\n\nexport var BIconArrowUpLeftCircleFill = /*#__PURE__*/makeIcon('ArrowUpLeftCircleFill', ' '); // eslint-disable-next-line\n\nexport var BIconArrowUpLeftSquare = /*#__PURE__*/makeIcon('ArrowUpLeftSquare', ' '); // eslint-disable-next-line\n\nexport var BIconArrowUpLeftSquareFill = /*#__PURE__*/makeIcon('ArrowUpLeftSquareFill', ' '); // eslint-disable-next-line\n\nexport var BIconArrowUpRight = /*#__PURE__*/makeIcon('ArrowUpRight', ' '); // eslint-disable-next-line\n\nexport var BIconArrowUpRightCircle = /*#__PURE__*/makeIcon('ArrowUpRightCircle', ' '); // eslint-disable-next-line\n\nexport var BIconArrowUpRightCircleFill = /*#__PURE__*/makeIcon('ArrowUpRightCircleFill', ' '); // eslint-disable-next-line\n\nexport var BIconArrowUpRightSquare = /*#__PURE__*/makeIcon('ArrowUpRightSquare', ' '); // eslint-disable-next-line\n\nexport var BIconArrowUpRightSquareFill = /*#__PURE__*/makeIcon('ArrowUpRightSquareFill', ' '); // eslint-disable-next-line\n\nexport var BIconArrowUpShort = /*#__PURE__*/makeIcon('ArrowUpShort', ' '); // eslint-disable-next-line\n\nexport var BIconArrowUpSquare = /*#__PURE__*/makeIcon('ArrowUpSquare', ' '); // eslint-disable-next-line\n\nexport var BIconArrowUpSquareFill = /*#__PURE__*/makeIcon('ArrowUpSquareFill', ' '); // eslint-disable-next-line\n\nexport var BIconArrowsAngleContract = /*#__PURE__*/makeIcon('ArrowsAngleContract', ' '); // eslint-disable-next-line\n\nexport var BIconArrowsAngleExpand = /*#__PURE__*/makeIcon('ArrowsAngleExpand', ' '); // eslint-disable-next-line\n\nexport var BIconArrowsCollapse = /*#__PURE__*/makeIcon('ArrowsCollapse', ' '); // eslint-disable-next-line\n\nexport var BIconArrowsExpand = /*#__PURE__*/makeIcon('ArrowsExpand', ' '); // eslint-disable-next-line\n\nexport var BIconArrowsFullscreen = /*#__PURE__*/makeIcon('ArrowsFullscreen', ' '); // eslint-disable-next-line\n\nexport var BIconArrowsMove = /*#__PURE__*/makeIcon('ArrowsMove', ' '); // eslint-disable-next-line\n\nexport var BIconAspectRatio = /*#__PURE__*/makeIcon('AspectRatio', ' '); // eslint-disable-next-line\n\nexport var BIconAspectRatioFill = /*#__PURE__*/makeIcon('AspectRatioFill', ' '); // eslint-disable-next-line\n\nexport var BIconAsterisk = /*#__PURE__*/makeIcon('Asterisk', ' '); // eslint-disable-next-line\n\nexport var BIconAt = /*#__PURE__*/makeIcon('At', ' '); // eslint-disable-next-line\n\nexport var BIconAward = /*#__PURE__*/makeIcon('Award', ' '); // eslint-disable-next-line\n\nexport var BIconAwardFill = /*#__PURE__*/makeIcon('AwardFill', ' '); // eslint-disable-next-line\n\nexport var BIconBackspace = /*#__PURE__*/makeIcon('Backspace', ' '); // eslint-disable-next-line\n\nexport var BIconBackspaceFill = /*#__PURE__*/makeIcon('BackspaceFill', ' '); // eslint-disable-next-line\n\nexport var BIconBackspaceReverse = /*#__PURE__*/makeIcon('BackspaceReverse', ' '); // eslint-disable-next-line\n\nexport var BIconBackspaceReverseFill = /*#__PURE__*/makeIcon('BackspaceReverseFill', ' '); // eslint-disable-next-line\n\nexport var BIconBag = /*#__PURE__*/makeIcon('Bag', ' '); // eslint-disable-next-line\n\nexport var BIconBagCheck = /*#__PURE__*/makeIcon('BagCheck', ' '); // eslint-disable-next-line\n\nexport var BIconBagDash = /*#__PURE__*/makeIcon('BagDash', ' '); // eslint-disable-next-line\n\nexport var BIconBagFill = /*#__PURE__*/makeIcon('BagFill', ' '); // eslint-disable-next-line\n\nexport var BIconBagPlus = /*#__PURE__*/makeIcon('BagPlus', ' '); // eslint-disable-next-line\n\nexport var BIconBarChart = /*#__PURE__*/makeIcon('BarChart', ' '); // eslint-disable-next-line\n\nexport var BIconBarChartFill = /*#__PURE__*/makeIcon('BarChartFill', ''); // eslint-disable-next-line\n\nexport var BIconBasket = /*#__PURE__*/makeIcon('Basket', ' '); // eslint-disable-next-line\n\nexport var BIconBasket2 = /*#__PURE__*/makeIcon('Basket2', ' '); // eslint-disable-next-line\n\nexport var BIconBasket2Fill = /*#__PURE__*/makeIcon('Basket2Fill', ' '); // eslint-disable-next-line\n\nexport var BIconBasket3 = /*#__PURE__*/makeIcon('Basket3', ' '); // eslint-disable-next-line\n\nexport var BIconBasket3Fill = /*#__PURE__*/makeIcon('Basket3Fill', ''); // eslint-disable-next-line\n\nexport var BIconBasketFill = /*#__PURE__*/makeIcon('BasketFill', ' '); // eslint-disable-next-line\n\nexport var BIconBattery = /*#__PURE__*/makeIcon('Battery', ' '); // eslint-disable-next-line\n\nexport var BIconBatteryCharging = /*#__PURE__*/makeIcon('BatteryCharging', ' '); // eslint-disable-next-line\n\nexport var BIconBatteryFull = /*#__PURE__*/makeIcon('BatteryFull', ' '); // eslint-disable-next-line\n\nexport var BIconBatteryHalf = /*#__PURE__*/makeIcon('BatteryHalf', ' '); // eslint-disable-next-line\n\nexport var BIconBell = /*#__PURE__*/makeIcon('Bell', ' '); // eslint-disable-next-line\n\nexport var BIconBellFill = /*#__PURE__*/makeIcon('BellFill', ' '); // eslint-disable-next-line\n\nexport var BIconBlockquoteLeft = /*#__PURE__*/makeIcon('BlockquoteLeft', ' '); // eslint-disable-next-line\n\nexport var BIconBlockquoteRight = /*#__PURE__*/makeIcon('BlockquoteRight', ' '); // eslint-disable-next-line\n\nexport var BIconBook = /*#__PURE__*/makeIcon('Book', ' '); // eslint-disable-next-line\n\nexport var BIconBookHalf = /*#__PURE__*/makeIcon('BookHalf', ' '); // eslint-disable-next-line\n\nexport var BIconBookmark = /*#__PURE__*/makeIcon('Bookmark', ' '); // eslint-disable-next-line\n\nexport var BIconBookmarkCheck = /*#__PURE__*/makeIcon('BookmarkCheck', ' '); // eslint-disable-next-line\n\nexport var BIconBookmarkDash = /*#__PURE__*/makeIcon('BookmarkDash', ' '); // eslint-disable-next-line\n\nexport var BIconBookmarkFill = /*#__PURE__*/makeIcon('BookmarkFill', ' '); // eslint-disable-next-line\n\nexport var BIconBookmarkPlus = /*#__PURE__*/makeIcon('BookmarkPlus', ' '); // eslint-disable-next-line\n\nexport var BIconBookmarks = /*#__PURE__*/makeIcon('Bookmarks', ' '); // eslint-disable-next-line\n\nexport var BIconBookmarksFill = /*#__PURE__*/makeIcon('BookmarksFill', ' '); // eslint-disable-next-line\n\nexport var BIconBootstrap = /*#__PURE__*/makeIcon('Bootstrap', ' '); // eslint-disable-next-line\n\nexport var BIconBootstrapFill = /*#__PURE__*/makeIcon('BootstrapFill', ' '); // eslint-disable-next-line\n\nexport var BIconBootstrapReboot = /*#__PURE__*/makeIcon('BootstrapReboot', ' '); // eslint-disable-next-line\n\nexport var BIconBoundingBox = /*#__PURE__*/makeIcon('BoundingBox', ' '); // eslint-disable-next-line\n\nexport var BIconBoundingBoxCircles = /*#__PURE__*/makeIcon('BoundingBoxCircles', ' '); // eslint-disable-next-line\n\nexport var BIconBox = /*#__PURE__*/makeIcon('Box', ' '); // eslint-disable-next-line\n\nexport var BIconBoxArrowDown = /*#__PURE__*/makeIcon('BoxArrowDown', ' '); // eslint-disable-next-line\n\nexport var BIconBoxArrowDownLeft = /*#__PURE__*/makeIcon('BoxArrowDownLeft', ' '); // eslint-disable-next-line\n\nexport var BIconBoxArrowDownRight = /*#__PURE__*/makeIcon('BoxArrowDownRight', ' '); // eslint-disable-next-line\n\nexport var BIconBoxArrowInDown = /*#__PURE__*/makeIcon('BoxArrowInDown', ' '); // eslint-disable-next-line\n\nexport var BIconBoxArrowInDownLeft = /*#__PURE__*/makeIcon('BoxArrowInDownLeft', ' '); // eslint-disable-next-line\n\nexport var BIconBoxArrowInDownRight = /*#__PURE__*/makeIcon('BoxArrowInDownRight', ' '); // eslint-disable-next-line\n\nexport var BIconBoxArrowInLeft = /*#__PURE__*/makeIcon('BoxArrowInLeft', ' '); // eslint-disable-next-line\n\nexport var BIconBoxArrowInRight = /*#__PURE__*/makeIcon('BoxArrowInRight', ' '); // eslint-disable-next-line\n\nexport var BIconBoxArrowInUp = /*#__PURE__*/makeIcon('BoxArrowInUp', ' '); // eslint-disable-next-line\n\nexport var BIconBoxArrowInUpLeft = /*#__PURE__*/makeIcon('BoxArrowInUpLeft', ' '); // eslint-disable-next-line\n\nexport var BIconBoxArrowInUpRight = /*#__PURE__*/makeIcon('BoxArrowInUpRight', ' '); // eslint-disable-next-line\n\nexport var BIconBoxArrowLeft = /*#__PURE__*/makeIcon('BoxArrowLeft', ' '); // eslint-disable-next-line\n\nexport var BIconBoxArrowRight = /*#__PURE__*/makeIcon('BoxArrowRight', ' '); // eslint-disable-next-line\n\nexport var BIconBoxArrowUp = /*#__PURE__*/makeIcon('BoxArrowUp', ' '); // eslint-disable-next-line\n\nexport var BIconBoxArrowUpLeft = /*#__PURE__*/makeIcon('BoxArrowUpLeft', ' '); // eslint-disable-next-line\n\nexport var BIconBoxArrowUpRight = /*#__PURE__*/makeIcon('BoxArrowUpRight', ' '); // eslint-disable-next-line\n\nexport var BIconBoxSeam = /*#__PURE__*/makeIcon('BoxSeam', ' '); // eslint-disable-next-line\n\nexport var BIconBraces = /*#__PURE__*/makeIcon('Braces', ' '); // eslint-disable-next-line\n\nexport var BIconBriefcase = /*#__PURE__*/makeIcon('Briefcase', ' '); // eslint-disable-next-line\n\nexport var BIconBriefcaseFill = /*#__PURE__*/makeIcon('BriefcaseFill', ' '); // eslint-disable-next-line\n\nexport var BIconBrightnessAltHigh = /*#__PURE__*/makeIcon('BrightnessAltHigh', ' '); // eslint-disable-next-line\n\nexport var BIconBrightnessAltHighFill = /*#__PURE__*/makeIcon('BrightnessAltHighFill', ' '); // eslint-disable-next-line\n\nexport var BIconBrightnessAltLow = /*#__PURE__*/makeIcon('BrightnessAltLow', ' '); // eslint-disable-next-line\n\nexport var BIconBrightnessAltLowFill = /*#__PURE__*/makeIcon('BrightnessAltLowFill', ' '); // eslint-disable-next-line\n\nexport var BIconBrightnessHigh = /*#__PURE__*/makeIcon('BrightnessHigh', ' '); // eslint-disable-next-line\n\nexport var BIconBrightnessHighFill = /*#__PURE__*/makeIcon('BrightnessHighFill', ' '); // eslint-disable-next-line\n\nexport var BIconBrightnessLow = /*#__PURE__*/makeIcon('BrightnessLow', ' '); // eslint-disable-next-line\n\nexport var BIconBrightnessLowFill = /*#__PURE__*/makeIcon('BrightnessLowFill', ' '); // eslint-disable-next-line\n\nexport var BIconBrush = /*#__PURE__*/makeIcon('Brush', ' '); // eslint-disable-next-line\n\nexport var BIconBucket = /*#__PURE__*/makeIcon('Bucket', ' '); // eslint-disable-next-line\n\nexport var BIconBucketFill = /*#__PURE__*/makeIcon('BucketFill', ' '); // eslint-disable-next-line\n\nexport var BIconBuilding = /*#__PURE__*/makeIcon('Building', ' '); // eslint-disable-next-line\n\nexport var BIconBullseye = /*#__PURE__*/makeIcon('Bullseye', ' '); // eslint-disable-next-line\n\nexport var BIconCalendar = /*#__PURE__*/makeIcon('Calendar', ' '); // eslint-disable-next-line\n\nexport var BIconCalendar2 = /*#__PURE__*/makeIcon('Calendar2', ' '); // eslint-disable-next-line\n\nexport var BIconCalendar2Check = /*#__PURE__*/makeIcon('Calendar2Check', ' '); // eslint-disable-next-line\n\nexport var BIconCalendar2CheckFill = /*#__PURE__*/makeIcon('Calendar2CheckFill', ' '); // eslint-disable-next-line\n\nexport var BIconCalendar2Date = /*#__PURE__*/makeIcon('Calendar2Date', ' '); // eslint-disable-next-line\n\nexport var BIconCalendar2DateFill = /*#__PURE__*/makeIcon('Calendar2DateFill', ' '); // eslint-disable-next-line\n\nexport var BIconCalendar2Day = /*#__PURE__*/makeIcon('Calendar2Day', ' '); // eslint-disable-next-line\n\nexport var BIconCalendar2DayFill = /*#__PURE__*/makeIcon('Calendar2DayFill', ' '); // eslint-disable-next-line\n\nexport var BIconCalendar2Fill = /*#__PURE__*/makeIcon('Calendar2Fill', ' '); // eslint-disable-next-line\n\nexport var BIconCalendar2Minus = /*#__PURE__*/makeIcon('Calendar2Minus', ' '); // eslint-disable-next-line\n\nexport var BIconCalendar2MinusFill = /*#__PURE__*/makeIcon('Calendar2MinusFill', ' '); // eslint-disable-next-line\n\nexport var BIconCalendar2Month = /*#__PURE__*/makeIcon('Calendar2Month', ' '); // eslint-disable-next-line\n\nexport var BIconCalendar2MonthFill = /*#__PURE__*/makeIcon('Calendar2MonthFill', ' '); // eslint-disable-next-line\n\nexport var BIconCalendar2Plus = /*#__PURE__*/makeIcon('Calendar2Plus', ' '); // eslint-disable-next-line\n\nexport var BIconCalendar2PlusFill = /*#__PURE__*/makeIcon('Calendar2PlusFill', ' '); // eslint-disable-next-line\n\nexport var BIconCalendar3 = /*#__PURE__*/makeIcon('Calendar3', ' '); // eslint-disable-next-line\n\nexport var BIconCalendar3Fill = /*#__PURE__*/makeIcon('Calendar3Fill', ' '); // eslint-disable-next-line\n\nexport var BIconCalendar4 = /*#__PURE__*/makeIcon('Calendar4', ' '); // eslint-disable-next-line\n\nexport var BIconCalendarCheck = /*#__PURE__*/makeIcon('CalendarCheck', ' '); // eslint-disable-next-line\n\nexport var BIconCalendarCheckFill = /*#__PURE__*/makeIcon('CalendarCheckFill', ' '); // eslint-disable-next-line\n\nexport var BIconCalendarDate = /*#__PURE__*/makeIcon('CalendarDate', ' '); // eslint-disable-next-line\n\nexport var BIconCalendarDateFill = /*#__PURE__*/makeIcon('CalendarDateFill', ' '); // eslint-disable-next-line\n\nexport var BIconCalendarDay = /*#__PURE__*/makeIcon('CalendarDay', ' '); // eslint-disable-next-line\n\nexport var BIconCalendarDayFill = /*#__PURE__*/makeIcon('CalendarDayFill', ' '); // eslint-disable-next-line\n\nexport var BIconCalendarFill = /*#__PURE__*/makeIcon('CalendarFill', ' '); // eslint-disable-next-line\n\nexport var BIconCalendarMinus = /*#__PURE__*/makeIcon('CalendarMinus', ' '); // eslint-disable-next-line\n\nexport var BIconCalendarMinusFill = /*#__PURE__*/makeIcon('CalendarMinusFill', ' '); // eslint-disable-next-line\n\nexport var BIconCalendarMonth = /*#__PURE__*/makeIcon('CalendarMonth', ' '); // eslint-disable-next-line\n\nexport var BIconCalendarMonthFill = /*#__PURE__*/makeIcon('CalendarMonthFill', ' '); // eslint-disable-next-line\n\nexport var BIconCalendarPlus = /*#__PURE__*/makeIcon('CalendarPlus', ' '); // eslint-disable-next-line\n\nexport var BIconCalendarPlusFill = /*#__PURE__*/makeIcon('CalendarPlusFill', ' '); // eslint-disable-next-line\n\nexport var BIconCamera = /*#__PURE__*/makeIcon('Camera', ' '); // eslint-disable-next-line\n\nexport var BIconCameraVideo = /*#__PURE__*/makeIcon('CameraVideo', ' '); // eslint-disable-next-line\n\nexport var BIconCameraVideoFill = /*#__PURE__*/makeIcon('CameraVideoFill', ' '); // eslint-disable-next-line\n\nexport var BIconCameraVideoOff = /*#__PURE__*/makeIcon('CameraVideoOff', ' '); // eslint-disable-next-line\n\nexport var BIconCameraVideoOffFill = /*#__PURE__*/makeIcon('CameraVideoOffFill', ' '); // eslint-disable-next-line\n\nexport var BIconCapslock = /*#__PURE__*/makeIcon('Capslock', ' '); // eslint-disable-next-line\n\nexport var BIconCapslockFill = /*#__PURE__*/makeIcon('CapslockFill', ' '); // eslint-disable-next-line\n\nexport var BIconCardChecklist = /*#__PURE__*/makeIcon('CardChecklist', ' '); // eslint-disable-next-line\n\nexport var BIconCardHeading = /*#__PURE__*/makeIcon('CardHeading', ' '); // eslint-disable-next-line\n\nexport var BIconCardImage = /*#__PURE__*/makeIcon('CardImage', ' '); // eslint-disable-next-line\n\nexport var BIconCardList = /*#__PURE__*/makeIcon('CardList', ''); // eslint-disable-next-line\n\nexport var BIconCardText = /*#__PURE__*/makeIcon('CardText', ' '); // eslint-disable-next-line\n\nexport var BIconCaretDown = /*#__PURE__*/makeIcon('CaretDown', ' '); // eslint-disable-next-line\n\nexport var BIconCaretDownFill = /*#__PURE__*/makeIcon('CaretDownFill', ' '); // eslint-disable-next-line\n\nexport var BIconCaretDownSquare = /*#__PURE__*/makeIcon('CaretDownSquare', ' '); // eslint-disable-next-line\n\nexport var BIconCaretDownSquareFill = /*#__PURE__*/makeIcon('CaretDownSquareFill', ' '); // eslint-disable-next-line\n\nexport var BIconCaretLeft = /*#__PURE__*/makeIcon('CaretLeft', ' '); // eslint-disable-next-line\n\nexport var BIconCaretLeftFill = /*#__PURE__*/makeIcon('CaretLeftFill', ' '); // eslint-disable-next-line\n\nexport var BIconCaretLeftSquare = /*#__PURE__*/makeIcon('CaretLeftSquare', ' '); // eslint-disable-next-line\n\nexport var BIconCaretLeftSquareFill = /*#__PURE__*/makeIcon('CaretLeftSquareFill', ' '); // eslint-disable-next-line\n\nexport var BIconCaretRight = /*#__PURE__*/makeIcon('CaretRight', ' '); // eslint-disable-next-line\n\nexport var BIconCaretRightFill = /*#__PURE__*/makeIcon('CaretRightFill', ' '); // eslint-disable-next-line\n\nexport var BIconCaretRightSquare = /*#__PURE__*/makeIcon('CaretRightSquare', ' '); // eslint-disable-next-line\n\nexport var BIconCaretRightSquareFill = /*#__PURE__*/makeIcon('CaretRightSquareFill', ' '); // eslint-disable-next-line\n\nexport var BIconCaretUp = /*#__PURE__*/makeIcon('CaretUp', ' '); // eslint-disable-next-line\n\nexport var BIconCaretUpFill = /*#__PURE__*/makeIcon('CaretUpFill', ' '); // eslint-disable-next-line\n\nexport var BIconCaretUpSquare = /*#__PURE__*/makeIcon('CaretUpSquare', ' '); // eslint-disable-next-line\n\nexport var BIconCaretUpSquareFill = /*#__PURE__*/makeIcon('CaretUpSquareFill', ' '); // eslint-disable-next-line\n\nexport var BIconCart = /*#__PURE__*/makeIcon('Cart', ' '); // eslint-disable-next-line\n\nexport var BIconCart2 = /*#__PURE__*/makeIcon('Cart2', ' '); // eslint-disable-next-line\n\nexport var BIconCart3 = /*#__PURE__*/makeIcon('Cart3', ' '); // eslint-disable-next-line\n\nexport var BIconCart4 = /*#__PURE__*/makeIcon('Cart4', ' '); // eslint-disable-next-line\n\nexport var BIconCartCheck = /*#__PURE__*/makeIcon('CartCheck', ' '); // eslint-disable-next-line\n\nexport var BIconCartDash = /*#__PURE__*/makeIcon('CartDash', ' '); // eslint-disable-next-line\n\nexport var BIconCartFill = /*#__PURE__*/makeIcon('CartFill', ' '); // eslint-disable-next-line\n\nexport var BIconCartPlus = /*#__PURE__*/makeIcon('CartPlus', ' '); // eslint-disable-next-line\n\nexport var BIconChat = /*#__PURE__*/makeIcon('Chat', ' '); // eslint-disable-next-line\n\nexport var BIconChatDots = /*#__PURE__*/makeIcon('ChatDots', ' '); // eslint-disable-next-line\n\nexport var BIconChatDotsFill = /*#__PURE__*/makeIcon('ChatDotsFill', ' '); // eslint-disable-next-line\n\nexport var BIconChatFill = /*#__PURE__*/makeIcon('ChatFill', ' '); // eslint-disable-next-line\n\nexport var BIconChatQuote = /*#__PURE__*/makeIcon('ChatQuote', ' '); // eslint-disable-next-line\n\nexport var BIconChatQuoteFill = /*#__PURE__*/makeIcon('ChatQuoteFill', ' '); // eslint-disable-next-line\n\nexport var BIconChatSquare = /*#__PURE__*/makeIcon('ChatSquare', ' '); // eslint-disable-next-line\n\nexport var BIconChatSquareDots = /*#__PURE__*/makeIcon('ChatSquareDots', ' '); // eslint-disable-next-line\n\nexport var BIconChatSquareDotsFill = /*#__PURE__*/makeIcon('ChatSquareDotsFill', ' '); // eslint-disable-next-line\n\nexport var BIconChatSquareFill = /*#__PURE__*/makeIcon('ChatSquareFill', ' '); // eslint-disable-next-line\n\nexport var BIconChatSquareQuote = /*#__PURE__*/makeIcon('ChatSquareQuote', ' '); // eslint-disable-next-line\n\nexport var BIconChatSquareQuoteFill = /*#__PURE__*/makeIcon('ChatSquareQuoteFill', ' '); // eslint-disable-next-line\n\nexport var BIconCheck = /*#__PURE__*/makeIcon('Check', ' '); // eslint-disable-next-line\n\nexport var BIconCheck2 = /*#__PURE__*/makeIcon('Check2', ' '); // eslint-disable-next-line\n\nexport var BIconCheck2All = /*#__PURE__*/makeIcon('Check2All', ' '); // eslint-disable-next-line\n\nexport var BIconCheck2Circle = /*#__PURE__*/makeIcon('Check2Circle', ' '); // eslint-disable-next-line\n\nexport var BIconCheck2Square = /*#__PURE__*/makeIcon('Check2Square', ' '); // eslint-disable-next-line\n\nexport var BIconCheckAll = /*#__PURE__*/makeIcon('CheckAll', ' '); // eslint-disable-next-line\n\nexport var BIconCheckCircle = /*#__PURE__*/makeIcon('CheckCircle', ' '); // eslint-disable-next-line\n\nexport var BIconCheckCircleFill = /*#__PURE__*/makeIcon('CheckCircleFill', ' '); // eslint-disable-next-line\n\nexport var BIconCheckSquare = /*#__PURE__*/makeIcon('CheckSquare', ' '); // eslint-disable-next-line\n\nexport var BIconCheckSquareFill = /*#__PURE__*/makeIcon('CheckSquareFill', ' '); // eslint-disable-next-line\n\nexport var BIconChevronBarContract = /*#__PURE__*/makeIcon('ChevronBarContract', ' '); // eslint-disable-next-line\n\nexport var BIconChevronBarDown = /*#__PURE__*/makeIcon('ChevronBarDown', ' '); // eslint-disable-next-line\n\nexport var BIconChevronBarExpand = /*#__PURE__*/makeIcon('ChevronBarExpand', ' '); // eslint-disable-next-line\n\nexport var BIconChevronBarLeft = /*#__PURE__*/makeIcon('ChevronBarLeft', ' '); // eslint-disable-next-line\n\nexport var BIconChevronBarRight = /*#__PURE__*/makeIcon('ChevronBarRight', ' '); // eslint-disable-next-line\n\nexport var BIconChevronBarUp = /*#__PURE__*/makeIcon('ChevronBarUp', ' '); // eslint-disable-next-line\n\nexport var BIconChevronCompactDown = /*#__PURE__*/makeIcon('ChevronCompactDown', ' '); // eslint-disable-next-line\n\nexport var BIconChevronCompactLeft = /*#__PURE__*/makeIcon('ChevronCompactLeft', ' '); // eslint-disable-next-line\n\nexport var BIconChevronCompactRight = /*#__PURE__*/makeIcon('ChevronCompactRight', ' '); // eslint-disable-next-line\n\nexport var BIconChevronCompactUp = /*#__PURE__*/makeIcon('ChevronCompactUp', ' '); // eslint-disable-next-line\n\nexport var BIconChevronContract = /*#__PURE__*/makeIcon('ChevronContract', ' '); // eslint-disable-next-line\n\nexport var BIconChevronDoubleDown = /*#__PURE__*/makeIcon('ChevronDoubleDown', ' '); // eslint-disable-next-line\n\nexport var BIconChevronDoubleLeft = /*#__PURE__*/makeIcon('ChevronDoubleLeft', ' '); // eslint-disable-next-line\n\nexport var BIconChevronDoubleRight = /*#__PURE__*/makeIcon('ChevronDoubleRight', ' '); // eslint-disable-next-line\n\nexport var BIconChevronDoubleUp = /*#__PURE__*/makeIcon('ChevronDoubleUp', ' '); // eslint-disable-next-line\n\nexport var BIconChevronDown = /*#__PURE__*/makeIcon('ChevronDown', ' '); // eslint-disable-next-line\n\nexport var BIconChevronExpand = /*#__PURE__*/makeIcon('ChevronExpand', ' '); // eslint-disable-next-line\n\nexport var BIconChevronLeft = /*#__PURE__*/makeIcon('ChevronLeft', ' '); // eslint-disable-next-line\n\nexport var BIconChevronRight = /*#__PURE__*/makeIcon('ChevronRight', ' '); // eslint-disable-next-line\n\nexport var BIconChevronUp = /*#__PURE__*/makeIcon('ChevronUp', ' '); // eslint-disable-next-line\n\nexport var BIconCircle = /*#__PURE__*/makeIcon('Circle', ' '); // eslint-disable-next-line\n\nexport var BIconCircleFill = /*#__PURE__*/makeIcon('CircleFill', ''); // eslint-disable-next-line\n\nexport var BIconCircleHalf = /*#__PURE__*/makeIcon('CircleHalf', ' '); // eslint-disable-next-line\n\nexport var BIconCircleSquare = /*#__PURE__*/makeIcon('CircleSquare', ' '); // eslint-disable-next-line\n\nexport var BIconClipboard = /*#__PURE__*/makeIcon('Clipboard', ' '); // eslint-disable-next-line\n\nexport var BIconClipboardData = /*#__PURE__*/makeIcon('ClipboardData', ' '); // eslint-disable-next-line\n\nexport var BIconClock = /*#__PURE__*/makeIcon('Clock', ' '); // eslint-disable-next-line\n\nexport var BIconClockFill = /*#__PURE__*/makeIcon('ClockFill', ' '); // eslint-disable-next-line\n\nexport var BIconClockHistory = /*#__PURE__*/makeIcon('ClockHistory', ' '); // eslint-disable-next-line\n\nexport var BIconCloud = /*#__PURE__*/makeIcon('Cloud', ' '); // eslint-disable-next-line\n\nexport var BIconCloudDownload = /*#__PURE__*/makeIcon('CloudDownload', ' '); // eslint-disable-next-line\n\nexport var BIconCloudFill = /*#__PURE__*/makeIcon('CloudFill', ' '); // eslint-disable-next-line\n\nexport var BIconCloudSlash = /*#__PURE__*/makeIcon('CloudSlash', ' '); // eslint-disable-next-line\n\nexport var BIconCloudSlashFill = /*#__PURE__*/makeIcon('CloudSlashFill', ' '); // eslint-disable-next-line\n\nexport var BIconCloudUpload = /*#__PURE__*/makeIcon('CloudUpload', ' '); // eslint-disable-next-line\n\nexport var BIconCode = /*#__PURE__*/makeIcon('Code', ' '); // eslint-disable-next-line\n\nexport var BIconCodeSlash = /*#__PURE__*/makeIcon('CodeSlash', ' '); // eslint-disable-next-line\n\nexport var BIconCollection = /*#__PURE__*/makeIcon('Collection', ' '); // eslint-disable-next-line\n\nexport var BIconCollectionFill = /*#__PURE__*/makeIcon('CollectionFill', ' '); // eslint-disable-next-line\n\nexport var BIconCollectionPlay = /*#__PURE__*/makeIcon('CollectionPlay', ' '); // eslint-disable-next-line\n\nexport var BIconCollectionPlayFill = /*#__PURE__*/makeIcon('CollectionPlayFill', ' '); // eslint-disable-next-line\n\nexport var BIconColumns = /*#__PURE__*/makeIcon('Columns', ' '); // eslint-disable-next-line\n\nexport var BIconColumnsGap = /*#__PURE__*/makeIcon('ColumnsGap', ' '); // eslint-disable-next-line\n\nexport var BIconCommand = /*#__PURE__*/makeIcon('Command', ' '); // eslint-disable-next-line\n\nexport var BIconCompass = /*#__PURE__*/makeIcon('Compass', ' '); // eslint-disable-next-line\n\nexport var BIconCone = /*#__PURE__*/makeIcon('Cone', ' '); // eslint-disable-next-line\n\nexport var BIconConeStriped = /*#__PURE__*/makeIcon('ConeStriped', ' '); // eslint-disable-next-line\n\nexport var BIconController = /*#__PURE__*/makeIcon('Controller', ' '); // eslint-disable-next-line\n\nexport var BIconCreditCard = /*#__PURE__*/makeIcon('CreditCard', ' '); // eslint-disable-next-line\n\nexport var BIconCrop = /*#__PURE__*/makeIcon('Crop', ' '); // eslint-disable-next-line\n\nexport var BIconCup = /*#__PURE__*/makeIcon('Cup', ' '); // eslint-disable-next-line\n\nexport var BIconCursor = /*#__PURE__*/makeIcon('Cursor', ' '); // eslint-disable-next-line\n\nexport var BIconCursorFill = /*#__PURE__*/makeIcon('CursorFill', ' '); // eslint-disable-next-line\n\nexport var BIconCursorText = /*#__PURE__*/makeIcon('CursorText', ' '); // eslint-disable-next-line\n\nexport var BIconDash = /*#__PURE__*/makeIcon('Dash', ' '); // eslint-disable-next-line\n\nexport var BIconDashCircle = /*#__PURE__*/makeIcon('DashCircle', ' '); // eslint-disable-next-line\n\nexport var BIconDashCircleFill = /*#__PURE__*/makeIcon('DashCircleFill', ' '); // eslint-disable-next-line\n\nexport var BIconDashSquare = /*#__PURE__*/makeIcon('DashSquare', ' '); // eslint-disable-next-line\n\nexport var BIconDashSquareFill = /*#__PURE__*/makeIcon('DashSquareFill', ' '); // eslint-disable-next-line\n\nexport var BIconDiamond = /*#__PURE__*/makeIcon('Diamond', ' '); // eslint-disable-next-line\n\nexport var BIconDiamondFill = /*#__PURE__*/makeIcon('DiamondFill', ' '); // eslint-disable-next-line\n\nexport var BIconDiamondHalf = /*#__PURE__*/makeIcon('DiamondHalf', ' '); // eslint-disable-next-line\n\nexport var BIconDisplay = /*#__PURE__*/makeIcon('Display', ' '); // eslint-disable-next-line\n\nexport var BIconDisplayFill = /*#__PURE__*/makeIcon('DisplayFill', ' '); // eslint-disable-next-line\n\nexport var BIconDoorClosed = /*#__PURE__*/makeIcon('DoorClosed', ' '); // eslint-disable-next-line\n\nexport var BIconDoorClosedFill = /*#__PURE__*/makeIcon('DoorClosedFill', ' '); // eslint-disable-next-line\n\nexport var BIconDot = /*#__PURE__*/makeIcon('Dot', ' '); // eslint-disable-next-line\n\nexport var BIconDownload = /*#__PURE__*/makeIcon('Download', ' '); // eslint-disable-next-line\n\nexport var BIconDroplet = /*#__PURE__*/makeIcon('Droplet', ' '); // eslint-disable-next-line\n\nexport var BIconDropletFill = /*#__PURE__*/makeIcon('DropletFill', ' '); // eslint-disable-next-line\n\nexport var BIconDropletHalf = /*#__PURE__*/makeIcon('DropletHalf', ' '); // eslint-disable-next-line\n\nexport var BIconEgg = /*#__PURE__*/makeIcon('Egg', ' '); // eslint-disable-next-line\n\nexport var BIconEggFill = /*#__PURE__*/makeIcon('EggFill', ' '); // eslint-disable-next-line\n\nexport var BIconEggFried = /*#__PURE__*/makeIcon('EggFried', ''); // eslint-disable-next-line\n\nexport var BIconEject = /*#__PURE__*/makeIcon('Eject', ' '); // eslint-disable-next-line\n\nexport var BIconEjectFill = /*#__PURE__*/makeIcon('EjectFill', ' '); // eslint-disable-next-line\n\nexport var BIconEmojiAngry = /*#__PURE__*/makeIcon('EmojiAngry', ' '); // eslint-disable-next-line\n\nexport var BIconEmojiDizzy = /*#__PURE__*/makeIcon('EmojiDizzy', ' '); // eslint-disable-next-line\n\nexport var BIconEmojiFrown = /*#__PURE__*/makeIcon('EmojiFrown', ' '); // eslint-disable-next-line\n\nexport var BIconEmojiLaughing = /*#__PURE__*/makeIcon('EmojiLaughing', ' '); // eslint-disable-next-line\n\nexport var BIconEmojiNeutral = /*#__PURE__*/makeIcon('EmojiNeutral', ' '); // eslint-disable-next-line\n\nexport var BIconEmojiSmile = /*#__PURE__*/makeIcon('EmojiSmile', ' '); // eslint-disable-next-line\n\nexport var BIconEmojiSmileUpsideDown = /*#__PURE__*/makeIcon('EmojiSmileUpsideDown', ' '); // eslint-disable-next-line\n\nexport var BIconEmojiSunglasses = /*#__PURE__*/makeIcon('EmojiSunglasses', ' '); // eslint-disable-next-line\n\nexport var BIconEnvelope = /*#__PURE__*/makeIcon('Envelope', ' '); // eslint-disable-next-line\n\nexport var BIconEnvelopeFill = /*#__PURE__*/makeIcon('EnvelopeFill', ' '); // eslint-disable-next-line\n\nexport var BIconEnvelopeOpen = /*#__PURE__*/makeIcon('EnvelopeOpen', ' '); // eslint-disable-next-line\n\nexport var BIconEnvelopeOpenFill = /*#__PURE__*/makeIcon('EnvelopeOpenFill', ' '); // eslint-disable-next-line\n\nexport var BIconExclamation = /*#__PURE__*/makeIcon('Exclamation', ' '); // eslint-disable-next-line\n\nexport var BIconExclamationCircle = /*#__PURE__*/makeIcon('ExclamationCircle', ' '); // eslint-disable-next-line\n\nexport var BIconExclamationCircleFill = /*#__PURE__*/makeIcon('ExclamationCircleFill', ' '); // eslint-disable-next-line\n\nexport var BIconExclamationDiamond = /*#__PURE__*/makeIcon('ExclamationDiamond', ' '); // eslint-disable-next-line\n\nexport var BIconExclamationDiamondFill = /*#__PURE__*/makeIcon('ExclamationDiamondFill', ' '); // eslint-disable-next-line\n\nexport var BIconExclamationOctagon = /*#__PURE__*/makeIcon('ExclamationOctagon', ' '); // eslint-disable-next-line\n\nexport var BIconExclamationOctagonFill = /*#__PURE__*/makeIcon('ExclamationOctagonFill', ' '); // eslint-disable-next-line\n\nexport var BIconExclamationSquare = /*#__PURE__*/makeIcon('ExclamationSquare', ' '); // eslint-disable-next-line\n\nexport var BIconExclamationSquareFill = /*#__PURE__*/makeIcon('ExclamationSquareFill', ' '); // eslint-disable-next-line\n\nexport var BIconExclamationTriangle = /*#__PURE__*/makeIcon('ExclamationTriangle', ' '); // eslint-disable-next-line\n\nexport var BIconExclamationTriangleFill = /*#__PURE__*/makeIcon('ExclamationTriangleFill', ' '); // eslint-disable-next-line\n\nexport var BIconExclude = /*#__PURE__*/makeIcon('Exclude', ' '); // eslint-disable-next-line\n\nexport var BIconEye = /*#__PURE__*/makeIcon('Eye', ' '); // eslint-disable-next-line\n\nexport var BIconEyeFill = /*#__PURE__*/makeIcon('EyeFill', ' '); // eslint-disable-next-line\n\nexport var BIconEyeSlash = /*#__PURE__*/makeIcon('EyeSlash', ' '); // eslint-disable-next-line\n\nexport var BIconEyeSlashFill = /*#__PURE__*/makeIcon('EyeSlashFill', ' '); // eslint-disable-next-line\n\nexport var BIconFile = /*#__PURE__*/makeIcon('File', ' '); // eslint-disable-next-line\n\nexport var BIconFileArrowDown = /*#__PURE__*/makeIcon('FileArrowDown', ' '); // eslint-disable-next-line\n\nexport var BIconFileArrowUp = /*#__PURE__*/makeIcon('FileArrowUp', ' '); // eslint-disable-next-line\n\nexport var BIconFileBreak = /*#__PURE__*/makeIcon('FileBreak', ' '); // eslint-disable-next-line\n\nexport var BIconFileCheck = /*#__PURE__*/makeIcon('FileCheck', ' '); // eslint-disable-next-line\n\nexport var BIconFileCode = /*#__PURE__*/makeIcon('FileCode', ' '); // eslint-disable-next-line\n\nexport var BIconFileDiff = /*#__PURE__*/makeIcon('FileDiff', ' '); // eslint-disable-next-line\n\nexport var BIconFileEarmark = /*#__PURE__*/makeIcon('FileEarmark', ' '); // eslint-disable-next-line\n\nexport var BIconFileEarmarkArrowDown = /*#__PURE__*/makeIcon('FileEarmarkArrowDown', ' '); // eslint-disable-next-line\n\nexport var BIconFileEarmarkArrowUp = /*#__PURE__*/makeIcon('FileEarmarkArrowUp', ' '); // eslint-disable-next-line\n\nexport var BIconFileEarmarkBreak = /*#__PURE__*/makeIcon('FileEarmarkBreak', ' '); // eslint-disable-next-line\n\nexport var BIconFileEarmarkCheck = /*#__PURE__*/makeIcon('FileEarmarkCheck', ' '); // eslint-disable-next-line\n\nexport var BIconFileEarmarkCode = /*#__PURE__*/makeIcon('FileEarmarkCode', ' '); // eslint-disable-next-line\n\nexport var BIconFileEarmarkDiff = /*#__PURE__*/makeIcon('FileEarmarkDiff', ' '); // eslint-disable-next-line\n\nexport var BIconFileEarmarkMinus = /*#__PURE__*/makeIcon('FileEarmarkMinus', ' '); // eslint-disable-next-line\n\nexport var BIconFileEarmarkPlus = /*#__PURE__*/makeIcon('FileEarmarkPlus', ' '); // eslint-disable-next-line\n\nexport var BIconFileEarmarkRuled = /*#__PURE__*/makeIcon('FileEarmarkRuled', ' '); // eslint-disable-next-line\n\nexport var BIconFileEarmarkSpreadsheet = /*#__PURE__*/makeIcon('FileEarmarkSpreadsheet', ' '); // eslint-disable-next-line\n\nexport var BIconFileEarmarkText = /*#__PURE__*/makeIcon('FileEarmarkText', ' '); // eslint-disable-next-line\n\nexport var BIconFileEarmarkZip = /*#__PURE__*/makeIcon('FileEarmarkZip', ' '); // eslint-disable-next-line\n\nexport var BIconFileMinus = /*#__PURE__*/makeIcon('FileMinus', ' '); // eslint-disable-next-line\n\nexport var BIconFilePlus = /*#__PURE__*/makeIcon('FilePlus', ' '); // eslint-disable-next-line\n\nexport var BIconFilePost = /*#__PURE__*/makeIcon('FilePost', ' '); // eslint-disable-next-line\n\nexport var BIconFileRichtext = /*#__PURE__*/makeIcon('FileRichtext', ' '); // eslint-disable-next-line\n\nexport var BIconFileRuled = /*#__PURE__*/makeIcon('FileRuled', ' '); // eslint-disable-next-line\n\nexport var BIconFileSpreadsheet = /*#__PURE__*/makeIcon('FileSpreadsheet', ' '); // eslint-disable-next-line\n\nexport var BIconFileText = /*#__PURE__*/makeIcon('FileText', ' '); // eslint-disable-next-line\n\nexport var BIconFileZip = /*#__PURE__*/makeIcon('FileZip', ' '); // eslint-disable-next-line\n\nexport var BIconFiles = /*#__PURE__*/makeIcon('Files', ' '); // eslint-disable-next-line\n\nexport var BIconFilesAlt = /*#__PURE__*/makeIcon('FilesAlt', ' '); // eslint-disable-next-line\n\nexport var BIconFilm = /*#__PURE__*/makeIcon('Film', ' '); // eslint-disable-next-line\n\nexport var BIconFilter = /*#__PURE__*/makeIcon('Filter', ' '); // eslint-disable-next-line\n\nexport var BIconFilterLeft = /*#__PURE__*/makeIcon('FilterLeft', ' '); // eslint-disable-next-line\n\nexport var BIconFilterRight = /*#__PURE__*/makeIcon('FilterRight', ' '); // eslint-disable-next-line\n\nexport var BIconFlag = /*#__PURE__*/makeIcon('Flag', ' '); // eslint-disable-next-line\n\nexport var BIconFlagFill = /*#__PURE__*/makeIcon('FlagFill', ' '); // eslint-disable-next-line\n\nexport var BIconFolder = /*#__PURE__*/makeIcon('Folder', ' '); // eslint-disable-next-line\n\nexport var BIconFolderCheck = /*#__PURE__*/makeIcon('FolderCheck', ' '); // eslint-disable-next-line\n\nexport var BIconFolderFill = /*#__PURE__*/makeIcon('FolderFill', ' '); // eslint-disable-next-line\n\nexport var BIconFolderMinus = /*#__PURE__*/makeIcon('FolderMinus', ' '); // eslint-disable-next-line\n\nexport var BIconFolderPlus = /*#__PURE__*/makeIcon('FolderPlus', ' '); // eslint-disable-next-line\n\nexport var BIconFolderSymlink = /*#__PURE__*/makeIcon('FolderSymlink', ' '); // eslint-disable-next-line\n\nexport var BIconFolderSymlinkFill = /*#__PURE__*/makeIcon('FolderSymlinkFill', ' '); // eslint-disable-next-line\n\nexport var BIconFonts = /*#__PURE__*/makeIcon('Fonts', ' '); // eslint-disable-next-line\n\nexport var BIconForward = /*#__PURE__*/makeIcon('Forward', ' '); // eslint-disable-next-line\n\nexport var BIconForwardFill = /*#__PURE__*/makeIcon('ForwardFill', ' '); // eslint-disable-next-line\n\nexport var BIconFullscreen = /*#__PURE__*/makeIcon('Fullscreen', ' '); // eslint-disable-next-line\n\nexport var BIconFullscreenExit = /*#__PURE__*/makeIcon('FullscreenExit', ' '); // eslint-disable-next-line\n\nexport var BIconFunnel = /*#__PURE__*/makeIcon('Funnel', ' '); // eslint-disable-next-line\n\nexport var BIconFunnelFill = /*#__PURE__*/makeIcon('FunnelFill', ' '); // eslint-disable-next-line\n\nexport var BIconGear = /*#__PURE__*/makeIcon('Gear', ' '); // eslint-disable-next-line\n\nexport var BIconGearFill = /*#__PURE__*/makeIcon('GearFill', ' '); // eslint-disable-next-line\n\nexport var BIconGearWide = /*#__PURE__*/makeIcon('GearWide', ' '); // eslint-disable-next-line\n\nexport var BIconGearWideConnected = /*#__PURE__*/makeIcon('GearWideConnected', ' '); // eslint-disable-next-line\n\nexport var BIconGem = /*#__PURE__*/makeIcon('Gem', ' '); // eslint-disable-next-line\n\nexport var BIconGeo = /*#__PURE__*/makeIcon('Geo', ' '); // eslint-disable-next-line\n\nexport var BIconGeoAlt = /*#__PURE__*/makeIcon('GeoAlt', ' '); // eslint-disable-next-line\n\nexport var BIconGift = /*#__PURE__*/makeIcon('Gift', ' '); // eslint-disable-next-line\n\nexport var BIconGiftFill = /*#__PURE__*/makeIcon('GiftFill', ' '); // eslint-disable-next-line\n\nexport var BIconGraphDown = /*#__PURE__*/makeIcon('GraphDown', ' '); // eslint-disable-next-line\n\nexport var BIconGraphUp = /*#__PURE__*/makeIcon('GraphUp', ' '); // eslint-disable-next-line\n\nexport var BIconGrid = /*#__PURE__*/makeIcon('Grid', ' '); // eslint-disable-next-line\n\nexport var BIconGrid1x2 = /*#__PURE__*/makeIcon('Grid1x2', ' '); // eslint-disable-next-line\n\nexport var BIconGrid1x2Fill = /*#__PURE__*/makeIcon('Grid1x2Fill', ' '); // eslint-disable-next-line\n\nexport var BIconGrid3x2 = /*#__PURE__*/makeIcon('Grid3x2', ' '); // eslint-disable-next-line\n\nexport var BIconGrid3x2Gap = /*#__PURE__*/makeIcon('Grid3x2Gap', ' '); // eslint-disable-next-line\n\nexport var BIconGrid3x2GapFill = /*#__PURE__*/makeIcon('Grid3x2GapFill', ' '); // eslint-disable-next-line\n\nexport var BIconGrid3x3 = /*#__PURE__*/makeIcon('Grid3x3', ' '); // eslint-disable-next-line\n\nexport var BIconGrid3x3Gap = /*#__PURE__*/makeIcon('Grid3x3Gap', ' '); // eslint-disable-next-line\n\nexport var BIconGrid3x3GapFill = /*#__PURE__*/makeIcon('Grid3x3GapFill', ' '); // eslint-disable-next-line\n\nexport var BIconGridFill = /*#__PURE__*/makeIcon('GridFill', ' '); // eslint-disable-next-line\n\nexport var BIconGripHorizontal = /*#__PURE__*/makeIcon('GripHorizontal', ' '); // eslint-disable-next-line\n\nexport var BIconGripVertical = /*#__PURE__*/makeIcon('GripVertical', ' '); // eslint-disable-next-line\n\nexport var BIconHammer = /*#__PURE__*/makeIcon('Hammer', ' '); // eslint-disable-next-line\n\nexport var BIconHandIndex = /*#__PURE__*/makeIcon('HandIndex', ' '); // eslint-disable-next-line\n\nexport var BIconHandIndexThumb = /*#__PURE__*/makeIcon('HandIndexThumb', ' '); // eslint-disable-next-line\n\nexport var BIconHandThumbsDown = /*#__PURE__*/makeIcon('HandThumbsDown', ' '); // eslint-disable-next-line\n\nexport var BIconHandThumbsUp = /*#__PURE__*/makeIcon('HandThumbsUp', ' '); // eslint-disable-next-line\n\nexport var BIconHandbag = /*#__PURE__*/makeIcon('Handbag', ' '); // eslint-disable-next-line\n\nexport var BIconHandbagFill = /*#__PURE__*/makeIcon('HandbagFill', ' '); // eslint-disable-next-line\n\nexport var BIconHash = /*#__PURE__*/makeIcon('Hash', ' '); // eslint-disable-next-line\n\nexport var BIconHeadphones = /*#__PURE__*/makeIcon('Headphones', ' '); // eslint-disable-next-line\n\nexport var BIconHeart = /*#__PURE__*/makeIcon('Heart', ' '); // eslint-disable-next-line\n\nexport var BIconHeartFill = /*#__PURE__*/makeIcon('HeartFill', ' '); // eslint-disable-next-line\n\nexport var BIconHeartHalf = /*#__PURE__*/makeIcon('HeartHalf', ' '); // eslint-disable-next-line\n\nexport var BIconHexagon = /*#__PURE__*/makeIcon('Hexagon', ' '); // eslint-disable-next-line\n\nexport var BIconHexagonFill = /*#__PURE__*/makeIcon('HexagonFill', ' '); // eslint-disable-next-line\n\nexport var BIconHexagonHalf = /*#__PURE__*/makeIcon('HexagonHalf', ' '); // eslint-disable-next-line\n\nexport var BIconHouse = /*#__PURE__*/makeIcon('House', ' '); // eslint-disable-next-line\n\nexport var BIconHouseDoor = /*#__PURE__*/makeIcon('HouseDoor', ' '); // eslint-disable-next-line\n\nexport var BIconHouseDoorFill = /*#__PURE__*/makeIcon('HouseDoorFill', ' '); // eslint-disable-next-line\n\nexport var BIconHouseFill = /*#__PURE__*/makeIcon('HouseFill', ' '); // eslint-disable-next-line\n\nexport var BIconHr = /*#__PURE__*/makeIcon('Hr', ' '); // eslint-disable-next-line\n\nexport var BIconImage = /*#__PURE__*/makeIcon('Image', ' '); // eslint-disable-next-line\n\nexport var BIconImageAlt = /*#__PURE__*/makeIcon('ImageAlt', ' '); // eslint-disable-next-line\n\nexport var BIconImageFill = /*#__PURE__*/makeIcon('ImageFill', ' '); // eslint-disable-next-line\n\nexport var BIconImages = /*#__PURE__*/makeIcon('Images', ' '); // eslint-disable-next-line\n\nexport var BIconInbox = /*#__PURE__*/makeIcon('Inbox', ' '); // eslint-disable-next-line\n\nexport var BIconInboxFill = /*#__PURE__*/makeIcon('InboxFill', ' '); // eslint-disable-next-line\n\nexport var BIconInboxes = /*#__PURE__*/makeIcon('Inboxes', ' '); // eslint-disable-next-line\n\nexport var BIconInboxesFill = /*#__PURE__*/makeIcon('InboxesFill', ' '); // eslint-disable-next-line\n\nexport var BIconInfo = /*#__PURE__*/makeIcon('Info', ''); // eslint-disable-next-line\n\nexport var BIconInfoCircle = /*#__PURE__*/makeIcon('InfoCircle', ''); // eslint-disable-next-line\n\nexport var BIconInfoCircleFill = /*#__PURE__*/makeIcon('InfoCircleFill', ' '); // eslint-disable-next-line\n\nexport var BIconInfoSquare = /*#__PURE__*/makeIcon('InfoSquare', ''); // eslint-disable-next-line\n\nexport var BIconInfoSquareFill = /*#__PURE__*/makeIcon('InfoSquareFill', ' '); // eslint-disable-next-line\n\nexport var BIconIntersect = /*#__PURE__*/makeIcon('Intersect', ' '); // eslint-disable-next-line\n\nexport var BIconJustify = /*#__PURE__*/makeIcon('Justify', ' '); // eslint-disable-next-line\n\nexport var BIconJustifyLeft = /*#__PURE__*/makeIcon('JustifyLeft', ' '); // eslint-disable-next-line\n\nexport var BIconJustifyRight = /*#__PURE__*/makeIcon('JustifyRight', ' '); // eslint-disable-next-line\n\nexport var BIconKanban = /*#__PURE__*/makeIcon('Kanban', ''); // eslint-disable-next-line\n\nexport var BIconKanbanFill = /*#__PURE__*/makeIcon('KanbanFill', ' '); // eslint-disable-next-line\n\nexport var BIconLaptop = /*#__PURE__*/makeIcon('Laptop', ' '); // eslint-disable-next-line\n\nexport var BIconLayers = /*#__PURE__*/makeIcon('Layers', ' '); // eslint-disable-next-line\n\nexport var BIconLayersFill = /*#__PURE__*/makeIcon('LayersFill', ' '); // eslint-disable-next-line\n\nexport var BIconLayersHalf = /*#__PURE__*/makeIcon('LayersHalf', ' '); // eslint-disable-next-line\n\nexport var BIconLayoutSidebar = /*#__PURE__*/makeIcon('LayoutSidebar', ' '); // eslint-disable-next-line\n\nexport var BIconLayoutSidebarInset = /*#__PURE__*/makeIcon('LayoutSidebarInset', ' '); // eslint-disable-next-line\n\nexport var BIconLayoutSidebarInsetReverse = /*#__PURE__*/makeIcon('LayoutSidebarInsetReverse', ' '); // eslint-disable-next-line\n\nexport var BIconLayoutSidebarReverse = /*#__PURE__*/makeIcon('LayoutSidebarReverse', ' '); // eslint-disable-next-line\n\nexport var BIconLayoutSplit = /*#__PURE__*/makeIcon('LayoutSplit', ' '); // eslint-disable-next-line\n\nexport var BIconLayoutTextSidebar = /*#__PURE__*/makeIcon('LayoutTextSidebar', ' '); // eslint-disable-next-line\n\nexport var BIconLayoutTextSidebarReverse = /*#__PURE__*/makeIcon('LayoutTextSidebarReverse', ' '); // eslint-disable-next-line\n\nexport var BIconLayoutTextWindow = /*#__PURE__*/makeIcon('LayoutTextWindow', ' '); // eslint-disable-next-line\n\nexport var BIconLayoutTextWindowReverse = /*#__PURE__*/makeIcon('LayoutTextWindowReverse', ' '); // eslint-disable-next-line\n\nexport var BIconLayoutThreeColumns = /*#__PURE__*/makeIcon('LayoutThreeColumns', ' '); // eslint-disable-next-line\n\nexport var BIconLayoutWtf = /*#__PURE__*/makeIcon('LayoutWtf', ' '); // eslint-disable-next-line\n\nexport var BIconLifePreserver = /*#__PURE__*/makeIcon('LifePreserver', ' '); // eslint-disable-next-line\n\nexport var BIconLightning = /*#__PURE__*/makeIcon('Lightning', ' '); // eslint-disable-next-line\n\nexport var BIconLightningFill = /*#__PURE__*/makeIcon('LightningFill', ' '); // eslint-disable-next-line\n\nexport var BIconLink = /*#__PURE__*/makeIcon('Link', ' '); // eslint-disable-next-line\n\nexport var BIconLink45deg = /*#__PURE__*/makeIcon('Link45deg', ' '); // eslint-disable-next-line\n\nexport var BIconList = /*#__PURE__*/makeIcon('List', ' '); // eslint-disable-next-line\n\nexport var BIconListCheck = /*#__PURE__*/makeIcon('ListCheck', ' '); // eslint-disable-next-line\n\nexport var BIconListNested = /*#__PURE__*/makeIcon('ListNested', ' '); // eslint-disable-next-line\n\nexport var BIconListOl = /*#__PURE__*/makeIcon('ListOl', ' '); // eslint-disable-next-line\n\nexport var BIconListTask = /*#__PURE__*/makeIcon('ListTask', ' '); // eslint-disable-next-line\n\nexport var BIconListUl = /*#__PURE__*/makeIcon('ListUl', ' '); // eslint-disable-next-line\n\nexport var BIconLock = /*#__PURE__*/makeIcon('Lock', ' '); // eslint-disable-next-line\n\nexport var BIconLockFill = /*#__PURE__*/makeIcon('LockFill', ' '); // eslint-disable-next-line\n\nexport var BIconMap = /*#__PURE__*/makeIcon('Map', ' '); // eslint-disable-next-line\n\nexport var BIconMic = /*#__PURE__*/makeIcon('Mic', ' '); // eslint-disable-next-line\n\nexport var BIconMicFill = /*#__PURE__*/makeIcon('MicFill', ' '); // eslint-disable-next-line\n\nexport var BIconMicMute = /*#__PURE__*/makeIcon('MicMute', ' '); // eslint-disable-next-line\n\nexport var BIconMicMuteFill = /*#__PURE__*/makeIcon('MicMuteFill', ' '); // eslint-disable-next-line\n\nexport var BIconMinecart = /*#__PURE__*/makeIcon('Minecart', ' '); // eslint-disable-next-line\n\nexport var BIconMinecartLoaded = /*#__PURE__*/makeIcon('MinecartLoaded', ' '); // eslint-disable-next-line\n\nexport var BIconMoon = /*#__PURE__*/makeIcon('Moon', ' '); // eslint-disable-next-line\n\nexport var BIconMusicNote = /*#__PURE__*/makeIcon('MusicNote', ' '); // eslint-disable-next-line\n\nexport var BIconMusicNoteBeamed = /*#__PURE__*/makeIcon('MusicNoteBeamed', ' '); // eslint-disable-next-line\n\nexport var BIconMusicNoteList = /*#__PURE__*/makeIcon('MusicNoteList', ' '); // eslint-disable-next-line\n\nexport var BIconMusicPlayer = /*#__PURE__*/makeIcon('MusicPlayer', ''); // eslint-disable-next-line\n\nexport var BIconMusicPlayerFill = /*#__PURE__*/makeIcon('MusicPlayerFill', ''); // eslint-disable-next-line\n\nexport var BIconNewspaper = /*#__PURE__*/makeIcon('Newspaper', ' '); // eslint-disable-next-line\n\nexport var BIconOctagon = /*#__PURE__*/makeIcon('Octagon', ' '); // eslint-disable-next-line\n\nexport var BIconOctagonFill = /*#__PURE__*/makeIcon('OctagonFill', ' '); // eslint-disable-next-line\n\nexport var BIconOctagonHalf = /*#__PURE__*/makeIcon('OctagonHalf', ' '); // eslint-disable-next-line\n\nexport var BIconOption = /*#__PURE__*/makeIcon('Option', ' '); // eslint-disable-next-line\n\nexport var BIconOutlet = /*#__PURE__*/makeIcon('Outlet', ' '); // eslint-disable-next-line\n\nexport var BIconPaperclip = /*#__PURE__*/makeIcon('Paperclip', ' '); // eslint-disable-next-line\n\nexport var BIconPause = /*#__PURE__*/makeIcon('Pause', ' '); // eslint-disable-next-line\n\nexport var BIconPauseFill = /*#__PURE__*/makeIcon('PauseFill', ' '); // eslint-disable-next-line\n\nexport var BIconPen = /*#__PURE__*/makeIcon('Pen', ' '); // eslint-disable-next-line\n\nexport var BIconPencil = /*#__PURE__*/makeIcon('Pencil', ' '); // eslint-disable-next-line\n\nexport var BIconPencilSquare = /*#__PURE__*/makeIcon('PencilSquare', ' '); // eslint-disable-next-line\n\nexport var BIconPentagon = /*#__PURE__*/makeIcon('Pentagon', ' '); // eslint-disable-next-line\n\nexport var BIconPentagonFill = /*#__PURE__*/makeIcon('PentagonFill', ' '); // eslint-disable-next-line\n\nexport var BIconPentagonHalf = /*#__PURE__*/makeIcon('PentagonHalf', ' '); // eslint-disable-next-line\n\nexport var BIconPeople = /*#__PURE__*/makeIcon('People', ' '); // eslint-disable-next-line\n\nexport var BIconPeopleFill = /*#__PURE__*/makeIcon('PeopleFill', ' '); // eslint-disable-next-line\n\nexport var BIconPerson = /*#__PURE__*/makeIcon('Person', ' '); // eslint-disable-next-line\n\nexport var BIconPersonBoundingBox = /*#__PURE__*/makeIcon('PersonBoundingBox', ' '); // eslint-disable-next-line\n\nexport var BIconPersonCheck = /*#__PURE__*/makeIcon('PersonCheck', ' '); // eslint-disable-next-line\n\nexport var BIconPersonCheckFill = /*#__PURE__*/makeIcon('PersonCheckFill', ' '); // eslint-disable-next-line\n\nexport var BIconPersonCircle = /*#__PURE__*/makeIcon('PersonCircle', ' '); // eslint-disable-next-line\n\nexport var BIconPersonDash = /*#__PURE__*/makeIcon('PersonDash', ' '); // eslint-disable-next-line\n\nexport var BIconPersonDashFill = /*#__PURE__*/makeIcon('PersonDashFill', ' '); // eslint-disable-next-line\n\nexport var BIconPersonFill = /*#__PURE__*/makeIcon('PersonFill', ' '); // eslint-disable-next-line\n\nexport var BIconPersonLinesFill = /*#__PURE__*/makeIcon('PersonLinesFill', ' '); // eslint-disable-next-line\n\nexport var BIconPersonPlus = /*#__PURE__*/makeIcon('PersonPlus', ' '); // eslint-disable-next-line\n\nexport var BIconPersonPlusFill = /*#__PURE__*/makeIcon('PersonPlusFill', ' '); // eslint-disable-next-line\n\nexport var BIconPersonSquare = /*#__PURE__*/makeIcon('PersonSquare', ' '); // eslint-disable-next-line\n\nexport var BIconPhone = /*#__PURE__*/makeIcon('Phone', ' '); // eslint-disable-next-line\n\nexport var BIconPhoneLandscape = /*#__PURE__*/makeIcon('PhoneLandscape', ' '); // eslint-disable-next-line\n\nexport var BIconPieChart = /*#__PURE__*/makeIcon('PieChart', ' '); // eslint-disable-next-line\n\nexport var BIconPieChartFill = /*#__PURE__*/makeIcon('PieChartFill', ' '); // eslint-disable-next-line\n\nexport var BIconPip = /*#__PURE__*/makeIcon('Pip', ' '); // eslint-disable-next-line\n\nexport var BIconPipFill = /*#__PURE__*/makeIcon('PipFill', ' '); // eslint-disable-next-line\n\nexport var BIconPlay = /*#__PURE__*/makeIcon('Play', ' '); // eslint-disable-next-line\n\nexport var BIconPlayFill = /*#__PURE__*/makeIcon('PlayFill', ' '); // eslint-disable-next-line\n\nexport var BIconPlug = /*#__PURE__*/makeIcon('Plug', ' '); // eslint-disable-next-line\n\nexport var BIconPlus = /*#__PURE__*/makeIcon('Plus', ' '); // eslint-disable-next-line\n\nexport var BIconPlusCircle = /*#__PURE__*/makeIcon('PlusCircle', ' '); // eslint-disable-next-line\n\nexport var BIconPlusCircleFill = /*#__PURE__*/makeIcon('PlusCircleFill', ' '); // eslint-disable-next-line\n\nexport var BIconPlusSquare = /*#__PURE__*/makeIcon('PlusSquare', ' '); // eslint-disable-next-line\n\nexport var BIconPlusSquareFill = /*#__PURE__*/makeIcon('PlusSquareFill', ' '); // eslint-disable-next-line\n\nexport var BIconPower = /*#__PURE__*/makeIcon('Power', ' '); // eslint-disable-next-line\n\nexport var BIconPuzzle = /*#__PURE__*/makeIcon('Puzzle', ' '); // eslint-disable-next-line\n\nexport var BIconPuzzleFill = /*#__PURE__*/makeIcon('PuzzleFill', ' '); // eslint-disable-next-line\n\nexport var BIconQuestion = /*#__PURE__*/makeIcon('Question', ' '); // eslint-disable-next-line\n\nexport var BIconQuestionCircle = /*#__PURE__*/makeIcon('QuestionCircle', ' '); // eslint-disable-next-line\n\nexport var BIconQuestionCircleFill = /*#__PURE__*/makeIcon('QuestionCircleFill', ' '); // eslint-disable-next-line\n\nexport var BIconQuestionDiamond = /*#__PURE__*/makeIcon('QuestionDiamond', ' '); // eslint-disable-next-line\n\nexport var BIconQuestionDiamondFill = /*#__PURE__*/makeIcon('QuestionDiamondFill', ' '); // eslint-disable-next-line\n\nexport var BIconQuestionOctagon = /*#__PURE__*/makeIcon('QuestionOctagon', ' '); // eslint-disable-next-line\n\nexport var BIconQuestionOctagonFill = /*#__PURE__*/makeIcon('QuestionOctagonFill', ' '); // eslint-disable-next-line\n\nexport var BIconQuestionSquare = /*#__PURE__*/makeIcon('QuestionSquare', ' '); // eslint-disable-next-line\n\nexport var BIconQuestionSquareFill = /*#__PURE__*/makeIcon('QuestionSquareFill', ' '); // eslint-disable-next-line\n\nexport var BIconReceipt = /*#__PURE__*/makeIcon('Receipt', ' '); // eslint-disable-next-line\n\nexport var BIconReceiptCutoff = /*#__PURE__*/makeIcon('ReceiptCutoff', ' '); // eslint-disable-next-line\n\nexport var BIconReply = /*#__PURE__*/makeIcon('Reply', ' '); // eslint-disable-next-line\n\nexport var BIconReplyAll = /*#__PURE__*/makeIcon('ReplyAll', ' '); // eslint-disable-next-line\n\nexport var BIconReplyAllFill = /*#__PURE__*/makeIcon('ReplyAllFill', ' '); // eslint-disable-next-line\n\nexport var BIconReplyFill = /*#__PURE__*/makeIcon('ReplyFill', ' '); // eslint-disable-next-line\n\nexport var BIconScrewdriver = /*#__PURE__*/makeIcon('Screwdriver', ' '); // eslint-disable-next-line\n\nexport var BIconSearch = /*#__PURE__*/makeIcon('Search', ' '); // eslint-disable-next-line\n\nexport var BIconServer = /*#__PURE__*/makeIcon('Server', ' '); // eslint-disable-next-line\n\nexport var BIconShield = /*#__PURE__*/makeIcon('Shield', ' '); // eslint-disable-next-line\n\nexport var BIconShieldFill = /*#__PURE__*/makeIcon('ShieldFill', ' '); // eslint-disable-next-line\n\nexport var BIconShieldLock = /*#__PURE__*/makeIcon('ShieldLock', ' '); // eslint-disable-next-line\n\nexport var BIconShieldLockFill = /*#__PURE__*/makeIcon('ShieldLockFill', ' '); // eslint-disable-next-line\n\nexport var BIconShieldShaded = /*#__PURE__*/makeIcon('ShieldShaded', ' '); // eslint-disable-next-line\n\nexport var BIconShieldSlash = /*#__PURE__*/makeIcon('ShieldSlash', ' '); // eslint-disable-next-line\n\nexport var BIconShieldSlashFill = /*#__PURE__*/makeIcon('ShieldSlashFill', ' '); // eslint-disable-next-line\n\nexport var BIconShift = /*#__PURE__*/makeIcon('Shift', ' '); // eslint-disable-next-line\n\nexport var BIconShiftFill = /*#__PURE__*/makeIcon('ShiftFill', ' '); // eslint-disable-next-line\n\nexport var BIconShop = /*#__PURE__*/makeIcon('Shop', ' '); // eslint-disable-next-line\n\nexport var BIconShopWindow = /*#__PURE__*/makeIcon('ShopWindow', ' '); // eslint-disable-next-line\n\nexport var BIconShuffle = /*#__PURE__*/makeIcon('Shuffle', ' '); // eslint-disable-next-line\n\nexport var BIconSkipBackward = /*#__PURE__*/makeIcon('SkipBackward', ' '); // eslint-disable-next-line\n\nexport var BIconSkipBackwardFill = /*#__PURE__*/makeIcon('SkipBackwardFill', ' '); // eslint-disable-next-line\n\nexport var BIconSkipEnd = /*#__PURE__*/makeIcon('SkipEnd', ' '); // eslint-disable-next-line\n\nexport var BIconSkipEndFill = /*#__PURE__*/makeIcon('SkipEndFill', ' '); // eslint-disable-next-line\n\nexport var BIconSkipForward = /*#__PURE__*/makeIcon('SkipForward', ' '); // eslint-disable-next-line\n\nexport var BIconSkipForwardFill = /*#__PURE__*/makeIcon('SkipForwardFill', ' '); // eslint-disable-next-line\n\nexport var BIconSkipStart = /*#__PURE__*/makeIcon('SkipStart', ' '); // eslint-disable-next-line\n\nexport var BIconSkipStartFill = /*#__PURE__*/makeIcon('SkipStartFill', ' '); // eslint-disable-next-line\n\nexport var BIconSlash = /*#__PURE__*/makeIcon('Slash', ' '); // eslint-disable-next-line\n\nexport var BIconSlashCircle = /*#__PURE__*/makeIcon('SlashCircle', ' '); // eslint-disable-next-line\n\nexport var BIconSlashCircleFill = /*#__PURE__*/makeIcon('SlashCircleFill', ' '); // eslint-disable-next-line\n\nexport var BIconSlashSquare = /*#__PURE__*/makeIcon('SlashSquare', ' '); // eslint-disable-next-line\n\nexport var BIconSlashSquareFill = /*#__PURE__*/makeIcon('SlashSquareFill', ' '); // eslint-disable-next-line\n\nexport var BIconSliders = /*#__PURE__*/makeIcon('Sliders', ' '); // eslint-disable-next-line\n\nexport var BIconSoundwave = /*#__PURE__*/makeIcon('Soundwave', ' '); // eslint-disable-next-line\n\nexport var BIconSpeaker = /*#__PURE__*/makeIcon('Speaker', ' '); // eslint-disable-next-line\n\nexport var BIconSquare = /*#__PURE__*/makeIcon('Square', ' '); // eslint-disable-next-line\n\nexport var BIconSquareFill = /*#__PURE__*/makeIcon('SquareFill', ''); // eslint-disable-next-line\n\nexport var BIconSquareHalf = /*#__PURE__*/makeIcon('SquareHalf', ' '); // eslint-disable-next-line\n\nexport var BIconStar = /*#__PURE__*/makeIcon('Star', ' '); // eslint-disable-next-line\n\nexport var BIconStarFill = /*#__PURE__*/makeIcon('StarFill', ' '); // eslint-disable-next-line\n\nexport var BIconStarHalf = /*#__PURE__*/makeIcon('StarHalf', ' '); // eslint-disable-next-line\n\nexport var BIconStop = /*#__PURE__*/makeIcon('Stop', ' '); // eslint-disable-next-line\n\nexport var BIconStopFill = /*#__PURE__*/makeIcon('StopFill', ' '); // eslint-disable-next-line\n\nexport var BIconStopwatch = /*#__PURE__*/makeIcon('Stopwatch', ' '); // eslint-disable-next-line\n\nexport var BIconStopwatchFill = /*#__PURE__*/makeIcon('StopwatchFill', ' '); // eslint-disable-next-line\n\nexport var BIconSubtract = /*#__PURE__*/makeIcon('Subtract', ' '); // eslint-disable-next-line\n\nexport var BIconSun = /*#__PURE__*/makeIcon('Sun', ' '); // eslint-disable-next-line\n\nexport var BIconTable = /*#__PURE__*/makeIcon('Table', ' '); // eslint-disable-next-line\n\nexport var BIconTablet = /*#__PURE__*/makeIcon('Tablet', ' '); // eslint-disable-next-line\n\nexport var BIconTabletLandscape = /*#__PURE__*/makeIcon('TabletLandscape', ' '); // eslint-disable-next-line\n\nexport var BIconTag = /*#__PURE__*/makeIcon('Tag', ' '); // eslint-disable-next-line\n\nexport var BIconTagFill = /*#__PURE__*/makeIcon('TagFill', ' '); // eslint-disable-next-line\n\nexport var BIconTerminal = /*#__PURE__*/makeIcon('Terminal', ' '); // eslint-disable-next-line\n\nexport var BIconTerminalFill = /*#__PURE__*/makeIcon('TerminalFill', ' '); // eslint-disable-next-line\n\nexport var BIconTextCenter = /*#__PURE__*/makeIcon('TextCenter', ' '); // eslint-disable-next-line\n\nexport var BIconTextIndentLeft = /*#__PURE__*/makeIcon('TextIndentLeft', ' '); // eslint-disable-next-line\n\nexport var BIconTextIndentRight = /*#__PURE__*/makeIcon('TextIndentRight', ' '); // eslint-disable-next-line\n\nexport var BIconTextLeft = /*#__PURE__*/makeIcon('TextLeft', ' '); // eslint-disable-next-line\n\nexport var BIconTextRight = /*#__PURE__*/makeIcon('TextRight', ' '); // eslint-disable-next-line\n\nexport var BIconTextarea = /*#__PURE__*/makeIcon('Textarea', ' '); // eslint-disable-next-line\n\nexport var BIconTextareaT = /*#__PURE__*/makeIcon('TextareaT', ' '); // eslint-disable-next-line\n\nexport var BIconThreeDots = /*#__PURE__*/makeIcon('ThreeDots', ' '); // eslint-disable-next-line\n\nexport var BIconThreeDotsVertical = /*#__PURE__*/makeIcon('ThreeDotsVertical', ' '); // eslint-disable-next-line\n\nexport var BIconToggleOff = /*#__PURE__*/makeIcon('ToggleOff', ' '); // eslint-disable-next-line\n\nexport var BIconToggleOn = /*#__PURE__*/makeIcon('ToggleOn', ' '); // eslint-disable-next-line\n\nexport var BIconToggles = /*#__PURE__*/makeIcon('Toggles', ' '); // eslint-disable-next-line\n\nexport var BIconTools = /*#__PURE__*/makeIcon('Tools', ' '); // eslint-disable-next-line\n\nexport var BIconTrash = /*#__PURE__*/makeIcon('Trash', ' '); // eslint-disable-next-line\n\nexport var BIconTrash2 = /*#__PURE__*/makeIcon('Trash2', ' '); // eslint-disable-next-line\n\nexport var BIconTrash2Fill = /*#__PURE__*/makeIcon('Trash2Fill', ' '); // eslint-disable-next-line\n\nexport var BIconTrashFill = /*#__PURE__*/makeIcon('TrashFill', ' '); // eslint-disable-next-line\n\nexport var BIconTriangle = /*#__PURE__*/makeIcon('Triangle', ' '); // eslint-disable-next-line\n\nexport var BIconTriangleFill = /*#__PURE__*/makeIcon('TriangleFill', ' '); // eslint-disable-next-line\n\nexport var BIconTriangleHalf = /*#__PURE__*/makeIcon('TriangleHalf', ' '); // eslint-disable-next-line\n\nexport var BIconTrophy = /*#__PURE__*/makeIcon('Trophy', ' '); // eslint-disable-next-line\n\nexport var BIconTruck = /*#__PURE__*/makeIcon('Truck', ' '); // eslint-disable-next-line\n\nexport var BIconTruckFlatbed = /*#__PURE__*/makeIcon('TruckFlatbed', ' '); // eslint-disable-next-line\n\nexport var BIconTv = /*#__PURE__*/makeIcon('Tv', ' '); // eslint-disable-next-line\n\nexport var BIconTvFill = /*#__PURE__*/makeIcon('TvFill', ' '); // eslint-disable-next-line\n\nexport var BIconType = /*#__PURE__*/makeIcon('Type', ' '); // eslint-disable-next-line\n\nexport var BIconTypeBold = /*#__PURE__*/makeIcon('TypeBold', ' '); // eslint-disable-next-line\n\nexport var BIconTypeH1 = /*#__PURE__*/makeIcon('TypeH1', ' '); // eslint-disable-next-line\n\nexport var BIconTypeH2 = /*#__PURE__*/makeIcon('TypeH2', ' '); // eslint-disable-next-line\n\nexport var BIconTypeH3 = /*#__PURE__*/makeIcon('TypeH3', ' '); // eslint-disable-next-line\n\nexport var BIconTypeItalic = /*#__PURE__*/makeIcon('TypeItalic', ' '); // eslint-disable-next-line\n\nexport var BIconTypeStrikethrough = /*#__PURE__*/makeIcon('TypeStrikethrough', ' '); // eslint-disable-next-line\n\nexport var BIconTypeUnderline = /*#__PURE__*/makeIcon('TypeUnderline', ' '); // eslint-disable-next-line\n\nexport var BIconUnion = /*#__PURE__*/makeIcon('Union', ' '); // eslint-disable-next-line\n\nexport var BIconUnlock = /*#__PURE__*/makeIcon('Unlock', ' '); // eslint-disable-next-line\n\nexport var BIconUnlockFill = /*#__PURE__*/makeIcon('UnlockFill', ' '); // eslint-disable-next-line\n\nexport var BIconUpc = /*#__PURE__*/makeIcon('Upc', ' '); // eslint-disable-next-line\n\nexport var BIconUpcScan = /*#__PURE__*/makeIcon('UpcScan', ' '); // eslint-disable-next-line\n\nexport var BIconUpload = /*#__PURE__*/makeIcon('Upload', ' '); // eslint-disable-next-line\n\nexport var BIconViewList = /*#__PURE__*/makeIcon('ViewList', ' '); // eslint-disable-next-line\n\nexport var BIconViewStacked = /*#__PURE__*/makeIcon('ViewStacked', ' '); // eslint-disable-next-line\n\nexport var BIconVolumeDown = /*#__PURE__*/makeIcon('VolumeDown', ' '); // eslint-disable-next-line\n\nexport var BIconVolumeDownFill = /*#__PURE__*/makeIcon('VolumeDownFill', ' '); // eslint-disable-next-line\n\nexport var BIconVolumeMute = /*#__PURE__*/makeIcon('VolumeMute', ' '); // eslint-disable-next-line\n\nexport var BIconVolumeMuteFill = /*#__PURE__*/makeIcon('VolumeMuteFill', ' '); // eslint-disable-next-line\n\nexport var BIconVolumeOff = /*#__PURE__*/makeIcon('VolumeOff', ' '); // eslint-disable-next-line\n\nexport var BIconVolumeOffFill = /*#__PURE__*/makeIcon('VolumeOffFill', ' '); // eslint-disable-next-line\n\nexport var BIconVolumeUp = /*#__PURE__*/makeIcon('VolumeUp', ' '); // eslint-disable-next-line\n\nexport var BIconVolumeUpFill = /*#__PURE__*/makeIcon('VolumeUpFill', ' '); // eslint-disable-next-line\n\nexport var BIconVr = /*#__PURE__*/makeIcon('Vr', ' '); // eslint-disable-next-line\n\nexport var BIconWallet = /*#__PURE__*/makeIcon('Wallet', ' '); // eslint-disable-next-line\n\nexport var BIconWallet2 = /*#__PURE__*/makeIcon('Wallet2', ' '); // eslint-disable-next-line\n\nexport var BIconWatch = /*#__PURE__*/makeIcon('Watch', ' '); // eslint-disable-next-line\n\nexport var BIconWifi = /*#__PURE__*/makeIcon('Wifi', ' '); // eslint-disable-next-line\n\nexport var BIconWindow = /*#__PURE__*/makeIcon('Window', ' '); // eslint-disable-next-line\n\nexport var BIconWrench = /*#__PURE__*/makeIcon('Wrench', ' '); // eslint-disable-next-line\n\nexport var BIconX = /*#__PURE__*/makeIcon('X', ' '); // eslint-disable-next-line\n\nexport var BIconXCircle = /*#__PURE__*/makeIcon('XCircle', ' '); // eslint-disable-next-line\n\nexport var BIconXCircleFill = /*#__PURE__*/makeIcon('XCircleFill', ' '); // eslint-disable-next-line\n\nexport var BIconXDiamond = /*#__PURE__*/makeIcon('XDiamond', ' '); // eslint-disable-next-line\n\nexport var BIconXDiamondFill = /*#__PURE__*/makeIcon('XDiamondFill', ' '); // eslint-disable-next-line\n\nexport var BIconXOctagon = /*#__PURE__*/makeIcon('XOctagon', ' '); // eslint-disable-next-line\n\nexport var BIconXOctagonFill = /*#__PURE__*/makeIcon('XOctagonFill', ' '); // eslint-disable-next-line\n\nexport var BIconXSquare = /*#__PURE__*/makeIcon('XSquare', ' '); // eslint-disable-next-line\n\nexport var BIconXSquareFill = /*#__PURE__*/makeIcon('XSquareFill', ' '); // --- END AUTO-GENERATED FILE ---","export const StudentRole = \"Student\";\r\nexport const MentorRole = \"Mentor\";\r\nexport const CoordinatorRole = \"Coordinator\";\r\nexport const RoleMap = {\r\n Student: StudentRole,\r\n Mentor: MentorRole,\r\n Coordinator: CoordinatorRole\r\n};\r\n\r\nexport const SemesterSelectOptions = [\"Spring\", \"Fall\"].map(x => {\r\n return { value: x, text: x };\r\n});\r\n\r\nexport const MonthsSelectOptions = [\r\n \"January\",\r\n \"February\",\r\n \"March\",\r\n \"April\",\r\n \"May\",\r\n \"June\",\r\n \"July\",\r\n \"August\",\r\n \"September\",\r\n \"October\",\r\n \"November\",\r\n \"December\"\r\n].map((x, idx) => {\r\n return { value: idx + \"\", text: x };\r\n});\r\n","import { RoleMap } from \"./Constants\";\r\n\r\nexport const RoleModalMessages = {\r\n AddRole(user, roleName) {\r\n if (RoleMap.Student === roleName && user.roles.includes(RoleMap.Mentor)) {\r\n return `Are you sure you want to add the ${roleName} role to ${user.firstName} ${user.lastName} (${user.email})? Doing so will remove the ${RoleMap.Mentor} role and unlink all students currently assigned to this user .
`;\r\n } else if (\r\n RoleMap.Mentor === roleName &&\r\n user.roles.includes(RoleMap.Student)\r\n ) {\r\n return `Are you sure you want to add the ${roleName} role to ${user.firstName} ${user.lastName} (${user.email})? Doing so will remove the ${RoleMap.Student} role and unlink their assigned mentor .
`;\r\n } else {\r\n return `Are you sure you want to add the ${roleName} role to ${user.email}?
`;\r\n }\r\n },\r\n RemoveRole(user, roleName) {\r\n return `Are you sure you want to remove the ${roleName} role from ${user.firstName} ${user.lastName} (${user.email})?
`;\r\n },\r\n AddRoleYesAction(roleName) {\r\n return `add the ${roleName} role`;\r\n },\r\n RemoveRoleYesAction(roleName) {\r\n return `remove the ${roleName} role`;\r\n },\r\n CommonCancelAction() {\r\n return \"cancel\";\r\n },\r\n AddTitle() {\r\n return \"Confirm add role:\";\r\n },\r\n RemoveTitle() {\r\n return \"Confirm remove role:\";\r\n }\r\n};\r\n","\r\n \r\n
\r\n \r\n \r\n Email \r\n Student Role \r\n Mentor Role \r\n Actions \r\n \r\n \r\n \r\n \r\n \r\n {{ user.firstName }} {{ user.lastName }} {{ user.email }} \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n send message\r\n \r\n \r\n \r\n view profile\r\n \r\n edit user \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserGrid.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserGrid.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./UserGrid.vue?vue&type=template&id=29d8273f&scoped=true&\"\nimport script from \"./UserGrid.vue?vue&type=script&lang=js&\"\nexport * from \"./UserGrid.vue?vue&type=script&lang=js&\"\nimport style0 from \"./UserGrid.vue?vue&type=style&index=0&id=29d8273f&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"29d8273f\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"user-search-input\"},[_c('b-form',{on:{\"submit\":function($event){$event.preventDefault();\n _vm.$emit(_vm.userSearchEvent, _vm.searchString);}}},[_c('b-form-group',[_c('b-form-radio-group',{attrs:{\"options\":_vm.displayRoles},on:{\"change\":function($event){return _vm.$emit(_vm.newSearchRoleEvent, $event)}},model:{value:(_vm.selectedRole),callback:function ($$v) {_vm.selectedRole=$$v},expression:\"selectedRole\"}})],1),_c('b-form-group',[_c('b-input-group',{staticStyle:{\"max-width\":\"500px\"}},[_c('b-form-input',{ref:\"searchInput\",attrs:{\"type\":\"search\",\"placeholder\":\"enter user name or email\"},on:{\"input\":function($event){return _vm.$emit(_vm.newSearchInputEvent, $event)}},model:{value:(_vm.searchString),callback:function ($$v) {_vm.searchString=$$v},expression:\"searchString\"}}),_c('b-input-group-append',[_c('b-button',{attrs:{\"variant\":\"outline-secondary\"},on:{\"click\":function($event){return _vm.$emit(_vm.userSearchEvent, _vm.searchString)}}},[_vm._v(\"User Search\")])],1)],1)],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export default function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}","import arrayLikeToArray from \"./arrayLikeToArray\";\nexport default function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}","export default function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter);\n}","import arrayLikeToArray from \"./arrayLikeToArray\";\nexport default function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}","export default function _nonIterableSpread() {\n 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}","import arrayWithoutHoles from \"./arrayWithoutHoles\";\nimport iterableToArray from \"./iterableToArray\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray\";\nimport nonIterableSpread from \"./nonIterableSpread\";\nexport default function _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}","import Vue from '../../utils/vue';\nimport idMixin from '../../mixins/id';\nimport formMixin from '../../mixins/form';\nimport formStateMixin from '../../mixins/form-state';\nimport formSizeMixin from '../../mixins/form-size';\nimport formRadioCheckMixin from '../../mixins/form-radio-check';\nimport looseEqual from '../../utils/loose-equal'; // @vue/component\n\nexport var BFormRadio = /*#__PURE__*/Vue.extend({\n name: 'BFormRadio',\n mixins: [idMixin, formRadioCheckMixin, // Includes shared render function\n formMixin, formSizeMixin, formStateMixin],\n inject: {\n bvGroup: {\n from: 'bvRadioGroup',\n default: false\n }\n },\n props: {\n checked: {\n // v-model\n // type: [String, Number, Boolean, Object],\n default: null\n }\n },\n computed: {\n // Radio Groups can only have a single value, so determining if checked is simple\n isChecked: function isChecked() {\n return looseEqual(this.value, this.computedLocalChecked);\n },\n // Flags for form-radio-check mixin\n isRadio: function isRadio() {\n return true;\n },\n isCheck: function isCheck() {\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() {\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.isGroup) {\n this.bvGroup.$emit('change', checked ? value : null);\n }\n }\n }\n});","import { htmlOrText } from '../utils/html';\nimport normalizeSlotMixin from './normalize-slot';\nimport { BFormCheckbox } from '../components/form-checkbox/form-checkbox';\nimport { BFormRadio } from '../components/form-radio/form-radio'; // @vue/component\n\nexport default {\n mixins: [normalizeSlotMixin],\n model: {\n prop: 'checked',\n event: 'input'\n },\n props: {\n validated: {\n type: Boolean,\n default: false\n },\n ariaInvalid: {\n type: [Boolean, String],\n default: false\n },\n stacked: {\n type: Boolean,\n default: false\n },\n plain: {\n type: Boolean,\n default: false\n },\n buttons: {\n // Render as button style\n type: Boolean,\n default: false\n },\n buttonVariant: {\n // Only applicable when rendered with button style\n type: String,\n default: 'secondary'\n }\n },\n computed: {\n inline: function inline() {\n return !this.stacked;\n },\n groupName: function groupName() {\n // Checks/Radios tied to the same model must have the same name,\n // especially for ARIA accessibility.\n return this.name || this.safeId();\n },\n groupClasses: function groupClasses() {\n if (this.buttons) {\n return ['btn-group-toggle', this.inline ? 'btn-group' : 'btn-group-vertical', this.size ? \"btn-group-\".concat(this.size) : '', this.validated ? \"was-validated\" : ''];\n }\n\n return [this.validated ? \"was-validated\" : ''];\n },\n computedAriaInvalid: function computedAriaInvalid() {\n var ariaInvalid = this.ariaInvalid;\n\n if (ariaInvalid === true || ariaInvalid === 'true' || ariaInvalid === '') {\n return 'true';\n }\n\n return this.computedState === false ? 'true' : null;\n }\n },\n watch: {\n checked: function checked(newVal) {\n this.localChecked = newVal;\n },\n localChecked: function localChecked(newVal) {\n this.$emit('input', newVal);\n }\n },\n render: function render(h) {\n var _this = this;\n\n var $inputs = this.formOptions.map(function (option, index) {\n var key = \"BV_option_\".concat(index);\n return h(_this.isRadioGroup ? BFormRadio : BFormCheckbox, {\n props: {\n id: _this.safeId(key),\n value: option.value,\n // Individual radios or checks can be disabled in a group\n disabled: option.disabled || false // We don't need to include these, since the input's will know they are inside here\n // name: this.groupName,\n // form: this.form || null,\n // required: Boolean(this.name && this.required)\n\n },\n key: key\n }, [h('span', {\n domProps: htmlOrText(option.html, option.text)\n })]);\n });\n return h('div', {\n class: [this.groupClasses, 'bv-no-focus-ring'],\n attrs: {\n id: this.safeId(),\n role: this.isRadioGroup ? 'radiogroup' : 'group',\n // Add `tabindex=\"-1\"` to allow group to be focused if needed by screen readers\n tabindex: '-1',\n 'aria-required': this.required ? 'true' : null,\n 'aria-invalid': this.computedAriaInvalid\n }\n }, [this.normalizeSlot('first'), $inputs, this.normalizeSlot('default')]);\n }\n};","import Vue from '../../utils/vue';\nimport idMixin from '../../mixins/id';\nimport formMixin from '../../mixins/form';\nimport formOptionsMixin from '../../mixins/form-options';\nimport formRadioCheckGroupMixin from '../../mixins/form-radio-check-group';\nimport formSizeMixin from '../../mixins/form-size';\nimport formStateMixin from '../../mixins/form-state';\nexport var props = {\n checked: {\n // type: [String, Number, Boolean, Object],\n default: null\n }\n}; // @vue/component\n\nexport var BFormRadioGroup = /*#__PURE__*/Vue.extend({\n name: 'BFormRadioGroup',\n mixins: [idMixin, formMixin, formRadioCheckGroupMixin, // Includes render function\n formOptionsMixin, formSizeMixin, formStateMixin],\n provide: function provide() {\n return {\n bvRadioGroup: this\n };\n },\n props: props,\n data: function data() {\n return {\n localChecked: this.checked\n };\n },\n computed: {\n isRadioGroup: function isRadioGroup() {\n return true;\n }\n }\n});","import Vue from '../../utils/vue';\nimport { mergeData } from 'vue-functional-data-merge';\nexport var props = {\n tag: {\n type: String,\n default: 'div'\n }\n}; // @vue/component\n\nexport var BInputGroupText = /*#__PURE__*/Vue.extend({\n name: 'BInputGroupText',\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: 'input-group-text'\n }), children);\n }\n});","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport Vue from '../../utils/vue';\nimport { mergeData } from 'vue-functional-data-merge';\nimport { BInputGroupText } from './input-group-text';\nexport var commonProps = {\n id: {\n type: String,\n default: null\n },\n tag: {\n type: String,\n default: 'div'\n },\n isText: {\n type: Boolean,\n default: false\n }\n}; // @vue/component\n\nexport var BInputGroupAddon = /*#__PURE__*/Vue.extend({\n name: 'BInputGroupAddon',\n functional: true,\n props: _objectSpread(_objectSpread({}, commonProps), {}, {\n append: {\n type: Boolean,\n default: false\n }\n }),\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 class: {\n 'input-group-append': props.append,\n 'input-group-prepend': !props.append\n },\n attrs: {\n id: props.id\n }\n }), props.isText ? [h(BInputGroupText, children)] : children);\n }\n});","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport Vue from '../../utils/vue';\nimport { mergeData } from 'vue-functional-data-merge';\nimport { BInputGroupAddon, commonProps } from './input-group-addon'; // @vue/component\n\nexport var BInputGroupAppend = /*#__PURE__*/Vue.extend({\n name: 'BInputGroupAppend',\n functional: true,\n props: commonProps,\n render: function render(h, _ref) {\n var props = _ref.props,\n data = _ref.data,\n children = _ref.children;\n // Pass all our data down to child, and set `append` to `true`\n return h(BInputGroupAddon, mergeData(data, {\n props: _objectSpread(_objectSpread({}, props), {}, {\n append: true\n })\n }), children);\n }\n});","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport Vue from '../../utils/vue';\nimport { mergeData } from 'vue-functional-data-merge';\nimport { BInputGroupAddon, commonProps } from './input-group-addon'; // @vue/component\n\nexport var BInputGroupPrepend = /*#__PURE__*/Vue.extend({\n name: 'BInputGroupPrepend',\n functional: true,\n props: commonProps,\n render: function render(h, _ref) {\n var props = _ref.props,\n data = _ref.data,\n children = _ref.children;\n // pass all our props/attrs down to child, and set`append` to false\n return h(BInputGroupAddon, mergeData(data, {\n props: _objectSpread(_objectSpread({}, props), {}, {\n append: false\n })\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 { mergeData } from 'vue-functional-data-merge';\nimport Vue from '../../utils/vue';\nimport { getComponentConfig } from '../../utils/config';\nimport { htmlOrText } from '../../utils/html';\nimport { hasNormalizedSlot, normalizeSlot } from '../../utils/normalize-slot';\nimport { BInputGroupAppend } from './input-group-append';\nimport { BInputGroupPrepend } from './input-group-prepend';\nimport { BInputGroupText } from './input-group-text'; // --- Constants ---\n\nvar NAME = 'BInputGroup'; // --- Props ---\n\nexport var props = {\n id: {\n type: String\n },\n size: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME, 'size');\n }\n },\n prepend: {\n type: String\n },\n prependHtml: {\n type: String\n },\n append: {\n type: String\n },\n appendHtml: {\n type: String\n },\n tag: {\n type: String,\n default: 'div'\n }\n}; // --- Main component ---\n// @vue/component\n\nexport var BInputGroup = /*#__PURE__*/Vue.extend({\n name: NAME,\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 var prepend = props.prepend,\n prependHtml = props.prependHtml,\n append = props.append,\n appendHtml = props.appendHtml,\n size = props.size;\n var $scopedSlots = scopedSlots || {};\n var $slots = slots();\n var slotScope = {};\n var $prepend = h();\n var hasPrependSlot = hasNormalizedSlot('prepend', $scopedSlots, $slots);\n\n if (hasPrependSlot || prepend || prependHtml) {\n $prepend = h(BInputGroupPrepend, [hasPrependSlot ? normalizeSlot('prepend', slotScope, $scopedSlots, $slots) : h(BInputGroupText, {\n domProps: htmlOrText(prependHtml, prepend)\n })]);\n }\n\n var $append = h();\n var hasAppendSlot = hasNormalizedSlot('append', $scopedSlots, $slots);\n\n if (hasAppendSlot || append || appendHtml) {\n $append = h(BInputGroupAppend, [hasAppendSlot ? normalizeSlot('append', slotScope, $scopedSlots, $slots) : h(BInputGroupText, {\n domProps: htmlOrText(appendHtml, append)\n })]);\n }\n\n return h(props.tag, mergeData(data, {\n staticClass: 'input-group',\n class: _defineProperty({}, \"input-group-\".concat(size), size),\n attrs: {\n id: props.id || null,\n role: 'group'\n }\n }), [$prepend, normalizeSlot('default', slotScope, $scopedSlots, $slots), $append]);\n }\n});","\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n User Search \r\n \r\n \r\n \r\n \r\n
\r\n \r\n\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserSearchInput.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserSearchInput.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./UserSearchInput.vue?vue&type=template&id=64587dcc&scoped=true&\"\nimport script from \"./UserSearchInput.vue?vue&type=script&lang=js&\"\nexport * from \"./UserSearchInput.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"64587dcc\",\n null\n \n)\n\nexport default component.exports","\r\n \r\n
\r\n
0\"\r\n > \r\n
\r\n
No matching users found
\r\n
\r\n
\r\n \r\n\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserSearchView.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserSearchView.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./UserSearchView.vue?vue&type=template&id=8c70609a&scoped=true&\"\nimport script from \"./UserSearchView.vue?vue&type=script&lang=js&\"\nexport * from \"./UserSearchView.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"8c70609a\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"user-edit\"},[_c('h1',[_vm._v(_vm._s(_vm.user.firstName)+\" \"+_vm._s(_vm.user.middleName)+\" \"+_vm._s(_vm.user.lastName))]),_c('p',{staticClass:\"email\"},[_vm._v(\" \"+_vm._s(_vm.user.email)+\" \")]),_c('div',{staticClass:\"actions mb-2\"},[(!_vm.isOwnProfile)?_c('b-button',{staticClass:\"action-button red mr-3\",attrs:{\"variant\":\"primary\",\"size\":\"sm\"},on:{\"click\":function($event){return _vm.goToMessage(_vm.user.id)}}},[_c('b-icon-envelope-fill',{staticClass:\"action-icon\"}),_vm._v(\" send message \")],1):_vm._e(),(_vm.canEditNameAndEmail)?_c('b-button',{staticClass:\"action-button red\",attrs:{\"variant\":\"primary\",\"size\":\"sm\",\"disabled\":_vm.showIdentityValuesEditForm},on:{\"click\":function($event){_vm.showIdentityValuesEditForm = true}}},[_c('b-icon-pencil',{staticClass:\"action-icon\"}),_vm._v(\" edit name and email \")],1):_vm._e()],1),_c('identity-values-edit-form',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showIdentityValuesEditForm),expression:\"showIdentityValuesEditForm\"}],ref:\"identityValuesForm\",attrs:{\"initial-email\":this.user.email,\"initial-first-name\":this.user.firstName,\"initial-middle-name\":this.user.middleName,\"initial-last-name\":this.user.lastName}}),(_vm.canEditRoles)?[_c('p',{staticClass:\"role-container\"},[_c('span',{staticClass:\"role-name\"},[_vm._v(\"Mentor:\")]),_c('toggle-button',{staticClass:\"toggle-button\",attrs:{\"on\":_vm.user.roles.includes('Mentor')},on:{\"click\":function($event){_vm.user.roles.includes(_vm.roleMap.Mentor)\n ? _vm.confirmRemove(_vm.roleMap.Mentor)\n : _vm.confirmAdd(_vm.roleMap.Mentor)}}})],1),_c('p',{staticClass:\"role-container\"},[_c('span',{staticClass:\"role-name\"},[_vm._v(\"Student:\")]),_c('toggle-button',{staticClass:\"toggle-button\",attrs:{\"on\":_vm.user.roles.includes(_vm.roleMap.Student)},on:{\"click\":function($event){_vm.user.roles.includes(_vm.roleMap.Student)\n ? _vm.confirmRemove(_vm.roleMap.Student)\n : _vm.confirmAdd(_vm.roleMap.Student)}}})],1)]:[_c('p',_vm._l((_vm.user.roles),function(role){return _c('span',{key:role,staticClass:\"readonly-role-item\"},[_vm._v(_vm._s(role))])}),0)],_c('div',{staticClass:\"personal-profile\"},[_c('editable-pronouns',{attrs:{\"label\":\"Pronouns\",\"name\":\"Pronouns\",\"initial-value\":_vm.user.pronouns,\"validator\":_vm.validators.isNotEmptyString,\"saver\":_vm.saveProfileValue}}),_c('h4',[_vm._v(\"Contact Numbers\")]),_c('ul',{staticClass:\"numbers-container\"},_vm._l((_vm.user.phoneNumbers),function(number){return _c('li',{key:number.id,staticClass:\"number-entry\"},[_c('editable-phone-number',{attrs:{\"phone-number-types\":_vm.phoneNumberTypes,\"validator\":_vm.validators.isValidPhoneNumber,\"initial-value\":number,\"name\":number.id,\"saver\":_vm.savePhoneNumberValue},on:{\"delete\":_vm.handleDeletePhoneNumber}})],1)}),0),(_vm.phoneFormState !== _vm.phoneFormStates.hidden)?_c('editable-phone-number',{ref:\"newPhoneField\",attrs:{\"phone-number-types\":_vm.phoneNumberTypes,\"validator\":_vm.validators.alwaysValid,\"initial-value\":{},\"initial-mode\":_vm.editableFieldModes.edit,\"name\":0,\"is-deletable\":false,\"readonly\":_vm.phoneFormState === _vm.phoneFormStates.processing,\"show-buttons\":_vm.phoneFormState === _vm.phoneFormStates.editing,\"saver\":_vm.createNewPhoneNumberSaver,\"is-new-phone-form\":true},on:{\"cancel-new-phone-number-form\":_vm.cancelPhoneNumberForm}}):_vm._e(),_c('b-button',{staticClass:\"phone-number-add-button\",attrs:{\"disabled\":_vm.phoneFormState !== _vm.phoneFormStates.hidden},on:{\"click\":function($event){_vm.phoneFormState = _vm.phoneFormStates.editing}}},[_c('b-icon-plus-circle-fill'),_vm._v(\" add phone number\")],1),_c('editable-text-area',{staticClass:\"bio-field\",attrs:{\"label\":\"Bio\",\"name\":\"Bio\",\"initial-value\":_vm.user.bio,\"validator\":_vm.validators.isNotEmptyString,\"saver\":_vm.saveProfileValue}})],1),(_vm.user.roles.includes(_vm.roleMap.Mentor))?_c('profile-section',{ref:\"mentorProfile\",staticClass:\"mentor-profile\",attrs:{\"field-metadata\":_vm.mentorMetadata}}):_vm._e(),(_vm.user.roles.includes(_vm.roleMap.Student))?_c('profile-section',{ref:\"viewProfile\",staticClass:\"student-profile\",attrs:{\"field-metadata\":_vm.studentMetadata}}):_vm._e(),_c('confirmation-modal',{ref:\"confirmation-modal\",attrs:{\"title\":_vm.modalData.title,\"question\":_vm.modalData.question,\"yesActionText\":_vm.modalData.yesActionText,\"noActionText\":_vm.modalData.noActionText,\"yesCallback\":_vm.modalData.yesCallback,\"noCallback\":_vm.modalData.noCallback}})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"profile-section\"},_vm._l((_vm.fieldMetadata),function(metadata,index){return _c('profile-item',{key:index,attrs:{\"metadata\":metadata,\"field-props\":metadata.fieldProps}})}),1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"item\"},[(_vm.types.boolField === _vm.metadata.type)?[_c('editable-bool',_vm._b({attrs:{\"label\":_vm.metadata.label,\"name\":_vm.metadata.name,\"initial-value\":_vm.metadata.initialValue,\"validator\":_vm.metadata.validator,\"saver\":_vm.metadata.saver,\"readonly\":_vm.metadata.readonly}},'editable-bool',_vm.fieldProps,false))]:(_vm.types.section === _vm.metadata.type)?[_c('h4',[_vm._v(_vm._s(_vm.metadata.label))]),_vm._l((_vm.metadata.fields),function(field){return _c('profile-item',{key:field.name,attrs:{\"metadata\":field,\"field-props\":field.fieldProps,\"readonly\":field.readonly}})})]:(_vm.types.select === _vm.metadata.type)?[_c('editable-select',_vm._b({attrs:{\"label\":_vm.metadata.label,\"name\":_vm.metadata.name,\"initial-value\":_vm.metadata.initialValue,\"validator\":_vm.metadata.validator,\"saver\":_vm.metadata.saver,\"readonly\":_vm.metadata.readonly}},'editable-select',_vm.fieldProps,false))]:(_vm.types.textArea === _vm.metadata.type)?[_c('editable-text-area',_vm._b({attrs:{\"label\":_vm.metadata.label,\"name\":_vm.metadata.name,\"initial-value\":_vm.metadata.initialValue,\"validator\":_vm.metadata.validator,\"saver\":_vm.metadata.saver,\"readonly\":_vm.metadata.readonly}},'editable-text-area',_vm.fieldProps,false))]:(_vm.types.textField === _vm.metadata.type)?[_c('editable-text',_vm._b({attrs:{\"label\":_vm.metadata.label,\"name\":_vm.metadata.name,\"initial-value\":_vm.metadata.initialValue,\"validator\":_vm.metadata.validator,\"saver\":_vm.metadata.saver,\"readonly\":_vm.metadata.readonly}},'editable-text',_vm.fieldProps,false))]:(_vm.types.userLinker === _vm.metadata.type)?[_c('user-linker',_vm._b({attrs:{\"relationship\":_vm.metadata.relationship}},'user-linker',_vm.metadata.fieldProps,false))]:(_vm.types.userList === _vm.metadata.type)?[_vm._l((_vm.metadata.initialValue),function(user){return [_c('linked-user',{key:user.id,attrs:{\"user\":user,\"relationship\":_vm.metadata.relationship,\"readonly\":_vm.metadata.readonly}})]})]:(_vm.types.user === _vm.metadata.type)?[_c('linked-user',{attrs:{\"user\":_vm.metadata.initialValue,\"relationship\":_vm.metadata.relationship,\"readonly\":_vm.metadata.readonly}})]:_c('p',[_vm._v(\"Unknown field type: \"+_vm._s(_vm.metadata.type))]),(_vm.metadata.afterHtml)?[_c('div',{domProps:{\"innerHTML\":_vm._s(_vm.metadata.afterHtml)}})]:_vm._e()],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('editable-base',{ref:\"base\",attrs:{\"mode\":_vm.mode,\"label\":_vm.label,\"error-message\":_vm.errorMessage,\"readonly\":_vm.readonly,\"show-buttons\":_vm.showButtons,\"showErrorMessage\":_vm.showErrorMessage}},[(_vm.mode === _vm.modes.edit)?_c('toggle-button',{class:[\n 'align-self-center',\n 'est-input',\n _vm.mode === _vm.modes.processing ? 'text-secondary' : '',\n _vm.readonly ? 'readonly' : ''\n ],attrs:{\"id\":_vm.id,\"on\":_vm.editValue},on:{\"click\":_vm.handleToggleClick}}):_c('b-form-input',{attrs:{\"plaintext\":true},on:{\"click\":_vm.handleMaybeEditClick},model:{value:(_vm.inputText),callback:function ($$v) {_vm.inputText=$$v},expression:\"inputText\"}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('form',{class:[\n 'est-form',\n _vm.mode === _vm.modes.edit || _vm.mode === _vm.modes.processing ? 'active' : 'inactive',\n _vm.readonly ? 'readonly' : ''\n ],attrs:{\"disabled\":_vm.readonly},on:{\"submit\":function($event){$event.preventDefault();\n _vm.$emit(_vm.events.save);}}},[_c('div',{staticClass:\"form-group est-container\"},[(!_vm.noLabel)?_c('label',{class:[\n 'est-label',\n _vm.mode === _vm.modes.edit || _vm.mode === _vm.modes.processing\n ? 'active'\n : 'inactive',\n _vm.readonly ? 'readonly' : ''\n ],attrs:{\"for\":_vm.id},on:{\"click\":_vm.handleMaybeEditClick}},[_vm._v(_vm._s(_vm.label)+\" \"),(!_vm.readonly)?_c('b-icon-pencil',{staticClass:\"est-pencil-icon\",on:{\"click\":_vm.handleMaybeEditClick}}):_vm._e(),(_vm.mode === _vm.modes.processing)?_c('div',{staticClass:\"est-processing\"},[_c('b-spinner',{staticClass:\"est-spinner\",attrs:{\"label\":\"loading\",\"small\":\"\",\"variant\":\"secondary\"}}),_c('span',{staticClass:\"text-secondary est-processing-text\"},[_vm._v(\"saving...\")])],1):_vm._e()],1):_vm._e(),_c('div',{class:[\n _vm.inlineFlex ? 'd-inline-flex' : 'd-flex',\n 'align-content-center est-secondary-container',\n _vm.noLabel ? 'inline-icons' : ''\n ]},[(_vm.noLabel)?[(!_vm.readonly)?_c('b-icon-pencil',{staticClass:\"est-pencil-icon\",on:{\"click\":_vm.handleMaybeEditClick}}):_vm._e(),(_vm.mode === _vm.modes.processing)?_c('div',{staticClass:\"est-processing\"},[_c('b-spinner',{staticClass:\"est-spinner\",attrs:{\"label\":\"loading\",\"small\":\"\",\"variant\":\"secondary\"}}),_c('span',{staticClass:\"text-secondary est-processing-text\"},[_vm._v(\"saving...\")])],1):_vm._e()]:_vm._e(),_vm._t(\"default\"),(_vm.mode === _vm.modes.edit && true === _vm.showButtons)?[_c('b-button',{staticClass:\"field-action-button est-field-action-save red align-self-center\",attrs:{\"variant\":\"primary\",\"type\":\"submit\"}},[_vm._v(\" save \")]),_c('b-button',{staticClass:\"field-action-button field-action-cancel align-self-center\",attrs:{\"variant\":\"link\"},on:{\"click\":function($event){return _vm.$emit(_vm.events.cancelEdit)}}},[_vm._v(\" cancel \")])]:_vm._e()],2),_c('p',{staticClass:\"small muted text-danger\"},[(_vm.showErrorMessage)?[_vm._v(_vm._s(_vm.errorMessage))]:_vm._e()],2)])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","let countToken = \"{count}\";\r\n\r\n/**\r\n * Returns a unique ID factory\r\n * @param template must contain `{count}` somewhere (to be replaced, to allow uniqueness)\r\n * @returns {function(): *}\r\n * @constructor\r\n */\r\nexport default function CreateIdFactory(template) {\r\n if (!template.includes(countToken)) {\r\n throw \"ID template must contain '{count}' token\";\r\n }\r\n let count = 0;\r\n return () => template.replace(countToken, count++);\r\n}\r\n","\r\n \r\n \r\n\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EditableBase.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EditableBase.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EditableBase.vue?vue&type=template&id=694d50ba&scoped=true&\"\nimport script from \"./EditableBase.vue?vue&type=script&lang=js&\"\nexport * from \"./EditableBase.vue?vue&type=script&lang=js&\"\nimport style0 from \"./EditableBase.vue?vue&type=style&index=0&id=694d50ba&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"694d50ba\",\n null\n \n)\n\nexport default component.exports","\r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EditableBool.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EditableBool.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EditableBool.vue?vue&type=template&id=94438e36&scoped=true&\"\nimport script from \"./EditableBool.vue?vue&type=script&lang=js&\"\nexport * from \"./EditableBool.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"94438e36\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('editable-base',{ref:\"base\",attrs:{\"mode\":_vm.mode,\"label\":_vm.label,\"error-message\":_vm.errorMessage,\"readonly\":_vm.readonly,\"show-buttons\":_vm.showButtons,\"showErrorMessage\":_vm.showErrorMessage}},[(_vm.editValue || _vm.mode === _vm.modes.edit)?_c('b-form-input',{class:[\n 'est-input',\n _vm.mode === _vm.modes.processing ? 'text-secondary' : '',\n _vm.readonly ? 'readonly' : ''\n ],attrs:{\"id\":_vm.id,\"plaintext\":_vm.mode !== _vm.modes.edit,\"readonly\":_vm.readonly},on:{\"click\":_vm.handleMaybeEditClick},model:{value:(_vm.editValue),callback:function ($$v) {_vm.editValue=$$v},expression:\"editValue\"}}):[_c('p',{staticClass:\"text-muted small font-italic\",on:{\"click\":_vm.handleMaybeEditClick}},[_vm._v(\" no value set \"+_vm._s(_vm.readonly ? \"\" : \"— click to add\")+\" \")])]],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n \r\n \r\n \r\n no value set {{ readonly ? \"\" : \"— click to add\" }}\r\n
\r\n \r\n \r\n \r\n\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EditableText.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EditableText.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EditableText.vue?vue&type=template&id=26a2d0d3&scoped=true&\"\nimport script from \"./EditableText.vue?vue&type=script&lang=js&\"\nexport * from \"./EditableText.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"26a2d0d3\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('editable-base',{ref:\"base\",attrs:{\"mode\":_vm.mode,\"label\":_vm.label,\"error-message\":_vm.errorMessage,\"readonly\":_vm.readonly,\"show-buttons\":_vm.showButtons,\"inlineFlex\":false,\"showErrorMessage\":_vm.showErrorMessage}},[(_vm.mode === _vm.modes.edit && !_vm.readonly)?_c('b-form-textarea',{class:['est-input', _vm.mode === _vm.modes.processing ? 'text-secondary' : ''],attrs:{\"id\":_vm.id},on:{\"click\":_vm.handleMaybeEditClick},model:{value:(_vm.editValue),callback:function ($$v) {_vm.editValue=$$v},expression:\"editValue\"}}):(_vm.mode !== _vm.modes.edit && _vm.editValue)?[_c('p',{staticClass:\"placeholder-text\",on:{\"click\":_vm.handleMaybeEditClick}},[_vm._v(\" \"+_vm._s(_vm.editValue)+\" \")])]:[_c('p',{staticClass:\"text-muted small font-italic\",on:{\"click\":_vm.handleMaybeEditClick}},[_vm._v(\" no value set \"+_vm._s(_vm.readonly ? \"\" : \"— click to add\")+\" \")])]],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n \r\n \r\n {{ editValue }}\r\n
\r\n \r\n no value set {{ readonly ? \"\" : \"— click to add\" }}\r\n
\r\n \r\n \r\n \r\n\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EditableTextArea.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EditableTextArea.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EditableTextArea.vue?vue&type=template&id=5793c5b3&scoped=true&\"\nimport script from \"./EditableTextArea.vue?vue&type=script&lang=js&\"\nexport * from \"./EditableTextArea.vue?vue&type=script&lang=js&\"\nimport style0 from \"./EditableTextArea.vue?vue&type=style&index=0&id=5793c5b3&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5793c5b3\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('editable-base',{ref:\"base\",attrs:{\"mode\":_vm.mode,\"label\":_vm.label,\"error-message\":_vm.errorMessage,\"readonly\":_vm.readonly,\"show-buttons\":_vm.showButtons,\"showErrorMessage\":_vm.showErrorMessage}},[(_vm.mode === _vm.modes.edit)?_c('b-form-select',{class:[\n 'est-input',\n _vm.mode === _vm.modes.processing ? 'text-secondary' : '',\n _vm.readonly ? 'readonly' : ''\n ],attrs:{\"id\":_vm.id,\"options\":_vm.options,\"disabled\":_vm.mode !== _vm.modes.edit,\"readonly\":_vm.readonly},on:{\"click\":_vm.handleMaybeEditClick},model:{value:(_vm.editValue),callback:function ($$v) {_vm.editValue=$$v},expression:\"editValue\"}}):_vm._e(),(_vm.editValue && _vm.mode === _vm.modes.default)?[_c('b-form-input',{attrs:{\"plaintext\":true},on:{\"click\":_vm.handleMaybeEditClick},model:{value:(_vm.inputText),callback:function ($$v) {_vm.inputText=$$v},expression:\"inputText\"}})]:_vm._e(),(!_vm.editValue && _vm.mode === _vm.modes.default)?[_c('p',{staticClass:\"text-muted small font-italic\",on:{\"click\":_vm.handleMaybeEditClick}},[_vm._v(\" no value set \"+_vm._s(_vm.readonly ? \"\" : \"— click to select\")+\" \")])]:_vm._e()],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n no value set {{ readonly ? \"\" : \"— click to select\" }}\r\n
\r\n \r\n \r\n \r\n\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EditableSelect.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EditableSelect.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EditableSelect.vue?vue&type=template&id=01efb291&scoped=true&\"\nimport script from \"./EditableSelect.vue?vue&type=script&lang=js&\"\nexport * from \"./EditableSelect.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"01efb291\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (null !== _vm.user)?_c('div',{staticClass:\"linked-user-container\"},[_c('div',[_vm._v(\" \"+_vm._s(_vm.user.firstName)+\" \"+_vm._s(_vm.user.lastName)+\" - \"),_c('small',[_vm._v(_vm._s(_vm.user.email)+\" (\"+_vm._s(_vm.relationship)+\")\")])]),_c('b-button',{staticClass:\"red lu-action-item\",attrs:{\"variant\":\"primary\",\"size\":\"sm\",\"disabled\":_vm.state.isBusy},on:{\"click\":function($event){return _vm.emitUp(_vm.events.messageUser)}}},[_c('b-icon-envelope-fill',{staticClass:\"linked-user-button-icon\"}),_vm._v(\" send message\")],1),_c('b-button',{staticClass:\"red lu-action-item\",attrs:{\"variant\":\"primary\",\"size\":\"sm\",\"disabled\":_vm.state.isBusy},on:{\"click\":function($event){return _vm.emitUp(_vm.events.viewProfile)}}},[_c('b-icon-person-fill',{staticClass:\"linked-user-button-icon\"}),_vm._v(\" \"+_vm._s(_vm.readonly ? \"view profile\" : \"edit user\")+\" \")],1),(!_vm.readonly)?_c('b-button',{staticClass:\"red lu-action-item\",attrs:{\"variant\":\"primary\",\"size\":\"sm\",\"disabled\":_vm.state.isBusy},on:{\"click\":function($event){return _vm.emitUp(_vm.events.removeUser)}}},[_c('b-icon-x',{staticClass:\"linked-user-button-icon\"}),_vm._v(\" remove\")],1):_vm._e()],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\r\n * Emits the event on every ancestor of the root Vue instance\r\n * @param {string} name event name\r\n * @param {any} payload event payload (usually an object)\r\n * @param {Vue} root vue componant instance (`this` from inside the component)\r\n */\r\nexport function EmitUp(name, payload, root)\r\n{\r\n root.$emit(name, payload);\r\n let parent = root.$parent;\r\n while (parent) {\r\n parent.$emit(name, payload);\r\n parent = parent.$parent;\r\n }\r\n}","\r\n \r\n
\r\n {{ user.firstName }} {{ user.lastName }} -\r\n {{ user.email }} ({{ relationship }}) \r\n
\r\n
\r\n send message\r\n \r\n {{ readonly ? \"view profile\" : \"edit user\" }} remove\r\n
\r\n \r\n\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LinkedUser.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LinkedUser.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./LinkedUser.vue?vue&type=template&id=2eba40b5&scoped=true&\"\nimport script from \"./LinkedUser.vue?vue&type=script&lang=js&\"\nexport * from \"./LinkedUser.vue?vue&type=script&lang=js&\"\nimport style0 from \"./LinkedUser.vue?vue&type=style&index=0&id=2eba40b5&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2eba40b5\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isVisible)?_c('div',{staticClass:\"user-linker-container\"},[(!_vm.state.isSearching)?_c('b-button',{staticClass:\"user-linker-search-button\",on:{\"click\":function($event){_vm.state.isSearching = true}}},[_c('b-icon-plus-circle-fill'),_vm._v(\" \"+_vm._s(_vm.relationship))],1):_c('div',{staticClass:\"user-linker-search-container\"},[_c('multi-select',{ref:\"select\",attrs:{\"disabled\":_vm.state.isAdding,\"loading\":_vm.state.isRunningQuery,\"multiple\":_vm.multiple,\"internal-search\":false,\"close-on-select\":true,\"clear-on-select\":false,\"preserve-search\":false,\"options\":_vm.options,\"placeholder\":(_vm.relationship + \" search\"),\"custom-label\":_vm.userLabel,\"track-by\":\"email\",\"preselect-first\":false,\"no-options\":_vm.noOptions},on:{\"search-change\":_vm.runSearch},model:{value:(_vm.selected),callback:function ($$v) {_vm.selected=$$v},expression:\"selected\"}},[_c('template',{slot:\"noOptions\"},[_vm._v(\" begin typing \")]),_c('template',{slot:\"noResult\"},[_vm._v(\" no users match this search \")])],2),_c('b-button',{staticClass:\"user-linker-add-button red\",attrs:{\"variant\":\"primary\",\"disabled\":null === _vm.selected ||\n (Array.isArray(_vm.selected) && 0 === _vm.selected.length) ||\n _vm.state.isAdding},on:{\"click\":_vm.emitAddEvent}},[_vm._v(\"add \"+_vm._s(_vm.relationship))]),_c('b-button',{staticClass:\"user-linker-cancel-button red\",attrs:{\"disabled\":_vm.state.isAdding,\"variant\":\"primary\"},on:{\"click\":_vm.cancelSearch}},[_vm._v(\"cancel\")])],1)],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n \r\n
\r\n {{ relationship }}\r\n
\r\n \r\n begin typing\r\n \r\n \r\n no users match this search\r\n \r\n \r\n add {{ relationship }} \r\n cancel \r\n
\r\n
\r\n \r\n\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserLinker.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserLinker.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./UserLinker.vue?vue&type=template&id=38a3b186&scoped=true&\"\nimport script from \"./UserLinker.vue?vue&type=script&lang=js&\"\nexport * from \"./UserLinker.vue?vue&type=script&lang=js&\"\nimport style0 from \"./UserLinker.vue?vue&type=style&index=0&id=38a3b186&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"38a3b186\",\n null\n \n)\n\nexport default component.exports","\r\n \r\n
\r\n \r\n \r\n
\r\n {{ metadata.label }} \r\n \r\n \r\n
\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n
Unknown field type: {{ metadata.type }}
\r\n
\r\n
\r\n \r\n
\r\n \r\n\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProfileItem.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProfileItem.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ProfileItem.vue?vue&type=template&id=12f9c4da&scoped=true&\"\nimport script from \"./ProfileItem.vue?vue&type=script&lang=js&\"\nexport * from \"./ProfileItem.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"12f9c4da\",\n null\n \n)\n\nexport default component.exports","\r\n \r\n \r\n\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProfileSection.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProfileSection.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ProfileSection.vue?vue&type=template&id=75a3bb03&scoped=true&\"\nimport script from \"./ProfileSection.vue?vue&type=script&lang=js&\"\nexport * from \"./ProfileSection.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"75a3bb03\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('editable-base',{ref:\"base\",attrs:{\"mode\":_vm.mode,\"label\":_vm.label,\"error-message\":_vm.errorMessage,\"readonly\":_vm.readonly,\"show-buttons\":_vm.showButtons,\"showErrorMessage\":_vm.showErrorMessage}},[(_vm.mode === _vm.modes.edit)?[_c('b-input-group',[_c('b-input-group-prepend',[_c('b-input-group-text',[_vm._v(\"subject / object / possessive\")])],1),_vm._l((this.editValue),function(value,index){return [_c('b-form-input',{key:(\"field_\" + index),class:[\n 'est-input',\n _vm.mode === _vm.modes.processing ? 'text-secondary' : '',\n _vm.readonly ? 'readonly' : ''\n ],attrs:{\"id\":_vm.id,\"plaintext\":_vm.mode !== _vm.modes.edit,\"readonly\":_vm.readonly},on:{\"click\":_vm.handleMaybeEditClick},model:{value:(_vm.editValue[index]),callback:function ($$v) {_vm.$set(_vm.editValue, index, $$v)},expression:\"editValue[index]\"}})]})],2)]:(_vm.editValue)?[_c('b-form-input',{attrs:{\"plaintext\":true,\"value\":_vm.editValue.join(_vm.separator)},on:{\"click\":_vm.handleMaybeEditClick}})]:[_c('p',{staticClass:\"text-muted small font-italic\",on:{\"click\":_vm.handleMaybeEditClick}},[_vm._v(\" no value set \"+_vm._s(_vm.readonly ? \"\" : \"— click to add\")+\" \")])]],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n \r\n \r\n \r\n \r\n subject / object / possessive \r\n \r\n \r\n \r\n \r\n \r\n \r\n no value set {{ readonly ? \"\" : \"— click to add\" }}\r\n
\r\n \r\n \r\n \r\n\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EditablePronouns.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EditablePronouns.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EditablePronouns.vue?vue&type=template&id=d5d09c74&scoped=true&\"\nimport script from \"./EditablePronouns.vue?vue&type=script&lang=js&\"\nexport * from \"./EditablePronouns.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"d5d09c74\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('editable-base',{ref:\"base\",attrs:{\"mode\":_vm.innerMode,\"no-label\":true,\"error-message\":_vm.errorMessage,\"readonly\":_vm.readonly,\"show-buttons\":_vm.showButtons,\"showErrorMessage\":_vm.showErrorMessage}},[(_vm.mode === _vm.modes.edit || _vm.mode === _vm.modes.processing)?_c('b-input-group',[_c('b-form-input',{directives:[{name:\"mask\",rawName:\"v-mask\",value:('(###) ###-####'),expression:\"'(###) ###-####'\"}],class:[\n 'est-input',\n _vm.mode === _vm.modes.processing ? 'text-secondary' : '',\n _vm.readonly ? 'readonly' : ''\n ],attrs:{\"id\":_vm.id,\"plaintext\":_vm.mode !== _vm.modes.edit && _vm.mode !== _vm.modes.processing,\"readonly\":_vm.readonly || _vm.mode !== _vm.modes.edit,\"state\":_vm.phoneNumberValidation.getState(_vm.formState.validate)},model:{value:(_vm.editValue.number),callback:function ($$v) {_vm.$set(_vm.editValue, \"number\", $$v)},expression:\"editValue.number\"}}),_c('b-form-select',{attrs:{\"options\":_vm.phoneNumberOptions,\"disabled\":_vm.readonly || _vm.mode !== _vm.modes.edit},model:{value:(_vm.editValue.type),callback:function ($$v) {_vm.$set(_vm.editValue, \"type\", $$v)},expression:\"editValue.type\"}}),_c('b-input-group-append',{attrs:{\"is-text\":\"\"}},[_c('b-form-checkbox',{attrs:{\"disabled\":_vm.readonly || _vm.mode !== _vm.modes.edit},model:{value:(_vm.editValue.isPreferredContactNumber),callback:function ($$v) {_vm.$set(_vm.editValue, \"isPreferredContactNumber\", $$v)},expression:\"editValue.isPreferredContactNumber\"}},[_vm._v(\" Preferred Contact Number\")])],1)],1):_c('div',{on:{\"click\":_vm.handleMaybeEditClick}},[_c('span',{staticClass:\"text-number\"},[_vm._v(_vm._s(_vm._f(\"VMask\")(_vm.editValue.number,\"(###) ###-####\")))]),_c('span',{staticClass:\"text-type text-muted ml-3\"},[_vm._v(_vm._s(_vm.editValue.type))]),(_vm.editValue.isPreferredContactNumber)?_c('span',{staticClass:\"text-preferred small text-muted ml-3\"},[_vm._v(\" preferred contact\")]):_vm._e()]),(_vm.isDeletable && _vm.mode !== _vm.modes.edit && _vm.mode !== _vm.modes.processing)?_c('b-button',{staticClass:\"delete-button red ml-3\",attrs:{\"variant\":\"primary\",\"size\":\"sm\",\"disabled\":_vm.mode !== _vm.modes.default},on:{\"click\":_vm.emitDeleteRequest}},[_c('b-icon-x'),_vm._v(\" delete\")],1):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nvar placeholderChar = '_';\nvar strFunction = 'function';\n\nvar emptyArray = [];\nfunction convertMaskToPlaceholder() {\n var mask = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : emptyArray;\n var placeholderChar$1 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : placeholderChar;\n\n if (!isArray(mask)) {\n throw new Error('Text-mask:convertMaskToPlaceholder; The mask property must be an array.');\n }\n\n if (mask.indexOf(placeholderChar$1) !== -1) {\n throw new Error('Placeholder character must not be used as part of the mask. Please specify a character ' + 'that is not present in your mask as your placeholder character.\\n\\n' + \"The placeholder character that was received is: \".concat(JSON.stringify(placeholderChar$1), \"\\n\\n\") + \"The mask that was received is: \".concat(JSON.stringify(mask)));\n }\n\n return mask.map(function (char) {\n return char instanceof RegExp ? placeholderChar$1 : char;\n }).join('');\n}\nfunction isArray(value) {\n return Array.isArray && Array.isArray(value) || value instanceof Array;\n}\nvar strCaretTrap = '[]';\nfunction processCaretTraps(mask) {\n var indexes = [];\n var indexOfCaretTrap;\n\n while (indexOfCaretTrap = mask.indexOf(strCaretTrap), indexOfCaretTrap !== -1) {\n indexes.push(indexOfCaretTrap);\n mask.splice(indexOfCaretTrap, 1);\n }\n\n return {\n maskWithoutCaretTraps: mask,\n indexes: indexes\n };\n}\n\nvar emptyArray$1 = [];\nvar emptyString = '';\nfunction conformToMask() {\n var rawValue = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : emptyString;\n var mask = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : emptyArray$1;\n var config = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n if (!isArray(mask)) {\n if (_typeof(mask) === strFunction) {\n mask = mask(rawValue, config);\n mask = processCaretTraps(mask).maskWithoutCaretTraps;\n } else {\n throw new Error('Text-mask:conformToMask; The mask property must be an array.');\n }\n }\n\n var _config$guide = config.guide,\n guide = _config$guide === void 0 ? true : _config$guide,\n _config$previousConfo = config.previousConformedValue,\n previousConformedValue = _config$previousConfo === void 0 ? emptyString : _config$previousConfo,\n _config$placeholderCh = config.placeholderChar,\n placeholderChar$1 = _config$placeholderCh === void 0 ? placeholderChar : _config$placeholderCh,\n _config$placeholder = config.placeholder,\n placeholder = _config$placeholder === void 0 ? convertMaskToPlaceholder(mask, placeholderChar$1) : _config$placeholder,\n currentCaretPosition = config.currentCaretPosition,\n keepCharPositions = config.keepCharPositions;\n var suppressGuide = guide === false && previousConformedValue !== undefined;\n var rawValueLength = rawValue.length;\n var previousConformedValueLength = previousConformedValue.length;\n var placeholderLength = placeholder.length;\n var maskLength = mask.length;\n var editDistance = rawValueLength - previousConformedValueLength;\n var isAddition = editDistance > 0;\n var indexOfFirstChange = currentCaretPosition + (isAddition ? -editDistance : 0);\n var indexOfLastChange = indexOfFirstChange + Math.abs(editDistance);\n\n if (keepCharPositions === true && !isAddition) {\n var compensatingPlaceholderChars = emptyString;\n\n for (var i = indexOfFirstChange; i < indexOfLastChange; i++) {\n if (placeholder[i] === placeholderChar$1) {\n compensatingPlaceholderChars += placeholderChar$1;\n }\n }\n\n rawValue = rawValue.slice(0, indexOfFirstChange) + compensatingPlaceholderChars + rawValue.slice(indexOfFirstChange, rawValueLength);\n }\n\n var rawValueArr = rawValue.split(emptyString).map(function (char, i) {\n return {\n char: char,\n isNew: i >= indexOfFirstChange && i < indexOfLastChange\n };\n });\n\n for (var _i = rawValueLength - 1; _i >= 0; _i--) {\n var char = rawValueArr[_i].char;\n\n if (char !== placeholderChar$1) {\n var shouldOffset = _i >= indexOfFirstChange && previousConformedValueLength === maskLength;\n\n if (char === placeholder[shouldOffset ? _i - editDistance : _i]) {\n rawValueArr.splice(_i, 1);\n }\n }\n }\n\n var conformedValue = emptyString;\n var someCharsRejected = false;\n\n placeholderLoop: for (var _i2 = 0; _i2 < placeholderLength; _i2++) {\n var charInPlaceholder = placeholder[_i2];\n\n if (charInPlaceholder === placeholderChar$1) {\n if (rawValueArr.length > 0) {\n while (rawValueArr.length > 0) {\n var _rawValueArr$shift = rawValueArr.shift(),\n rawValueChar = _rawValueArr$shift.char,\n isNew = _rawValueArr$shift.isNew;\n\n if (rawValueChar === placeholderChar$1 && suppressGuide !== true) {\n conformedValue += placeholderChar$1;\n continue placeholderLoop;\n } else if (mask[_i2].test(rawValueChar)) {\n if (keepCharPositions !== true || isNew === false || previousConformedValue === emptyString || guide === false || !isAddition) {\n conformedValue += rawValueChar;\n } else {\n var rawValueArrLength = rawValueArr.length;\n var indexOfNextAvailablePlaceholderChar = null;\n\n for (var _i3 = 0; _i3 < rawValueArrLength; _i3++) {\n var charData = rawValueArr[_i3];\n\n if (charData.char !== placeholderChar$1 && charData.isNew === false) {\n break;\n }\n\n if (charData.char === placeholderChar$1) {\n indexOfNextAvailablePlaceholderChar = _i3;\n break;\n }\n }\n\n if (indexOfNextAvailablePlaceholderChar !== null) {\n conformedValue += rawValueChar;\n rawValueArr.splice(indexOfNextAvailablePlaceholderChar, 1);\n } else {\n _i2--;\n }\n }\n\n continue placeholderLoop;\n } else {\n someCharsRejected = true;\n }\n }\n }\n\n if (suppressGuide === false) {\n conformedValue += placeholder.substr(_i2, placeholderLength);\n }\n\n break;\n } else {\n conformedValue += charInPlaceholder;\n }\n }\n\n if (suppressGuide && isAddition === false) {\n var indexOfLastFilledPlaceholderChar = null;\n\n for (var _i4 = 0; _i4 < conformedValue.length; _i4++) {\n if (placeholder[_i4] === placeholderChar$1) {\n indexOfLastFilledPlaceholderChar = _i4;\n }\n }\n\n if (indexOfLastFilledPlaceholderChar !== null) {\n conformedValue = conformedValue.substr(0, indexOfLastFilledPlaceholderChar + 1);\n } else {\n conformedValue = emptyString;\n }\n }\n\n return {\n conformedValue: conformedValue,\n meta: {\n someCharsRejected: someCharsRejected\n }\n };\n}\n\nvar NEXT_CHAR_OPTIONAL = {\n __nextCharOptional__: true\n};\nvar defaultMaskReplacers = {\n '#': /\\d/,\n A: /[a-z]/i,\n N: /[a-z0-9]/i,\n '?': NEXT_CHAR_OPTIONAL,\n X: /./\n};\n\nvar stringToRegexp = function stringToRegexp(str) {\n var lastSlash = str.lastIndexOf('/');\n return new RegExp(str.slice(1, lastSlash), str.slice(lastSlash + 1));\n};\n\nvar makeRegexpOptional = function makeRegexpOptional(charRegexp) {\n return stringToRegexp(charRegexp.toString().replace(/.(\\/)[gmiyus]{0,6}$/, function (match) {\n return match.replace('/', '?/');\n }));\n};\n\nvar escapeIfNeeded = function escapeIfNeeded(char) {\n return '[\\\\^$.|?*+()'.indexOf(char) > -1 ? \"\\\\\".concat(char) : char;\n};\n\nvar charRegexp = function charRegexp(char) {\n return new RegExp(\"/[\".concat(escapeIfNeeded(char), \"]/\"));\n};\n\nvar isRegexp = function isRegexp(entity) {\n return entity instanceof RegExp;\n};\n\nvar castToRegexp = function castToRegexp(char) {\n return isRegexp(char) ? char : charRegexp(char);\n};\n\nfunction maskToRegExpMask(mask) {\n var maskReplacers = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultMaskReplacers;\n return mask.map(function (char, index, array) {\n var maskChar = maskReplacers[char] || char;\n var previousChar = array[index - 1];\n var previousMaskChar = maskReplacers[previousChar] || previousChar;\n\n if (maskChar === NEXT_CHAR_OPTIONAL) {\n return null;\n }\n\n if (previousMaskChar === NEXT_CHAR_OPTIONAL) {\n return makeRegexpOptional(castToRegexp(maskChar));\n }\n\n return maskChar;\n }).filter(Boolean);\n}\n\nfunction stringMaskToRegExpMask(stringMask) {\n var maskReplacers = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultMaskReplacers;\n return maskToRegExpMask(stringMask.split(''), maskReplacers);\n}\nfunction arrayMaskToRegExpMask(arrayMask) {\n var maskReplacers = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultMaskReplacers;\n var flattenedMask = arrayMask.map(function (part) {\n if (part instanceof RegExp) {\n return part;\n }\n\n if (typeof part === 'string') {\n return part.split('');\n }\n\n return null;\n }).filter(Boolean).reduce(function (mask, part) {\n return mask.concat(part);\n }, []);\n return maskToRegExpMask(flattenedMask, maskReplacers);\n}\n\nvar trigger = function trigger(el, type) {\n var e = document.createEvent('HTMLEvents');\n e.initEvent(type, true, true);\n el.dispatchEvent(e);\n};\nvar queryInputElementInside = function queryInputElementInside(el) {\n return el instanceof HTMLInputElement ? el : el.querySelector('input') || el;\n};\nvar isFunction = function isFunction(val) {\n return typeof val === 'function';\n};\nvar isString = function isString(val) {\n return typeof val === 'string';\n};\nvar isRegexp$1 = function isRegexp(val) {\n return val instanceof RegExp;\n};\n\nfunction createOptions() {\n var elementOptions = new Map();\n var defaultOptions = {\n previousValue: '',\n mask: []\n };\n\n function get(el) {\n return elementOptions.get(el) || _objectSpread2({}, defaultOptions);\n }\n\n function partiallyUpdate(el, newOptions) {\n elementOptions.set(el, _objectSpread2(_objectSpread2({}, get(el)), newOptions));\n }\n\n function remove(el) {\n elementOptions.delete(el);\n }\n\n return {\n partiallyUpdate: partiallyUpdate,\n remove: remove,\n get: get\n };\n}\n\nvar options = createOptions();\n\nfunction triggerInputUpdate(el) {\n trigger(el, 'input');\n}\n\nfunction updateValue(el) {\n var force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var value = el.value;\n\n var _options$get = options.get(el),\n previousValue = _options$get.previousValue,\n mask = _options$get.mask;\n\n var isValueChanged = value !== previousValue;\n var isLengthIncreased = value.length > previousValue.length;\n var isUpdateNeeded = value && isValueChanged && isLengthIncreased;\n\n if ((force || isUpdateNeeded) && mask) {\n var _conformToMask = conformToMask(value, mask, {\n guide: false\n }),\n conformedValue = _conformToMask.conformedValue;\n\n el.value = conformedValue;\n triggerInputUpdate(el);\n }\n\n options.partiallyUpdate(el, {\n previousValue: value\n });\n}\n\nfunction updateMask(el, inputMask, maskReplacers) {\n var mask;\n\n if (Array.isArray(inputMask)) {\n mask = arrayMaskToRegExpMask(inputMask, maskReplacers);\n } else if (isFunction(inputMask)) {\n mask = inputMask;\n } else if (isString(inputMask) && inputMask.length > 0) {\n mask = stringMaskToRegExpMask(inputMask, maskReplacers);\n } else {\n mask = inputMask;\n }\n\n options.partiallyUpdate(el, {\n mask: mask\n });\n}\n\nfunction extendMaskReplacers(maskReplacers) {\n var baseMaskReplacers = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultMaskReplacers;\n\n if (maskReplacers === null || Array.isArray(maskReplacers) || _typeof(maskReplacers) !== 'object') {\n return baseMaskReplacers;\n }\n\n return Object.keys(maskReplacers).reduce(function (extendedMaskReplacers, key) {\n var value = maskReplacers[key];\n\n if (value !== null && !(value instanceof RegExp)) {\n return extendedMaskReplacers;\n }\n\n return _objectSpread2(_objectSpread2({}, extendedMaskReplacers), {}, _defineProperty({}, key, value));\n }, baseMaskReplacers);\n}\n\nfunction maskToString(mask) {\n var maskArray = Array.isArray(mask) ? mask : [mask];\n var filteredMaskArray = maskArray.filter(function (part) {\n return isString(part) || isRegexp$1(part);\n });\n return filteredMaskArray.toString();\n}\n\nfunction createDirective() {\n var directiveOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var instanceMaskReplacers = extendMaskReplacers(directiveOptions && directiveOptions.placeholders);\n return {\n bind: function bind(el, _ref) {\n var value = _ref.value;\n el = queryInputElementInside(el);\n updateMask(el, value, instanceMaskReplacers);\n updateValue(el);\n },\n componentUpdated: function componentUpdated(el, _ref2) {\n var value = _ref2.value,\n oldValue = _ref2.oldValue;\n el = queryInputElementInside(el);\n var isMaskChanged = isFunction(value) || maskToString(oldValue) !== maskToString(value);\n\n if (isMaskChanged) {\n updateMask(el, value, instanceMaskReplacers);\n }\n\n updateValue(el, isMaskChanged);\n },\n unbind: function unbind(el) {\n el = queryInputElementInside(el);\n options.remove(el);\n }\n };\n}\nvar directive = createDirective();\n\nvar filter = (function (value, stringMask) {\n var mask = stringMaskToRegExpMask(stringMask);\n\n var _conformToMask = conformToMask(value, mask, {\n guide: false\n }),\n conformedValue = _conformToMask.conformedValue;\n\n return conformedValue;\n});\n\nvar plugin = (function (Vue) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n Vue.directive('mask', createDirective(options));\n Vue.filter('VMask', filter);\n});\n\nexport default plugin;\nexport { directive as VueMaskDirective, filter as VueMaskFilter, plugin as VueMaskPlugin };\n","\r\n \r\n \r\n \r\n \r\n \r\n \r\n Preferred Contact Number \r\n \r\n \r\n \r\n {{\r\n editValue.number | VMask(\"(###) ###-####\")\r\n }} \r\n {{ editValue.type }} \r\n \r\n preferred contact \r\n
\r\n delete \r\n \r\n \r\n\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EditablePhoneNumber.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EditablePhoneNumber.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EditablePhoneNumber.vue?vue&type=template&id=62eabaac&\"\nimport script from \"./EditablePhoneNumber.vue?vue&type=script&lang=js&\"\nexport * from \"./EditablePhoneNumber.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"identity-values-edit-form pb-3\"},[_c('form',{on:{\"submit\":_vm.handleSubmit}},[_c('div',{staticClass:\"d-inline-flex p2 flex-wrap\"},[_c('b-form-group',{staticClass:\"mr-2\",attrs:{\"label\":\"First Name\"}},[_c('b-form-input',{attrs:{\"placeholder\":\"first name\",\"state\":_vm.firstNameValidation.getState(_vm.validate)},model:{value:(_vm.firstName),callback:function ($$v) {_vm.firstName=$$v},expression:\"firstName\"}}),_c('b-form-invalid-feedback',{attrs:{\"state\":_vm.firstNameValidation.getState(_vm.validate)}},[_vm._v(_vm._s(_vm.firstNameValidation.errorMessage))])],1),_c('b-form-group',{staticClass:\"mr-2\",attrs:{\"label\":\"Middle Name\"}},[_c('b-form-input',{attrs:{\"placeholder\":\"middle name\"},model:{value:(_vm.middleName),callback:function ($$v) {_vm.middleName=$$v},expression:\"middleName\"}})],1),_c('b-form-group',{attrs:{\"label\":\"Last Name\"}},[_c('b-form-input',{attrs:{\"placeholder\":\"last name\",\"state\":_vm.lastNameValidation.getState(_vm.validate)},model:{value:(_vm.lastName),callback:function ($$v) {_vm.lastName=$$v},expression:\"lastName\"}}),_c('b-form-invalid-feedback',{attrs:{\"state\":_vm.lastNameValidation.getState(_vm.validate)}},[_vm._v(_vm._s(_vm.lastNameValidation.errorMessage))])],1)],1),_c('b-form-group',{attrs:{\"label\":\"Email\"}},[_c('b-form-input',{attrs:{\"placeholder\":\"email\",\"state\":_vm.emailValidation.getState(_vm.validate)},model:{value:(_vm.email),callback:function ($$v) {_vm.email=$$v},expression:\"email\"}}),_c('b-form-invalid-feedback',{attrs:{\"state\":_vm.emailValidation.getState(_vm.validate)}},[_vm._v(_vm._s(_vm.emailValidation.errorMessage))])],1),_c('b-button',{attrs:{\"type\":\"submit\",\"variant\":\"primary\"}},[_vm._v(\"submit\")]),_c('b-button',{attrs:{\"variant\":\"link\"},on:{\"click\":_vm.handleCancel}},[_vm._v(\"cancel\")])],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n \r\n \r\n\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./IdentityValuesEditForm.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./IdentityValuesEditForm.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./IdentityValuesEditForm.vue?vue&type=template&id=34816d52&scoped=true&\"\nimport script from \"./IdentityValuesEditForm.vue?vue&type=script&lang=js&\"\nexport * from \"./IdentityValuesEditForm.vue?vue&type=script&lang=js&\"\nimport style0 from \"./IdentityValuesEditForm.vue?vue&type=style&index=0&id=34816d52&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"34816d52\",\n null\n \n)\n\nexport default component.exports","\r\n \r\n
{{ user.firstName }} {{ user.middleName }} {{ user.lastName }} \r\n
\r\n {{ user.email }}\r\n
\r\n
\r\n \r\n \r\n send message\r\n \r\n \r\n \r\n edit name and email\r\n \r\n
\r\n
\r\n
\r\n \r\n Mentor: \r\n \r\n
\r\n \r\n Student: \r\n \r\n
\r\n \r\n
\r\n \r\n {{ role }} \r\n
\r\n \r\n
\r\n
\r\n
Contact Numbers \r\n
\r\n
\r\n
add phone\r\n number\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserProfileEditView.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserProfileEditView.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./UserProfileEditView.vue?vue&type=template&id=8b132c40&scoped=true&\"\nimport script from \"./UserProfileEditView.vue?vue&type=script&lang=js&\"\nexport * from \"./UserProfileEditView.vue?vue&type=script&lang=js&\"\nimport style0 from \"./UserProfileEditView.vue?vue&type=style&index=0&id=8b132c40&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"8b132c40\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"mentor-message-view\"},[(!_vm.sent)?_c('form',{on:{\"submit\":_vm.submit}},[(_vm.validRecipients.length > 1)?_c('b-form-group',{attrs:{\"label\":\"Select Message Recipients\",\"label-for\":_vm.recipientSelectId}},[_c('multi-select',{ref:\"recipientsInput\",class:[false === _vm.recipients.getState(_vm.validate) ? 'error' : ''],attrs:{\"disabled\":_vm.sending,\"id\":_vm.recipientSelectId,\"options\":_vm.validRecipients,\"multiple\":true,\"close-on-select\":true,\"clear-on-select\":false,\"preserve-search\":true,\"placeholder\":\"recipients\",\"custom-label\":_vm.recipientLabel,\"track-by\":_vm.trackBy,\"preselect-first\":false},model:{value:(_vm.formData.recipients),callback:function ($$v) {_vm.$set(_vm.formData, \"recipients\", $$v)},expression:\"formData.recipients\"}}),_c('b-form-invalid-feedback',{attrs:{\"state\":_vm.recipients.getState(_vm.validate)}},[_vm._v(\"You must have at least one recipient\")])],1):_vm._e(),(1 === _vm.validRecipients.length)?_c('b-form-group',{attrs:{\"label\":\"Recipient\"}},[_c('b-form-input',{attrs:{\"readonly\":\"true\",\"value\":_vm.recipientLabel(_vm.validRecipients[0])}})],1):_vm._e(),_c('b-form-group',{attrs:{\"label\":\"Subject\"}},[_c('b-form-input',{staticClass:\"form-control\",attrs:{\"disabled\":_vm.sending,\"state\":_vm.subject.getState(_vm.validate),\"type\":\"text\",\"placeholder\":\"email subject\",\"id\":_vm.subjectId},model:{value:(_vm.formData.subject),callback:function ($$v) {_vm.$set(_vm.formData, \"subject\", $$v)},expression:\"formData.subject\"}}),_c('b-form-invalid-feedback',{attrs:{\"state\":_vm.subject.getState(_vm.validate)}},[_vm._v(\"You must enter a subject\")])],1),_c('b-form-group',{attrs:{\"label\":\"Message\"}},[_c('b-form-textarea',{staticClass:\"form-control\",attrs:{\"disabled\":_vm.sending,\"state\":_vm.body.getState(_vm.validate),\"id\":_vm.messageId},model:{value:(_vm.formData.body),callback:function ($$v) {_vm.$set(_vm.formData, \"body\", $$v)},expression:\"formData.body\"}}),_c('b-form-invalid-feedback',{attrs:{\"state\":_vm.body.getState(_vm.validate)}},[_vm._v(\"You must enter a message body\")])],1),_c('b-button',{staticClass:\"red\",attrs:{\"variant\":\"primary\",\"type\":\"submit\",\"disabled\":_vm.sending}},[(_vm.sending)?_c('b-spinner',{staticClass:\"submitting-spinner\",attrs:{\"small\":\"\"}}):_vm._e(),_vm._v(\" \"+_vm._s(_vm.sending ? \"Submitting...\" : \"Submit\"))],1)],1):_c('div',[_c('p',[_vm._v(\"Message sent.\")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import MentorApplicationApi from \"../lib/MentorApplicationApi\";\r\nimport MultiSelect from \"vue-multiselect\";\r\nimport {\r\n BFormGroup,\r\n BFormInput,\r\n BFormTextarea,\r\n BButton,\r\n BSpinner,\r\n BFormInvalidFeedback\r\n} from \"bootstrap-vue\";\r\nimport \"vue-multiselect/dist/vue-multiselect.min.css\";\r\nimport IdGeneratorFactory from \"../lib/IdGeneratorFactory\";\r\nlet idGenerator = IdGeneratorFactory(\"send_message_{count}\");\r\nimport { IsNotEmptyArray, IsNotEmptyString } from \"../lib/Validation\";\r\n\r\nexport const ToUsersMixin = {\r\n data() {\r\n return {\r\n trackBy: \"email\"\r\n };\r\n },\r\n methods: {\r\n recipientLabel: option =>\r\n `${option.firstName} ${option.lastName} (${option.email})`,\r\n submit(e) {\r\n e.preventDefault();\r\n this.validate = true;\r\n if (this.hasValidationErrors) {\r\n return;\r\n }\r\n this.sending = true;\r\n let that = this;\r\n this.mentorApplicationApi\r\n .sendMessage(\r\n this.userId,\r\n this.formData.recipients.map(x => x.email),\r\n this.formData.subject,\r\n this.formData.body\r\n )\r\n .then(\r\n () => {\r\n that.sent = true;\r\n that.sending = false;\r\n },\r\n error => {\r\n that.sending = false;\r\n alert(\r\n `Unable to send the email: ${\r\n null === error?.response?.data?.error\r\n ? \"unknown error\"\r\n : error.response.data.error\r\n }`\r\n );\r\n }\r\n )\r\n .catch(() => {\r\n alert(`Unknown error sending the email`);\r\n that.sending = false;\r\n });\r\n }\r\n }\r\n};\r\n\r\nexport const ToRolesMixin = {\r\n data() {\r\n return {\r\n trackBy: undefined\r\n };\r\n },\r\n methods: {\r\n recipientLabel: option => option,\r\n submit(e) {\r\n e.preventDefault();\r\n this.validate = true;\r\n if (this.hasValidationErrors) {\r\n return;\r\n }\r\n this.sending = true;\r\n let that = this;\r\n this.mentorApplicationApi\r\n .sendBulkMessage(\r\n this.formData.recipients,\r\n this.formData.subject,\r\n this.formData.body\r\n )\r\n .then(\r\n () => {\r\n that.sent = true;\r\n that.sending = false;\r\n },\r\n error => {\r\n that.sending = false;\r\n alert(\r\n `Unable to send the email: ${\r\n null === error?.response?.data?.error\r\n ? \"unknown error\"\r\n : error.response.data.error\r\n }`\r\n );\r\n }\r\n )\r\n .catch(() => {\r\n alert(`Unknown error sending the email`);\r\n that.sending = false;\r\n });\r\n }\r\n }\r\n};\r\n\r\nexport const CommonMixin = {\r\n components: {\r\n MultiSelect,\r\n BFormGroup,\r\n BFormInput,\r\n BFormTextarea,\r\n BButton,\r\n BSpinner,\r\n BFormInvalidFeedback\r\n },\r\n props: {\r\n userId: String,\r\n validRecipients: Array,\r\n initialSubject: String,\r\n initialMessage: String,\r\n initialRecipients: Array,\r\n apiRootUrl: String\r\n },\r\n computed: {\r\n recipients() {\r\n return IsNotEmptyArray(this.formData.recipients);\r\n },\r\n body() {\r\n return IsNotEmptyString(this.formData.body);\r\n },\r\n subject() {\r\n return IsNotEmptyString(this.formData.subject);\r\n },\r\n hasValidationErrors() {\r\n return [this.recipients, this.body, this.subject].some(\r\n x => true !== x.isValid\r\n );\r\n }\r\n },\r\n mounted() {\r\n // set the recipient if there is only one option\r\n if (1 === this.validRecipients.length) {\r\n this.formData.recipients = [this.validRecipients[0]];\r\n }\r\n },\r\n data: function() {\r\n return {\r\n recipientSelectId: idGenerator(),\r\n sent: false,\r\n sending: false,\r\n validate: false,\r\n mentorApplicationApi: new MentorApplicationApi(this.apiRootUrl),\r\n formData: {\r\n recipients: [],\r\n subject: null,\r\n body: null\r\n }\r\n };\r\n }\r\n};\r\n"," \r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SendMessageView.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SendMessageView.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SharedMessageBase.html?vue&type=template&id=621fe104&\"\nimport script from \"./SendMessageView.vue?vue&type=script&lang=js&\"\nexport * from \"./SendMessageView.vue?vue&type=script&lang=js&\"\nimport style0 from \"../lib/multiselect-compat.css?vue&type=style&index=0&lang=css&\"\nimport style1 from \"./SharedMessageBase.css?vue&type=style&index=1&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"mentor-message-view\"},[(!_vm.sent)?_c('form',{on:{\"submit\":_vm.submit}},[(_vm.validRecipients.length > 1)?_c('b-form-group',{attrs:{\"label\":\"Select Message Recipients\",\"label-for\":_vm.recipientSelectId}},[_c('multi-select',{ref:\"recipientsInput\",class:[false === _vm.recipients.getState(_vm.validate) ? 'error' : ''],attrs:{\"disabled\":_vm.sending,\"id\":_vm.recipientSelectId,\"options\":_vm.validRecipients,\"multiple\":true,\"close-on-select\":true,\"clear-on-select\":false,\"preserve-search\":true,\"placeholder\":\"recipients\",\"custom-label\":_vm.recipientLabel,\"track-by\":_vm.trackBy,\"preselect-first\":false},model:{value:(_vm.formData.recipients),callback:function ($$v) {_vm.$set(_vm.formData, \"recipients\", $$v)},expression:\"formData.recipients\"}}),_c('b-form-invalid-feedback',{attrs:{\"state\":_vm.recipients.getState(_vm.validate)}},[_vm._v(\"You must have at least one recipient\")])],1):_vm._e(),(1 === _vm.validRecipients.length)?_c('b-form-group',{attrs:{\"label\":\"Recipient\"}},[_c('b-form-input',{attrs:{\"readonly\":\"true\",\"value\":_vm.recipientLabel(_vm.validRecipients[0])}})],1):_vm._e(),_c('b-form-group',{attrs:{\"label\":\"Subject\"}},[_c('b-form-input',{staticClass:\"form-control\",attrs:{\"disabled\":_vm.sending,\"state\":_vm.subject.getState(_vm.validate),\"type\":\"text\",\"placeholder\":\"email subject\",\"id\":_vm.subjectId},model:{value:(_vm.formData.subject),callback:function ($$v) {_vm.$set(_vm.formData, \"subject\", $$v)},expression:\"formData.subject\"}}),_c('b-form-invalid-feedback',{attrs:{\"state\":_vm.subject.getState(_vm.validate)}},[_vm._v(\"You must enter a subject\")])],1),_c('b-form-group',{attrs:{\"label\":\"Message\"}},[_c('b-form-textarea',{staticClass:\"form-control\",attrs:{\"disabled\":_vm.sending,\"state\":_vm.body.getState(_vm.validate),\"id\":_vm.messageId},model:{value:(_vm.formData.body),callback:function ($$v) {_vm.$set(_vm.formData, \"body\", $$v)},expression:\"formData.body\"}}),_c('b-form-invalid-feedback',{attrs:{\"state\":_vm.body.getState(_vm.validate)}},[_vm._v(\"You must enter a message body\")])],1),_c('b-button',{staticClass:\"red\",attrs:{\"variant\":\"primary\",\"type\":\"submit\",\"disabled\":_vm.sending}},[(_vm.sending)?_c('b-spinner',{staticClass:\"submitting-spinner\",attrs:{\"small\":\"\"}}):_vm._e(),_vm._v(\" \"+_vm._s(_vm.sending ? \"Submitting...\" : \"Submit\"))],1)],1):_c('div',[_c('p',[_vm._v(\"Message sent.\")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }"," \r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SendBulkMessageView.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SendBulkMessageView.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SharedMessageBase.html?vue&type=template&id=77b8ad78&\"\nimport script from \"./SendBulkMessageView.vue?vue&type=script&lang=js&\"\nexport * from \"./SendBulkMessageView.vue?vue&type=script&lang=js&\"\nimport style0 from \"../lib/multiselect-compat.css?vue&type=style&index=0&lang=css&\"\nimport style1 from \"./SharedMessageBase.css?vue&type=style&index=1&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"log-interaction\"},[(!_vm.submitted)?_c('form',{on:{\"submit\":_vm.submit}},[_c('b-form-group',{attrs:{\"label\":\"Which students did you interact with?\",\"label-for\":_vm.studentSelectId}},[_c('multi-select',{class:[\n false === _vm.studentsValidation.getState(_vm.validate) ? 'error' : ''\n ],attrs:{\"disabled\":_vm.submitting,\"id\":_vm.studentSelectId,\"options\":_vm.studentList,\"multiple\":true,\"close-on-select\":true,\"clear-on-select\":false,\"preserve-search\":true,\"placeholder\":\"student(s)\",\"custom-label\":_vm.studentLabel,\"track-by\":\"email\",\"preselect-first\":false},model:{value:(_vm.formData.students),callback:function ($$v) {_vm.$set(_vm.formData, \"students\", $$v)},expression:\"formData.students\"}}),_c('b-form-invalid-feedback',{attrs:{\"state\":_vm.studentsValidation.getState(_vm.validate)}},[_vm._v(\"You must select at least one student to log an interaction \")])],1),_c('b-form-row',[_c('b-col',{attrs:{\"sm\":\"\"}},[_c('b-form-group',{attrs:{\"label\":\"Interaction Type\",\"label-for\":_vm.interactionTypeSelectId}},[_c('multi-select',{class:[\n false === _vm.typeValidation.getState(_vm.validate) ? 'error' : ''\n ],attrs:{\"disabled\":_vm.submitting,\"id\":_vm.interactionTypeSelectId,\"options\":_vm.interactionTypes,\"multiple\":false,\"close-on-select\":true,\"clear-on-select\":false,\"preserve-search\":true,\"label\":\"label\",\"track-by\":\"id\",\"placeholder\":\"interaction type\",\"preselect-first\":false},model:{value:(_vm.formData.interactionTypeValue),callback:function ($$v) {_vm.$set(_vm.formData, \"interactionTypeValue\", $$v)},expression:\"formData.interactionTypeValue\"}}),_c('b-form-invalid-feedback',{attrs:{\"state\":_vm.typeValidation.getState(_vm.validate)}},[_vm._v(\"You must select the type of interaction before the form can be submitted \")])],1)],1),_c('b-col',{attrs:{\"sm\":\"\"}},[_c('b-form-group',{attrs:{\"label\":\"Topics Covered\",\"label-for\":_vm.interactionTopicsSelectId}},[_c('multi-select',{class:[\n false === _vm.topicsValidation.getState(_vm.validate) ? 'error' : ''\n ],attrs:{\"disabled\":_vm.submitting,\"id\":_vm.interactionTopicsSelectId,\"options\":_vm.interactionTopics,\"multiple\":true,\"close-on-select\":true,\"clear-on-select\":false,\"preserve-search\":true,\"label\":\"label\",\"track-by\":\"id\",\"placeholder\":\"topics\",\"preselect-first\":false},model:{value:(_vm.formData.interactionTopicsValue),callback:function ($$v) {_vm.$set(_vm.formData, \"interactionTopicsValue\", $$v)},expression:\"formData.interactionTopicsValue\"}}),_c('b-form-invalid-feedback',{attrs:{\"state\":_vm.topicsValidation.getState(_vm.validate)}},[_vm._v(\"You must select at least one topic discussed in this interaction before submitting it\")])],1)],1)],1),_c('b-form-row',[_c('b-col',{attrs:{\"sm\":\"\"}},[_c('b-form-group',{attrs:{\"label\":\"Date\"}},[_c('b-form-datepicker',{attrs:{\"state\":_vm.startDateValidation.getState(_vm.validate)},model:{value:(_vm.formData.startDate),callback:function ($$v) {_vm.$set(_vm.formData, \"startDate\", $$v)},expression:\"formData.startDate\"}}),_c('b-form-invalid-feedback',{attrs:{\"state\":_vm.startDateValidation.getState(_vm.validate)}},[_vm._v(\"You must enter the date interaction started \")])],1)],1),_c('b-col',{attrs:{\"sm\":\"\"}},[_c('b-form-group',{attrs:{\"label\":\"Time\"}},[_c('b-form-row',[_c('b-col',{attrs:{\"sm\":\"\"}},[_c('b-form-select',{attrs:{\"state\":_vm.startTimeHrValidation.getState(_vm.validate)},model:{value:(_vm.formData.startTimeHr),callback:function ($$v) {_vm.$set(_vm.formData, \"startTimeHr\", $$v)},expression:\"formData.startTimeHr\"}},_vm._l((12),function(n){return _c('b-form-select-option',{key:n,attrs:{\"value\":_vm.timePadding(n)}},[_vm._v(\" \"+_vm._s(_vm.timePadding(n))+\" \")])}),1),_c('b-form-invalid-feedback',{attrs:{\"state\":_vm.startTimeHrValidation.getState(_vm.validate)}},[_vm._v(\"You must enter the HH interaction started \")])],1),_c('b-col',{attrs:{\"sm\":\"\"}},[_c('b-form-select',{attrs:{\"state\":_vm.startTimeMinValidation.getState(_vm.validate)},model:{value:(_vm.formData.startTimeMin),callback:function ($$v) {_vm.$set(_vm.formData, \"startTimeMin\", $$v)},expression:\"formData.startTimeMin\"}},_vm._l((12),function(n){return _c('b-form-select-option',{key:n,attrs:{\"value\":_vm.timePadding((n - 1) * 5)}},[_vm._v(\" \"+_vm._s(_vm.timePadding((n - 1) * 5))+\" \")])}),1),_c('b-form-invalid-feedback',{attrs:{\"state\":_vm.startTimeMinValidation.getState(_vm.validate)}},[_vm._v(\"You must enter the MM interaction started \")])],1),_c('b-col',{attrs:{\"sm\":\"\"}},[_c('b-form-select',{attrs:{\"state\":_vm.startTimeMeridiemValidation.getState(_vm.validate)},model:{value:(_vm.formData.startTimeMeridiem),callback:function ($$v) {_vm.$set(_vm.formData, \"startTimeMeridiem\", $$v)},expression:\"formData.startTimeMeridiem\"}},[_c('option',{attrs:{\"vale\":\"am\"}},[_vm._v(\"AM\")]),_c('option',{attrs:{\"vale\":\"pm\"}},[_vm._v(\"PM\")])]),_c('b-form-invalid-feedback',{attrs:{\"state\":_vm.startTimeMeridiemValidation.getState(_vm.validate)}},[_vm._v(\"You must enter the AM/PM interaction started \")])],1)],1)],1)],1)],1),_c('b-form-row',[_c('b-col',{attrs:{\"sm\":\"\"}},[(!_vm.isMailOrChatSelected)?_c('b-form-group',{attrs:{\"label\":\"Duration\"}},[_c('b-form-row',[_c('b-col',{attrs:{\"sm\":\"\"}},[_c('b-form-group',{attrs:{\"description\":\"Hour\"}},[_c('b-form-select',{attrs:{\"state\":_vm.durationValidation.getState(_vm.validate)},model:{value:(_vm.formData.durationHr),callback:function ($$v) {_vm.$set(_vm.formData, \"durationHr\", $$v)},expression:\"formData.durationHr\"}},_vm._l((12),function(n){return _c('b-form-select-option',{key:n,attrs:{\"value\":n - 1}},[_vm._v(\" \"+_vm._s(n - 1)+\" \")])}),1)],1)],1),_c('b-col',{attrs:{\"sm\":\"\"}},[_c('b-form-group',{attrs:{\"description\":\"Min\"}},[_c('b-form-select',{attrs:{\"state\":_vm.durationValidation.getState(_vm.validate)},model:{value:(_vm.formData.durationMin),callback:function ($$v) {_vm.$set(_vm.formData, \"durationMin\", $$v)},expression:\"formData.durationMin\"}},_vm._l((12),function(n){return _c('b-form-select-option',{key:n,attrs:{\"value\":(n - 1) * 5}},[_vm._v(\" \"+_vm._s((n - 1) * 5)+\" \")])}),1)],1)],1),_c('b-col',{attrs:{\"cols\":\"10\"}})],1),_c('b-form-invalid-feedback',{attrs:{\"state\":_vm.durationValidation.getState(_vm.validate)}},[_vm._v(\"You must enter duration greater then 0 \")])],1):_vm._e()],1)],1),_c('b-form-group',{attrs:{\"label\":\"Notes\"}},[_c('b-form-textarea',{attrs:{\"disabled\":_vm.submitting,\"state\":_vm.notesValidation.getState(_vm.validate)},model:{value:(_vm.formData.notes),callback:function ($$v) {_vm.$set(_vm.formData, \"notes\", $$v)},expression:\"formData.notes\"}}),_c('b-form-invalid-feedback',{attrs:{\"state\":_vm.notesValidation.getState(_vm.validate)}},[_vm._v(\"You must enter some notes about the interaction \")])],1),_c('b-form-group',{attrs:{\"label\":_vm.tagLabelValidation,\"label-for\":_vm.interactionTagSelectId}},[_c('multi-select',{class:[false === _vm.tagValidation.getState(_vm.validate) ? 'error' : ''],attrs:{\"disabled\":_vm.submitting,\"id\":_vm.interactionTagSelectId,\"options\":_vm.interactionTags,\"multiple\":false,\"close-on-select\":true,\"clear-on-select\":false,\"preserve-search\":true,\"label\":\"label\",\"track-by\":\"id\",\"placeholder\":\"tags\",\"preselect-first\":false},model:{value:(_vm.formData.interactionTagValue),callback:function ($$v) {_vm.$set(_vm.formData, \"interactionTagValue\", $$v)},expression:\"formData.interactionTagValue\"}}),_c('b-form-invalid-feedback',{attrs:{\"state\":_vm.tagValidation.getState(_vm.validate)}},[_vm._v(\"You must tag this interaction before submitting it\")])],1),_c('b-button',{staticClass:\"red\",attrs:{\"variant\":\"primary\",\"type\":\"submit\",\"disabled\":_vm.submitting}},[(_vm.submitting)?_c('b-spinner',{staticClass:\"submitting-spinner\",attrs:{\"small\":\"\"}}):_vm._e(),_vm._v(_vm._s(_vm.submitting ? \"Submitting...\" : \"Submit\"))],1)],1):_c('div',[_c('p',[_vm._v(\"Mentor / Student interaction submitted.\")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { contains } from '../utils/dom';\nimport { EVENT_OPTIONS_NO_CAPTURE, eventOn, eventOff } from '../utils/events'; // @vue/component\n\nexport default {\n data: function data() {\n return {\n listenForClickOut: false\n };\n },\n watch: {\n listenForClickOut: function listenForClickOut(newValue, oldValue) {\n if (newValue !== oldValue) {\n eventOff(this.clickOutElement, this.clickOutEventName, this._clickOutHandler, EVENT_OPTIONS_NO_CAPTURE);\n\n if (newValue) {\n eventOn(this.clickOutElement, this.clickOutEventName, this._clickOutHandler, EVENT_OPTIONS_NO_CAPTURE);\n }\n }\n }\n },\n beforeCreate: function beforeCreate() {\n // Declare non-reactive properties\n this.clickOutElement = null;\n this.clickOutEventName = null;\n },\n mounted: function mounted() {\n if (!this.clickOutElement) {\n this.clickOutElement = document;\n }\n\n if (!this.clickOutEventName) {\n this.clickOutEventName = 'click';\n }\n\n if (this.listenForClickOut) {\n eventOn(this.clickOutElement, this.clickOutEventName, this._clickOutHandler, EVENT_OPTIONS_NO_CAPTURE);\n }\n },\n beforeDestroy: function beforeDestroy()\n /* istanbul ignore next */\n {\n eventOff(this.clickOutElement, this.clickOutEventName, this._clickOutHandler, EVENT_OPTIONS_NO_CAPTURE);\n },\n methods: {\n isClickOut: function isClickOut(evt) {\n return !contains(this.$el, evt.target);\n },\n _clickOutHandler: function _clickOutHandler(evt) {\n if (this.clickOutHandler && this.isClickOut(evt)) {\n this.clickOutHandler(evt);\n }\n }\n }\n};","import { EVENT_OPTIONS_NO_CAPTURE, eventOn, eventOff } from '../utils/events'; // @vue/component\n\nexport default {\n data: function data() {\n return {\n listenForFocusIn: false\n };\n },\n watch: {\n listenForFocusIn: function listenForFocusIn(newValue, oldValue) {\n if (newValue !== oldValue) {\n eventOff(this.focusInElement, 'focusin', this._focusInHandler, EVENT_OPTIONS_NO_CAPTURE);\n\n if (newValue) {\n eventOn(this.focusInElement, 'focusin', this._focusInHandler, EVENT_OPTIONS_NO_CAPTURE);\n }\n }\n }\n },\n beforeCreate: function beforeCreate() {\n // Declare non-reactive properties\n this.focusInElement = null;\n },\n mounted: function mounted() {\n if (!this.focusInElement) {\n this.focusInElement = document;\n }\n\n if (this.listenForFocusIn) {\n eventOn(this.focusInElement, 'focusin', this._focusInHandler, EVENT_OPTIONS_NO_CAPTURE);\n }\n },\n beforeDestroy: function beforeDestroy()\n /* istanbul ignore next */\n {\n eventOff(this.focusInElement, 'focusin', this._focusInHandler, EVENT_OPTIONS_NO_CAPTURE);\n },\n methods: {\n _focusInHandler: function _focusInHandler(evt) {\n if (this.focusInHandler) {\n this.focusInHandler(evt);\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 Popper from 'popper.js';\nimport KeyCodes from '../utils/key-codes';\nimport { BvEvent } from '../utils/bv-event.class';\nimport { attemptFocus, closest, contains, isVisible, requestAF, selectAll } from '../utils/dom';\nimport { isNull } from '../utils/inspect';\nimport { HTMLElement } from '../utils/safe-types';\nimport { warn } from '../utils/warn';\nimport clickOutMixin from './click-out';\nimport focusInMixin from './focus-in';\nimport idMixin from './id'; // Return an array of visible items\n\nvar filterVisibles = function filterVisibles(els) {\n return (els || []).filter(isVisible);\n}; // Root dropdown event names\n\n\nvar ROOT_DROPDOWN_PREFIX = 'bv::dropdown::';\nvar ROOT_DROPDOWN_SHOWN = \"\".concat(ROOT_DROPDOWN_PREFIX, \"shown\");\nvar ROOT_DROPDOWN_HIDDEN = \"\".concat(ROOT_DROPDOWN_PREFIX, \"hidden\"); // Dropdown item CSS selectors\n\nvar Selector = {\n FORM_CHILD: '.dropdown form',\n ITEM_SELECTOR: ['.dropdown-item', '.b-dropdown-form'].map(function (selector) {\n return \"\".concat(selector, \":not(.disabled):not([disabled])\");\n }).join(', ')\n}; // Popper attachment positions\n\nvar AttachmentMap = {\n // Dropup left align\n TOP: 'top-start',\n // Dropup right align\n TOPEND: 'top-end',\n // Dropdown left align\n BOTTOM: 'bottom-start',\n // Dropdown right align\n BOTTOMEND: 'bottom-end',\n // Dropright left align\n RIGHT: 'right-start',\n // Dropright right align\n RIGHTEND: 'right-end',\n // Dropleft left align\n LEFT: 'left-start',\n // Dropleft right align\n LEFTEND: 'left-end'\n};\nexport var commonProps = {\n dropup: {\n // place on top if possible\n type: Boolean,\n default: false\n },\n dropright: {\n // place right if possible\n type: Boolean,\n default: false\n },\n dropleft: {\n // place left if possible\n type: Boolean,\n default: false\n },\n right: {\n // Right align menu (default is left align)\n type: Boolean,\n default: false\n },\n offset: {\n // Number of pixels to offset menu, or a CSS unit value (i.e. 1px, 1rem, etc)\n type: [Number, String],\n default: 0\n },\n noFlip: {\n // Disable auto-flipping of menu from bottom<=>top\n type: Boolean,\n default: false\n },\n popperOpts: {\n // type: Object,\n default: function _default() {}\n },\n boundary: {\n // String: `scrollParent`, `window` or `viewport`\n // HTMLElement: HTML Element reference\n type: [String, HTMLElement],\n default: 'scrollParent'\n }\n}; // @vue/component\n\nexport default {\n mixins: [idMixin, clickOutMixin, focusInMixin],\n provide: function provide() {\n return {\n bvDropdown: this\n };\n },\n inject: {\n bvNavbar: {\n default: null\n }\n },\n props: _objectSpread({\n disabled: {\n type: Boolean,\n default: false\n }\n }, commonProps),\n data: function data() {\n return {\n visible: false,\n visibleChangePrevented: false\n };\n },\n computed: {\n inNavbar: function inNavbar() {\n return !isNull(this.bvNavbar);\n },\n toggler: function toggler() {\n var toggle = this.$refs.toggle;\n return toggle ? toggle.$el || toggle : null;\n },\n directionClass: function directionClass() {\n if (this.dropup) {\n return 'dropup';\n } else if (this.dropright) {\n return 'dropright';\n } else if (this.dropleft) {\n return 'dropleft';\n }\n\n return '';\n }\n },\n watch: {\n visible: function visible(newValue, oldValue) {\n if (this.visibleChangePrevented) {\n this.visibleChangePrevented = false;\n return;\n }\n\n if (newValue !== oldValue) {\n var evtName = newValue ? 'show' : 'hide';\n var bvEvt = new BvEvent(evtName, {\n cancelable: true,\n vueTarget: this,\n target: this.$refs.menu,\n relatedTarget: null,\n componentId: this.safeId ? this.safeId() : this.id || null\n });\n this.emitEvent(bvEvt);\n\n if (bvEvt.defaultPrevented) {\n // Reset value and exit if canceled\n this.visibleChangePrevented = true;\n this.visible = oldValue; // Just in case a child element triggered `this.hide(true)`\n\n this.$off('hidden', this.focusToggler);\n return;\n }\n\n if (evtName === 'show') {\n this.showMenu();\n } else {\n this.hideMenu();\n }\n }\n },\n disabled: function disabled(newValue, oldValue) {\n if (newValue !== oldValue && newValue && this.visible) {\n // Hide dropdown if disabled changes to true\n this.visible = false;\n }\n }\n },\n created: function created() {\n // Create private non-reactive props\n this.$_popper = null;\n },\n\n /* istanbul ignore next */\n deactivated: function deactivated()\n /* istanbul ignore next: not easy to test */\n {\n // In case we are inside a ``\n this.visible = false;\n this.whileOpenListen(false);\n this.destroyPopper();\n },\n beforeDestroy: function beforeDestroy() {\n this.visible = false;\n this.whileOpenListen(false);\n this.destroyPopper();\n },\n methods: {\n // Event emitter\n emitEvent: function emitEvent(bvEvt) {\n var type = bvEvt.type;\n this.$emit(type, bvEvt);\n this.$root.$emit(\"\".concat(ROOT_DROPDOWN_PREFIX).concat(type), bvEvt);\n },\n showMenu: function showMenu() {\n var _this = this;\n\n if (this.disabled) {\n /* istanbul ignore next */\n return;\n } // Only instantiate Popper.js when dropdown is not in ``\n\n\n if (!this.inNavbar) {\n if (typeof Popper === 'undefined') {\n /* istanbul ignore next */\n warn('Popper.js not found. Falling back to CSS positioning', 'BDropdown');\n } else {\n // For dropup with alignment we use the parent element as popper container\n var el = this.dropup && this.right || this.split ? this.$el : this.$refs.toggle; // Make sure we have a reference to an element, not a component!\n\n el = el.$el || el; // Instantiate Popper.js\n\n this.createPopper(el);\n }\n } // Ensure other menus are closed\n\n\n this.$root.$emit(ROOT_DROPDOWN_SHOWN, this); // Enable listeners\n\n this.whileOpenListen(true); // Wrap in `$nextTick()` to ensure menu is fully rendered/shown\n\n this.$nextTick(function () {\n // Focus on the menu container on show\n _this.focusMenu(); // Emit the shown event\n\n\n _this.$emit('shown');\n });\n },\n hideMenu: function hideMenu() {\n this.whileOpenListen(false);\n this.$root.$emit(ROOT_DROPDOWN_HIDDEN, this);\n this.$emit('hidden');\n this.destroyPopper();\n },\n createPopper: function createPopper(element) {\n this.destroyPopper();\n this.$_popper = new Popper(element, this.$refs.menu, this.getPopperConfig());\n },\n // Ensure popper event listeners are removed cleanly\n destroyPopper: function destroyPopper() {\n this.$_popper && this.$_popper.destroy();\n this.$_popper = null;\n },\n // Instructs popper to re-computes the dropdown position\n // useful if the content changes size\n updatePopper: function updatePopper()\n /* istanbul ignore next: not easy to test */\n {\n try {\n this.$_popper.scheduleUpdate();\n } catch (_unused) {}\n },\n getPopperConfig: function getPopperConfig() {\n var placement = AttachmentMap.BOTTOM;\n\n if (this.dropup) {\n placement = this.right ? AttachmentMap.TOPEND : AttachmentMap.TOP;\n } else if (this.dropright) {\n placement = AttachmentMap.RIGHT;\n } else if (this.dropleft) {\n placement = AttachmentMap.LEFT;\n } else if (this.right) {\n placement = AttachmentMap.BOTTOMEND;\n }\n\n var popperConfig = {\n placement: placement,\n modifiers: {\n offset: {\n offset: this.offset || 0\n },\n flip: {\n enabled: !this.noFlip\n }\n }\n };\n\n if (this.boundary) {\n popperConfig.modifiers.preventOverflow = {\n boundariesElement: this.boundary\n };\n }\n\n return _objectSpread(_objectSpread({}, popperConfig), this.popperOpts || {});\n },\n // Turn listeners on/off while open\n whileOpenListen: function whileOpenListen(isOpen) {\n // Hide the dropdown when clicked outside\n this.listenForClickOut = isOpen; // Hide the dropdown when it loses focus\n\n this.listenForFocusIn = isOpen; // Hide the dropdown when another dropdown is opened\n\n var method = isOpen ? '$on' : '$off';\n this.$root[method](ROOT_DROPDOWN_SHOWN, this.rootCloseListener);\n },\n rootCloseListener: function rootCloseListener(vm) {\n if (vm !== this) {\n this.visible = false;\n }\n },\n show: function show() {\n var _this2 = this;\n\n // Public method to show dropdown\n if (this.disabled) {\n return;\n } // Wrap in a `requestAF()` to allow any previous\n // click handling to occur first\n\n\n requestAF(function () {\n _this2.visible = true;\n });\n },\n hide: function hide() {\n var refocus = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n // Public method to hide dropdown\n if (this.disabled) {\n /* istanbul ignore next */\n return;\n }\n\n this.visible = false;\n\n if (refocus) {\n // Child element is closing the dropdown on click\n this.$once('hidden', this.focusToggler);\n }\n },\n // Called only by a button that toggles the menu\n toggle: function toggle(evt) {\n evt = evt || {}; // Early exit when not a click event or ENTER, SPACE or DOWN were pressed\n\n var _evt = evt,\n type = _evt.type,\n keyCode = _evt.keyCode;\n\n if (type !== 'click' && !(type === 'keydown' && [KeyCodes.ENTER, KeyCodes.SPACE, KeyCodes.DOWN].indexOf(keyCode) !== -1)) {\n /* istanbul ignore next */\n return;\n }\n /* istanbul ignore next */\n\n\n if (this.disabled) {\n this.visible = false;\n return;\n }\n\n this.$emit('toggle', evt);\n evt.preventDefault();\n evt.stopPropagation(); // Toggle visibility\n\n if (this.visible) {\n this.hide(true);\n } else {\n this.show();\n }\n },\n // Mousedown handler for the toggle\n\n /* istanbul ignore next */\n onMousedown: function onMousedown(evt)\n /* istanbul ignore next */\n {\n // We prevent the 'mousedown' event for the toggle to stop the\n // 'focusin' event from being fired\n // The event would otherwise be picked up by the global 'focusin'\n // listener and there is no cross-browser solution to detect it\n // relates to the toggle click\n // The 'click' event will still be fired and we handle closing\n // other dropdowns there too\n // See https://github.com/bootstrap-vue/bootstrap-vue/issues/4328\n evt.preventDefault();\n },\n // Called from dropdown menu context\n onKeydown: function onKeydown(evt) {\n var keyCode = evt.keyCode;\n\n if (keyCode === KeyCodes.ESC) {\n // Close on ESC\n this.onEsc(evt);\n } else if (keyCode === KeyCodes.DOWN) {\n // Down Arrow\n this.focusNext(evt, false);\n } else if (keyCode === KeyCodes.UP) {\n // Up Arrow\n this.focusNext(evt, true);\n }\n },\n // If user presses ESC, close the menu\n onEsc: function onEsc(evt) {\n if (this.visible) {\n this.visible = false;\n evt.preventDefault();\n evt.stopPropagation(); // Return focus to original trigger button\n\n this.$once('hidden', this.focusToggler);\n }\n },\n // Called only in split button mode, for the split button\n onSplitClick: function onSplitClick(evt) {\n /* istanbul ignore next */\n if (this.disabled) {\n this.visible = false;\n return;\n }\n\n this.$emit('click', evt);\n },\n // Shared hide handler between click-out and focus-in events\n hideHandler: function hideHandler(evt) {\n var target = evt.target;\n\n if (this.visible && !contains(this.$refs.menu, target) && !contains(this.toggler, target)) {\n this.hide();\n }\n },\n // Document click-out listener\n clickOutHandler: function clickOutHandler(evt) {\n this.hideHandler(evt);\n },\n // Document focus-in listener\n focusInHandler: function focusInHandler(evt) {\n this.hideHandler(evt);\n },\n // Keyboard nav\n focusNext: function focusNext(evt, up) {\n var _this3 = this;\n\n // Ignore key up/down on form elements\n var target = evt.target;\n\n if (!this.visible || evt && closest(Selector.FORM_CHILD, target)) {\n /* istanbul ignore next: should never happen */\n return;\n }\n\n evt.preventDefault();\n evt.stopPropagation();\n this.$nextTick(function () {\n var items = _this3.getItems();\n\n if (items.length < 1) {\n /* istanbul ignore next: should never happen */\n return;\n }\n\n var index = items.indexOf(target);\n\n if (up && index > 0) {\n index--;\n } else if (!up && index < items.length - 1) {\n index++;\n }\n\n if (index < 0) {\n /* istanbul ignore next: should never happen */\n index = 0;\n }\n\n _this3.focusItem(index, items);\n });\n },\n focusItem: function focusItem(index, items) {\n var el = items.find(function (el, i) {\n return i === index;\n });\n attemptFocus(el);\n },\n getItems: function getItems() {\n // Get all items\n return filterVisibles(selectAll(Selector.ITEM_SELECTOR, this.$refs.menu));\n },\n focusMenu: function focusMenu() {\n attemptFocus(this.$refs.menu);\n },\n focusToggler: function focusToggler() {\n var _this4 = this;\n\n this.$nextTick(function () {\n attemptFocus(_this4.toggler);\n });\n }\n }\n};","// v-b-hover directive\nimport { isBrowser } from '../../utils/env';\nimport { EVENT_OPTIONS_NO_CAPTURE, eventOnOff } from '../../utils/events';\nimport { isFunction } from '../../utils/inspect'; // --- Constants ---\n\nvar PROP = '__BV_hover_handler__';\nvar MOUSEENTER = 'mouseenter';\nvar MOUSELEAVE = 'mouseleave'; // --- Utility methods ---\n\nvar createListener = function createListener(handler) {\n var listener = function listener(evt) {\n handler(evt.type === MOUSEENTER, evt);\n };\n\n listener.fn = handler;\n return listener;\n};\n\nvar updateListeners = function updateListeners(on, el, listener) {\n eventOnOff(on, el, MOUSEENTER, listener, EVENT_OPTIONS_NO_CAPTURE);\n eventOnOff(on, el, MOUSELEAVE, listener, EVENT_OPTIONS_NO_CAPTURE);\n}; // --- Directive bind/unbind/update handler ---\n\n\nvar directive = function directive(el, _ref) {\n var _ref$value = _ref.value,\n handler = _ref$value === void 0 ? null : _ref$value;\n\n if (isBrowser) {\n var listener = el[PROP];\n var hasListener = isFunction(listener);\n var handlerChanged = !(hasListener && listener.fn === handler);\n\n if (hasListener && handlerChanged) {\n updateListeners(false, el, listener);\n delete el[PROP];\n }\n\n if (isFunction(handler) && handlerChanged) {\n el[PROP] = createListener(handler);\n updateListeners(true, el, el[PROP]);\n }\n }\n}; // VBHover directive\n\n\nexport var VBHover = {\n bind: directive,\n componentUpdated: directive,\n unbind: function unbind(el) {\n directive(el, {\n value: null\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\n//\n// Private component used by `b-form-datepicker` and `b-form-timepicker`\n//\nimport Vue from './vue';\nimport { attemptBlur, attemptFocus } from './dom';\nimport { toString } from './string';\nimport dropdownMixin, { commonProps } from '../mixins/dropdown';\nimport idMixin from '../mixins/id';\nimport normalizeSlotMixin from '../mixins/normalize-slot';\nimport { VBHover } from '../directives/hover/hover';\nimport { BIconChevronDown } from '../icons/icons'; // Re-export common dropdown props used for convenience\n\nexport var dropdownProps = commonProps; // @vue/component\n\nexport var BVFormBtnLabelControl = /*#__PURE__*/Vue.extend({\n name: 'BVFormBtnLabelControl',\n directives: {\n BHover: VBHover\n },\n mixins: [idMixin, normalizeSlotMixin, dropdownMixin],\n props: {\n value: {\n // This is the value placed on the hidden input\n type: String,\n default: ''\n },\n formattedValue: {\n // This is the value shown in the label\n // Defaults back to `value`\n type: String // default: null\n\n },\n placeholder: {\n // This is the value placed on the hidden input when no value selected\n type: String // default: null\n\n },\n labelSelected: {\n // Value placed in sr-only span inside label when value is present\n type: String // default: null\n\n },\n state: {\n // Tri-state prop: `true`, `false`, or `null`\n type: Boolean,\n // We must explicitly default to `null` here otherwise\n // Vue coerces `undefined` into Boolean `false`\n default: null\n },\n size: {\n type: String // default: null\n\n },\n name: {\n type: String // default: null\n\n },\n form: {\n type: String // default: null\n\n },\n disabled: {\n type: Boolean,\n default: false\n },\n readonly: {\n type: Boolean,\n default: false\n },\n required: {\n type: Boolean,\n default: false\n },\n lang: {\n type: String // default: null\n\n },\n rtl: {\n // Tri-state prop: `true`, `false` or `null`\n type: Boolean,\n // We must explicitly default to `null` here otherwise\n // Vue coerces `undefined` into Boolean `false`\n default: null\n },\n buttonOnly: {\n // When true, renders a btn-group wrapper and visually hides the label\n type: Boolean,\n default: false\n },\n buttonVariant: {\n // Applicable in button mode only\n type: String,\n default: 'secondary'\n },\n menuClass: {\n // Extra classes to apply to the `dropdown-menu` div\n type: [String, Array, Object] // default: null\n\n }\n },\n data: function data() {\n return {\n isHovered: false,\n hasFocus: false\n };\n },\n computed: {\n idButton: function idButton() {\n return this.safeId();\n },\n idLabel: function idLabel() {\n return this.safeId('_value_');\n },\n idMenu: function idMenu() {\n return this.safeId('_dialog_');\n },\n idWrapper: function idWrapper() {\n return this.safeId('_outer_');\n },\n computedDir: function computedDir() {\n return this.rtl === true ? 'rtl' : this.rtl === false ? 'ltr' : null;\n }\n },\n methods: {\n focus: function focus() {\n if (!this.disabled) {\n attemptFocus(this.$refs.toggle);\n }\n },\n blur: function blur() {\n if (!this.disabled) {\n attemptBlur(this.$refs.toggle);\n }\n },\n setFocus: function setFocus(evt) {\n this.hasFocus = evt.type === 'focus';\n },\n handleHover: function handleHover(hovered) {\n this.isHovered = hovered;\n },\n\n /* istanbul ignore next */\n stopEvent: function stopEvent(evt)\n /* istanbul ignore next */\n {\n evt.stopPropagation();\n }\n },\n render: function render(h) {\n var _class, _class2, _ref;\n\n var idButton = this.idButton;\n var idLabel = this.idLabel;\n var idMenu = this.idMenu;\n var idWrapper = this.idWrapper;\n var disabled = this.disabled;\n var readonly = this.readonly;\n var required = this.required;\n var isHovered = this.isHovered;\n var hasFocus = this.hasFocus;\n var state = this.state;\n var visible = this.visible;\n var size = this.size;\n var value = toString(this.value) || '';\n var labelSelected = this.labelSelected;\n var buttonOnly = !!this.buttonOnly;\n var buttonVariant = this.buttonVariant;\n var btnScope = {\n isHovered: isHovered,\n hasFocus: hasFocus,\n state: state,\n opened: visible\n };\n var $button = h('button', {\n ref: 'toggle',\n staticClass: 'btn',\n class: (_class = {}, _defineProperty(_class, \"btn-\".concat(buttonVariant), buttonOnly), _defineProperty(_class, \"btn-\".concat(size), !!size), _defineProperty(_class, 'h-auto', !buttonOnly), _defineProperty(_class, 'dropdown-toggle', buttonOnly), _defineProperty(_class, 'dropdown-toggle-no-caret', buttonOnly), _class),\n attrs: {\n id: idButton,\n type: 'button',\n disabled: disabled,\n 'aria-haspopup': 'dialog',\n 'aria-expanded': visible ? 'true' : 'false',\n 'aria-invalid': state === false || required && !value ? 'true' : null,\n 'aria-required': required ? 'true' : null\n },\n directives: [{\n name: 'b-hover',\n value: this.handleHover\n }],\n on: {\n mousedown: this.onMousedown,\n click: this.toggle,\n keydown: this.toggle,\n // Handle ENTER, SPACE and DOWN\n '!focus': this.setFocus,\n '!blur': this.setFocus\n }\n }, [this.hasNormalizedSlot('button-content') ? this.normalizeSlot('button-content', btnScope) :\n /* istanbul ignore next */\n h(BIconChevronDown, {\n props: {\n scale: 1.25\n }\n })]); // Hidden input\n\n var $hidden = h();\n\n if (this.name && !disabled) {\n $hidden = h('input', {\n attrs: {\n type: 'hidden',\n name: this.name || null,\n form: this.form || null,\n value: value\n }\n });\n } // Dropdown content\n\n\n var $menu = h('div', {\n ref: 'menu',\n staticClass: 'dropdown-menu',\n class: [this.menuClass, {\n show: visible,\n 'dropdown-menu-right': this.right\n }],\n attrs: {\n id: idMenu,\n role: 'dialog',\n tabindex: '-1',\n 'aria-modal': 'false',\n 'aria-labelledby': idLabel\n },\n on: {\n keydown: this.onKeydown // Handle ESC\n\n }\n }, [this.normalizeSlot('default', {\n opened: visible\n })]); // Value label\n\n var $label = h('label', {\n staticClass: 'form-control text-break text-wrap bg-transparent h-auto',\n class: (_class2 = {\n // Hidden in button only mode\n 'sr-only': buttonOnly,\n // Mute the text if showing the placeholder\n 'text-muted': !value\n }, _defineProperty(_class2, \"form-control-\".concat(size), !!size), _defineProperty(_class2, 'is-invalid', state === false), _defineProperty(_class2, 'is-valid', state === true), _class2),\n attrs: {\n id: idLabel,\n for: idButton,\n 'aria-invalid': state === false || required && !value ? 'true' : null,\n 'aria-required': required ? 'true' : null\n },\n directives: [{\n name: 'b-hover',\n value: this.handleHover\n }],\n on: {\n // Disable bubbling of the click event to\n // prevent menu from closing and re-opening\n '!click': this.stopEvent\n }\n }, [value ? this.formattedValue || value : this.placeholder || '', // Add the selected label for screen readers when a value is provided\n value && labelSelected ? h('bdi', {\n staticClass: 'sr-only'\n }, labelSelected) : '']); // Return the custom form control wrapper\n\n return h('div', {\n staticClass: 'b-form-btn-label-control dropdown',\n class: [this.directionClass, (_ref = {\n 'btn-group': buttonOnly,\n 'form-control': !buttonOnly\n }, _defineProperty(_ref, \"form-control-\".concat(size), !!size && !buttonOnly), _defineProperty(_ref, 'd-flex', !buttonOnly), _defineProperty(_ref, 'h-auto', !buttonOnly), _defineProperty(_ref, 'align-items-stretch', !buttonOnly), _defineProperty(_ref, \"focus\", hasFocus && !buttonOnly), _defineProperty(_ref, \"show\", visible), _defineProperty(_ref, 'is-valid', state === true), _defineProperty(_ref, 'is-invalid', state === false), _ref)],\n attrs: {\n id: idWrapper,\n role: buttonOnly ? null : 'group',\n lang: this.lang || null,\n dir: this.computedDir,\n 'aria-disabled': disabled,\n 'aria-readonly': readonly && !disabled,\n 'aria-labelledby': idLabel,\n 'aria-invalid': state === false || required && !value ? 'true' : null,\n 'aria-required': required ? 'true' : null\n }\n }, [$button, $hidden, $menu, $label]);\n }\n});","function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure 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 _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n// Date utility functions\nimport identity from './identity';\nimport { concat } from './array';\nimport { isDate, isString } from './inspect';\nimport { toInteger } from './number'; // --- Constants ---\n// Loose YYYY-MM-DD matching, ignores any appended time inforation\n// Matches '1999-12-20', '1999-1-1', '1999-01-20T22:51:49.118Z', '1999-01-02 13:00:00'\n\nvar RX_DATE = /^\\d+-\\d\\d?-\\d\\d?(?:\\s|T|$)/; // Used to split off the date parts of the YYYY-MM-DD string\n\nvar RX_DATE_SPLIT = /-|\\s|T/; // --- Date utility methods ---\n// Create or clone a date (`new Date(...)` shortcut)\n\nexport var createDate = function createDate() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _construct(Date, args);\n}; // Parse a date sting, or Date object, into a Date object (with no time information)\n\nexport var parseYMD = function parseYMD(date) {\n if (isString(date) && RX_DATE.test(date.trim())) {\n var _date$split$map = date.split(RX_DATE_SPLIT).map(function (v) {\n return toInteger(v, 1);\n }),\n _date$split$map2 = _slicedToArray(_date$split$map, 3),\n year = _date$split$map2[0],\n month = _date$split$map2[1],\n day = _date$split$map2[2];\n\n return createDate(year, month - 1, day);\n } else if (isDate(date)) {\n return createDate(date.getFullYear(), date.getMonth(), date.getDate());\n }\n\n return null;\n}; // Format a date object as `YYYY-MM-DD` format\n\nexport var formatYMD = function formatYMD(date) {\n date = parseYMD(date);\n\n if (!date) {\n return null;\n }\n\n var year = date.getFullYear();\n var month = \"0\".concat(date.getMonth() + 1).slice(-2);\n var day = \"0\".concat(date.getDate()).slice(-2);\n return \"\".concat(year, \"-\").concat(month, \"-\").concat(day);\n}; // Given a locale (or locales), resolve the browser available locale\n\nexport var resolveLocale = function resolveLocale(locales)\n/* istanbul ignore next */\n{\n var calendar = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'gregory';\n locales = concat(locales).filter(identity);\n var fmt = new Intl.DateTimeFormat(locales, {\n calendar: calendar\n });\n return fmt.resolvedOptions().locale;\n}; // Create a `Intl.DateTimeFormat` formatter function\n\nexport var createDateFormatter = function createDateFormatter(locale, options)\n/* istanbul ignore next */\n{\n var dtf = new Intl.DateTimeFormat(locale, options);\n return dtf.format;\n}; // Determine if two dates are the same date (ignoring time portion)\n\nexport var datesEqual = function datesEqual(date1, date2) {\n // Returns true of the date portion of two date objects are equal\n // We don't compare the time portion\n return formatYMD(date1) === formatYMD(date2);\n}; // --- Date \"math\" utility methods (for BCalendar component mainly) ---\n\nexport var firstDateOfMonth = function firstDateOfMonth(date) {\n date = createDate(date);\n date.setDate(1);\n return date;\n};\nexport var lastDateOfMonth = function lastDateOfMonth(date) {\n date = createDate(date);\n date.setMonth(date.getMonth() + 1);\n date.setDate(0);\n return date;\n};\nexport var addYears = function addYears(date, numberOfYears) {\n date = createDate(date);\n var month = date.getMonth();\n date.setFullYear(date.getFullYear() + numberOfYears); // Handle Feb 29th for leap years\n\n if (date.getMonth() !== month) {\n date.setDate(0);\n }\n\n return date;\n};\nexport var oneMonthAgo = function oneMonthAgo(date) {\n date = createDate(date);\n var month = date.getMonth();\n date.setMonth(month - 1); // Handle when days in month are different\n\n if (date.getMonth() === month) {\n date.setDate(0);\n }\n\n return date;\n};\nexport var oneMonthAhead = function oneMonthAhead(date) {\n date = createDate(date);\n var month = date.getMonth();\n date.setMonth(month + 1); // Handle when days in month are different\n\n if (date.getMonth() === (month + 2) % 12) {\n date.setDate(0);\n }\n\n return date;\n};\nexport var oneYearAgo = function oneYearAgo(date) {\n return addYears(date, -1);\n};\nexport var oneYearAhead = function oneYearAhead(date) {\n return addYears(date, 1);\n};\nexport var oneDecadeAgo = function oneDecadeAgo(date) {\n return addYears(date, -10);\n};\nexport var oneDecadeAhead = function oneDecadeAhead(date) {\n return addYears(date, 10);\n}; // Helper function to constrain a date between two values\n// Always returns a `Date` object or `null` if no date passed\n\nexport var constrainDate = function constrainDate(date) {\n var min = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var max = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n // Ensure values are `Date` objects (or `null`)\n date = parseYMD(date);\n min = parseYMD(min) || date;\n max = parseYMD(max) || date; // Return a new `Date` object (or `null`)\n\n return date ? date < min ? min : date > max ? max : date : null;\n};","// Localization utilities\nimport { arrayIncludes } from './array';\nimport { toString } from './string'; // Languages that are RTL\n\nvar RTL_LANGS = ['ar', 'az', 'ckb', 'fa', 'he', 'ks', 'lrc', 'mzn', 'ps', 'sd', 'te', 'ug', 'ur', 'yi'].map(function (locale) {\n return locale.toLowerCase();\n}); // Precompile RegExpr\n\nvar RX_STRIP_MODS = /-u-.+/; // Returns true if the locale is RTL\n\nexport var isLocaleRTL = function isLocaleRTL(locale) {\n // Determines if the locale is RTL (only single locale supported)\n var parts = toString(locale).toLowerCase().replace(RX_STRIP_MODS, '').split('-');\n var locale1 = parts.slice(0, 2).join('-');\n var locale2 = parts[0];\n return arrayIncludes(RTL_LANGS, locale1) || arrayIncludes(RTL_LANGS, locale2);\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 '../../utils/vue';\nimport KeyCodes from '../../utils/key-codes';\nimport identity from '../../utils/identity';\nimport looseEqual from '../../utils/loose-equal';\nimport { arrayIncludes, concat } from '../../utils/array';\nimport { getComponentConfig } from '../../utils/config';\nimport { createDate, createDateFormatter, constrainDate as _constrainDate, datesEqual, firstDateOfMonth, formatYMD, lastDateOfMonth, oneMonthAgo, oneMonthAhead, oneYearAgo, oneYearAhead, oneDecadeAgo, oneDecadeAhead, parseYMD, resolveLocale } from '../../utils/date';\nimport { attemptBlur, attemptFocus, requestAF } from '../../utils/dom';\nimport { isArray, isFunction, isPlainObject, isString } from '../../utils/inspect';\nimport { isLocaleRTL } from '../../utils/locale';\nimport { mathMax } from '../../utils/math';\nimport { toInteger } from '../../utils/number';\nimport { toString } from '../../utils/string';\nimport attrsMixin from '../../mixins/attrs';\nimport idMixin from '../../mixins/id';\nimport normalizeSlotMixin from '../../mixins/normalize-slot';\nimport { BIconChevronLeft, BIconChevronDoubleLeft, BIconChevronBarLeft, BIconCircleFill } from '../../icons/icons'; // --- Constants ---\n\nvar NAME = 'BCalendar'; // Key Codes\n\nvar UP = KeyCodes.UP,\n DOWN = KeyCodes.DOWN,\n LEFT = KeyCodes.LEFT,\n RIGHT = KeyCodes.RIGHT,\n PAGEUP = KeyCodes.PAGEUP,\n PAGEDOWN = KeyCodes.PAGEDOWN,\n HOME = KeyCodes.HOME,\n END = KeyCodes.END,\n ENTER = KeyCodes.ENTER,\n SPACE = KeyCodes.SPACE; // Common calendar option value strings\n\nexport var STR_GREGORY = 'gregory';\nexport var STR_NUMERIC = 'numeric';\nexport var STR_2_DIGIT = '2-digit';\nexport var STR_LONG = 'long';\nexport var STR_SHORT = 'short';\nexport var STR_NARROW = 'narrow'; // --- BCalendar component ---\n// @vue/component\n\nexport var BCalendar = Vue.extend({\n name: NAME,\n // Mixin order is important!\n mixins: [attrsMixin, idMixin, normalizeSlotMixin],\n model: {\n // Even though this is the default that Vue assumes, we need\n // to add it for the docs to reflect that this is the model\n // And also for some validation libraries to work\n prop: 'value',\n event: 'input'\n },\n props: {\n value: {\n type: [String, Date] // default: null\n\n },\n valueAsDate: {\n // Always return the `v-model` value as a date object\n type: Boolean,\n default: false\n },\n initialDate: {\n // This specifies the calendar year/month/day that will be shown when\n // first opening the datepicker if no v-model value is provided\n // Default is the current date (or `min`/`max`)\n type: [String, Date] // default: null\n\n },\n disabled: {\n type: Boolean,\n default: false\n },\n readonly: {\n type: Boolean,\n default: false\n },\n min: {\n type: [String, Date] // default: null\n\n },\n max: {\n type: [String, Date] // default: null\n\n },\n dateDisabledFn: {\n type: Function // default: null\n\n },\n startWeekday: {\n // `0` (Sunday), `1` (Monday), ... `6` (Saturday)\n // Day of week to start calendar on\n type: [Number, String],\n default: 0\n },\n locale: {\n // Locale(s) to use\n // Default is to use page/browser default setting\n type: [String, Array] // default: null\n\n },\n direction: {\n // 'ltr', 'rtl', or `null` (for auto detect)\n type: String // default: null\n\n },\n selectedVariant: {\n // Variant color to use for the selected date\n type: String,\n default: 'primary'\n },\n todayVariant: {\n // Variant color to use for today's date (defaults to `variant`)\n type: String // default: null\n\n },\n noHighlightToday: {\n // Disable highlighting today's date\n type: Boolean,\n default: false\n },\n dateInfoFn: {\n // Function to set a class of (classes) on the date cell\n // if passed a string or an array\n // TODO:\n // If the function returns an object, look for class prop for classes,\n // and other props for handling events/details/descriptions\n type: Function // default: null\n\n },\n width: {\n // Has no effect if prop `block` is set\n type: String,\n default: '270px'\n },\n block: {\n // Makes calendar the full width of its parent container\n type: Boolean,\n default: false\n },\n hideHeader: {\n // When true makes the selected date header `sr-only`\n type: Boolean,\n default: false\n },\n showDecadeNav: {\n // When `true` enables the decade navigation buttons\n type: Boolean,\n default: false\n },\n hidden: {\n // When `true`, renders a comment node, but keeps the component instance active\n // Mainly for , so that we can get the component's value and locale\n // But we might just use separate date formatters, using the resolved locale\n // (adjusted for the gregorian calendar)\n type: Boolean,\n default: false\n },\n ariaControls: {\n type: String // default: null\n\n },\n roleDescription: {\n type: String // default: null\n\n },\n // Labels for buttons and keyboard shortcuts\n labelPrevDecade: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME, 'labelPrevDecade');\n }\n },\n labelPrevYear: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME, 'labelPrevYear');\n }\n },\n labelPrevMonth: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME, 'labelPrevMonth');\n }\n },\n labelCurrentMonth: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME, 'labelCurrentMonth');\n }\n },\n labelNextMonth: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME, 'labelNextMonth');\n }\n },\n labelNextYear: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME, 'labelNextYear');\n }\n },\n labelNextDecade: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME, 'labelNextDecade');\n }\n },\n labelToday: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME, 'labelToday');\n }\n },\n labelSelected: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME, 'labelSelected');\n }\n },\n labelNoDateSelected: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME, 'labelNoDateSelected');\n }\n },\n labelCalendar: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME, 'labelCalendar');\n }\n },\n labelNav: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME, 'labelNav');\n }\n },\n labelHelp: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME, 'labelHelp');\n }\n },\n dateFormatOptions: {\n // `Intl.DateTimeFormat` object\n // Note: This value is *not* to be placed in the global config\n type: Object,\n default: function _default() {\n return {\n year: STR_NUMERIC,\n month: STR_LONG,\n day: STR_NUMERIC,\n weekday: STR_LONG\n };\n }\n },\n weekdayHeaderFormat: {\n // Format of the weekday names at the top of the calendar\n // Note: This value is *not* to be placed in the global config\n type: String,\n // `short` is typically a 3 letter abbreviation,\n // `narrow` is typically a single letter\n // `long` is the full week day name\n // Although some locales may override this (i.e `ar`, etc)\n default: STR_SHORT,\n validator: function validator(value) {\n return arrayIncludes([STR_LONG, STR_SHORT, STR_NARROW], value);\n }\n }\n },\n data: function data() {\n var selected = formatYMD(this.value) || '';\n return {\n // Selected date\n selectedYMD: selected,\n // Date in calendar grid that has `tabindex` of `0`\n activeYMD: selected || formatYMD(_constrainDate(this.initialDate || this.getToday()), this.min, this.max),\n // Will be true if the calendar grid has/contains focus\n gridHasFocus: false,\n // Flag to enable the `aria-live` region(s) after mount\n // to prevent screen reader \"outbursts\" when mounting\n isLive: false\n };\n },\n computed: {\n valueId: function valueId() {\n return this.safeId();\n },\n widgetId: function widgetId() {\n return this.safeId('_calendar-wrapper_');\n },\n navId: function navId() {\n return this.safeId('_calendar-nav_');\n },\n gridId: function gridId() {\n return this.safeId('_calendar-grid_');\n },\n gridCaptionId: function gridCaptionId() {\n return this.safeId('_calendar-grid-caption_');\n },\n gridHelpId: function gridHelpId() {\n return this.safeId('_calendar-grid-help_');\n },\n activeId: function activeId() {\n return this.activeYMD ? this.safeId(\"_cell-\".concat(this.activeYMD, \"_\")) : null;\n },\n // TODO: Use computed props to convert `YYYY-MM-DD` to `Date` object\n selectedDate: function selectedDate() {\n // Selected as a `Date` object\n return parseYMD(this.selectedYMD);\n },\n activeDate: function activeDate() {\n // Active as a `Date` object\n return parseYMD(this.activeYMD);\n },\n computedMin: function computedMin() {\n return parseYMD(this.min);\n },\n computedMax: function computedMax() {\n return parseYMD(this.max);\n },\n computedWeekStarts: function computedWeekStarts() {\n // `startWeekday` is a prop (constrained to `0` through `6`)\n return mathMax(toInteger(this.startWeekday, 0), 0) % 7;\n },\n computedLocale: function computedLocale() {\n // Returns the resolved locale used by the calendar\n return resolveLocale(concat(this.locale).filter(identity), STR_GREGORY);\n },\n calendarLocale: function calendarLocale() {\n // This locale enforces the gregorian calendar (for use in formatter functions)\n // Needed because IE 11 resolves `ar-IR` as islamic-civil calendar\n // and IE 11 (and some other browsers) do not support the `calendar` option\n // And we currently only support the gregorian calendar\n var fmt = new Intl.DateTimeFormat(this.computedLocale, {\n calendar: STR_GREGORY\n });\n var calendar = fmt.resolvedOptions().calendar;\n var locale = fmt.resolvedOptions().locale;\n /* istanbul ignore if: mainly for IE 11 and a few other browsers, hard to test in JSDOM */\n\n if (calendar !== STR_GREGORY) {\n // Ensure the locale requests the gregorian calendar\n // Mainly for IE 11, and currently we can't handle non-gregorian calendars\n // TODO: Should we always return this value?\n locale = locale.replace(/-u-.+$/i, '').concat('-u-ca-gregory');\n }\n\n return locale;\n },\n calendarYear: function calendarYear() {\n return this.activeDate.getFullYear();\n },\n calendarMonth: function calendarMonth() {\n return this.activeDate.getMonth();\n },\n calendarFirstDay: function calendarFirstDay() {\n return createDate(this.calendarYear, this.calendarMonth, 1);\n },\n calendarDaysInMonth: function calendarDaysInMonth() {\n // We create a new date as to not mutate the original\n var date = createDate(this.calendarFirstDay);\n date.setMonth(date.getMonth() + 1, 0);\n return date.getDate();\n },\n computedVariant: function computedVariant() {\n return \"btn-\".concat(this.selectedVariant || 'primary');\n },\n computedTodayVariant: function computedTodayVariant() {\n return \"btn-outline-\".concat(this.todayVariant || this.selectedVariant || 'primary');\n },\n isRTL: function isRTL() {\n // `true` if the language requested is RTL\n var dir = toString(this.direction).toLowerCase();\n\n if (dir === 'rtl') {\n /* istanbul ignore next */\n return true;\n } else if (dir === 'ltr') {\n /* istanbul ignore next */\n return false;\n }\n\n return isLocaleRTL(this.computedLocale);\n },\n context: function context() {\n var selectedYMD = this.selectedYMD;\n var selectedDate = parseYMD(selectedYMD);\n var activeYMD = this.activeYMD;\n var activeDate = parseYMD(activeYMD);\n return {\n // The current value of the `v-model`\n selectedYMD: selectedYMD,\n selectedDate: selectedDate,\n selectedFormatted: selectedDate ? this.formatDateString(selectedDate) : this.labelNoDateSelected,\n // Which date cell is considered active due to navigation\n activeYMD: activeYMD,\n activeDate: activeDate,\n activeFormatted: activeDate ? this.formatDateString(activeDate) : '',\n // `true` if the date is disabled (when using keyboard navigation)\n disabled: this.dateDisabled(activeDate),\n // Locales used in formatting dates\n locale: this.computedLocale,\n calendarLocale: this.calendarLocale,\n rtl: this.isRTL\n };\n },\n // Computed props that return a function reference\n dateOutOfRange: function dateOutOfRange() {\n // Check whether a date is within the min/max range\n // returns a new function ref if the pops change\n // We do this as we need to trigger the calendar computed prop\n // to update when these props update\n var min = this.computedMin;\n var max = this.computedMax;\n return function (date) {\n // Handle both `YYYY-MM-DD` and `Date` objects\n date = parseYMD(date);\n return min && date < min || max && date > max;\n };\n },\n dateDisabled: function dateDisabled() {\n // Returns a function for validating if a date is within range\n // We grab this variables first to ensure a new function ref\n // is generated when the props value changes\n // We do this as we need to trigger the calendar computed prop\n // to update when these props update\n var rangeFn = this.dateOutOfRange;\n var disabledFn = isFunction(this.dateDisabledFn) ? this.dateDisabledFn : function () {\n return false;\n }; // Return the function ref\n\n return function (date) {\n // Handle both `YYYY-MM-DD` and `Date` objects\n date = parseYMD(date);\n var ymd = formatYMD(date);\n return !!(rangeFn(date) || disabledFn(ymd, date));\n };\n },\n // Computed props that return date formatter functions\n formatDateString: function formatDateString() {\n // Returns a date formatter function\n return createDateFormatter(this.calendarLocale, _objectSpread(_objectSpread({\n // Ensure we have year, month, day shown for screen readers/ARIA\n // If users really want to leave one of these out, they can\n // pass `undefined` for the property value\n year: STR_NUMERIC,\n month: STR_2_DIGIT,\n day: STR_2_DIGIT\n }, this.dateFormatOptions), {}, {\n // Ensure hours/minutes/seconds are not shown\n // As we do not support the time portion (yet)\n hour: undefined,\n minute: undefined,\n second: undefined,\n // Ensure calendar is gregorian\n calendar: STR_GREGORY\n }));\n },\n formatYearMonth: function formatYearMonth() {\n // Returns a date formatter function\n return createDateFormatter(this.calendarLocale, {\n year: STR_NUMERIC,\n month: STR_LONG,\n calendar: STR_GREGORY\n });\n },\n formatWeekdayName: function formatWeekdayName() {\n // Long weekday name for weekday header aria-label\n return createDateFormatter(this.calendarLocale, {\n weekday: STR_LONG,\n calendar: STR_GREGORY\n });\n },\n formatWeekdayNameShort: function formatWeekdayNameShort() {\n // Weekday header cell format\n // defaults to 'short' 3 letter days, where possible\n return createDateFormatter(this.calendarLocale, {\n weekday: this.weekdayHeaderFormat || STR_SHORT,\n calendar: STR_GREGORY\n });\n },\n formatDay: function formatDay() {\n // Calendar grid day number formatter\n // We don't use DateTimeFormatter here as it can place extra\n // character(s) after the number (i.e the `zh` locale)\n var nf = new Intl.NumberFormat([this.computedLocale], {\n style: 'decimal',\n minimumIntegerDigits: 1,\n minimumFractionDigits: 0,\n maximumFractionDigits: 0,\n notation: 'standard'\n }); // Return a formatter function instance\n\n return function (date) {\n return nf.format(date.getDate());\n };\n },\n // Disabled states for the nav buttons\n prevDecadeDisabled: function prevDecadeDisabled() {\n var min = this.computedMin;\n return this.disabled || min && lastDateOfMonth(oneDecadeAgo(this.activeDate)) < min;\n },\n prevYearDisabled: function prevYearDisabled() {\n var min = this.computedMin;\n return this.disabled || min && lastDateOfMonth(oneYearAgo(this.activeDate)) < min;\n },\n prevMonthDisabled: function prevMonthDisabled() {\n var min = this.computedMin;\n return this.disabled || min && lastDateOfMonth(oneMonthAgo(this.activeDate)) < min;\n },\n thisMonthDisabled: function thisMonthDisabled() {\n // TODO: We could/should check if today is out of range\n return this.disabled;\n },\n nextMonthDisabled: function nextMonthDisabled() {\n var max = this.computedMax;\n return this.disabled || max && firstDateOfMonth(oneMonthAhead(this.activeDate)) > max;\n },\n nextYearDisabled: function nextYearDisabled() {\n var max = this.computedMax;\n return this.disabled || max && firstDateOfMonth(oneYearAhead(this.activeDate)) > max;\n },\n nextDecadeDisabled: function nextDecadeDisabled() {\n var max = this.computedMax;\n return this.disabled || max && firstDateOfMonth(oneDecadeAhead(this.activeDate)) > max;\n },\n // Calendar dates generation\n calendar: function calendar() {\n var matrix = [];\n var firstDay = this.calendarFirstDay;\n var calendarYear = firstDay.getFullYear();\n var calendarMonth = firstDay.getMonth();\n var daysInMonth = this.calendarDaysInMonth;\n var startIndex = firstDay.getDay(); // `0`..`6`\n\n var weekOffset = (this.computedWeekStarts > startIndex ? 7 : 0) - this.computedWeekStarts; // TODO: Change `dateInfoFn` to handle events and notes as well as classes\n\n var dateInfoFn = isFunction(this.dateInfoFn) ? this.dateInfoFn : function () {\n return {};\n }; // Build the calendar matrix\n\n var currentDay = 0 - weekOffset - startIndex;\n\n for (var week = 0; week < 6 && currentDay < daysInMonth; week++) {\n // For each week\n matrix[week] = []; // The following could be a map function\n\n for (var j = 0; j < 7; j++) {\n // For each day in week\n currentDay++;\n var date = createDate(calendarYear, calendarMonth, currentDay);\n var month = date.getMonth();\n var dayYMD = formatYMD(date);\n var dayDisabled = this.dateDisabled(date); // TODO: This could be a normalizer method\n\n var dateInfo = dateInfoFn(dayYMD, parseYMD(dayYMD));\n dateInfo = isString(dateInfo) || isArray(dateInfo) ?\n /* istanbul ignore next */\n {\n class: dateInfo\n } : isPlainObject(dateInfo) ? _objectSpread({\n class: ''\n }, dateInfo) :\n /* istanbul ignore next */\n {\n class: ''\n };\n matrix[week].push({\n ymd: dayYMD,\n // Cell content\n day: this.formatDay(date),\n label: this.formatDateString(date),\n // Flags for styling\n isThisMonth: month === calendarMonth,\n isDisabled: dayDisabled,\n // TODO: Handle other dateInfo properties such as notes/events\n info: dateInfo\n });\n }\n }\n\n return matrix;\n },\n calendarHeadings: function calendarHeadings() {\n var _this = this;\n\n return this.calendar[0].map(function (d) {\n return {\n text: _this.formatWeekdayNameShort(parseYMD(d.ymd)),\n label: _this.formatWeekdayName(parseYMD(d.ymd))\n };\n });\n }\n },\n watch: {\n value: function value(newVal, oldVal) {\n var selected = formatYMD(newVal) || '';\n var old = formatYMD(oldVal) || '';\n\n if (!datesEqual(selected, old)) {\n this.activeYMD = selected || this.activeYMD;\n this.selectedYMD = selected;\n }\n },\n selectedYMD: function selectedYMD(newYMD, oldYMD) {\n // TODO:\n // Should we compare to `formatYMD(this.value)` and emit\n // only if they are different?\n if (newYMD !== oldYMD) {\n this.$emit('input', this.valueAsDate ? parseYMD(newYMD) || null : newYMD || '');\n }\n },\n context: function context(newVal, oldVal) {\n if (!looseEqual(newVal, oldVal)) {\n this.$emit('context', newVal);\n }\n },\n hidden: function hidden(newVal) {\n // Reset the active focused day when hidden\n this.activeYMD = this.selectedYMD || formatYMD(this.value || this.constrainDate(this.initialDate || this.getToday())); // Enable/disable the live regions\n\n this.setLive(!newVal);\n }\n },\n created: function created() {\n var _this2 = this;\n\n this.$nextTick(function () {\n _this2.$emit('context', _this2.context);\n });\n },\n mounted: function mounted() {\n this.setLive(true);\n },\n\n /* istanbul ignore next */\n activated: function activated()\n /* istanbul ignore next */\n {\n this.setLive(true);\n },\n\n /* istanbul ignore next */\n deactivated: function deactivated()\n /* istanbul ignore next */\n {\n this.setLive(false);\n },\n beforeDestroy: function beforeDestroy() {\n this.setLive(false);\n },\n methods: {\n // Public method(s)\n focus: function focus() {\n if (!this.disabled) {\n attemptFocus(this.$refs.grid);\n }\n },\n blur: function blur() {\n if (!this.disabled) {\n attemptBlur(this.$refs.grid);\n }\n },\n // Private methods\n setLive: function setLive(on) {\n var _this3 = this;\n\n if (on) {\n this.$nextTick(function () {\n requestAF(function () {\n _this3.isLive = true;\n });\n });\n } else {\n this.isLive = false;\n }\n },\n getToday: function getToday() {\n return parseYMD(createDate());\n },\n constrainDate: function constrainDate(date) {\n // Constrains a date between min and max\n // returns a new `Date` object instance\n return _constrainDate(date, this.computedMin, this.computedMax);\n },\n emitSelected: function emitSelected(date) {\n var _this4 = this;\n\n // Performed in a `$nextTick()` to (probably) ensure\n // the input event has emitted first\n this.$nextTick(function () {\n _this4.$emit('selected', formatYMD(date) || '', parseYMD(date) || null);\n });\n },\n // Event handlers\n setGridFocusFlag: function setGridFocusFlag(evt) {\n // Sets the gridHasFocus flag to make date \"button\" look focused\n this.gridHasFocus = !this.disabled && evt.type === 'focus';\n },\n onKeydownWrapper: function onKeydownWrapper(evt) {\n // Calendar keyboard navigation\n // Handles PAGEUP/PAGEDOWN/END/HOME/LEFT/UP/RIGHT/DOWN\n // Focuses grid after updating\n var altKey = evt.altKey,\n ctrlKey = evt.ctrlKey,\n keyCode = evt.keyCode;\n\n if (!arrayIncludes([PAGEUP, PAGEDOWN, END, HOME, LEFT, UP, RIGHT, DOWN], keyCode)) {\n /* istanbul ignore next */\n return;\n }\n\n evt.preventDefault();\n evt.stopPropagation();\n var activeDate = createDate(this.activeDate);\n var checkDate = createDate(this.activeDate);\n var day = activeDate.getDate();\n var constrainedToday = this.constrainDate(this.getToday());\n var isRTL = this.isRTL;\n\n if (keyCode === PAGEUP) {\n // PAGEUP - Previous month/year\n activeDate = (altKey ? ctrlKey ? oneDecadeAgo : oneYearAgo : oneMonthAgo)(activeDate); // We check the first day of month to be in rage\n\n checkDate = createDate(activeDate);\n checkDate.setDate(1);\n } else if (keyCode === PAGEDOWN) {\n // PAGEDOWN - Next month/year\n activeDate = (altKey ? ctrlKey ? oneDecadeAhead : oneYearAhead : oneMonthAhead)(activeDate); // We check the last day of month to be in rage\n\n checkDate = createDate(activeDate);\n checkDate.setMonth(checkDate.getMonth() + 1);\n checkDate.setDate(0);\n } else if (keyCode === LEFT) {\n // LEFT - Previous day (or next day for RTL)\n activeDate.setDate(day + (isRTL ? 1 : -1));\n activeDate = this.constrainDate(activeDate);\n checkDate = activeDate;\n } else if (keyCode === RIGHT) {\n // RIGHT - Next day (or previous day for RTL)\n activeDate.setDate(day + (isRTL ? -1 : 1));\n activeDate = this.constrainDate(activeDate);\n checkDate = activeDate;\n } else if (keyCode === UP) {\n // UP - Previous week\n activeDate.setDate(day - 7);\n activeDate = this.constrainDate(activeDate);\n checkDate = activeDate;\n } else if (keyCode === DOWN) {\n // DOWN - Next week\n activeDate.setDate(day + 7);\n activeDate = this.constrainDate(activeDate);\n checkDate = activeDate;\n } else if (keyCode === HOME) {\n // HOME - Today\n activeDate = constrainedToday;\n checkDate = activeDate;\n } else if (keyCode === END) {\n // END - Selected date, or today if no selected date\n activeDate = parseYMD(this.selectedDate) || constrainedToday;\n checkDate = activeDate;\n }\n\n if (!this.dateOutOfRange(checkDate) && !datesEqual(activeDate, this.activeDate)) {\n // We only jump to date if within min/max\n // We don't check for individual disabled dates though (via user function)\n this.activeYMD = formatYMD(activeDate);\n } // Ensure grid is focused\n\n\n this.focus();\n },\n onKeydownGrid: function onKeydownGrid(evt) {\n // Pressing enter/space on grid to select active date\n var keyCode = evt.keyCode;\n var activeDate = this.activeDate;\n\n if (keyCode === ENTER || keyCode === SPACE) {\n evt.preventDefault();\n evt.stopPropagation();\n\n if (!this.disabled && !this.readonly && !this.dateDisabled(activeDate)) {\n this.selectedYMD = formatYMD(activeDate);\n this.emitSelected(activeDate);\n } // Ensure grid is focused\n\n\n this.focus();\n }\n },\n onClickDay: function onClickDay(day) {\n // Clicking on a date \"button\" to select it\n var selectedDate = this.selectedDate;\n var activeDate = this.activeDate;\n var clickedDate = parseYMD(day.ymd);\n\n if (!this.disabled && !day.isDisabled && !this.dateDisabled(clickedDate)) {\n if (!this.readonly) {\n // If readonly mode, we don't set the selected date, just the active date\n // If the clicked date is equal to the already selected date, we don't update the model\n this.selectedYMD = formatYMD(datesEqual(clickedDate, selectedDate) ? selectedDate : clickedDate);\n this.emitSelected(clickedDate);\n }\n\n this.activeYMD = formatYMD(datesEqual(clickedDate, activeDate) ? activeDate : createDate(clickedDate)); // Ensure grid is focused\n\n this.focus();\n }\n },\n gotoPrevDecade: function gotoPrevDecade() {\n this.activeYMD = formatYMD(this.constrainDate(oneDecadeAgo(this.activeDate)));\n },\n gotoPrevYear: function gotoPrevYear() {\n this.activeYMD = formatYMD(this.constrainDate(oneYearAgo(this.activeDate)));\n },\n gotoPrevMonth: function gotoPrevMonth() {\n this.activeYMD = formatYMD(this.constrainDate(oneMonthAgo(this.activeDate)));\n },\n gotoCurrentMonth: function gotoCurrentMonth() {\n // TODO: Maybe this goto date should be configurable?\n this.activeYMD = formatYMD(this.constrainDate(this.getToday()));\n },\n gotoNextMonth: function gotoNextMonth() {\n this.activeYMD = formatYMD(this.constrainDate(oneMonthAhead(this.activeDate)));\n },\n gotoNextYear: function gotoNextYear() {\n this.activeYMD = formatYMD(this.constrainDate(oneYearAhead(this.activeDate)));\n },\n gotoNextDecade: function gotoNextDecade() {\n this.activeYMD = formatYMD(this.constrainDate(oneDecadeAhead(this.activeDate)));\n },\n onHeaderClick: function onHeaderClick() {\n if (!this.disabled) {\n this.activeYMD = this.selectedYMD || formatYMD(this.getToday());\n this.focus();\n }\n }\n },\n render: function render(h) {\n var _this5 = this;\n\n // If `hidden` prop is set, render just a placeholder node\n if (this.hidden) {\n return h();\n }\n\n var valueId = this.valueId,\n widgetId = this.widgetId,\n navId = this.navId,\n gridId = this.gridId,\n gridCaptionId = this.gridCaptionId,\n gridHelpId = this.gridHelpId,\n activeId = this.activeId,\n isLive = this.isLive,\n isRTL = this.isRTL,\n activeYMD = this.activeYMD,\n selectedYMD = this.selectedYMD,\n safeId = this.safeId;\n var hideDecadeNav = !this.showDecadeNav;\n var todayYMD = formatYMD(this.getToday());\n var highlightToday = !this.noHighlightToday; // Header showing current selected date\n\n var $header = h('output', {\n staticClass: 'form-control form-control-sm text-center',\n class: {\n 'text-muted': this.disabled,\n readonly: this.readonly || this.disabled\n },\n attrs: {\n id: valueId,\n for: gridId,\n role: 'status',\n tabindex: this.disabled ? null : '-1',\n // Mainly for testing purposes, as we do not know\n // the exact format `Intl` will format the date string\n 'data-selected': toString(selectedYMD),\n // We wait until after mount to enable `aria-live`\n // to prevent initial announcement on page render\n 'aria-live': isLive ? 'polite' : 'off',\n 'aria-atomic': isLive ? 'true' : null\n },\n on: {\n // Transfer focus/click to focus grid\n // and focus active date (or today if no selection)\n click: this.onHeaderClick,\n focus: this.onHeaderClick\n }\n }, this.selectedDate ? [// We use `bdi` elements here in case the label doesn't match the locale\n // Although IE 11 does not deal with at all (equivalent to a span)\n h('bdi', {\n staticClass: 'sr-only'\n }, \" (\".concat(toString(this.labelSelected), \") \")), h('bdi', this.formatDateString(this.selectedDate))] : this.labelNoDateSelected || \"\\xA0\" // ' '\n );\n $header = h('header', {\n staticClass: 'b-calendar-header',\n class: {\n 'sr-only': this.hideHeader\n },\n attrs: {\n title: this.selectedDate ? this.labelSelectedDate || null : null\n }\n }, [$header]); // Content for the date navigation buttons\n\n var navScope = {\n isRTL: isRTL\n };\n var navProps = {\n shiftV: 0.5\n };\n\n var navPrevProps = _objectSpread(_objectSpread({}, navProps), {}, {\n flipH: isRTL\n });\n\n var navNextProps = _objectSpread(_objectSpread({}, navProps), {}, {\n flipH: !isRTL\n });\n\n var $prevDecadeIcon = this.normalizeSlot('nav-prev-decade', navScope) || h(BIconChevronBarLeft, {\n props: navPrevProps\n });\n var $prevYearIcon = this.normalizeSlot('nav-prev-year', navScope) || h(BIconChevronDoubleLeft, {\n props: navPrevProps\n });\n var $prevMonthIcon = this.normalizeSlot('nav-prev-month', navScope) || h(BIconChevronLeft, {\n props: navPrevProps\n });\n var $thisMonthIcon = this.normalizeSlot('nav-this-month', navScope) || h(BIconCircleFill, {\n props: navProps\n });\n var $nextMonthIcon = this.normalizeSlot('nav-next-month', navScope) || h(BIconChevronLeft, {\n props: navNextProps\n });\n var $nextYearIcon = this.normalizeSlot('nav-next-year', navScope) || h(BIconChevronDoubleLeft, {\n props: navNextProps\n });\n var $nextDecadeIcon = this.normalizeSlot('nav-next-decade', navScope) || h(BIconChevronBarLeft, {\n props: navNextProps\n }); // Utility to create the date navigation buttons\n\n var makeNavBtn = function makeNavBtn(content, label, handler, btnDisabled, shortcut) {\n return h('button', {\n staticClass: 'btn btn-sm btn-outline-secondary border-0 flex-fill',\n class: {\n disabled: btnDisabled\n },\n attrs: {\n title: label || null,\n type: 'button',\n 'aria-label': label || null,\n 'aria-disabled': btnDisabled ? 'true' : null,\n 'aria-keyshortcuts': shortcut || null\n },\n on: btnDisabled ? {} : {\n click: handler\n }\n }, [h('div', {\n attrs: {\n 'aria-hidden': 'true'\n }\n }, [content])]);\n }; // Generate the date navigation buttons\n\n\n var $nav = h('div', {\n staticClass: 'b-calendar-nav d-flex',\n attrs: {\n id: navId,\n role: 'group',\n 'aria-hidden': this.disabled ? 'true' : null,\n 'aria-label': this.labelNav || null,\n 'aria-controls': gridId\n }\n }, [hideDecadeNav ? h() : makeNavBtn($prevDecadeIcon, this.labelPrevDecade, this.gotoPrevDecade, this.prevDecadeDisabled, 'Ctrl+Alt+PageDown'), makeNavBtn($prevYearIcon, this.labelPrevYear, this.gotoPrevYear, this.prevYearDisabled, 'Alt+PageDown'), makeNavBtn($prevMonthIcon, this.labelPrevMonth, this.gotoPrevMonth, this.prevMonthDisabled, 'PageDown'), makeNavBtn($thisMonthIcon, this.labelCurrentMonth, this.gotoCurrentMonth, this.thisMonthDisabled, 'Home'), makeNavBtn($nextMonthIcon, this.labelNextMonth, this.gotoNextMonth, this.nextMonthDisabled, 'PageUp'), makeNavBtn($nextYearIcon, this.labelNextYear, this.gotoNextYear, this.nextYearDisabled, 'Alt+PageUp'), hideDecadeNav ? h() : makeNavBtn($nextDecadeIcon, this.labelNextDecade, this.gotoNextDecade, this.nextDecadeDisabled, 'Ctrl+Alt+PageUp')]); // Caption for calendar grid\n\n var $gridCaption = h('header', {\n key: 'grid-caption',\n staticClass: 'b-calendar-grid-caption text-center font-weight-bold',\n class: {\n 'text-muted': this.disabled\n },\n attrs: {\n id: gridCaptionId,\n 'aria-live': isLive ? 'polite' : null,\n 'aria-atomic': isLive ? 'true' : null\n }\n }, this.formatYearMonth(this.calendarFirstDay)); // Calendar weekday headings\n\n var $gridWeekDays = h('div', {\n staticClass: 'b-calendar-grid-weekdays row no-gutters border-bottom',\n attrs: {\n 'aria-hidden': 'true'\n }\n }, this.calendarHeadings.map(function (d, idx) {\n return h('small', {\n key: idx,\n staticClass: 'col text-truncate',\n class: {\n 'text-muted': _this5.disabled\n },\n attrs: {\n title: d.label === d.text ? null : d.label,\n 'aria-label': d.label\n }\n }, d.text);\n })); // Calendar day grid\n\n var $gridBody = this.calendar.map(function (week) {\n var $cells = week.map(function (day, dIndex) {\n var _class;\n\n var isSelected = day.ymd === selectedYMD;\n var isActive = day.ymd === activeYMD;\n var isToday = day.ymd === todayYMD;\n var idCell = safeId(\"_cell-\".concat(day.ymd, \"_\")); // \"fake\" button\n\n var $btn = h('span', {\n staticClass: 'btn border-0 rounded-circle text-nowrap',\n // Should we add some classes to signify if today/selected/etc?\n class: (_class = {\n // Give the fake button a focus ring\n focus: isActive && _this5.gridHasFocus,\n // Styling\n disabled: day.isDisabled || _this5.disabled,\n active: isSelected\n }, _defineProperty(_class, _this5.computedVariant, isSelected), _defineProperty(_class, _this5.computedTodayVariant, isToday && highlightToday && !isSelected && day.isThisMonth), _defineProperty(_class, 'btn-outline-light', !(isToday && highlightToday) && !isSelected && !isActive), _defineProperty(_class, 'btn-light', !(isToday && highlightToday) && !isSelected && isActive), _defineProperty(_class, 'text-muted', !day.isThisMonth && !isSelected), _defineProperty(_class, 'text-dark', !(isToday && highlightToday) && !isSelected && !isActive && day.isThisMonth), _defineProperty(_class, 'font-weight-bold', (isSelected || day.isThisMonth) && !day.isDisabled), _class),\n on: {\n click: function click() {\n return _this5.onClickDay(day);\n }\n }\n }, day.day);\n return h('div', // Cell with button\n {\n key: dIndex,\n staticClass: 'col p-0',\n class: day.isDisabled ? 'bg-light' : day.info.class || '',\n attrs: {\n id: idCell,\n role: 'button',\n 'data-date': day.ymd,\n // Primarily for testing purposes\n // Only days in the month are presented as buttons to screen readers\n 'aria-hidden': day.isThisMonth ? null : 'true',\n 'aria-disabled': day.isDisabled || _this5.disabled ? 'true' : null,\n 'aria-label': [day.label, isSelected ? \"(\".concat(_this5.labelSelected, \")\") : null, isToday ? \"(\".concat(_this5.labelToday, \")\") : null].filter(identity).join(' '),\n // NVDA doesn't convey `aria-selected`, but does `aria-current`,\n // ChromeVox doesn't convey `aria-current`, but does `aria-selected`,\n // so we set both attributes for robustness\n 'aria-selected': isSelected ? 'true' : null,\n 'aria-current': isSelected ? 'date' : null\n }\n }, [$btn]);\n }); // Return the week \"row\"\n // We use the first day of the weeks YMD value as a\n // key for efficient DOM patching / element re-use\n\n return h('div', {\n key: week[0].ymd,\n staticClass: 'row no-gutters'\n }, $cells);\n });\n $gridBody = h('div', {\n // A key is only required on the body if we add in transition support\n // key: this.activeYMD.slice(0, -3),\n staticClass: 'b-calendar-grid-body',\n style: this.disabled ? {\n pointerEvents: 'none'\n } : {}\n }, $gridBody);\n var $gridHelp = h('footer', {\n staticClass: 'b-calendar-grid-help border-top small text-muted text-center bg-light',\n attrs: {\n id: gridHelpId\n }\n }, [h('div', {\n staticClass: 'small'\n }, this.labelHelp)]);\n var $grid = h('div', {\n ref: 'grid',\n staticClass: 'b-calendar-grid form-control h-auto text-center',\n attrs: {\n id: gridId,\n role: 'application',\n tabindex: this.disabled ? null : '0',\n 'data-month': activeYMD.slice(0, -3),\n // `YYYY-MM`, mainly for testing\n 'aria-roledescription': this.labelCalendar || null,\n 'aria-labelledby': gridCaptionId,\n 'aria-describedby': gridHelpId,\n // `aria-readonly` is not considered valid on `role=\"application\"`\n // https://www.w3.org/TR/wai-aria-1.1/#aria-readonly\n // 'aria-readonly': this.readonly && !this.disabled ? 'true' : null,\n 'aria-disabled': this.disabled ? 'true' : null,\n 'aria-activedescendant': activeId\n },\n on: {\n keydown: this.onKeydownGrid,\n focus: this.setGridFocusFlag,\n blur: this.setGridFocusFlag\n }\n }, [$gridCaption, $gridWeekDays, $gridBody, $gridHelp]); // Optional bottom slot\n\n var $slot = this.normalizeSlot('default');\n $slot = $slot ? h('footer', {\n staticClass: 'b-calendar-footer'\n }, $slot) : h();\n var $widget = h('div', {\n staticClass: 'b-calendar-inner',\n style: this.block ? {} : {\n width: this.width\n },\n attrs: {\n id: widgetId,\n dir: isRTL ? 'rtl' : 'ltr',\n lang: this.computedLocale || null,\n role: 'group',\n 'aria-disabled': this.disabled ? 'true' : null,\n // If datepicker controls an input, this will specify the ID of the input\n 'aria-controls': this.ariaControls || null,\n // This should be a prop (so it can be changed to Date picker, etc, localized\n 'aria-roledescription': this.roleDescription || null,\n 'aria-describedby': [// Should the attr (if present) go last?\n // Or should this attr be a prop?\n this.bvAttrs['aria-describedby'], valueId, gridHelpId].filter(identity).join(' ')\n },\n on: {\n keydown: this.onKeydownWrapper\n }\n }, [$header, $nav, $grid, $slot]); // Wrap in an outer div that can be styled\n\n return h('div', {\n staticClass: 'b-calendar',\n class: {\n 'd-block': this.block\n }\n }, [$widget]);\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 '../../utils/vue';\nimport { arrayIncludes } from '../../utils/array';\nimport { BVFormBtnLabelControl, dropdownProps } from '../../utils/bv-form-btn-label-control';\nimport { getComponentConfig } from '../../utils/config';\nimport { createDate, constrainDate, formatYMD, parseYMD } from '../../utils/date';\nimport { attemptBlur, attemptFocus } from '../../utils/dom';\nimport { isUndefinedOrNull } from '../../utils/inspect';\nimport { pick } from '../../utils/object';\nimport idMixin from '../../mixins/id';\nimport { BButton } from '../button/button';\nimport { BCalendar, STR_LONG, STR_NARROW, STR_NUMERIC, STR_SHORT } from '../calendar/calendar';\nimport { BIconCalendar, BIconCalendarFill } from '../../icons/icons';\nvar NAME = 'BFormDatepicker'; // Fallback to BCalendar prop if no value found\n\nvar getConfigFallback = function getConfigFallback(prop) {\n return getComponentConfig(NAME, prop) || getComponentConfig('BCalendar', prop);\n}; // We create our props as a mixin so that we can control\n// where they appear in the props listing reference section\n\n\nvar propsMixin = {\n props: _objectSpread({\n value: {\n type: [String, Date],\n default: null\n },\n valueAsDate: {\n type: Boolean,\n default: false\n },\n resetValue: {\n type: [String, Date] // default: null\n\n },\n initialDate: {\n // This specifies the calendar year/month/day that will be shown when\n // first opening the datepicker if no v-model value is provided\n // Default is the current date (or `min`/`max`)\n // Passed directly to \n type: [String, Date] // default: null\n\n },\n placeholder: {\n type: String // Defaults to `labelNoDateSelected` from calendar context\n // default: null\n\n },\n size: {\n type: String // default: null\n\n },\n min: {\n type: [String, Date] // default: null\n\n },\n max: {\n type: [String, Date] // default: null\n\n },\n disabled: {\n type: Boolean,\n default: false\n },\n readonly: {\n type: Boolean,\n default: false\n },\n required: {\n // If true adds the `aria-required` attribute\n type: Boolean,\n default: false\n },\n name: {\n type: String // default: null\n\n },\n form: {\n type: String // default: null\n\n },\n state: {\n // Tri-state prop: `true`, `false` or `null`\n type: Boolean,\n default: null\n },\n dateDisabledFn: {\n type: Function // default: null\n\n },\n noCloseOnSelect: {\n type: Boolean,\n default: false\n },\n hideHeader: {\n type: Boolean,\n default: false\n },\n showDecadeNav: {\n // When `true` enables the decade navigation buttons\n type: Boolean,\n default: false\n },\n locale: {\n type: [String, Array] // default: null\n\n },\n startWeekday: {\n // `0` (Sunday), `1` (Monday), ... `6` (Saturday)\n // Day of week to start calendar on\n type: [Number, String],\n default: 0\n },\n direction: {\n type: String // default: null\n\n },\n buttonOnly: {\n type: Boolean,\n default: false\n },\n buttonVariant: {\n // Applicable in button only mode\n type: String,\n default: 'secondary'\n },\n calendarWidth: {\n // Width of the calendar dropdown\n type: String,\n default: '270px'\n },\n selectedVariant: {\n // Variant color to use for the selected date\n type: String,\n default: 'primary'\n },\n todayVariant: {\n // Variant color to use for today's date (defaults to `variant`)\n type: String // default: null\n\n },\n noHighlightToday: {\n // Disable highlighting today's date\n type: Boolean,\n default: false\n },\n todayButton: {\n type: Boolean,\n default: false\n },\n labelTodayButton: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME, 'labelTodayButton');\n }\n },\n todayButtonVariant: {\n type: String,\n default: 'outline-primary'\n },\n resetButton: {\n type: Boolean,\n default: false\n },\n labelResetButton: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME, 'labelResetButton');\n }\n },\n resetButtonVariant: {\n type: String,\n default: 'outline-danger'\n },\n closeButton: {\n type: Boolean,\n default: false\n },\n labelCloseButton: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME, 'labelCloseButton');\n }\n },\n closeButtonVariant: {\n type: String,\n default: 'outline-secondary'\n },\n dateInfoFn: {\n // Passed through to b-calendar\n type: Function // default: undefined\n\n },\n // Labels for buttons and keyboard shortcuts\n // These pick BCalendar global config if no BFormDate global config\n labelPrevDecade: {\n type: String,\n default: function _default() {\n return getConfigFallback('labelPrevDecade');\n }\n },\n labelPrevYear: {\n type: String,\n default: function _default() {\n return getConfigFallback('labelPrevYear');\n }\n },\n labelPrevMonth: {\n type: String,\n default: function _default() {\n return getConfigFallback('labelPrevMonth');\n }\n },\n labelCurrentMonth: {\n type: String,\n default: function _default() {\n return getConfigFallback('labelCurrentMonth');\n }\n },\n labelNextMonth: {\n type: String,\n default: function _default() {\n return getConfigFallback('labelNextMonth');\n }\n },\n labelNextYear: {\n type: String,\n default: function _default() {\n return getConfigFallback('labelNextYear');\n }\n },\n labelNextDecade: {\n type: String,\n default: function _default() {\n return getConfigFallback('labelNextDecade');\n }\n },\n labelToday: {\n type: String,\n default: function _default() {\n return getConfigFallback('labelToday');\n }\n },\n labelSelected: {\n type: String,\n default: function _default() {\n return getConfigFallback('labelSelected');\n }\n },\n labelNoDateSelected: {\n type: String,\n default: function _default() {\n return getConfigFallback('labelNoDateSelected');\n }\n },\n labelCalendar: {\n type: String,\n default: function _default() {\n return getConfigFallback('labelCalendar');\n }\n },\n labelNav: {\n type: String,\n default: function _default() {\n return getConfigFallback('labelNav');\n }\n },\n labelHelp: {\n type: String,\n default: function _default() {\n return getConfigFallback('labelHelp');\n }\n },\n dateFormatOptions: {\n // `Intl.DateTimeFormat` object\n // Note: This value is *not* to be placed in the global config\n type: Object,\n default: function _default() {\n return {\n year: STR_NUMERIC,\n month: STR_LONG,\n day: STR_NUMERIC,\n weekday: STR_LONG\n };\n }\n },\n weekdayHeaderFormat: {\n // Format of the weekday names at the top of the calendar\n // Note: This value is *not* to be placed in the global config\n type: String,\n // `short` is typically a 3 letter abbreviation,\n // `narrow` is typically a single letter\n // `long` is the full week day name\n // Although some locales may override this (i.e `ar`, etc)\n default: STR_SHORT,\n validator: function validator(value) {\n return arrayIncludes([STR_LONG, STR_SHORT, STR_NARROW], value);\n }\n },\n // Dark mode\n dark: {\n type: Boolean,\n default: false\n },\n // extra dropdown stuff\n menuClass: {\n type: [String, Array, Object] // default: null\n\n }\n }, dropdownProps)\n}; // --- BFormDate component ---\n// @vue/component\n\nexport var BFormDatepicker = /*#__PURE__*/Vue.extend({\n name: NAME,\n // The mixins order determines the order of appearance in the props reference section\n mixins: [idMixin, propsMixin],\n model: {\n prop: 'value',\n event: 'input'\n },\n data: function data() {\n return {\n // We always use `YYYY-MM-DD` value internally\n localYMD: formatYMD(this.value) || '',\n // If the popup is open\n isVisible: false,\n // Context data from BCalendar\n localLocale: null,\n isRTL: false,\n formattedValue: '',\n activeYMD: ''\n };\n },\n computed: {\n calendarYM: function calendarYM() {\n // Returns the calendar year/month\n // Returns the `YYYY-MM` portion of the active calendar date\n return this.activeYMD.slice(0, -3);\n },\n calendarProps: function calendarProps() {\n // Use self for better minification, as `this` won't\n // minimize and we reference it many times below\n var self = this;\n return {\n hidden: !self.isVisible,\n value: self.localYMD,\n min: self.min,\n max: self.max,\n initialDate: self.initialDate,\n readonly: self.readonly,\n disabled: self.disabled,\n locale: self.locale,\n startWeekday: self.startWeekday,\n direction: self.direction,\n width: self.calendarWidth,\n dateDisabledFn: self.dateDisabledFn,\n selectedVariant: self.selectedVariant,\n todayVariant: self.todayVariant,\n dateInfoFn: self.dateInfoFn,\n hideHeader: self.hideHeader,\n showDecadeNav: self.showDecadeNav,\n noHighlightToday: self.noHighlightToday,\n labelPrevDecade: self.labelPrevDecade,\n labelPrevYear: self.labelPrevYear,\n labelPrevMonth: self.labelPrevMonth,\n labelCurrentMonth: self.labelCurrentMonth,\n labelNextMonth: self.labelNextMonth,\n labelNextYear: self.labelNextYear,\n labelNextDecade: self.labelNextDecade,\n labelToday: self.labelToday,\n labelSelected: self.labelSelected,\n labelNoDateSelected: self.labelNoDateSelected,\n labelCalendar: self.labelCalendar,\n labelNav: self.labelNav,\n labelHelp: self.labelHelp,\n dateFormatOptions: self.dateFormatOptions,\n weekdayHeaderFormat: self.weekdayHeaderFormat\n };\n },\n computedLang: function computedLang() {\n return (this.localLocale || '').replace(/-u-.*$/i, '') || null;\n },\n computedResetValue: function computedResetValue() {\n return formatYMD(constrainDate(this.resetValue)) || '';\n }\n },\n watch: {\n value: function value(newVal) {\n this.localYMD = formatYMD(newVal) || '';\n },\n localYMD: function localYMD(newVal) {\n // We only update the v-model when the datepicker is open\n if (this.isVisible) {\n this.$emit('input', this.valueAsDate ? parseYMD(newVal) || null : newVal || '');\n }\n },\n calendarYM: function calendarYM(newVal, oldVal)\n /* istanbul ignore next */\n {\n // Displayed calendar month has changed\n // So possibly the calendar height has changed...\n // We need to update popper computed position\n if (newVal !== oldVal && oldVal) {\n try {\n this.$refs.control.updatePopper();\n } catch (_unused) {}\n }\n }\n },\n methods: {\n // Public methods\n focus: function focus() {\n if (!this.disabled) {\n attemptFocus(this.$refs.control);\n }\n },\n blur: function blur() {\n if (!this.disabled) {\n attemptBlur(this.$refs.control);\n }\n },\n // Private methods\n setAndClose: function setAndClose(ymd) {\n var _this = this;\n\n this.localYMD = ymd; // Close calendar popup, unless `noCloseOnSelect`\n\n if (!this.noCloseOnSelect) {\n this.$nextTick(function () {\n _this.$refs.control.hide(true);\n });\n }\n },\n onSelected: function onSelected(ymd) {\n var _this2 = this;\n\n this.$nextTick(function () {\n _this2.setAndClose(ymd);\n });\n },\n onInput: function onInput(ymd) {\n if (this.localYMD !== ymd) {\n this.localYMD = ymd;\n }\n },\n onContext: function onContext(ctx) {\n var activeYMD = ctx.activeYMD,\n isRTL = ctx.isRTL,\n locale = ctx.locale,\n selectedYMD = ctx.selectedYMD,\n selectedFormatted = ctx.selectedFormatted;\n this.isRTL = isRTL;\n this.localLocale = locale;\n this.formattedValue = selectedFormatted;\n this.localYMD = selectedYMD;\n this.activeYMD = activeYMD; // Re-emit the context event\n\n this.$emit('context', ctx);\n },\n onTodayButton: function onTodayButton() {\n // Set to today (or min/max if today is out of range)\n this.setAndClose(formatYMD(constrainDate(createDate(), this.min, this.max)));\n },\n onResetButton: function onResetButton() {\n this.setAndClose(this.computedResetValue);\n },\n onCloseButton: function onCloseButton() {\n this.$refs.control.hide(true);\n },\n // Menu handlers\n onShow: function onShow() {\n this.isVisible = true;\n },\n onShown: function onShown() {\n var _this3 = this;\n\n this.$nextTick(function () {\n attemptFocus(_this3.$refs.calendar);\n\n _this3.$emit('shown');\n });\n },\n onHidden: function onHidden() {\n this.isVisible = false;\n this.$emit('hidden');\n },\n // Render helpers\n defaultButtonFn: function defaultButtonFn(_ref) {\n var isHovered = _ref.isHovered,\n hasFocus = _ref.hasFocus;\n return this.$createElement(isHovered || hasFocus ? BIconCalendarFill : BIconCalendar, {\n attrs: {\n 'aria-hidden': 'true'\n }\n });\n }\n },\n render: function render(h) {\n var $scopedSlots = this.$scopedSlots;\n var localYMD = this.localYMD;\n var disabled = this.disabled;\n var readonly = this.readonly;\n var placeholder = isUndefinedOrNull(this.placeholder) ? this.labelNoDateSelected : this.placeholder; // Optional footer buttons\n\n var $footer = [];\n\n if (this.todayButton) {\n var label = this.labelTodayButton;\n $footer.push(h(BButton, {\n props: {\n size: 'sm',\n disabled: disabled || readonly,\n variant: this.todayButtonVariant\n },\n attrs: {\n 'aria-label': label || null\n },\n on: {\n click: this.onTodayButton\n }\n }, label));\n }\n\n if (this.resetButton) {\n var _label = this.labelResetButton;\n $footer.push(h(BButton, {\n props: {\n size: 'sm',\n disabled: disabled || readonly,\n variant: this.resetButtonVariant\n },\n attrs: {\n 'aria-label': _label || null\n },\n on: {\n click: this.onResetButton\n }\n }, _label));\n }\n\n if (this.closeButton) {\n var _label2 = this.labelCloseButton;\n $footer.push(h(BButton, {\n props: {\n size: 'sm',\n disabled: disabled,\n variant: this.closeButtonVariant\n },\n attrs: {\n 'aria-label': _label2 || null\n },\n on: {\n click: this.onCloseButton\n }\n }, _label2));\n }\n\n if ($footer.length > 0) {\n $footer = [h('div', {\n staticClass: 'b-form-date-controls d-flex flex-wrap',\n class: {\n 'justify-content-between': $footer.length > 1,\n 'justify-content-end': $footer.length < 2\n }\n }, $footer)];\n }\n\n var $calendar = h(BCalendar, {\n key: 'calendar',\n ref: 'calendar',\n staticClass: 'b-form-date-calendar w-100',\n props: this.calendarProps,\n on: {\n selected: this.onSelected,\n input: this.onInput,\n context: this.onContext\n },\n scopedSlots: pick($scopedSlots, ['nav-prev-decade', 'nav-prev-year', 'nav-prev-month', 'nav-this-month', 'nav-next-month', 'nav-next-year', 'nav-next-decade'])\n }, $footer);\n return h(BVFormBtnLabelControl, {\n ref: 'control',\n staticClass: 'b-form-datepicker',\n props: _objectSpread(_objectSpread({}, this.$props), {}, {\n // Overridden / computed props\n id: this.safeId(),\n rtl: this.isRTL,\n lang: this.computedLang,\n value: localYMD || '',\n formattedValue: localYMD ? this.formattedValue : '',\n placeholder: placeholder || '',\n menuClass: [{\n 'bg-dark': !!this.dark,\n 'text-light': !!this.dark\n }, this.menuClass]\n }),\n on: {\n show: this.onShow,\n shown: this.onShown,\n hidden: this.onHidden\n },\n scopedSlots: {\n 'button-content': $scopedSlots['button-content'] || this.defaultButtonFn\n }\n }, [$calendar]);\n }\n});","\r\n \r\n
\r\n
\r\n
Mentor / Student interaction submitted.
\r\n
\r\n
\r\n \r\n\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LogInteractionView.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LogInteractionView.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./LogInteractionView.vue?vue&type=template&id=46eda5fe&scoped=true&\"\nimport script from \"./LogInteractionView.vue?vue&type=script&lang=js&\"\nexport * from \"./LogInteractionView.vue?vue&type=script&lang=js&\"\nimport style0 from \"./LogInteractionView.vue?vue&type=style&index=0&id=46eda5fe&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"46eda5fe\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"user-list\"},[_c('table',{staticClass:\"table\"},[_vm._m(0),_c('tbody',_vm._l((_vm.relatedUsers),function(data){return _c('tr',{key:data.user.id},[_c('td',{staticClass:\"text-left align-middle\"},[_c('span',{staticClass:\"user-name\"},[_vm._v(_vm._s(data.user.firstName)+\" \"+_vm._s(data.user.lastName))]),_c('span',{staticClass:\"user-email\"},[_vm._v(_vm._s(data.user.email))])]),_c('td',{staticClass:\"user-link-type align-middle\"},[_vm._v(_vm._s(data.relationship))]),_c('td',{staticClass:\"text-center align-middle\"},[_c('b-button',{staticClass:\"action-button red\",attrs:{\"variant\":\"primary\",\"size\":\"sm\"},on:{\"click\":function($event){return _vm.sendMessage(data.user.id)}}},[_c('b-icon-envelope-fill',{staticClass:\"action-icon\"}),_vm._v(\" send message \")],1),(_vm.roleMap.Student === data.relationship)?_c('b-button',{staticClass:\"action-button red\",attrs:{\"variant\":\"primary\",\"size\":\"sm\"},on:{\"click\":_vm.logInteraction}},[_c('b-icon-pencil',{staticClass:\"action-icon\"}),_vm._v(\" log interaction \")],1):_vm._e(),_c('b-button',{staticClass:\"action-button red\",attrs:{\"variant\":\"primary\",\"size\":\"sm\"},on:{\"click\":function($event){return _vm.viewProfile(data.user)}}},[_c('b-icon-person-fill',{staticClass:\"action-icon\"}),_vm._v(\" view profile \")],1),(_vm.canEditOtherUsers)?_c('b-button',{staticClass:\"action-button red\",attrs:{\"variant\":\"primary\",\"size\":\"sm\"},on:{\"click\":function($event){return _vm.manageUser(data.user)}}},[_c('b-icon-person-lines-fill',{staticClass:\"action-icon\"}),_vm._v(\" edit user \")],1):_vm._e()],1)])}),0)])])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('thead',[_c('tr',[_c('th',{staticClass:\"text-left\",attrs:{\"scope\":\"col\"}},[_vm._v(\"Contact\")]),_c('th',{staticClass:\"text-center\",attrs:{\"scope\":\"col\"}}),_c('th',{staticClass:\"text-center\",attrs:{\"scope\":\"col\"}},[_vm._v(\"Actions\")])])])}]\n\nexport { render, staticRenderFns }","\r\n \r\n
\r\n \r\n \r\n Contact \r\n \r\n Actions \r\n \r\n \r\n \r\n \r\n \r\n {{ data.user.firstName }} {{ data.user.lastName }} {{ data.user.email }} \r\n \r\n {{ data.relationship }} \r\n \r\n \r\n \r\n send message\r\n \r\n \r\n \r\n log interaction\r\n \r\n \r\n \r\n view profile\r\n \r\n \r\n \r\n edit user\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserListView.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserListView.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./UserListView.vue?vue&type=template&id=67f5b172&scoped=true&\"\nimport script from \"./UserListView.vue?vue&type=script&lang=js&\"\nexport * from \"./UserListView.vue?vue&type=script&lang=js&\"\nimport style0 from \"./UserListView.vue?vue&type=style&index=0&id=67f5b172&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"67f5b172\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"user-profile\"},[_c('div',{staticClass:\"row user\"},[_c('div',{staticClass:\"col-sm-12\"},[_c('div',{staticClass:\"card\"},[_c('div',{staticClass:\"card-body\"},[_c('h5',{staticClass:\"card-title\"},[_vm._v(_vm._s(_vm.user.firstName)+\" \"+_vm._s(_vm.user.lastName))]),_c('h6',{staticClass:\"card-subtitle text-muted\"},[_vm._v(\" \"+_vm._s(_vm.user.roles.join(\", \"))+\" \")]),_c('p',{staticClass:\"card-text mt-3 bio-text\"},[_vm._v(\" \"+_vm._s(_vm.user.bio ? _vm.user.bio : \"This user has not yet added a bio.\")+\" \")]),(_vm.showEditLink)?_c('p',[_c('b-button',{staticClass:\"action-button red\",attrs:{\"variant\":\"primary\",\"size\":\"sm\"},on:{\"click\":_vm.goToEditPage}},[_c('b-icon-person-lines-fill',{staticClass:\"action-icon\"}),_vm._v(\" edit user\")],1)],1):_vm._e()])])])]),_c('div',{staticClass:\"table table-hover mt-4\"},[_c('table',{staticClass:\"table\"},[_c('tbody',[_c('tr',[_c('th',{attrs:{\"scope\":\"row\"}},[_vm._v(\"Email\")]),_c('td',{attrs:{\"scope\":\"row\"}},[_vm._v(_vm._s(_vm.user.email))])]),_c('tr',[_c('th',{attrs:{\"scope\":\"row\"}},[_vm._v(\"Pronouns\")]),_c('td',{attrs:{\"scope\":\"row\"}},[_vm._v(_vm._s(_vm.user.pronouns))])]),_c('tr',[_c('th',{attrs:{\"scope\":\"row\"}},[_vm._v(\"Phone\")]),_c('td',{attrs:{\"scope\":\"row\"}},[_c('ul',{staticClass:\"number-container\"},_vm._l((_vm.user.phoneNumbers),function(number){return _c('li',{key:number.id},[_c('span',{staticClass:\"number\"},[_vm._v(_vm._s(_vm._f(\"VMask\")(number.number,\"(###) ###-####\")))]),_c('span',{staticClass:\"number-type\"},[_vm._v(_vm._s(number.type))])])}),0)])]),(_vm.user.studentProfile)?[_c('tr',[_c('th',{attrs:{\"scope\":\"row\"}},[_vm._v(\"Last School Attended\")]),_c('td',{attrs:{\"scope\":\"row\"}},[_vm._v(_vm._s(_vm.user.studentProfile.transferSchool))])]),_c('tr',[_c('th',{attrs:{\"scope\":\"row\"}},[_vm._v(\"First Year as Student\")]),_c('td',{attrs:{\"scope\":\"row\"}},[_vm._v(_vm._s(_vm.user.studentProfile.studentStartYear))])]),_c('tr',[_c('th',{attrs:{\"scope\":\"row\"}},[_vm._v(\"Major\")]),_c('td',{attrs:{\"scope\":\"row\"}},[_vm._v(_vm._s(_vm.user.studentProfile.major))])])]:_vm._e(),(_vm.user.mentorProfile)?[_c('tr',[_c('th',{attrs:{\"scope\":\"row\"}},[_vm._v(\"Specialty\")]),_c('td',{attrs:{\"scope\":\"row\"}},[_vm._v(_vm._s(_vm.user.mentorProfile.specialty))])]),_c('tr',[_c('th',{attrs:{\"scope\":\"row\"}},[_vm._v(\"Company\")]),_c('td',{attrs:{\"scope\":\"row\"}},[_vm._v(_vm._s(_vm.user.mentorProfile.company))])]),_c('tr',[_c('th',{attrs:{\"scope\":\"row\"}},[_vm._v(\"First Year as Mentor\")]),_c('td',{attrs:{\"scope\":\"row\"}},[_vm._v(\" \"+_vm._s(_vm.months[_vm.user.mentorProfile.mentorStartMonth].text)+\" \"+_vm._s(_vm.user.mentorProfile.mentorStartYear)+\" \")])])]:_vm._e()],2)])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
{{ user.firstName }} {{ user.lastName }} \r\n
\r\n {{ user.roles.join(\", \") }}\r\n \r\n
\r\n {{ user.bio ? user.bio : \"This user has not yet added a bio.\" }}\r\n
\r\n
\r\n \r\n \r\n edit user \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n Email \r\n {{ user.email }} \r\n \r\n \r\n Pronouns \r\n {{ user.pronouns }} \r\n \r\n \r\n Phone \r\n \r\n \r\n \r\n {{\r\n number.number | VMask(\"(###) ###-####\")\r\n }} \r\n {{ number.type }} \r\n \r\n \r\n \r\n \r\n \r\n \r\n Last School Attended \r\n {{ user.studentProfile.transferSchool }} \r\n \r\n \r\n First Year as Student \r\n {{ user.studentProfile.studentStartYear }} \r\n \r\n \r\n Major \r\n {{ user.studentProfile.major }} \r\n \r\n \r\n \r\n \r\n Specialty \r\n {{ user.mentorProfile.specialty }} \r\n \r\n \r\n Company \r\n {{ user.mentorProfile.company }} \r\n \r\n \r\n First Year as Mentor \r\n \r\n {{ months[user.mentorProfile.mentorStartMonth].text }}\r\n {{ user.mentorProfile.mentorStartYear }}\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserProfileView.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserProfileView.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./UserProfileView.vue?vue&type=template&id=53b25084&scoped=true&\"\nimport script from \"./UserProfileView.vue?vue&type=script&lang=js&\"\nexport * from \"./UserProfileView.vue?vue&type=script&lang=js&\"\nimport style0 from \"./UserProfileView.vue?vue&type=style&index=0&id=53b25084&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"53b25084\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"import-users-view-container\"},[(Object.keys(_vm.responseData).length === 0)?_c('b-form',{on:{\"submit\":_vm.handleSubmit}},[_c('h1',[_vm._v(\"Import Users\")]),_c('b-form-group',{attrs:{\"label\":\"User Type\",\"state\":_vm.userTypeValidation,\"disabled\":_vm.submitting}},[_c('b-form-radio',{attrs:{\"value\":_vm.userTypeValues.student},model:{value:(_vm.userType),callback:function ($$v) {_vm.userType=$$v},expression:\"userType\"}},[_vm._v(\"Students\")]),_c('b-form-radio',{attrs:{\"value\":_vm.userTypeValues.mentor},model:{value:(_vm.userType),callback:function ($$v) {_vm.userType=$$v},expression:\"userType\"}},[_vm._v(\"Mentors\")]),_c('b-form-invalid-feedback',{attrs:{\"state\":_vm.userTypeValidation}},[_vm._v(\"You must select a user type\")])],1),(Object.values(_vm.userTypeValues).includes(_vm.userType))?[_c('b-form-group',{attrs:{\"disabled\":_vm.submitting}},[_c('b-form-file',{attrs:{\"state\":_vm.formFileValidation,\"placeholder\":\"Choose a file (or drag and drop)\",\"drop-placeholder\":\"Drop file here\"},model:{value:(_vm.formData.file),callback:function ($$v) {_vm.$set(_vm.formData, \"file\", $$v)},expression:\"formData.file\"}}),_c('b-form-invalid-feedback',{attrs:{\"state\":_vm.formFileValidation}},[_vm._v(\"You must select a file to upload\")]),_c('div',{staticClass:\"mt-3\"},[_vm._v(\" Selected file: \"+_vm._s(_vm.formData.file ? _vm.formData.file.name : \"\")+\" \")])],1)]:_vm._e(),_c('b-button',{staticClass:\"red\",attrs:{\"variant\":\"primary\",\"type\":\"submit\",\"disabled\":_vm.submitting}},[(_vm.submitting)?_c('b-spinner',{staticClass:\"submit-spinner\",attrs:{\"label\":\"loading\",\"variant\":\"secondary\"}}):_vm._e(),_vm._v(\" \"+_vm._s(_vm.submitting ? \"Submitting\" : \"Submit\"))],1)],2):_vm._e(),(Object.keys(_vm.responseData).length > 0)?[_c('h1',{staticClass:\"mt-2\"},[_vm._v(\"Import results\")]),_c('h4',[_vm._v(\"Successfully added\")]),(_vm.responseData.added.length > 0)?_c('ul',{staticClass:\"scrollable-list\"},_vm._l((_vm.responseData.added),function(email){return _c('li',{key:email},[_vm._v(\" \"+_vm._s(email)+\" \")])}),0):_c('p',[_vm._v(\"No users were added.\")]),_c('h4',[_vm._v(\"Already existing\")]),(_vm.responseData.alreadyPresent.length > 0)?_c('ul',{staticClass:\"scrollable-list\"},_vm._l((_vm.responseData.alreadyPresent),function(email){return _c('li',{key:email},[_vm._v(\" \"+_vm._s(email)+\" \")])}),0):_c('p',[_vm._v(\"n/a\")]),_c('h4',[_vm._v(\"Failed to add\")]),(_vm.responseData.failedToAdd.length > 0)?_c('ul',{staticClass:\"scrollable-list\"},_vm._l((_vm.responseData.failedToAdd),function(email){return _c('li',{key:email},[_vm._v(\" \"+_vm._s(email)+\" \")])}),0):_c('p',[_vm._v(\"n/a\")]),_c('h4',[_vm._v(\"Imported, but failed to add roles\")]),(_vm.responseData.failedToAddRoles.length > 0)?_c('ul',{staticClass:\"scrollable-list\"},_vm._l((_vm.responseData.failedToAddRoles),function(email){return _c('li',{key:email},[_vm._v(\" \"+_vm._s(email)+\" \")])}),0):_c('p',[_vm._v(\"n/a\")]),_c('h4',[_vm._v(\"Malformed Lines\")]),(Object.keys(_vm.responseData.badLines).length > 0)?_c('ul',{staticClass:\"scrollable-list\"},_vm._l((_vm.responseData.badLines),function(rowText,line){return _c('li',{key:line},[_vm._v(\" Line \"+_vm._s(line)+\": \"+_vm._s(rowText)+\" \")])}),0):_c('p',[_vm._v(\"n/a\")]),_c('p',[_c('b-button',{staticClass:\"red\",attrs:{\"variant\":\"primary\"},on:{\"click\":_vm.handleImportAgainClick}},[_vm._v(\"import another batch\")])],1)]:_vm._e()],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","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 '../../utils/vue';\nimport identity from '../../utils/identity';\nimport { from as arrayFrom, isArray, concat } from '../../utils/array';\nimport { getComponentConfig } from '../../utils/config';\nimport { isFile, isFunction, isUndefinedOrNull } from '../../utils/inspect';\nimport { File } from '../../utils/safe-types';\nimport { toString } from '../../utils/string';\nimport { warn } from '../../utils/warn';\nimport attrsMixin from '../../mixins/attrs';\nimport formCustomMixin from '../../mixins/form-custom';\nimport formMixin from '../../mixins/form';\nimport formStateMixin from '../../mixins/form-state';\nimport idMixin from '../../mixins/id';\nimport normalizeSlotMixin from '../../mixins/normalize-slot'; // --- Constants ---\n\nvar NAME = 'BFormFile';\nvar VALUE_EMPTY_DEPRECATED_MSG = 'Setting \"value\"/\"v-model\" to an empty string for reset is deprecated. Set to \"null\" instead.'; // --- Helper methods ---\n\nvar isValidValue = function isValidValue(value) {\n return isFile(value) || isArray(value) && value.every(function (v) {\n return isValidValue(v);\n });\n}; // @vue/component\n\n\nexport var BFormFile = /*#__PURE__*/Vue.extend({\n name: NAME,\n mixins: [attrsMixin, idMixin, formMixin, formStateMixin, formCustomMixin, normalizeSlotMixin],\n inheritAttrs: false,\n model: {\n prop: 'value',\n event: 'input'\n },\n props: {\n size: {\n type: String,\n default: function _default() {\n return getComponentConfig('BFormControl', 'size');\n }\n },\n value: {\n type: [File, Array],\n default: null,\n validator: function validator(value) {\n /* istanbul ignore next */\n if (value === '') {\n warn(VALUE_EMPTY_DEPRECATED_MSG, NAME);\n return true;\n }\n\n return isUndefinedOrNull(value) || isValidValue(value);\n }\n },\n accept: {\n type: String,\n default: ''\n },\n // Instruct input to capture from camera\n capture: {\n type: Boolean,\n default: false\n },\n placeholder: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME, 'placeholder');\n }\n },\n browseText: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME, 'browseText');\n }\n },\n dropPlaceholder: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME, 'dropPlaceholder');\n }\n },\n multiple: {\n type: Boolean,\n default: false\n },\n directory: {\n type: Boolean,\n default: false\n },\n noTraverse: {\n type: Boolean,\n default: false\n },\n noDrop: {\n type: Boolean,\n default: false\n },\n fileNameFormatter: {\n type: Function,\n default: null\n }\n },\n data: function data() {\n return {\n selectedFile: null,\n dragging: false,\n hasFocus: false\n };\n },\n computed: {\n selectLabel: function selectLabel() {\n // Draging active\n if (this.dragging && this.dropPlaceholder) {\n return this.dropPlaceholder;\n } // No file chosen\n\n\n if (!this.selectedFile || this.selectedFile.length === 0) {\n return this.placeholder;\n } // Convert selectedFile to an array (if not already one)\n\n\n var files = concat(this.selectedFile).filter(identity);\n\n if (this.hasNormalizedSlot('file-name')) {\n // There is a slot for formatting the files/names\n return [this.normalizeSlot('file-name', {\n files: files,\n names: files.map(function (f) {\n return f.name;\n })\n })];\n } else {\n // Use the user supplied formatter, or the built in one.\n return isFunction(this.fileNameFormatter) ? toString(this.fileNameFormatter(files)) : files.map(function (file) {\n return file.name;\n }).join(', ');\n }\n },\n computedAttrs: function computedAttrs() {\n return _objectSpread(_objectSpread({}, this.bvAttrs), {}, {\n type: 'file',\n id: this.safeId(),\n name: this.name,\n disabled: this.disabled,\n required: this.required,\n form: this.form || null,\n capture: this.capture || null,\n accept: this.accept || null,\n multiple: this.multiple,\n webkitdirectory: this.directory,\n 'aria-required': this.required ? 'true' : null\n });\n }\n },\n watch: {\n selectedFile: function selectedFile(newVal, oldVal) {\n // The following test is needed when the file input is \"reset\" or the\n // exact same file(s) are selected to prevent an infinite loop.\n // When in `multiple` mode we need to check for two empty arrays or\n // two arrays with identical files\n if (newVal === oldVal || isArray(newVal) && isArray(oldVal) && newVal.length === oldVal.length && newVal.every(function (v, i) {\n return v === oldVal[i];\n })) {\n return;\n }\n\n if (!newVal && this.multiple) {\n this.$emit('input', []);\n } else {\n this.$emit('input', newVal);\n }\n },\n value: function value(newVal) {\n if (!newVal || isArray(newVal) && newVal.length === 0) {\n this.reset();\n }\n }\n },\n methods: {\n focusHandler: function focusHandler(evt) {\n // Bootstrap v4 doesn't have focus styling for custom file input\n // Firefox has a '[type=file]:focus ~ sibling' selector issue,\n // so we add a 'focus' class to get around these bugs\n if (this.plain || evt.type === 'focusout') {\n this.hasFocus = false;\n } else {\n // Add focus styling for custom file input\n this.hasFocus = true;\n }\n },\n reset: function reset() {\n // IE 11 doesn't support setting `$input.value` to `''` or `null`\n // So we use this little extra hack to reset the value, just in case\n // This also appears to work on modern browsers as well\n // Wrapped in try in case IE 11 or mobile Safari crap out\n try {\n var $input = this.$refs.input;\n $input.value = '';\n $input.type = '';\n $input.type = 'file';\n } catch (e) {}\n\n this.selectedFile = this.multiple ? [] : null;\n },\n onFileChange: function onFileChange(evt) {\n var _this = this;\n\n // Always emit original event\n this.$emit('change', evt); // Check if special `items` prop is available on event (drop mode)\n // Can be disabled by setting no-traverse\n\n var items = evt.dataTransfer && evt.dataTransfer.items;\n /* istanbul ignore next: not supported in JSDOM */\n\n if (items && !this.noTraverse) {\n var queue = [];\n\n for (var i = 0; i < items.length; i++) {\n var item = items[i].webkitGetAsEntry();\n\n if (item) {\n queue.push(this.traverseFileTree(item));\n }\n }\n\n Promise.all(queue).then(function (filesArr) {\n _this.setFiles(arrayFrom(filesArr));\n });\n return;\n } // Normal handling\n\n\n this.setFiles(evt.target.files || evt.dataTransfer.files);\n },\n setFiles: function setFiles() {\n var files = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\n if (!files) {\n /* istanbul ignore next: this will probably not happen */\n this.selectedFile = null;\n } else if (this.multiple) {\n // Convert files to array\n var filesArray = [];\n\n for (var i = 0; i < files.length; i++) {\n filesArray.push(files[i]);\n } // Return file(s) as array\n\n\n this.selectedFile = filesArray;\n } else {\n // Return single file object\n this.selectedFile = files[0] || null;\n }\n },\n onReset: function onReset() {\n // Triggered when the parent form (if any) is reset\n this.selectedFile = this.multiple ? [] : null;\n },\n onDragover: function onDragover(evt) {\n evt.preventDefault();\n evt.stopPropagation();\n\n if (this.noDrop || !this.custom) {\n return;\n }\n\n this.dragging = true;\n\n try {\n evt.dataTransfer.dropEffect = 'copy';\n } catch (_unused) {}\n },\n onDragleave: function onDragleave(evt) {\n evt.preventDefault();\n evt.stopPropagation();\n this.dragging = false;\n },\n onDrop: function onDrop(evt) {\n evt.preventDefault();\n evt.stopPropagation();\n\n if (this.noDrop) {\n return;\n }\n\n this.dragging = false;\n\n if (evt.dataTransfer.files && evt.dataTransfer.files.length > 0) {\n this.onFileChange(evt);\n }\n },\n\n /* istanbul ignore next: not supported in JSDOM */\n traverseFileTree: function traverseFileTree(item, path)\n /* istanbul ignore next */\n {\n var _this2 = this;\n\n // Based on https://stackoverflow.com/questions/3590058\n return new Promise(function (resolve) {\n path = path || '';\n\n if (item.isFile) {\n // Get file\n item.file(function (file) {\n file.$path = path; // Inject $path to file obj\n\n resolve(file);\n });\n } else if (item.isDirectory) {\n // Get folder contents\n item.createReader().readEntries(function (entries) {\n var queue = [];\n\n for (var i = 0; i < entries.length; i++) {\n queue.push(_this2.traverseFileTree(entries[i], path + item.name + '/'));\n }\n\n Promise.all(queue).then(function (filesArr) {\n resolve(arrayFrom(filesArr));\n });\n });\n }\n });\n }\n },\n render: function render(h) {\n // Form Input\n var input = h('input', {\n ref: 'input',\n class: [{\n 'form-control-file': this.plain,\n 'custom-file-input': this.custom,\n focus: this.custom && this.hasFocus\n }, this.stateClass],\n attrs: this.computedAttrs,\n on: {\n change: this.onFileChange,\n focusin: this.focusHandler,\n focusout: this.focusHandler,\n reset: this.onReset\n }\n });\n\n if (this.plain) {\n return input;\n } // Overlay Labels\n\n\n var label = h('label', {\n staticClass: 'custom-file-label',\n class: [this.dragging ? 'dragging' : null],\n attrs: {\n for: this.safeId(),\n 'data-browse': this.browseText || null\n }\n }, this.selectLabel); // Return rendered custom file input\n\n return h('div', {\n staticClass: 'custom-file b-form-file',\n class: [this.stateClass, _defineProperty({}, \"b-custom-control-\".concat(this.size), this.size)],\n attrs: {\n id: this.safeId('_BV_file_outer_')\n },\n on: {\n dragover: this.onDragover,\n dragleave: this.onDragleave,\n drop: this.onDrop\n }\n }, [input, label]);\n }\n});","\r\n \r\n
\r\n Import Users \r\n \r\n Students \r\n Mentors \r\n You must select a user type \r\n \r\n \r\n \r\n \r\n You must select a file to upload \r\n \r\n Selected file: {{ formData.file ? formData.file.name : \"\" }}\r\n
\r\n \r\n \r\n \r\n {{ submitting ? \"Submitting\" : \"Submit\" }} \r\n \r\n
0\">\r\n Import results \r\n Successfully added \r\n \r\n No users were added.
\r\n Already existing \r\n \r\n n/a
\r\n Failed to add \r\n \r\n n/a
\r\n Imported, but failed to add roles \r\n \r\n n/a
\r\n Malformed Lines \r\n \r\n n/a
\r\n \r\n import another batch \r\n
\r\n \r\n
\r\n \r\n\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ImportUsersView.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ImportUsersView.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ImportUsersView.vue?vue&type=template&id=033f443d&scoped=true&\"\nimport script from \"./ImportUsersView.vue?vue&type=script&lang=js&\"\nexport * from \"./ImportUsersView.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ImportUsersView.vue?vue&type=style&index=0&id=033f443d&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"033f443d\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"user-add-form\"},[_c('h1',[_vm._v(\"User Add Form\")]),(!_vm.formState.submitted)?_c('b-form',{on:{\"submit\":_vm.submitForm}},[_c('b-container',[_c('b-row',[_c('b-col',{attrs:{\"md\":\"4\"}},[_c('b-form-group',{attrs:{\"label\":\"First Name\"}},[_c('b-form-input',{attrs:{\"placeholder\":\"first name\",\"state\":_vm.firstNameValidation.getState(_vm.formState.validate)},model:{value:(_vm.formData.firstName),callback:function ($$v) {_vm.$set(_vm.formData, \"firstName\", $$v)},expression:\"formData.firstName\"}}),_c('b-form-invalid-feedback',{attrs:{\"state\":_vm.firstNameValidation.getState(_vm.formState.validate)}},[_vm._v(_vm._s(_vm.firstNameValidation.errorMessage))])],1)],1),_c('b-col',{attrs:{\"md\":\"4\"}},[_c('b-form-group',{attrs:{\"label\":\"Middle Name\"}},[_c('b-form-input',{attrs:{\"placeholder\":\"middle name\"},model:{value:(_vm.formData.middleName),callback:function ($$v) {_vm.$set(_vm.formData, \"middleName\", $$v)},expression:\"formData.middleName\"}})],1)],1),_c('b-col',{attrs:{\"md\":\"4\"}},[_c('b-form-group',{attrs:{\"label\":\"Last Name\"}},[_c('b-form-input',{attrs:{\"placeholder\":\"last name\",\"state\":_vm.lastNameValidation.getState(_vm.formState.validate)},model:{value:(_vm.formData.lastName),callback:function ($$v) {_vm.$set(_vm.formData, \"lastName\", $$v)},expression:\"formData.lastName\"}}),_c('b-form-invalid-feedback',{attrs:{\"state\":_vm.lastNameValidation.getState(_vm.formState.validate)}},[_vm._v(_vm._s(_vm.lastNameValidation.errorMessage))])],1)],1)],1),_c('b-form-group',{attrs:{\"label\":\"Email\"}},[_c('b-form-input',{attrs:{\"placeholder\":\"email\",\"state\":_vm.emailValidation.getState(_vm.formState.validate)},model:{value:(_vm.formData.email),callback:function ($$v) {_vm.$set(_vm.formData, \"email\", $$v)},expression:\"formData.email\"}}),_c('b-form-invalid-feedback',{attrs:{\"state\":_vm.emailValidation.getState(_vm.formState.validate)}},[_vm._v(_vm._s(_vm.emailValidation.errorMessage))])],1),_c('b-form-group',{attrs:{\"label\":\"Pronouns\"}},[_c('b-form-select',{attrs:{\"placeholder\":\"Pronouns\",\"options\":_vm.pronouns,\"state\":_vm.pronounsValidation.getState(_vm.formState.validate)},model:{value:(_vm.formData.pronouns),callback:function ($$v) {_vm.$set(_vm.formData, \"pronouns\", $$v)},expression:\"formData.pronouns\"}}),_c('b-form-invalid-feedback',{attrs:{\"state\":_vm.pronounsValidation.getState(_vm.formState.validate)}},[_vm._v(_vm._s(_vm.pronounsValidation.errorMessage))])],1),_c('b-form-group',{attrs:{\"label\":\"Bio\"}},[_c('b-form-textarea',{attrs:{\"placeholder\":\"Bio\"},model:{value:(_vm.formData.bio),callback:function ($$v) {_vm.$set(_vm.formData, \"bio\", $$v)},expression:\"formData.bio\"}})],1),_c('b-button',{attrs:{\"type\":\"submit\",\"variant\":\"primary\"}},[_vm._v(\"submit\")]),_c('b-button',{attrs:{\"variant\":\"link\"},on:{\"click\":_vm.handleCancel}},[_vm._v(\"cancel\")])],1)],1):_c('div',[_c('p',[_vm._v(\" The user has been created. \"),_c('a',{attrs:{\"href\":(\"\" + _vm.userAdminUrl + (_vm.newUser.id))}},[_vm._v(\"Click here to continue editing their profile.\")])])])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","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 '../../utils/vue';\nimport { mergeData } from 'vue-functional-data-merge';\nexport var props = {\n tag: {\n type: String,\n default: 'div'\n },\n fluid: {\n // String breakpoint name new in Bootstrap v4.4.x\n type: [Boolean, String],\n default: false\n }\n}; // @vue/component\n\nexport var BContainer = /*#__PURE__*/Vue.extend({\n name: 'BContainer',\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 class: _defineProperty({\n container: !(props.fluid || props.fluid === ''),\n 'container-fluid': props.fluid === true || props.fluid === ''\n }, \"container-\".concat(props.fluid), props.fluid && props.fluid !== true)\n }), children);\n }\n});","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { mergeData } from 'vue-functional-data-merge';\nimport identity from '../../utils/identity';\nimport memoize from '../../utils/memoize';\nimport { arrayIncludes, concat } from '../../utils/array';\nimport { getBreakpointsUpCached } from '../../utils/config';\nimport { create, keys } from '../../utils/object';\nimport { suffixPropName } from '../../utils/props';\nimport { lowerCase, toString, trim } from '../../utils/string';\nvar COMMON_ALIGNMENT = ['start', 'end', 'center']; // Generates a prop object with a type of `[String, Number]`\n\nvar strNum = function strNum() {\n return {\n type: [String, Number],\n default: null\n };\n}; // Compute a `row-cols-{breakpoint}-{cols}` class name\n// Memoized function for better performance on generating class names\n\n\nvar computeRowColsClass = memoize(function (breakpoint, cols) {\n cols = trim(toString(cols));\n return cols ? lowerCase(['row-cols', breakpoint, cols].filter(identity).join('-')) : null;\n}); // Get the breakpoint name from the `rowCols` prop name\n// Memoized function for better performance on extracting breakpoint names\n\nvar computeRowColsBreakpoint = memoize(function (prop) {\n return lowerCase(prop.replace('cols', ''));\n}); // Cached copy of the `row-cols` breakpoint prop names\n// Will be populated when the props are generated\n\nvar rowColsPropList = []; // Lazy evaled props factory for (called only once,\n// the first time the component is used)\n\nvar generateProps = function generateProps() {\n // Grab the breakpoints from the cached config (including the '' (xs) breakpoint)\n var breakpoints = getBreakpointsUpCached(); // Supports classes like: `row-cols-2`, `row-cols-md-4`, `row-cols-xl-6`\n\n var rowColsProps = breakpoints.reduce(function (props, breakpoint) {\n props[suffixPropName(breakpoint, 'cols')] = strNum();\n return props;\n }, create(null)); // Cache the row-cols prop names\n\n rowColsPropList = keys(rowColsProps); // Return the generated props\n\n return _objectSpread({\n tag: {\n type: String,\n default: 'div'\n },\n noGutters: {\n type: Boolean,\n default: false\n },\n alignV: {\n type: String,\n default: null,\n validator: function validator(str) {\n return arrayIncludes(concat(COMMON_ALIGNMENT, 'baseline', 'stretch'), str);\n }\n },\n alignH: {\n type: String,\n default: null,\n validator: function validator(str) {\n return arrayIncludes(concat(COMMON_ALIGNMENT, 'between', 'around'), str);\n }\n },\n alignContent: {\n type: String,\n default: null,\n validator: function validator(str) {\n return arrayIncludes(concat(COMMON_ALIGNMENT, 'between', 'around', 'stretch'), str);\n }\n }\n }, rowColsProps);\n}; // We do not use `Vue.extend()` here as that would evaluate the props\n// immediately, which we do not want to happen\n// @vue/component\n\n\nexport var BRow = {\n name: 'BRow',\n functional: true,\n\n get props() {\n // Allow props to be lazy evaled on first access and\n // then they become a non-getter afterwards\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/get#Smart_self-overwriting_lazy_getters\n delete this.props;\n this.props = generateProps();\n return this.props;\n },\n\n render: function render(h, _ref) {\n var _classList$push;\n\n var props = _ref.props,\n data = _ref.data,\n children = _ref.children;\n var classList = []; // Loop through row-cols breakpoint props and generate the classes\n\n rowColsPropList.forEach(function (prop) {\n var c = computeRowColsClass(computeRowColsBreakpoint(prop), props[prop]); // If a class is returned, push it onto the array\n\n if (c) {\n classList.push(c);\n }\n });\n classList.push((_classList$push = {\n 'no-gutters': props.noGutters\n }, _defineProperty(_classList$push, \"align-items-\".concat(props.alignV), props.alignV), _defineProperty(_classList$push, \"justify-content-\".concat(props.alignH), props.alignH), _defineProperty(_classList$push, \"align-content-\".concat(props.alignContent), props.alignContent), _classList$push));\n return h(props.tag, mergeData(data, {\n staticClass: 'row',\n class: classList\n }), children);\n }\n};","\r\n \r\n \r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserAddForm.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserAddForm.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./UserAddForm.vue?vue&type=template&id=3416de04&\"\nimport script from \"./UserAddForm.vue?vue&type=script&lang=js&\"\nexport * from \"./UserAddForm.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.bannerValue)?_c('div',{staticClass:\"banner\"},[_c('b-alert',{attrs:{\"show\":\"\"}},[_vm._v(_vm._s(_vm.bannerValue))])],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","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 '../../utils/vue';\nimport { getComponentConfig } from '../../utils/config';\nimport { requestAF } from '../../utils/dom';\nimport { isBoolean } from '../../utils/inspect';\nimport { toInteger } from '../../utils/number';\nimport BVTransition from '../../utils/bv-transition';\nimport normalizeSlotMixin from '../../mixins/normalize-slot';\nimport { BButtonClose } from '../button/button-close';\nvar NAME = 'BAlert'; // Convert `show` value to a number\n\nvar parseCountDown = function parseCountDown(show) {\n if (show === '' || isBoolean(show)) {\n return 0;\n }\n\n show = toInteger(show, 0);\n return show > 0 ? show : 0;\n}; // Convert `show` value to a boolean\n\n\nvar parseShow = function parseShow(show) {\n if (show === '' || show === true) {\n return true;\n }\n\n if (toInteger(show, 0) < 1) {\n // Boolean will always return false for the above comparison\n return false;\n }\n\n return !!show;\n}; // Is a value number like (i.e. a number or a number as string)\n\n\nvar isNumericLike = function isNumericLike(value) {\n return !isNaN(toInteger(value));\n}; // @vue/component\n\n\nexport var BAlert = /*#__PURE__*/Vue.extend({\n name: NAME,\n mixins: [normalizeSlotMixin],\n model: {\n prop: 'show',\n event: 'input'\n },\n props: {\n variant: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME, 'variant');\n }\n },\n dismissible: {\n type: Boolean,\n default: false\n },\n dismissLabel: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME, 'dismissLabel');\n }\n },\n show: {\n type: [Boolean, Number, String],\n default: false\n },\n fade: {\n type: Boolean,\n default: false\n }\n },\n data: function data() {\n return {\n countDown: 0,\n countDownTimeout: null,\n // If initially shown, we need to set these for SSR\n localShow: parseShow(this.show)\n };\n },\n watch: {\n show: function show(newVal) {\n this.countDown = parseCountDown(newVal);\n this.localShow = parseShow(newVal);\n },\n countDown: function countDown(newVal) {\n var _this = this;\n\n this.clearCountDownInterval();\n\n if (isNumericLike(this.show)) {\n // Ignore if this.show transitions to a boolean value.\n this.$emit('dismiss-count-down', newVal);\n\n if (this.show !== newVal) {\n // Update the v-model if needed\n this.$emit('input', newVal);\n }\n\n if (newVal > 0) {\n this.localShow = true;\n this.countDownTimeout = setTimeout(function () {\n _this.countDown--;\n }, 1000);\n } else {\n // Slightly delay the hide to allow any UI updates\n this.$nextTick(function () {\n requestAF(function () {\n _this.localShow = false;\n });\n });\n }\n }\n },\n localShow: function localShow(newVal) {\n if (!newVal && (this.dismissible || isNumericLike(this.show))) {\n // Only emit dismissed events for dismissible or auto dismissing alerts\n this.$emit('dismissed');\n }\n\n if (!isNumericLike(this.show) && this.show !== newVal) {\n // Only emit booleans if we weren't passed a number via `this.show`\n this.$emit('input', newVal);\n }\n }\n },\n created: function created() {\n this.countDown = parseCountDown(this.show);\n this.localShow = parseShow(this.show);\n },\n mounted: function mounted() {\n this.countDown = parseCountDown(this.show);\n this.localShow = parseShow(this.show);\n },\n beforeDestroy: function beforeDestroy() {\n this.clearCountDownInterval();\n },\n methods: {\n dismiss: function dismiss() {\n this.clearCountDownInterval();\n this.countDown = 0;\n this.localShow = false;\n },\n clearCountDownInterval: function clearCountDownInterval() {\n if (this.countDownTimeout) {\n clearTimeout(this.countDownTimeout);\n this.countDownTimeout = null;\n }\n }\n },\n render: function render(h) {\n var $alert; // undefined\n\n if (this.localShow) {\n var $dismissBtn = h();\n\n if (this.dismissible) {\n // Add dismiss button\n $dismissBtn = h(BButtonClose, {\n attrs: {\n 'aria-label': this.dismissLabel\n },\n on: {\n click: this.dismiss\n }\n }, [this.normalizeSlot('dismiss')]);\n }\n\n $alert = h('div', {\n key: this._uid,\n staticClass: 'alert',\n class: _defineProperty({\n 'alert-dismissible': this.dismissible\n }, \"alert-\".concat(this.variant), this.variant),\n attrs: {\n role: 'alert',\n 'aria-live': 'polite',\n 'aria-atomic': true\n }\n }, [$dismissBtn, this.normalizeSlot('default')]);\n $alert = [$alert];\n }\n\n return h(BVTransition, {\n props: {\n noFade: !this.fade\n }\n }, $alert);\n }\n});","\r\n \r\n {{ bannerValue }} \r\n
\r\n \r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Banner.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Banner.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Banner.vue?vue&type=template&id=4d7e929f&\"\nimport script from \"./Banner.vue?vue&type=script&lang=js&\"\nexport * from \"./Banner.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"banner-form\"},[_c('h2',[_vm._v(\"Manage Banners\")]),(!_vm.formState.submitted)?_c('b-form',{on:{\"submit\":_vm.submitForm}},[_c('b-form-group',{attrs:{\"label\":\"Banner audience (Student or Mentor)\"}},[_c('b-form-select',{attrs:{\"text\":\"Which group?\",\"disabled\":!_vm.formState.isEditing,\"state\":_vm.keyValidation.getState(_vm.formState.validate),\"options\":_vm.keyOptions},on:{\"change\":_vm.changeKey},model:{value:(_vm.formData.key),callback:function ($$v) {_vm.$set(_vm.formData, \"key\", $$v)},expression:\"formData.key\"}}),_c('b-form-invalid-feedback',{attrs:{\"state\":_vm.keyValidation.getState(_vm.formState.validate)}},[_vm._v(\"You must select the audience for your banner message\")])],1),_c('b-form-group',{attrs:{\"label\":\"Banner text\"}},[_c('b-form-textarea',{attrs:{\"disabled\":!_vm.formState.isEditing || !_vm.formData.key,\"state\":_vm.valueValidation.getState(_vm.formState.validate),\"placeholder\":_vm.formData.key ? 'enter banner text' : 'select banner audience'},model:{value:(_vm.formData.value),callback:function ($$v) {_vm.$set(_vm.formData, \"value\", $$v)},expression:\"formData.value\"}}),_c('b-form-invalid-feedback',{attrs:{\"state\":_vm.valueValidation.getState(_vm.formState.validate)}},[_vm._v(\"You must enter a banner message\")])],1),_c('b-form-group',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.formState.isEditing),expression:\"formState.isEditing\"}]},[_c('b-button',{staticClass:\"red\",attrs:{\"variant\":\"primary\",\"type\":\"submit\",\"disabled\":_vm.formState.submitting}},[(_vm.formState.submitting)?_c('b-spinner',{staticClass:\"submitting-spinner\",attrs:{\"small\":\"\"}}):_vm._e(),_vm._v(\" \"+_vm._s(_vm.formState.submitting ? \"Submitting...\" : \"Submit\"))],1),_vm._v(\" \"),_c('b-button',{on:{\"click\":_vm.deleteBanner}},[_vm._v(\"Delete\")])],1)],1):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n \r\n
Manage Banners \r\n \r\n \r\n \r\n \r\n You must select the audience for your banner\r\n message \r\n \r\n\r\n \r\n \r\n You must enter a banner message \r\n \r\n\r\n \r\n \r\n {{ formState.submitting ? \"Submitting...\" : \"Submit\" }} \r\n Delete \r\n \r\n \r\n \r\n \r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BannerForm.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BannerForm.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BannerForm.vue?vue&type=template&id=11369f54&\"\nimport script from \"./BannerForm.vue?vue&type=script&lang=js&\"\nexport * from \"./BannerForm.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"dashboard\"},[_c('h2',[_vm._v(\"Interactions\")]),_c('interactions-grid',{attrs:{\"initial-interactions\":_vm.initialInteractions,\"initial-per-page\":_vm.initialPerPage,\"initial-current-page\":_vm.initialCurrentPage,\"message-root-url\":_vm.messageRootUrl,\"api-root-url\":_vm.apiRootUrl,\"user-profile-url\":_vm.userProfileUrl,\"view-interaction-url\":_vm.viewInteractionUrl,\"interaction-tags\":_vm.interactionTags}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[(_vm.state.isLoading)?_c('div',[_c('b-spinner')],1):_vm._e(),(_vm.state.fetchError)?_c('div',[_c('p',[_vm._v(\"Error fetching interactions :(\")])]):_vm._e(),(!_vm.state.isLoading && !_vm.state.fetchError)?_c('div',[_c('b-row',[_c('b-col',{attrs:{\"md\":\"6\",\"lg\":\"8\"}},[_c('b-form',{on:{\"submit\":_vm.handleSearchForm}},[_c('b-form-group',{attrs:{\"label\":\"Sentiment Filter\",\"label-size\":\"sm\",\"label-cols-md\":\"4\",\"label-cols-lg\":\"3\",\"label-cols-xl\":\"2\"}},[_c('b-form-select',{attrs:{\"size\":\"sm\",\"options\":_vm.interactionTagOptions},on:{\"change\":function($event){return _vm.$refs.interactionsTable.refresh()}},model:{value:(_vm.tagFilter),callback:function ($$v) {_vm.tagFilter=$$v},expression:\"tagFilter\"}})],1),_c('b-form-group',{attrs:{\"label\":\"User Search\",\"label-size\":\"sm\",\"label-cols-md\":\"4\",\"label-cols-lg\":\"3\",\"label-cols-xl\":\"2\"}},[_c('b-input-group',[_c('b-form-input',{attrs:{\"size\":\"sm\",\"trim\":\"\"},model:{value:(_vm.searchText),callback:function ($$v) {_vm.searchText=$$v},expression:\"searchText\"}}),_c('b-input-group-append',[_c('b-button',{attrs:{\"variant\":\"secondary\",\"size\":\"sm\"},on:{\"click\":function($event){return _vm.$refs.interactionsTable.refresh()}}},[_vm._v(\"go\")])],1)],1)],1)],1)],1),_c('b-col',{attrs:{\"md\":\"6\",\"lg\":\"4\",\"align-self\":\"end\"}},[_c('b-pagination',{attrs:{\"align\":\"right\",\"size\":\"sm\",\"total-rows\":_vm.interactionsTotal,\"per-page\":_vm.perPage,\"aria-controls\":_vm.tableId},model:{value:(_vm.currentPage),callback:function ($$v) {_vm.currentPage=$$v},expression:\"currentPage\"}})],1)],1),_c('b-table',{ref:\"interactionsTable\",staticClass:\"vertical-align-cols\",attrs:{\"id\":_vm.tableId,\"small\":\"\",\"items\":_vm.fetch,\"fields\":_vm.dataTableFields,\"per-page\":_vm.perPage,\"current-page\":_vm.currentPage},scopedSlots:_vm._u([{key:\"cell(details)\",fn:function(data){return [_c('a',{on:{\"click\":data.toggleDetails}},[(!data.detailsShowing)?_c('b-icon-circle',{staticClass:\"icon-link\"}):_c('b-icon-circle-fill',{staticClass:\"icon-link\"})],1)]}},{key:\"cell(mentor)\",fn:function(data){return [_c('a',{attrs:{\"target\":\"_blank\",\"href\":(\"\" + _vm.userProfileUrl + (data.item.mentor.id))}},[_vm._v(_vm._s(data.item.mentor.name))])]}},{key:\"cell(actions)\",fn:function(data){return [_c('a',{staticClass:\"btn btn-primary btn-sm red action-button\",attrs:{\"href\":(\"\" + _vm.messageRootUrl + (data.item.mentor.id))}},[_c('b-icon-envelope-fill',{staticClass:\"action-icon\"}),_vm._v(\" email mentor \")],1),_c('a',{staticClass:\"btn btn-primary btn-sm red action-button\",attrs:{\"href\":(\"\" + _vm.viewInteractionUrl + (data.item.id))}},[_c('b-icon-file-earmark-text',{staticClass:\"action-icon\"}),_vm._v(\" view interaction \")],1)]}},{key:\"row-details\",fn:function(row){return [_c('div',{staticClass:\"text-left pl-2\"},[_c('p',[_c('strong',[_vm._v(\"Sent to: \")]),_vm._l((row.item.students),function(student,idx){return [(idx > 0)?_c('span',{key:student.id},[_vm._v(\", \")]):_vm._e(),_c('a',{key:student.id,attrs:{\"href\":(\"\" + _vm.userProfileUrl + (student.id)),\"target\":\"_blank\"}},[_vm._v(_vm._s(((student.firstName) + \" \" + (student.lastName))))])]})],2),_c('p',[_c('strong',[_vm._v(\"Interaction type:\")]),_vm._v(\" \"+_vm._s(row.item.type)),_c('br'),_c('strong',[_vm._v(\"Topics:\")]),_vm._v(\" \"+_vm._s(row.item.topics)+\" \")])])]}}],null,false,139668987)})],1):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @param {number} length\n * @return {Array}\n */\nvar range = function range(length) {\n return Array.apply(null, {\n length: length\n });\n};\n\nexport default range;","import KeyCodes from '../utils/key-codes';\nimport range from '../utils/range';\nimport { attemptFocus, getActiveElement, getAttr, isDisabled, isVisible, selectAll } from '../utils/dom';\nimport { isFunction, isNull } from '../utils/inspect';\nimport { mathFloor, mathMax, mathMin } from '../utils/math';\nimport { toInteger } from '../utils/number';\nimport { toString } from '../utils/string';\nimport { warn } from '../utils/warn';\nimport normalizeSlotMixin from '../mixins/normalize-slot';\nimport { BLink } from '../components/link/link'; // Common props, computed, data, render function, and methods\n// for `` and ``\n// --- Constants ---\n// Threshold of limit size when we start/stop showing ellipsis\n\nvar ELLIPSIS_THRESHOLD = 3; // Default # of buttons limit\n\nvar DEFAULT_LIMIT = 5; // --- Helper methods ---\n// Make an array of N to N+X\n\nvar makePageArray = function makePageArray(startNumber, numberOfPages) {\n return range(numberOfPages).map(function (val, i) {\n return {\n number: startNumber + i,\n classes: null\n };\n });\n}; // Sanitize the provided limit value (converting to a number)\n\n\nvar sanitizeLimit = function sanitizeLimit(val) {\n var limit = toInteger(val) || 1;\n return limit < 1 ? DEFAULT_LIMIT : limit;\n}; // Sanitize the provided current page number (converting to a number)\n\n\nvar sanitizeCurrentPage = function sanitizeCurrentPage(val, numberOfPages) {\n var page = toInteger(val) || 1;\n return page > numberOfPages ? numberOfPages : page < 1 ? 1 : page;\n}; // Links don't normally respond to SPACE, so we add that\n// functionality via this handler\n\n\nvar onSpaceKey = function onSpaceKey(evt) {\n if (evt.keyCode === KeyCodes.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 ---\n\n\nexport var 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 /* istanbul ignore next */\n {\n if (!isNull(value) && toInteger(value, 0) < 1) {\n warn('\"v-model\" value must be a number greater than \"0\"', 'BPagination');\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 /* istanbul ignore next */\n {\n if (toInteger(value, 0) < 1) {\n warn('Prop \"limit\" must be a number greater than \"0\"', 'BPagination');\n return false;\n }\n\n return true;\n }\n },\n align: {\n type: String,\n default: 'left'\n },\n pills: {\n type: Boolean,\n default: false\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: \"\\xAB\" // '«'\n\n },\n firstNumber: {\n type: Boolean,\n default: false\n },\n firstClass: {\n type: [String, Array, Object],\n default: null\n },\n labelPrevPage: {\n type: String,\n default: 'Go to previous page'\n },\n prevText: {\n type: String,\n default: \"\\u2039\" // '‹'\n\n },\n prevClass: {\n type: [String, Array, Object],\n default: null\n },\n labelNextPage: {\n type: String,\n default: 'Go to next page'\n },\n nextText: {\n type: String,\n default: \"\\u203A\" // '›'\n\n },\n nextClass: {\n type: [String, Array, Object] // default: null\n\n },\n labelLastPage: {\n type: String,\n default: 'Go to last page'\n },\n lastText: {\n type: String,\n default: \"\\xBB\" // '»'\n\n },\n lastNumber: {\n type: Boolean,\n default: false\n },\n lastClass: {\n type: [String, Array, Object] // default: null\n\n },\n labelPage: {\n type: [String, Function],\n default: 'Go to page'\n },\n pageClass: {\n type: [String, Array, Object] // default: null\n\n },\n hideEllipsis: {\n type: Boolean,\n default: false\n },\n ellipsisText: {\n type: String,\n default: \"\\u2026\" // '…'\n\n },\n ellipsisClass: {\n type: [String, Array, Object] // default: null\n\n }\n}; // @vue/component\n\nexport default {\n mixins: [normalizeSlotMixin],\n model: {\n prop: 'value',\n event: 'input'\n },\n props: props,\n data: function data() {\n // `-1` signifies no page initially selected\n var currentPage = toInteger(this.value, 0);\n currentPage = currentPage > 0 ? currentPage : -1;\n return {\n currentPage: currentPage,\n localNumberOfPages: 1,\n localLimit: DEFAULT_LIMIT\n };\n },\n computed: {\n btnSize: function btnSize() {\n 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 add text centering to make the button appearance better in fill mode\n return 'text-center';\n }\n\n return '';\n },\n styleClass: function styleClass() {\n return this.pills ? 'b-pagination-pills' : '';\n },\n computedCurrentPage: function computedCurrentPage() {\n return sanitizeCurrentPage(this.currentPage, this.localNumberOfPages);\n },\n paginationParams: function paginationParams() {\n // Determine if we should show the the ellipsis\n var limit = this.localLimit;\n var numberOfPages = this.localNumberOfPages;\n var currentPage = this.computedCurrentPage;\n var hideEllipsis = this.hideEllipsis;\n var firstNumber = this.firstNumber;\n var lastNumber = this.lastNumber;\n var showFirstDots = false;\n var showLastDots = false;\n var numberOfLinks = limit;\n var startNumber = 1;\n\n if (numberOfPages <= limit) {\n // Special case: Less pages available than the limit of displayed pages\n numberOfLinks = numberOfPages;\n } else if (currentPage < limit - 1 && limit > ELLIPSIS_THRESHOLD) {\n if (!hideEllipsis || lastNumber) {\n showLastDots = true;\n numberOfLinks = limit - (firstNumber ? 0 : 1);\n }\n\n numberOfLinks = mathMin(numberOfLinks, limit);\n } else if (numberOfPages - currentPage + 2 < limit && limit > ELLIPSIS_THRESHOLD) {\n if (!hideEllipsis || firstNumber) {\n showFirstDots = true;\n numberOfLinks = limit - (lastNumber ? 0 : 1);\n }\n\n startNumber = numberOfPages - numberOfLinks + 1;\n } else {\n // We are somewhere in the middle of the page list\n if (limit > ELLIPSIS_THRESHOLD) {\n numberOfLinks = limit - 2;\n showFirstDots = !!(!hideEllipsis || firstNumber);\n showLastDots = !!(!hideEllipsis || lastNumber);\n }\n\n startNumber = currentPage - mathFloor(numberOfLinks / 2);\n } // Sanity checks\n\n /* istanbul ignore if */\n\n\n if (startNumber < 1) {\n startNumber = 1;\n showFirstDots = false;\n } else if (startNumber > numberOfPages - numberOfLinks) {\n startNumber = numberOfPages - numberOfLinks + 1;\n showLastDots = false;\n }\n\n if (showFirstDots && firstNumber && startNumber < 4) {\n numberOfLinks = numberOfLinks + 2;\n startNumber = 1;\n showFirstDots = false;\n }\n\n var lastPageNumber = startNumber + numberOfLinks - 1;\n\n if (showLastDots && lastNumber && lastPageNumber > numberOfPages - 3) {\n numberOfLinks = numberOfLinks + (lastPageNumber === numberOfPages - 2 ? 2 : 3);\n showLastDots = false;\n } // Special handling for lower limits (where ellipsis are never shown)\n\n\n if (limit <= ELLIPSIS_THRESHOLD) {\n if (firstNumber && startNumber === 1) {\n numberOfLinks = mathMin(numberOfLinks + 1, numberOfPages, limit + 1);\n } else if (lastNumber && numberOfPages === startNumber + numberOfLinks - 1) {\n startNumber = mathMax(startNumber - 1, 1);\n numberOfLinks = mathMin(numberOfPages - startNumber + 1, numberOfPages, limit + 1);\n }\n }\n\n numberOfLinks = mathMin(numberOfLinks, numberOfPages - startNumber + 1);\n return {\n showFirstDots: showFirstDots,\n showLastDots: showLastDots,\n numberOfLinks: numberOfLinks,\n startNumber: startNumber\n };\n },\n pageList: function pageList() {\n // Generates the pageList array\n var _this$paginationParam = this.paginationParams,\n numberOfLinks = _this$paginationParam.numberOfLinks,\n startNumber = _this$paginationParam.startNumber;\n var currentPage = this.computedCurrentPage; // Generate list of page numbers\n\n var pages = makePageArray(startNumber, numberOfLinks); // We limit to a total of 3 page buttons on XS screens\n // So add classes to page links to hide them for XS breakpoint\n // Note: Ellipsis will also be hidden on XS screens\n // TODO: Make this visual limit configurable based on breakpoint(s)\n\n if (pages.length > 3) {\n var idx = currentPage - startNumber; // THe following is a bootstrap-vue custom utility class\n\n var classes = 'bv-d-xs-down-none';\n\n if (idx === 0) {\n // Keep leftmost 3 buttons visible when current page is first page\n for (var i = 3; i < pages.length; i++) {\n pages[i].classes = classes;\n }\n } else if (idx === pages.length - 1) {\n // Keep rightmost 3 buttons visible when current page is last page\n for (var _i = 0; _i < pages.length - 3; _i++) {\n pages[_i].classes = classes;\n }\n } else {\n // Hide all except current page, current page - 1 and current page + 1\n for (var _i2 = 0; _i2 < idx - 1; _i2++) {\n // hide some left button(s)\n pages[_i2].classes = classes;\n }\n\n for (var _i3 = pages.length - 1; _i3 > idx + 1; _i3--) {\n // hide some right button(s)\n pages[_i3].classes = classes;\n }\n }\n }\n\n return pages;\n }\n },\n watch: {\n value: function value(newValue, oldValue) {\n if (newValue !== oldValue) {\n this.currentPage = sanitizeCurrentPage(newValue, this.localNumberOfPages);\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.localNumberOfPages ? _this.localNumberOfPages : _this.currentPage;\n });\n },\n methods: {\n handleKeyNav: function handleKeyNav(evt) {\n var keyCode = evt.keyCode,\n shiftKey = evt.shiftKey;\n /* istanbul ignore if */\n\n if (this.isNav) {\n // We disable left/right keyboard navigation in ``\n return;\n }\n\n if (keyCode === KeyCodes.LEFT || keyCode === KeyCodes.UP) {\n evt.preventDefault();\n shiftKey ? this.focusFirst() : this.focusPrev();\n } else if (keyCode === KeyCodes.RIGHT || keyCode === KeyCodes.DOWN) {\n evt.preventDefault();\n shiftKey ? this.focusLast() : this.focusNext();\n }\n },\n getButtons: function getButtons() {\n // Return only buttons that are visible\n return selectAll('button.page-link, a.page-link', this.$el).filter(function (btn) {\n return isVisible(btn);\n });\n },\n focusCurrent: function focusCurrent() {\n var _this2 = this;\n\n // We do this in `$nextTick()` to ensure buttons have finished rendering\n this.$nextTick(function () {\n var btn = _this2.getButtons().find(function (el) {\n return toInteger(getAttr(el, 'aria-posinset'), 0) === _this2.computedCurrentPage;\n });\n\n if (!attemptFocus(btn)) {\n // Fallback if current page is not in button list\n _this2.focusFirst();\n }\n });\n },\n focusFirst: function focusFirst() {\n var _this3 = this;\n\n // We do this in `$nextTick()` to ensure buttons have finished rendering\n this.$nextTick(function () {\n var btn = _this3.getButtons().find(function (el) {\n return !isDisabled(el);\n });\n\n attemptFocus(btn);\n });\n },\n focusLast: function focusLast() {\n var _this4 = this;\n\n // We do this in `$nextTick()` to ensure buttons have finished rendering\n this.$nextTick(function () {\n var btn = _this4.getButtons().reverse().find(function (el) {\n return !isDisabled(el);\n });\n\n attemptFocus(btn);\n });\n },\n focusPrev: function focusPrev() {\n var _this5 = this;\n\n // We do this in `$nextTick()` to ensure buttons have finished rendering\n this.$nextTick(function () {\n var buttons = _this5.getButtons();\n\n var index = buttons.indexOf(getActiveElement());\n\n if (index > 0 && !isDisabled(buttons[index - 1])) {\n attemptFocus(buttons[index - 1]);\n }\n });\n },\n focusNext: function focusNext() {\n var _this6 = this;\n\n // We do this in `$nextTick()` to ensure buttons have finished rendering\n this.$nextTick(function () {\n var buttons = _this6.getButtons();\n\n var index = buttons.indexOf(getActiveElement());\n\n if (index < buttons.length - 1 && !isDisabled(buttons[index + 1])) {\n attemptFocus(buttons[index + 1]);\n }\n });\n }\n },\n render: function render(h) {\n var _this7 = this;\n\n var buttons = [];\n var numberOfPages = this.localNumberOfPages;\n var pageNumbers = this.pageList.map(function (p) {\n return p.number;\n });\n var disabled = this.disabled;\n var _this$paginationParam2 = this.paginationParams,\n showFirstDots = _this$paginationParam2.showFirstDots,\n showLastDots = _this$paginationParam2.showLastDots;\n var currentPage = this.computedCurrentPage;\n var fill = this.align === 'fill'; // Used to control what type of aria attributes are rendered and wrapper\n\n var isNav = this.isNav; // Helper function and flag\n\n var isActivePage = function isActivePage(pageNumber) {\n return pageNumber === currentPage;\n };\n\n var noCurrentPage = this.currentPage < 1; // Factory function for prev/next/first/last buttons\n\n var makeEndBtn = function makeEndBtn(linkTo, ariaLabel, btnSlot, btnText, btnClass, pageTest, key) {\n var isDisabled = disabled || isActivePage(pageTest) || noCurrentPage || linkTo < 1 || linkTo > numberOfPages;\n var pageNumber = linkTo < 1 ? 1 : linkTo > numberOfPages ? numberOfPages : linkTo;\n var scope = {\n disabled: isDisabled,\n page: pageNumber,\n index: pageNumber - 1\n };\n var $btnContent = _this7.normalizeSlot(btnSlot, scope) || toString(btnText) || h();\n var $inner = h(isDisabled ? 'span' : isNav ? BLink : 'button', {\n staticClass: 'page-link',\n class: {\n 'flex-grow-1': !isNav && !isDisabled && fill\n },\n props: isDisabled || !isNav ? {} : _this7.linkProps(linkTo),\n attrs: {\n role: isNav ? null : 'menuitem',\n type: isNav || isDisabled ? null : 'button',\n tabindex: isDisabled || isNav ? null : '-1',\n 'aria-label': ariaLabel,\n 'aria-controls': _this7.ariaControls || null,\n 'aria-disabled': isDisabled ? 'true' : null\n },\n on: isDisabled ? {} : {\n '!click': function click(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 'd-flex': fill && !isNav && !isDisabled\n }, btnClass],\n attrs: {\n role: isNav ? null : 'presentation',\n 'aria-hidden': isDisabled ? 'true' : null\n }\n }, [$inner]);\n }; // Ellipsis factory\n\n\n var makeEllipsis = function makeEllipsis(isLast) {\n return h('li', {\n key: \"ellipsis-\".concat(isLast ? 'last' : 'first'),\n staticClass: 'page-item',\n class: ['disabled', 'bv-d-xs-down-none', fill ? 'flex-fill' : '', _this7.ellipsisClass],\n attrs: {\n role: 'separator'\n }\n }, [h('span', {\n staticClass: 'page-link'\n }, [_this7.normalizeSlot('ellipsis-text') || toString(_this7.ellipsisText) || h()])]);\n }; // Page button factory\n\n\n var makePageButton = function makePageButton(page, idx) {\n var active = isActivePage(page.number) && !noCurrentPage; // Active page will have tabindex of 0, or if no current page and first page button\n\n var tabIndex = disabled ? null : active || noCurrentPage && idx === 0 ? '0' : '-1';\n var attrs = {\n role: isNav ? null : 'menuitemradio',\n type: isNav || disabled ? null : 'button',\n 'aria-disabled': disabled ? 'true' : null,\n 'aria-controls': _this7.ariaControls || null,\n 'aria-label': isFunction(_this7.labelPage) ?\n /* istanbul ignore next */\n _this7.labelPage(page.number) : \"\".concat(_this7.labelPage, \" \").concat(page.number),\n 'aria-checked': isNav ? null : active ? 'true' : 'false',\n 'aria-current': isNav && active ? 'page' : null,\n 'aria-posinset': page.number,\n 'aria-setsize': numberOfPages,\n // ARIA \"roving tabindex\" method (except in isNav mode)\n tabindex: isNav ? null : tabIndex\n };\n var btnContent = toString(_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' : isNav ? BLink : 'button', {\n props: disabled || !isNav ? {} : _this7.linkProps(page.number),\n staticClass: 'page-link',\n class: {\n 'flex-grow-1': !isNav && !disabled && fill\n },\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 return 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 'd-flex': fill && !isNav && !disabled\n }, page.classes, _this7.pageClass],\n attrs: {\n role: isNav ? null : 'presentation'\n }\n }, [$inner]);\n }; // Goto first page button\n // Don't render button when `hideGotoEndButtons` or `firstNumber` is set\n\n\n var $firstPageBtn = h();\n\n if (!this.firstNumber && !this.hideGotoEndButtons) {\n $firstPageBtn = makeEndBtn(1, this.labelFirstPage, 'first-text', this.firstText, this.firstClass, 1, 'pagination-goto-first');\n }\n\n buttons.push($firstPageBtn); // Goto previous page button\n\n buttons.push(makeEndBtn(currentPage - 1, this.labelPrevPage, 'prev-text', this.prevText, this.prevClass, 1, 'pagination-goto-prev')); // Show first (1) button?\n\n buttons.push(this.firstNumber && pageNumbers[0] !== 1 ? makePageButton({\n number: 1\n }, 0) : h()); // First ellipsis\n\n buttons.push(showFirstDots ? makeEllipsis(false) : h()); // Individual page links\n\n this.pageList.forEach(function (page, idx) {\n var offset = showFirstDots && _this7.firstNumber && pageNumbers[0] !== 1 ? 1 : 0;\n buttons.push(makePageButton(page, idx + offset));\n }); // Last ellipsis\n\n buttons.push(showLastDots ? makeEllipsis(true) : h()); // Show last page button?\n\n buttons.push(this.lastNumber && pageNumbers[pageNumbers.length - 1] !== numberOfPages ? makePageButton({\n number: numberOfPages\n }, -1) : h()); // Goto next page button\n\n buttons.push(makeEndBtn(currentPage + 1, this.labelNextPage, 'next-text', this.nextText, this.nextClass, numberOfPages, 'pagination-goto-next')); // Goto last page button\n // Don't render button when `hideGotoEndButtons` or `lastNumber` is set\n\n var $lastPageBtn = h();\n\n if (!this.lastNumber && !this.hideGotoEndButtons) {\n $lastPageBtn = makeEndBtn(numberOfPages, this.labelLastPage, 'last-text', this.lastText, this.lastClass, numberOfPages, 'pagination-goto-last');\n }\n\n buttons.push($lastPageBtn); // Assemble the pagination buttons\n\n var $pagination = h('ul', {\n ref: 'ul',\n staticClass: 'pagination',\n class: ['b-pagination', this.btnSize, this.alignment, this.styleClass],\n attrs: {\n role: isNav ? null : 'menubar',\n 'aria-disabled': disabled ? 'true' : 'false',\n 'aria-label': isNav ? null : this.ariaLabel || null\n },\n // We disable keyboard left/right nav when ``\n on: isNav ? {} : {\n keydown: this.handleKeyNav\n }\n }, buttons); // If we are ``, wrap in `` wrapper\n\n if (isNav) {\n return h('nav', {\n attrs: {\n 'aria-disabled': disabled ? 'true' : null,\n 'aria-hidden': disabled ? 'true' : 'false',\n 'aria-label': isNav ? this.ariaLabel || null : null\n }\n }, [$pagination]);\n }\n\n return $pagination;\n }\n};","import Vue from '../../utils/vue';\nimport { getComponentConfig } from '../../utils/config';\nimport { attemptFocus, isVisible } from '../../utils/dom';\nimport { isUndefinedOrNull } from '../../utils/inspect';\nimport { mathCeil, mathMax } from '../../utils/math';\nimport { toInteger } from '../../utils/number';\nimport paginationMixin from '../../mixins/pagination'; // --- Constants ---\n\nvar NAME = 'BPagination';\nvar DEFAULT_PER_PAGE = 20;\nvar DEFAULT_TOTAL_ROWS = 0;\nvar props = {\n size: {\n type: String,\n default: function _default() {\n return getComponentConfig(NAME, 'size');\n }\n },\n perPage: {\n type: [Number, String],\n default: DEFAULT_PER_PAGE\n },\n totalRows: {\n type: [Number, String],\n default: DEFAULT_TOTAL_ROWS\n },\n ariaControls: {\n type: String // default: null\n\n }\n}; // --- Helper functions ---\n// Sanitize the provided per page number (converting to a number)\n\nvar sanitizePerPage = function sanitizePerPage(val) {\n return mathMax(toInteger(val) || DEFAULT_PER_PAGE, 1);\n}; // Sanitize the provided total rows number (converting to a number)\n\n\nvar sanitizeTotalRows = function sanitizeTotalRows(val) {\n return mathMax(toInteger(val) || DEFAULT_TOTAL_ROWS, 0);\n}; // The render function is brought in via the `paginationMixin`\n// @vue/component\n\n\nexport var BPagination = /*#__PURE__*/Vue.extend({\n name: NAME,\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 pageSizeNumberOfPages: function pageSizeNumberOfPages() {\n // Used for watching changes to `perPage` and `numberOfPages`\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(newVal, oldVal) {\n if (!isUndefinedOrNull(oldVal)) {\n if (newVal.perPage !== oldVal.perPage && newVal.totalRows === oldVal.totalRows) {\n // If the page size changes, reset to page 1\n this.currentPage = 1;\n } else if (newVal.numberOfPages !== oldVal.numberOfPages && this.currentPage > newVal.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 = newVal.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.value, 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 mounted: function mounted() {\n // Set the initial page count\n this.localNumberOfPages = this.numberOfPages;\n },\n methods: {\n // These methods are used by the render function\n onClick: function onClick(num, evt) {\n var _this2 = this;\n\n // Handle edge cases where number of pages has changed (i.e. if perPage changes)\n // This should normally not happen, but just in case.\n if (num > this.numberOfPages) {\n /* istanbul ignore next */\n num = this.numberOfPages;\n } else if (num < 1) {\n /* istanbul ignore next */\n num = 1;\n } // Update the v-model\n\n\n this.currentPage = num; // Emit event triggered by user interaction\n\n this.$emit('change', this.currentPage);\n this.$nextTick(function () {\n // Keep the current button focused if possible\n var target = evt.target;\n\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\n /* istanbul ignore next */\n return {};\n }\n }\n});","// Mixin to determine if an event listener has been registered\n// either via `v-on:name` (in the parent) or programmatically\n// via `vm.$on('name', ...)`\n// See: https://github.com/vuejs/vue/issues/10825\nimport { isArray, isUndefined } from '../utils/inspect'; // @vue/component\n\nexport default {\n methods: {\n hasListener: function hasListener(name) {\n // Only includes listeners registered via `v-on:name`\n var $listeners = this.$listeners || {}; // Includes `v-on:name` and `this.$on('name')` registered listeners\n // Note this property is not part of the public Vue API, but it is\n // the only way to determine if a listener was added via `vm.$on`\n\n var $events = this._events || {}; // Registered listeners in `this._events` are always an array,\n // but might be zero length\n\n return !isUndefined($listeners[name]) || isArray($events[name]) && $events[name].length > 0;\n }\n }\n};","/**\n * Converts a string, including strings in camelCase or snake_case, into Start Case (a variant\n * of Title Case where all words start with a capital letter), it keeps original single quote\n * and hyphen in the word.\n *\n * Copyright (c) 2017 Compass (MIT)\n * https://github.com/UrbanCompass/to-start-case\n * @author Zhuoyuan Zhang \n * @author Wei Wang \n *\n *\n * 'management_companies' to 'Management Companies'\n * 'managementCompanies' to 'Management Companies'\n * `hell's kitchen` to `Hell's Kitchen`\n * `co-op` to `Co-op`\n *\n * @param {String} str\n * @returns {String}\n */\n// Precompile regular expressions for performance\nvar RX_UNDERSCORE = /_/g;\nvar RX_LOWER_UPPER = /([a-z])([A-Z])/g;\nvar RX_START_SPACE_WORD = /(\\s|^)(\\w)/g;\n\nvar startCase = function startCase(str) {\n return str.replace(RX_UNDERSCORE, ' ').replace(RX_LOWER_UPPER, function (str, $1, $2) {\n return $1 + ' ' + $2;\n }).replace(RX_START_SPACE_WORD, function (str, $1, $2) {\n return $1 + $2.toUpperCase();\n });\n};\n\nexport default startCase;","// Constants used by table helpers\n// Object of item keys that should be ignored for headers and\n// stringification and filter events\nexport var IGNORED_FIELD_KEYS = {\n _rowVariant: true,\n _cellVariants: true,\n _showDetails: true\n}; // Filter CSS selector for click/dblclick/etc. events\n// If any of these selectors match the clicked element, we ignore the event\n\nexport var EVENT_FILTER = ['a', 'a *', // Include content inside links\n'button', 'button *', // Include content inside buttons\n'input:not(.disabled):not([disabled])', 'select:not(.disabled):not([disabled])', 'textarea:not(.disabled):not([disabled])', '[role=\"link\"]', '[role=\"link\"] *', '[role=\"button\"]', '[role=\"button\"] *', '[tabindex]:not(.disabled):not([disabled])'].join(',');","import identity from '../../../utils/identity';\nimport startCase from '../../../utils/startcase';\nimport { isArray, isFunction, isObject, isString } from '../../../utils/inspect';\nimport { clone, keys } from '../../../utils/object';\nimport { IGNORED_FIELD_KEYS } from './constants'; // Private function to massage field entry into common object format\n\nvar processField = function processField(key, value) {\n var field = null;\n\n if (isString(value)) {\n // Label shortcut\n field = {\n key: key,\n label: value\n };\n } else if (isFunction(value)) {\n // Formatter shortcut\n field = {\n key: key,\n formatter: value\n };\n } else if (isObject(value)) {\n field = clone(value);\n field.key = field.key || key;\n } else if (value !== false) {\n // Fallback to just key\n\n /* istanbul ignore next */\n field = {\n key: key\n };\n }\n\n return field;\n}; // We normalize fields into an array of objects\n// [ { key:..., label:..., ...}, {...}, ..., {..}]\n\n\nvar normalizeFields = function normalizeFields(origFields, items) {\n var fields = [];\n\n if (isArray(origFields)) {\n // Normalize array Form\n origFields.filter(identity).forEach(function (f) {\n if (isString(f)) {\n fields.push({\n key: f,\n label: startCase(f)\n });\n } else if (isObject(f) && f.key && isString(f.key)) {\n // Full object definition. We use assign so that we don't mutate the original\n fields.push(clone(f));\n } else if (isObject(f) && keys(f).length === 1) {\n // Shortcut object (i.e. { 'foo_bar': 'This is Foo Bar' }\n var key = keys(f)[0];\n var field = processField(key, f[key]);\n\n if (field) {\n fields.push(field);\n }\n }\n });\n } // If no field provided, take a sample from first record (if exits)\n\n\n if (fields.length === 0 && isArray(items) && items.length > 0) {\n var sample = items[0];\n keys(sample).forEach(function (k) {\n if (!IGNORED_FIELD_KEYS[k]) {\n fields.push({\n key: k,\n label: startCase(k)\n });\n }\n });\n } // Ensure we have a unique array of fields and that they have String labels\n\n\n var memo = {};\n return fields.filter(function (f) {\n if (!memo[f.key]) {\n memo[f.key] = true;\n f.label = isString(f.label) ? f.label : startCase(f.key);\n return true;\n }\n\n return false;\n });\n};\n\nexport default normalizeFields;","import looseEqual from '../../../utils/loose-equal';\nimport { isArray, isFunction, isString, isUndefinedOrNull } from '../../../utils/inspect';\nimport { mathMax } from '../../../utils/math';\nimport { toInteger } from '../../../utils/number';\nimport { clone } from '../../../utils/object';\nimport normalizeFields from './normalize-fields';\nexport default {\n props: {\n items: {\n // Provider mixin adds in `Function` type\n type: Array,\n\n /* istanbul ignore next */\n default: function _default()\n /* istanbul ignore next */\n {\n return [];\n }\n },\n fields: {\n type: Array,\n default: null\n },\n primaryKey: {\n // Primary key for record\n // If provided the value in each row must be unique!\n type: String // default: null\n\n },\n value: {\n // `v-model` for retrieving the current displayed rows\n type: Array,\n default: function _default() {\n return [];\n }\n }\n },\n data: function data() {\n return {\n // Our local copy of the items\n // Must be an array\n localItems: isArray(this.items) ? this.items.slice() : []\n };\n },\n computed: {\n computedFields: function computedFields() {\n // We normalize fields into an array of objects\n // `[ { key:..., label:..., ...}, {...}, ..., {..}]`\n return normalizeFields(this.fields, this.localItems);\n },\n computedFieldsObj: function computedFieldsObj() {\n // Fields as a simple lookup hash object\n // Mainly for formatter lookup and use in `scopedSlots` for convenience\n // If the field has a formatter, it normalizes formatter to a\n // function ref or `undefined` if no formatter\n var parent = this.$parent;\n return this.computedFields.reduce(function (obj, f) {\n // We use object spread here so we don't mutate the original field object\n obj[f.key] = clone(f);\n\n if (f.formatter) {\n // Normalize formatter to a function ref or `undefined`\n var formatter = f.formatter;\n\n if (isString(formatter) && isFunction(parent[formatter])) {\n formatter = parent[formatter];\n } else if (!isFunction(formatter)) {\n /* istanbul ignore next */\n formatter = undefined;\n } // Return formatter function or `undefined` if none\n\n\n obj[f.key].formatter = formatter;\n }\n\n return obj;\n }, {});\n },\n computedItems: function computedItems() {\n // Fallback if various mixins not provided\n return (this.paginatedItems || this.sortedItems || this.filteredItems || this.localItems ||\n /* istanbul ignore next */\n []).slice();\n },\n context: function context() {\n // Current state of sorting, filtering and pagination props/values\n return {\n filter: this.localFilter,\n sortBy: this.localSortBy,\n sortDesc: this.localSortDesc,\n perPage: mathMax(toInteger(this.perPage, 0), 0),\n currentPage: mathMax(toInteger(this.currentPage, 0), 1),\n apiUrl: this.apiUrl\n };\n }\n },\n watch: {\n items: function items(newItems) {\n /* istanbul ignore else */\n if (isArray(newItems)) {\n // Set `localItems`/`filteredItems` to a copy of the provided array\n this.localItems = newItems.slice();\n } else if (isUndefinedOrNull(newItems)) {\n /* istanbul ignore next */\n this.localItems = [];\n }\n },\n // Watch for changes on `computedItems` and update the `v-model`\n computedItems: function computedItems(newVal) {\n this.$emit('input', newVal);\n },\n // Watch for context changes\n context: function context(newVal, oldVal) {\n // Emit context information for external paging/filtering/sorting handling\n if (!looseEqual(newVal, oldVal)) {\n this.$emit('context-changed', newVal);\n }\n }\n },\n mounted: function mounted() {\n // Initially update the `v-model` of displayed items\n this.$emit('input', this.computedItems);\n },\n methods: {\n // Method to get the formatter method for a given field key\n getFieldFormatter: function getFieldFormatter(key) {\n var field = this.computedFieldsObj[key]; // `this.computedFieldsObj` has pre-normalized the formatter to a\n // function ref if present, otherwise `undefined`\n\n return field ? field.formatter : undefined;\n }\n }\n};","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\n// Mixin for providing stacked tables\nexport default {\n props: {\n stacked: {\n type: [Boolean, String],\n default: false\n }\n },\n computed: {\n isStacked: function isStacked() {\n // `true` when always stacked, or returns breakpoint specified\n return this.stacked === '' ? true : this.stacked;\n },\n isStackedAlways: function isStackedAlways() {\n return this.isStacked === true;\n },\n stackedTableClasses: function stackedTableClasses() {\n return _defineProperty({\n 'b-table-stacked': this.isStackedAlways\n }, \"b-table-stacked-\".concat(this.stacked), !this.isStackedAlways && this.isStacked);\n }\n }\n};","import { keys } from '../../../utils/object';\nimport { arrayIncludes } from '../../../utils/array';\nimport { isFunction } from '../../../utils/inspect';\nimport { IGNORED_FIELD_KEYS } from './constants'; // Return a copy of a row after all reserved fields have been filtered out\n\nvar sanitizeRow = function sanitizeRow(row, ignoreFields, includeFields) {\n var fieldsObj = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n return keys(row).reduce(function (obj, key) {\n // Ignore special fields that start with `_`\n // Ignore fields in the `ignoreFields` array\n // Include only fields in the `includeFields` array\n if (!IGNORED_FIELD_KEYS[key] && !(ignoreFields && ignoreFields.length > 0 && arrayIncludes(ignoreFields, key)) && !(includeFields && includeFields.length > 0 && !arrayIncludes(includeFields, key))) {\n var f = fieldsObj[key] || {};\n var val = row[key]; // `f.filterByFormatted` will either be a function or boolean\n // `f.formater` will have already been noramlized into a function ref\n\n var filterByFormatted = f.filterByFormatted;\n var formatter = isFunction(filterByFormatted) ?\n /* istanbul ignore next */\n filterByFormatted : filterByFormatted ?\n /* istanbul ignore next */\n f.formatter : null;\n obj[key] = isFunction(formatter) ? formatter(val, key, row) : val;\n }\n\n return obj;\n }, {});\n};\n\nexport default sanitizeRow;","import { keys } from '../../../utils/object';\nimport { isDate, isObject, isUndefinedOrNull } from '../../../utils/inspect';\nimport { toString } from '../../../utils/string'; // Recursively stringifies the values of an object, space separated, in an\n// SSR safe deterministic way (keys are sorted before stringification)\n//\n// ex:\n// { b: 3, c: { z: 'zzz', d: null, e: 2 }, d: [10, 12, 11], a: 'one' }\n// becomes\n// 'one 3 2 zzz 10 12 11'\n//\n// Primitives (numbers/strings) are returned as-is\n// Null and undefined values are filtered out\n// Dates are converted to their native string format\n\nvar stringifyObjectValues = function stringifyObjectValues(val) {\n if (isUndefinedOrNull(val)) {\n /* istanbul ignore next */\n return '';\n } // Arrays are also object, and keys just returns the array indexes\n // Date objects we convert to strings\n\n\n if (isObject(val) && !isDate(val)) {\n return keys(val).sort() // Sort to prevent SSR issues on pre-rendered sorted tables\n .filter(function (v) {\n return !isUndefinedOrNull(v);\n }) // Ignore undefined/null values\n .map(function (k) {\n return stringifyObjectValues(val[k]);\n }).join(' ');\n }\n\n return toString(val);\n};\n\nexport default stringifyObjectValues;","import { isObject } from '../../../utils/inspect';\nimport sanitizeRow from './sanitize-row';\nimport stringifyObjectValues from './stringify-object-values'; // Stringifies the values of a record, ignoring any special top level field keys\n// TODO: Add option to stringify `scopedSlot` items\n\nvar stringifyRecordValues = function stringifyRecordValues(row, ignoreFields, includeFields, fieldsObj) {\n return isObject(row) ? stringifyObjectValues(sanitizeRow(row, ignoreFields, includeFields, fieldsObj)) :\n /* istanbul ignore next */\n '';\n};\n\nexport default stringifyRecordValues;","import cloneDeep from '../../../utils/clone-deep';\nimport identity from '../../../utils/identity';\nimport looseEqual from '../../../utils/loose-equal';\nimport { concat } from '../../../utils/array';\nimport { isFunction, isString, isRegExp } from '../../../utils/inspect';\nimport { toInteger } from '../../../utils/number';\nimport { escapeRegExp } from '../../../utils/string';\nimport { warn } from '../../../utils/warn';\nimport stringifyRecordValues from './stringify-record-values';\nvar DEBOUNCE_DEPRECATED_MSG = 'Prop \"filter-debounce\" is deprecated. Use the debounce feature of \"\" instead.';\nvar RX_SPACES = /[\\s\\uFEFF\\xA0]+/g;\nexport default {\n props: {\n filter: {\n type: [String, RegExp, Object, Array],\n default: null\n },\n filterFunction: {\n type: Function // default: null\n\n },\n filterIgnoredFields: {\n type: Array // default: undefined\n\n },\n filterIncludedFields: {\n type: Array // default: undefined\n\n },\n filterDebounce: {\n type: [Number, String],\n deprecated: DEBOUNCE_DEPRECATED_MSG,\n default: 0,\n validator: function validator(val) {\n return /^\\d+/.test(String(val));\n }\n }\n },\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 this.filterIgnoredFields ? concat(this.filterIgnoredFields).filter(identity) : null;\n },\n computedFilterIncluded: function computedFilterIncluded() {\n return this.filterIncludedFields ? concat(this.filterIncludedFields).filter(identity) : null;\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, 'BTable');\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 return {\n filteredItems: this.filteredItems,\n localItems: this.localItems,\n localFilter: this.localFilter\n };\n },\n // Sanitized/normalize filter-function prop\n localFilterFn: function localFilterFn() {\n // Return `null` to signal to use internal filter function\n return isFunction(this.filterFunction) ? this.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 var items = this.localItems || []; // Note the criteria is debounced and sanitized\n\n var 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(newVal) {\n if (!newVal && 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('filtered', filteredItems, filteredItems.length);\n }\n\n this.isFiltered = isFiltered;\n },\n isFiltered: function isFiltered(newVal, oldVal) {\n if (newVal === false && oldVal === 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 this.$emit('filtered', this.localItems, this.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 /* istanbul ignore next */\n {\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};","/*\n * Consistent and stable sort function across JavaScript platforms\n *\n * Inconsistent sorts can cause SSR problems between client and server\n * such as in if sortBy is applied to the data on server side render.\n * Chrome and V8 native sorts are inconsistent/unstable\n *\n * This function uses native sort with fallback to index compare when the a and b\n * compare returns 0\n *\n * Algorithm based on:\n * https://stackoverflow.com/questions/1427608/fast-stable-sorting-algorithm-implementation-in-javascript/45422645#45422645\n *\n * @param {array} array to sort\n * @param {function} sort compare function\n * @return {array}\n */\nvar stableSort = function stableSort(array, compareFn) {\n // Using `.bind(compareFn)` on the wrapped anonymous function improves\n // performance by avoiding the function call setup. We don't use an arrow\n // function here as it binds `this` to the `stableSort` context rather than\n // the `compareFn` context, which wouldn't give us the performance increase.\n return array.map(function (a, index) {\n return [index, a];\n }).sort(function (a, b) {\n return this(a[1], b[1]) || a[0] - b[0];\n }.bind(compareFn)).map(function (e) {\n return e[1];\n });\n};\n\nexport default stableSort;","import get from '../../../utils/get';\nimport { isDate, isFunction, isNumber, isUndefinedOrNull } from '../../../utils/inspect';\nimport stringifyObjectValues from './stringify-object-values'; // Default sort compare routine\n//\n// TODO: 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\nvar defaultSortCompare = function defaultSortCompare(a, b, sortBy, sortDesc, formatter, localeOpts, locale, nullLast) {\n var aa = get(a, sortBy, null);\n var bb = get(b, sortBy, null);\n\n if (isFunction(formatter)) {\n aa = formatter(aa, sortBy, a);\n bb = formatter(bb, sortBy, b);\n }\n\n aa = isUndefinedOrNull(aa) ? '' : aa;\n bb = isUndefinedOrNull(bb) ? '' : 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/empty string last\n return 1;\n } else if (nullLast && aa !== '' && bb === '') {\n // Special case when sorting null/undefined/empty string last\n return -1;\n } // Do localized string comparison\n\n\n return stringifyObjectValues(aa).localeCompare(stringifyObjectValues(bb), locale, localeOpts);\n};\n\nexport default defaultSortCompare;","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 stableSort from '../../../utils/stable-sort';\nimport { arrayIncludes } from '../../../utils/array';\nimport { isFunction, isUndefinedOrNull } from '../../../utils/inspect';\nimport { trim } from '../../../utils/string';\nimport defaultSortCompare from './default-sort-compare';\nexport default {\n props: {\n sortBy: {\n type: String,\n default: ''\n },\n sortDesc: {\n // TODO: Make this tri-state: true, false, null\n type: Boolean,\n default: false\n },\n sortDirection: {\n // This prop is named incorrectly\n // It should be `initialSortDirection` as it is a bit misleading\n // (not to mention it screws up the ARIA label on the headers)\n type: String,\n default: 'asc',\n validator: function validator(direction) {\n return arrayIncludes(['asc', 'desc', 'last'], direction);\n }\n },\n sortCompare: {\n type: Function // default: null\n\n },\n sortCompareOptions: {\n // Supported localCompare options, see `options` section of:\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/localeCompare\n type: Object,\n default: function _default() {\n return {\n numeric: true\n };\n }\n },\n sortCompareLocale: {\n // String: locale code\n // Array: array of Locale strings\n type: [String, Array] // default: undefined\n\n },\n sortNullLast: {\n // Sort null and undefined to appear last\n type: Boolean,\n default: false\n },\n noSortReset: {\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 type: Boolean,\n default: false\n },\n labelSortAsc: {\n type: String,\n default: 'Click to sort Ascending'\n },\n labelSortDesc: {\n type: String,\n default: 'Click to sort Descending'\n },\n labelSortClear: {\n type: String,\n default: 'Click to clear sorting'\n },\n noLocalSorting: {\n type: Boolean,\n default: false\n },\n noFooterSorting: {\n type: Boolean,\n default: false\n },\n sortIconLeft: {\n // Place the sorting icon on the left of the header cells\n type: Boolean,\n default: false\n }\n },\n data: function data() {\n return {\n localSortBy: this.sortBy || '',\n localSortDesc: this.sortDesc || 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 sortedItems: function sortedItems() {\n // Sorts the filtered items and returns a new array of the sorted items\n // or the original items array if not sorted.\n var items = (this.filteredItems || this.localItems || []).slice();\n var sortBy = this.localSortBy;\n var sortDesc = this.localSortDesc;\n var sortCompare = this.sortCompare;\n var localSorting = this.localSorting;\n\n var sortOptions = _objectSpread(_objectSpread({}, this.sortCompareOptions), {}, {\n usage: 'sort'\n });\n\n var sortLocale = this.sortCompareLocale || undefined;\n var nullLast = this.sortNullLast;\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;\n\n if (isFunction(sortCompare)) {\n // Call user provided sortCompare routine\n result = sortCompare(a, b, sortBy, sortDesc, formatter, sortOptions, sortLocale);\n }\n\n if (isUndefinedOrNull(result) || result === false) {\n // Fallback to built-in defaultSortCompare if sortCompare\n // is not defined or returns null/false\n result = defaultSortCompare(a, b, sortBy, sortDesc, formatter, sortOptions, sortLocale, nullLast);\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: {\n /* istanbul ignore next: pain in the butt to test */\n isSortable: function isSortable(newVal)\n /* istanbul ignore next: pain in the butt to test */\n {\n if (newVal) {\n if (this.isSortable) {\n this.$on('head-clicked', this.handleSort);\n }\n } else {\n this.$off('head-clicked', this.handleSort);\n }\n },\n sortDesc: function sortDesc(newVal) {\n if (newVal === this.localSortDesc) {\n /* istanbul ignore next */\n return;\n }\n\n this.localSortDesc = newVal || false;\n },\n sortBy: function sortBy(newVal) {\n if (newVal === this.localSortBy) {\n /* istanbul ignore next */\n return;\n }\n\n this.localSortBy = newVal || '';\n },\n // Update .sync props\n localSortDesc: function localSortDesc(newVal, oldVal) {\n // Emit update to sort-desc.sync\n if (newVal !== oldVal) {\n this.$emit('update:sortDesc', newVal);\n }\n },\n localSortBy: function localSortBy(newVal, oldVal) {\n if (newVal !== oldVal) {\n this.$emit('update:sortBy', newVal);\n }\n }\n },\n created: function created() {\n if (this.isSortable) {\n this.$on('head-clicked', this.handleSort);\n }\n },\n methods: {\n // Handlers\n // Need to move from thead-mixin\n handleSort: function handleSort(key, field, evt, 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 === 'asc') {\n _this.localSortDesc = false;\n } else if (sortDirection === '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 if (key === this.localSortBy) {\n // Change sorting direction on current column\n this.localSortDesc = !this.localSortDesc;\n } else {\n // Start sorting this column ascending\n this.localSortBy = key; // 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('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 === 'asc') {\n labelSorting = this.labelSortAsc;\n } else if (sortDirection === '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 { mathMax } from '../../../utils/math';\nimport { toInteger } from '../../../utils/number';\nexport default {\n props: {\n perPage: {\n type: [Number, String],\n default: 0\n },\n currentPage: {\n type: [Number, String],\n default: 1\n }\n },\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 { htmlOrText } from '../../../utils/html';\nexport default {\n props: {\n // `caption-top` is part of table-render mixin (styling)\n // captionTop: {\n // type: Boolean,\n // default: false\n // },\n caption: {\n type: String // default: null\n\n },\n captionHtml: {\n type: String\n }\n },\n computed: {\n captionId: function captionId() {\n // Even though `this.safeId` looks like a method, it is a computed prop\n // that returns a new function if the underlying ID changes\n return this.isStacked ? this.safeId('_caption_') : null;\n }\n },\n methods: {\n renderCaption: function renderCaption() {\n var caption = this.caption,\n captionHtml = this.captionHtml;\n var h = this.$createElement;\n var $caption = h();\n var hasCaptionSlot = this.hasNormalizedSlot('table-caption');\n\n if (hasCaptionSlot || caption || captionHtml) {\n $caption = h('caption', {\n key: 'caption',\n attrs: {\n id: this.captionId\n },\n domProps: hasCaptionSlot ? {} : htmlOrText(captionHtml, caption)\n }, this.normalizeSlot('table-caption'));\n }\n\n return $caption;\n }\n }\n};","export default {\n methods: {\n renderColgroup: function renderColgroup() {\n var h = this.$createElement;\n var fields = this.computedFields;\n var $colgroup = h();\n\n if (this.hasNormalizedSlot('table-colgroup')) {\n $colgroup = h('colgroup', {\n key: 'colgroup'\n }, [this.normalizeSlot('table-colgroup', {\n columns: fields.length,\n fields: fields\n })]);\n }\n\n return $colgroup;\n }\n }\n};","var noop = function noop() {};\n\nexport default noop;","import { closest, getAttr, getById, matches, select } from '../../../utils/dom';\nimport { EVENT_FILTER } from './constants';\nvar TABLE_TAG_NAMES = ['TD', 'TH', 'TR']; // Returns `true` if we should ignore the click/double-click/keypress event\n// Avoids having the user need to use `@click.stop` on the form control\n\nvar filterEvent = function filterEvent(evt) {\n // Exit early when we don't have a target element\n if (!evt || !evt.target) {\n /* istanbul ignore next */\n return false;\n }\n\n var el = evt.target; // Exit early when element is disabled or a table element\n\n if (el.disabled || TABLE_TAG_NAMES.indexOf(el.tagName) !== -1) {\n return false;\n } // Ignore the click when it was inside a dropdown menu\n\n\n if (closest('.dropdown-menu', el)) {\n return true;\n }\n\n var label = el.tagName === 'LABEL' ? el : closest('label', el); // If the label's form control is not disabled then we don't propagate event\n // Modern browsers have `label.control` that references the associated input, but IE 11\n // does not have this property on the label element, so we resort to DOM lookups\n\n if (label) {\n var labelFor = getAttr(label, 'for');\n var input = labelFor ? getById(labelFor) : select('input, select, textarea', label);\n\n if (input && !input.disabled) {\n return true;\n }\n } // Otherwise check if the event target matches one of the selectors in the\n // event filter (i.e. anchors, non disabled inputs, etc.)\n // Return `true` if we should ignore the event\n\n\n return matches(el, EVENT_FILTER);\n};\n\nexport default filterEvent;","import { getSel, isElement } from '../../../utils/dom'; // Helper to determine if a there is an active text selection on the document page\n// Used to filter out click events caused by the mouse up at end of selection\n//\n// Accepts an element as only argument to test to see if selection overlaps or is\n// contained within the element\n\nvar textSelectionActive = function textSelectionActive() {\n var el = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : document;\n var sel = getSel();\n return sel && sel.toString().trim() !== '' && sel.containsNode && isElement(el) ?\n /* istanbul ignore next */\n sel.containsNode(el, true) : false;\n};\n\nexport default textSelectionActive;","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 '../../utils/vue';\nimport attrsMixin from '../../mixins/attrs';\nimport listenersMixin from '../../mixins/listeners';\nimport normalizeSlotMixin from '../../mixins/normalize-slot';\nexport var props = {\n headVariant: {\n // Also sniffed by / / \n type: String,\n // Supported values: 'lite', 'dark', or null\n default: null\n }\n}; // TODO:\n// In Bootstrap v5, we won't need \"sniffing\" as table element variants properly inherit\n// to the child elements, so this can be converted to a functional component\n// @vue/component\n\nexport var BThead = /*#__PURE__*/Vue.extend({\n name: 'BThead',\n // Mixin order is important!\n mixins: [attrsMixin, listenersMixin, normalizeSlotMixin],\n inheritAttrs: false,\n provide: function provide() {\n return {\n bvTableRowGroup: this\n };\n },\n inject: {\n bvTable: {\n // Sniffed by / / \n\n /* istanbul ignore next */\n default: function _default()\n /* istanbul ignore next */\n {\n return {};\n }\n }\n },\n props: props,\n computed: {\n isThead: function isThead() {\n // Sniffed by / / \n return true;\n },\n isDark: function isDark() {\n // Sniffed by / / \n return this.bvTable.dark;\n },\n isStacked: function isStacked() {\n // Sniffed by / / \n return this.bvTable.isStacked;\n },\n isResponsive: function isResponsive() {\n // Sniffed by / / \n return this.bvTable.isResponsive;\n },\n isStickyHeader: function isStickyHeader() {\n // Sniffed by / / \n // Needed to handle header background classes, due to lack of\n // background color inheritance with Bootstrap v4 table CSS\n // Sticky headers only apply to cells in table `thead`\n return !this.isStacked && this.bvTable.stickyHeader;\n },\n hasStickyHeader: function hasStickyHeader() {\n // Sniffed by / / \n // Needed to handle header background classes, due to lack of\n // background color inheritance with Bootstrap v4 table CSS\n return !this.isStacked && this.bvTable.stickyHeader;\n },\n tableVariant: function tableVariant() {\n // Sniffed by / / \n return this.bvTable.tableVariant;\n },\n theadClasses: function theadClasses() {\n return [this.headVariant ? \"thead-\".concat(this.headVariant) : null];\n },\n theadAttrs: function theadAttrs() {\n return _objectSpread({\n role: 'rowgroup'\n }, this.bvAttrs);\n }\n },\n render: function render(h) {\n return h('thead', {\n class: this.theadClasses,\n attrs: this.theadAttrs,\n // Pass down any native listeners\n on: this.bvListeners\n }, this.normalizeSlot('default'));\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 '../../utils/vue';\nimport attrsMixin from '../../mixins/attrs';\nimport listenersMixin from '../../mixins/listeners';\nimport normalizeSlotMixin from '../../mixins/normalize-slot';\nexport var props = {\n footVariant: {\n type: String,\n // Supported values: 'lite', 'dark', or null\n default: null\n }\n}; // TODO:\n// In Bootstrap v5, we won't need \"sniffing\" as table element variants properly inherit\n// to the child elements, so this can be converted to a functional component\n// @vue/component\n\nexport var BTfoot = /*#__PURE__*/Vue.extend({\n name: 'BTfoot',\n // Mixin order is important!\n mixins: [attrsMixin, listenersMixin, normalizeSlotMixin],\n inheritAttrs: false,\n provide: function provide() {\n return {\n bvTableRowGroup: this\n };\n },\n inject: {\n bvTable: {\n // Sniffed by / / \n\n /* istanbul ignore next */\n default: function _default()\n /* istanbul ignore next */\n {\n return {};\n }\n }\n },\n props: props,\n computed: {\n isTfoot: function isTfoot() {\n // Sniffed by / / \n return true;\n },\n isDark: function isDark() {\n // Sniffed by / / \n return this.bvTable.dark;\n },\n isStacked: function isStacked() {\n // Sniffed by / / \n return this.bvTable.isStacked;\n },\n isResponsive: function isResponsive() {\n // Sniffed by / / \n return this.bvTable.isResponsive;\n },\n isStickyHeader: function isStickyHeader() {\n // Sniffed by / / \n // Sticky headers are only supported in thead\n return false;\n },\n hasStickyHeader: function hasStickyHeader() {\n // Sniffed by / / \n // Needed to handle header background classes, due to lack of\n // background color inheritance with Bootstrap v4 table CSS\n return !this.isStacked && this.bvTable.stickyHeader;\n },\n tableVariant: function tableVariant() {\n // Sniffed by / / \n return this.bvTable.tableVariant;\n },\n tfootClasses: function tfootClasses() {\n return [this.footVariant ? \"thead-\".concat(this.footVariant) : null];\n },\n tfootAttrs: function tfootAttrs() {\n return _objectSpread({\n role: 'rowgroup'\n }, this.bvAttrs);\n }\n },\n render: function render(h) {\n return h('tfoot', {\n class: this.tfootClasses,\n attrs: this.tfootAttrs,\n // Pass down any native listeners\n on: this.bvListeners\n }, this.normalizeSlot('default'));\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 '../../utils/vue';\nimport attrsMixin from '../../mixins/attrs';\nimport listenersMixin from '../../mixins/listeners';\nimport normalizeSlotMixin from '../../mixins/normalize-slot';\nexport var props = {\n variant: {\n type: String,\n default: null\n }\n};\nvar LIGHT = 'light';\nvar DARK = 'dark'; // TODO:\n// In Bootstrap v5, we won't need \"sniffing\" as table element variants properly inherit\n// to the child elements, so this can be converted to a functional component\n// @vue/component\n\nexport var BTr = /*#__PURE__*/Vue.extend({\n name: 'BTr',\n // Mixin order is important!\n mixins: [attrsMixin, listenersMixin, normalizeSlotMixin],\n inheritAttrs: false,\n provide: function provide() {\n return {\n bvTableTr: this\n };\n },\n inject: {\n bvTableRowGroup: {\n /* istanbul ignore next */\n default: function _default()\n /* istanbul ignore next */\n {\n return {};\n }\n }\n },\n props: props,\n computed: {\n inTbody: function inTbody() {\n // Sniffed by / \n return this.bvTableRowGroup.isTbody;\n },\n inThead: function inThead() {\n // Sniffed by / \n return this.bvTableRowGroup.isThead;\n },\n inTfoot: function inTfoot() {\n // Sniffed by / \n return this.bvTableRowGroup.isTfoot;\n },\n isDark: function isDark() {\n // Sniffed by / \n return this.bvTableRowGroup.isDark;\n },\n isStacked: function isStacked() {\n // Sniffed by / \n return this.bvTableRowGroup.isStacked;\n },\n isResponsive: function isResponsive() {\n // Sniffed by / \n return this.bvTableRowGroup.isResponsive;\n },\n isStickyHeader: function isStickyHeader() {\n // Sniffed by / \n // Sticky headers are only supported in thead\n return this.bvTableRowGroup.isStickyHeader;\n },\n hasStickyHeader: function hasStickyHeader() {\n // Sniffed by / / \n // Needed to handle header background classes, due to lack of\n // background color inheritance with Bootstrap v4 table CSS\n return !this.isStacked && this.bvTableRowGroup.hasStickyHeader;\n },\n tableVariant: function tableVariant() {\n // Sniffed by / \n return this.bvTableRowGroup.tableVariant;\n },\n headVariant: function headVariant() {\n // Sniffed by / \n return this.inThead ? this.bvTableRowGroup.headVariant : null;\n },\n footVariant: function footVariant() {\n // Sniffed by / \n return this.inTfoot ? this.bvTableRowGroup.footVariant : null;\n },\n isRowDark: function isRowDark() {\n return this.headVariant === LIGHT || this.footVariant === LIGHT ?\n /* istanbul ignore next */\n false : this.headVariant === DARK || this.footVariant === DARK ?\n /* istanbul ignore next */\n true : this.isDark;\n },\n trClasses: function trClasses() {\n return [this.variant ? \"\".concat(this.isRowDark ? 'bg' : 'table', \"-\").concat(this.variant) : null];\n },\n trAttrs: function trAttrs() {\n return _objectSpread({\n role: 'row'\n }, this.bvAttrs);\n }\n },\n render: function render(h) {\n return h('tr', {\n class: this.trClasses,\n attrs: this.trAttrs,\n // Pass native listeners to child\n on: this.bvListeners\n }, this.normalizeSlot('default'));\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 '../../utils/vue';\nimport { isTag } from '../../utils/dom';\nimport { isUndefinedOrNull } from '../../utils/inspect';\nimport { toInteger } from '../../utils/number';\nimport { toString } from '../../utils/string';\nimport attrsMixin from '../../mixins/attrs';\nimport listenersMixin from '../../mixins/listeners';\nimport normalizeSlotMixin from '../../mixins/normalize-slot'; // --- Utility methods ---\n// Parse a rowspan or colspan into a digit (or `null` if < `1` )\n\nvar parseSpan = function parseSpan(value) {\n value = toInteger(value, 0);\n return value > 0 ? value : null;\n};\n/* istanbul ignore next */\n\n\nvar spanValidator = function spanValidator(val) {\n return isUndefinedOrNull(val) || parseSpan(val) > 0;\n}; // --- Props ---\n\n\nexport var props = {\n variant: {\n type: String,\n default: null\n },\n colspan: {\n type: [Number, String],\n default: null,\n validator: spanValidator\n },\n rowspan: {\n type: [Number, String],\n default: null,\n validator: spanValidator\n },\n stackedHeading: {\n type: String,\n default: null\n },\n stickyColumn: {\n type: Boolean,\n default: false\n }\n}; // --- Main component ---\n// TODO:\n// In Bootstrap v5, we won't need \"sniffing\" as table element variants properly inherit\n// to the child elements, so this can be converted to a functional component\n// @vue/component\n\nexport var BTd = /*#__PURE__*/Vue.extend({\n name: 'BTableCell',\n // Mixin order is important!\n mixins: [attrsMixin, listenersMixin, normalizeSlotMixin],\n inheritAttrs: false,\n inject: {\n bvTableTr: {\n /* istanbul ignore next */\n default: function _default()\n /* istanbul ignore next */\n {\n return {};\n }\n }\n },\n props: props,\n computed: {\n tag: function tag() {\n // Overridden by \n return 'td';\n },\n inTbody: function inTbody() {\n return this.bvTableTr.inTbody;\n },\n inThead: function inThead() {\n return this.bvTableTr.inThead;\n },\n inTfoot: function inTfoot() {\n return this.bvTableTr.inTfoot;\n },\n isDark: function isDark() {\n return this.bvTableTr.isDark;\n },\n isStacked: function isStacked() {\n return this.bvTableTr.isStacked;\n },\n isStackedCell: function isStackedCell() {\n // We only support stacked-heading in tbody in stacked mode\n return this.inTbody && this.isStacked;\n },\n isResponsive: function isResponsive() {\n return this.bvTableTr.isResponsive;\n },\n isStickyHeader: function isStickyHeader() {\n // Needed to handle header background classes, due to lack of\n // background color inheritance with Bootstrap v4 table CSS\n // Sticky headers only apply to cells in table `thead`\n return this.bvTableTr.isStickyHeader;\n },\n hasStickyHeader: function hasStickyHeader() {\n // Needed to handle header background classes, due to lack of\n // background color inheritance with Bootstrap v4 table CSS\n return this.bvTableTr.hasStickyHeader;\n },\n isStickyColumn: function isStickyColumn() {\n // Needed to handle background classes, due to lack of\n // background color inheritance with Bootstrap v4 table CSS\n // Sticky column cells are only available in responsive\n // mode (horizontal scrolling) or when sticky header mode\n // Applies to cells in `thead`, `tbody` and `tfoot`\n return !this.isStacked && (this.isResponsive || this.hasStickyHeader) && this.stickyColumn;\n },\n rowVariant: function rowVariant() {\n return this.bvTableTr.variant;\n },\n headVariant: function headVariant() {\n return this.bvTableTr.headVariant;\n },\n footVariant: function footVariant() {\n return this.bvTableTr.footVariant;\n },\n tableVariant: function tableVariant() {\n return this.bvTableTr.tableVariant;\n },\n computedColspan: function computedColspan() {\n return parseSpan(this.colspan);\n },\n computedRowspan: function computedRowspan() {\n return parseSpan(this.rowspan);\n },\n cellClasses: function cellClasses() {\n // We use computed props here for improved performance by caching\n // the results of the string interpolation\n var variant = this.variant;\n\n if (!variant && this.isStickyHeader && !this.headVariant || !variant && this.isStickyColumn && this.inTfoot && !this.footVariant || !variant && this.isStickyColumn && this.inThead && !this.headVariant || !variant && this.isStickyColumn && this.inTbody) {\n // Needed for sticky-header mode as Bootstrap v4 table cells do\n // not inherit parent's background-color. Boo!\n variant = this.rowVariant || this.tableVariant || 'b-table-default';\n }\n\n return [variant ? \"\".concat(this.isDark ? 'bg' : 'table', \"-\").concat(variant) : null, this.isStickyColumn ? 'b-table-sticky-column' : null];\n },\n cellAttrs: function cellAttrs() {\n // We use computed props here for improved performance by caching\n // the results of the object spread (Object.assign)\n var headOrFoot = this.inThead || this.inTfoot; // Make sure col/rowspan's are > 0 or null\n\n var colspan = this.computedColspan;\n var rowspan = this.computedRowspan; // Default role and scope\n\n var role = 'cell';\n var scope = null; // Compute role and scope\n // We only add scopes with an explicit span of 1 or greater\n\n if (headOrFoot) {\n // Header or footer cells\n role = 'columnheader';\n scope = colspan > 0 ? 'colspan' : 'col';\n } else if (isTag(this.tag, 'th')) {\n // th's in tbody\n role = 'rowheader';\n scope = rowspan > 0 ? 'rowgroup' : 'row';\n }\n\n return _objectSpread(_objectSpread({\n colspan: colspan,\n rowspan: rowspan,\n role: role,\n scope: scope\n }, this.bvAttrs), {}, {\n // Add in the stacked cell label data-attribute if in\n // stacked mode (if a stacked heading label is provided)\n 'data-label': this.isStackedCell && !isUndefinedOrNull(this.stackedHeading) ?\n /* istanbul ignore next */\n toString(this.stackedHeading) : null\n });\n }\n },\n render: function render(h) {\n var content = [this.normalizeSlot('default')];\n return h(this.tag, {\n class: this.cellClasses,\n attrs: this.cellAttrs,\n // Transfer any native listeners\n on: this.bvListeners\n }, [this.isStackedCell ? h('div', [content]) : content]);\n }\n});","import Vue from '../../utils/vue';\nimport { BTd } from './td'; // TODO:\n// In Bootstrap v5, we won't need \"sniffing\" as table element variants properly inherit\n// to the child elements, so this can be converted to a functional component\n// @vue/component\n\nexport var BTh = /*#__PURE__*/Vue.extend({\n name: 'BTh',\n extends: BTd,\n computed: {\n tag: function tag() {\n return 'th';\n }\n }\n});","function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport identity from '../../../utils/identity';\nimport KeyCodes from '../../../utils/key-codes';\nimport noop from '../../../utils/noop';\nimport startCase from '../../../utils/startcase';\nimport { getComponentConfig } from '../../../utils/config';\nimport { htmlOrText } from '../../../utils/html';\nimport { isUndefinedOrNull } from '../../../utils/inspect';\nimport filterEvent from './filter-event';\nimport textSelectionActive from './text-selection-active';\nimport { BThead } from '../thead';\nimport { BTfoot } from '../tfoot';\nimport { BTr } from '../tr';\nimport { BTh } from '../th';\nexport default {\n props: {\n headVariant: {\n type: String,\n // 'light', 'dark' or `null` (or custom)\n default: function _default() {\n return getComponentConfig('BTable', 'headVariant');\n }\n },\n headRowVariant: {\n // Any Bootstrap theme variant (or custom)\n type: String // default: null\n\n },\n theadClass: {\n type: [String, Array, Object] // default: undefined\n\n },\n theadTrClass: {\n type: [String, Array, Object] // default: undefined\n\n }\n },\n methods: {\n fieldClasses: function fieldClasses(field) {\n // Header field () classes\n return [field.class ? field.class : '', field.thClass ? field.thClass : ''];\n },\n headClicked: function headClicked(evt, field, isFoot) {\n if (this.stopIfBusy && this.stopIfBusy(evt)) {\n // If table is busy (via provider) then don't propagate\n return;\n } else if (filterEvent(evt)) {\n // Clicked on a non-disabled control so ignore\n return;\n } else if (textSelectionActive(this.$el)) {\n // User is selecting text, so ignore\n\n /* istanbul ignore next: JSDOM doesn't support getSelection() */\n return;\n }\n\n evt.stopPropagation();\n evt.preventDefault();\n this.$emit('head-clicked', field.key, field, evt, isFoot);\n },\n renderThead: function renderThead() {\n var _this = this;\n\n var isFoot = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var h = this.$createElement;\n var fields = this.computedFields || []; // In always stacked mode, we don't bother rendering the head/foot\n // Or if no field headings (empty table)\n\n if (this.isStackedAlways || fields.length === 0) {\n return h();\n }\n\n var isSortable = this.isSortable,\n isSelectable = this.isSelectable,\n headVariant = this.headVariant,\n footVariant = this.footVariant,\n headRowVariant = this.headRowVariant,\n footRowVariant = this.footRowVariant;\n var hasHeadClickListener = isSortable || this.hasListener('head-clicked'); // Reference to `selectAllRows` and `clearSelected()`, if table is selectable\n\n var selectAllRows = isSelectable ? this.selectAllRows : noop;\n var clearSelected = isSelectable ? this.clearSelected : noop; // Helper function to generate a field cell\n\n var makeCell = function makeCell(field, colIndex) {\n var label = field.label,\n labelHtml = field.labelHtml,\n variant = field.variant,\n stickyColumn = field.stickyColumn,\n key = field.key;\n var ariaLabel = null;\n\n if (!field.label.trim() && !field.headerTitle) {\n // In case field's label and title are empty/blank\n // We need to add a hint about what the column is about for non-sighted users\n\n /* istanbul ignore next */\n ariaLabel = startCase(field.key);\n }\n\n var on = {};\n\n if (hasHeadClickListener) {\n on.click = function (evt) {\n _this.headClicked(evt, field, isFoot);\n };\n\n on.keydown = function (evt) {\n var keyCode = evt.keyCode;\n\n if (keyCode === KeyCodes.ENTER || keyCode === KeyCodes.SPACE) {\n _this.headClicked(evt, field, isFoot);\n }\n };\n }\n\n var sortAttrs = isSortable ? _this.sortTheadThAttrs(key, field, isFoot) : {};\n var sortClass = isSortable ? _this.sortTheadThClasses(key, field, isFoot) : null;\n var sortLabel = isSortable ? _this.sortTheadThLabel(key, field, isFoot) : null;\n var data = {\n class: [_this.fieldClasses(field), sortClass],\n props: {\n variant: variant,\n stickyColumn: stickyColumn\n },\n style: field.thStyle || {},\n attrs: _objectSpread(_objectSpread({\n // We only add a tabindex of 0 if there is a head-clicked listener\n tabindex: hasHeadClickListener ? '0' : null,\n abbr: field.headerAbbr || null,\n title: field.headerTitle || null,\n 'aria-colindex': colIndex + 1,\n 'aria-label': ariaLabel\n }, _this.getThValues(null, key, field.thAttr, isFoot ? 'foot' : 'head', {})), sortAttrs),\n on: on,\n key: key\n }; // Handle edge case where in-document templates are used with new\n // `v-slot:name` syntax where the browser lower-cases the v-slot's\n // name (attributes become lower cased when parsed by the browser)\n // We have replaced the square bracket syntax with round brackets\n // to prevent confusion with dynamic slot names\n\n var slotNames = [\"head(\".concat(key, \")\"), \"head(\".concat(key.toLowerCase(), \")\"), 'head()']; // Footer will fallback to header slot names\n\n if (isFoot) {\n slotNames = [\"foot(\".concat(key, \")\"), \"foot(\".concat(key.toLowerCase(), \")\"), 'foot()'].concat(_toConsumableArray(slotNames));\n }\n\n var scope = {\n label: label,\n column: key,\n field: field,\n isFoot: isFoot,\n // Add in row select methods\n selectAllRows: selectAllRows,\n clearSelected: clearSelected\n };\n var $content = _this.normalizeSlot(slotNames, scope) || h('div', {\n domProps: htmlOrText(labelHtml, label)\n });\n var $srLabel = sortLabel ? h('span', {\n staticClass: 'sr-only'\n }, \" (\".concat(sortLabel, \")\")) : null; // Return the header cell\n\n return h(BTh, data, [$content, $srLabel].filter(identity));\n }; // Generate the array of cells\n\n\n var $cells = fields.map(makeCell).filter(identity); // Generate the row(s)\n\n var $trs = [];\n\n if (isFoot) {\n $trs.push(h(BTr, {\n class: this.tfootTrClass,\n props: {\n variant: isUndefinedOrNull(footRowVariant) ? headRowVariant :\n /* istanbul ignore next */\n footRowVariant\n }\n }, $cells));\n } else {\n var scope = {\n columns: fields.length,\n fields: fields,\n // Add in row select methods\n selectAllRows: selectAllRows,\n clearSelected: clearSelected\n };\n $trs.push(this.normalizeSlot('thead-top', scope) || h());\n $trs.push(h(BTr, {\n class: this.theadTrClass,\n props: {\n variant: headRowVariant\n }\n }, $cells));\n }\n\n return h(isFoot ? BTfoot : BThead, {\n key: isFoot ? 'bv-tfoot' : 'bv-thead',\n class: (isFoot ? this.tfootClass : this.theadClass) || null,\n props: isFoot ? {\n footVariant: footVariant || headVariant || null\n } : {\n headVariant: headVariant || null\n }\n }, $trs);\n }\n }\n};","import { getComponentConfig } from '../../../utils/config';\nimport { BTfoot } from '../tfoot';\nexport default {\n props: {\n footClone: {\n type: Boolean,\n default: false\n },\n footVariant: {\n type: String,\n // 'dark', 'light', or `null` (or custom)\n default: function _default() {\n return getComponentConfig('BTable', 'footVariant');\n }\n },\n footRowVariant: {\n // Any Bootstrap theme variant (or custom). Falls back to `headRowVariant`\n type: String // default: null\n\n },\n tfootClass: {\n type: [String, Array, Object] // default: null\n\n },\n tfootTrClass: {\n type: [String, Array, Object] // default: null\n\n }\n },\n methods: {\n renderTFootCustom: function renderTFootCustom() {\n var h = this.$createElement;\n\n if (this.hasNormalizedSlot('custom-foot')) {\n return h(BTfoot, {\n key: 'bv-tfoot-custom',\n class: this.tfootClass || null,\n props: {\n footVariant: this.footVariant || this.headVariant || null\n }\n }, this.normalizeSlot('custom-foot', {\n items: this.computedItems.slice(),\n fields: this.computedFields.slice(),\n columns: this.computedFields.length\n }));\n } else {\n return h();\n }\n },\n renderTfoot: function renderTfoot() {\n // Passing true to renderThead will make it render a tfoot\n return this.footClone ? this.renderThead(true) : this.renderTFootCustom();\n }\n }\n};","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport Vue from '../../utils/vue';\nimport attrsMixin from '../../mixins/attrs';\nimport listenersMixin from '../../mixins/listeners';\nimport normalizeSlotMixin from '../../mixins/normalize-slot';\nexport var props = {\n tbodyTransitionProps: {\n type: Object // default: undefined\n\n },\n tbodyTransitionHandlers: {\n type: Object // default: undefined\n\n }\n}; // TODO:\n// In Bootstrap v5, we won't need \"sniffing\" as table element variants properly inherit\n// to the child elements, so this can be converted to a functional component\n// @vue/component\n\nexport var BTbody = /*#__PURE__*/Vue.extend({\n name: 'BTbody',\n // Mixin order is important!\n mixins: [attrsMixin, listenersMixin, normalizeSlotMixin],\n inheritAttrs: false,\n provide: function provide() {\n return {\n bvTableRowGroup: this\n };\n },\n inject: {\n bvTable: {\n // Sniffed by / / \n\n /* istanbul ignore next */\n default: function _default()\n /* istanbul ignore next */\n {\n return {};\n }\n }\n },\n props: props,\n computed: {\n isTbody: function isTbody() {\n // Sniffed by / / \n return true;\n },\n isDark: function isDark() {\n // Sniffed by / / \n return this.bvTable.dark;\n },\n isStacked: function isStacked() {\n // Sniffed by / / \n return this.bvTable.isStacked;\n },\n isResponsive: function isResponsive() {\n // Sniffed by / / \n return this.bvTable.isResponsive;\n },\n isStickyHeader: function isStickyHeader() {\n // Sniffed by / / \n // Sticky headers are only supported in thead\n return false;\n },\n hasStickyHeader: function hasStickyHeader() {\n // Sniffed by / / \n // Needed to handle header background classes, due to lack of\n // background color inheritance with Bootstrap v4 table CSS\n return !this.isStacked && this.bvTable.stickyHeader;\n },\n tableVariant: function tableVariant() {\n // Sniffed by / / \n return this.bvTable.tableVariant;\n },\n isTransitionGroup: function isTransitionGroup() {\n return this.tbodyTransitionProps || this.tbodyTransitionHandlers;\n },\n tbodyAttrs: function tbodyAttrs() {\n return _objectSpread({\n role: 'rowgroup'\n }, this.bvAttrs);\n },\n tbodyProps: function tbodyProps() {\n return this.tbodyTransitionProps ? _objectSpread(_objectSpread({}, this.tbodyTransitionProps), {}, {\n tag: 'tbody'\n }) : {};\n }\n },\n render: function render(h) {\n var data = {\n props: this.tbodyProps,\n attrs: this.tbodyAttrs\n };\n\n if (this.isTransitionGroup) {\n // We use native listeners if a transition group for any delegated events\n data.on = this.tbodyTransitionHandlers || {};\n data.nativeOn = this.bvListeners;\n } else {\n // Otherwise we place any listeners on the tbody element\n data.on = this.bvListeners;\n }\n\n return h(this.isTransitionGroup ? 'transition-group' : 'tbody', data, this.normalizeSlot('default'));\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 get from '../../../utils/get';\nimport { isFunction, isString, isUndefinedOrNull } from '../../../utils/inspect';\nimport { toString } from '../../../utils/string';\nimport { BTr } from '../tr';\nimport { BTd } from '../td';\nimport { BTh } from '../th';\nvar detailsSlotName = 'row-details';\nexport default {\n props: {\n tbodyTrClass: {\n type: [String, Array, Object, Function] // default: null\n\n },\n tbodyTrAttr: {\n type: [Object, Function] // default: null\n\n },\n detailsTdClass: {\n type: [String, Array, Object] // default: null\n\n }\n },\n methods: {\n // Methods for computing classes, attributes and styles for table cells\n getTdValues: function getTdValues(item, key, tdValue, defValue) {\n var parent = this.$parent;\n\n if (tdValue) {\n var value = get(item, key, '');\n\n if (isFunction(tdValue)) {\n return tdValue(value, key, item);\n } else if (isString(tdValue) && isFunction(parent[tdValue])) {\n return parent[tdValue](value, key, item);\n }\n\n return tdValue;\n }\n\n return defValue;\n },\n getThValues: function getThValues(item, key, thValue, type, defValue) {\n var parent = this.$parent;\n\n if (thValue) {\n var value = get(item, key, '');\n\n if (isFunction(thValue)) {\n return thValue(value, key, item, type);\n } else if (isString(thValue) && isFunction(parent[thValue])) {\n return parent[thValue](value, key, item, type);\n }\n\n return thValue;\n }\n\n return defValue;\n },\n // Method to get the value for a field\n getFormattedValue: function getFormattedValue(item, field) {\n var key = field.key;\n var formatter = this.getFieldFormatter(key);\n var value = get(item, key, null);\n\n if (isFunction(formatter)) {\n value = formatter(value, key, item);\n }\n\n return isUndefinedOrNull(value) ? '' : value;\n },\n // Factory function methods\n toggleDetailsFactory: function toggleDetailsFactory(hasDetailsSlot, item) {\n var _this = this;\n\n // Returns a function to toggle a row's details slot\n return function () {\n if (hasDetailsSlot) {\n _this.$set(item, '_showDetails', !item._showDetails);\n }\n };\n },\n // Row event handlers\n rowHovered: function rowHovered(evt) {\n // `mouseenter` handler (non-bubbling)\n // `this.tbodyRowEvtStopped` from tbody mixin\n if (!this.tbodyRowEvtStopped(evt)) {\n // `this.emitTbodyRowEvent` from tbody mixin\n this.emitTbodyRowEvent('row-hovered', evt);\n }\n },\n rowUnhovered: function rowUnhovered(evt) {\n // `mouseleave` handler (non-bubbling)\n // `this.tbodyRowEvtStopped` from tbody mixin\n if (!this.tbodyRowEvtStopped(evt)) {\n // `this.emitTbodyRowEvent` from tbody mixin\n this.emitTbodyRowEvent('row-unhovered', evt);\n }\n },\n // Render helpers\n renderTbodyRowCell: function renderTbodyRowCell(field, colIndex, item, rowIndex) {\n var _this2 = this;\n\n // Renders a TD or TH for a row's field\n var h = this.$createElement;\n var hasDetailsSlot = this.hasNormalizedSlot(detailsSlotName);\n var formatted = this.getFormattedValue(item, field);\n var key = field.key;\n var stickyColumn = !this.isStacked && (this.isResponsive || this.stickyHeader) && field.stickyColumn; // We only uses the helper components for sticky columns to\n // improve performance of BTable/BTableLite by reducing the\n // total number of vue instances created during render\n\n var cellTag = stickyColumn ? field.isRowHeader ? BTh : BTd : field.isRowHeader ? 'th' : 'td';\n var cellVariant = item._cellVariants && item._cellVariants[key] ? item._cellVariants[key] : field.variant || null;\n var data = {\n // For the Vue key, we concatenate the column index and\n // field key (as field keys could be duplicated)\n // TODO: Although we do prevent duplicate field keys...\n // So we could change this to: `row-${rowIndex}-cell-${key}`\n key: \"row-\".concat(rowIndex, \"-cell-\").concat(colIndex, \"-\").concat(key),\n class: [field.class ? field.class : '', this.getTdValues(item, key, field.tdClass, '')],\n props: {},\n attrs: _objectSpread({\n 'aria-colindex': String(colIndex + 1)\n }, field.isRowHeader ? this.getThValues(item, key, field.thAttr, 'row', {}) : this.getTdValues(item, key, field.tdAttr, {}))\n };\n\n if (stickyColumn) {\n // We are using the helper BTd or BTh\n data.props = {\n stackedHeading: this.isStacked ? field.label : null,\n stickyColumn: true,\n variant: cellVariant\n };\n } else {\n // Using native TD or TH element, so we need to\n // add in the attributes and variant class\n data.attrs['data-label'] = this.isStacked && !isUndefinedOrNull(field.label) ? toString(field.label) : null;\n data.attrs.role = field.isRowHeader ? 'rowheader' : 'cell';\n data.attrs.scope = field.isRowHeader ? 'row' : null; // Add in the variant class\n\n if (cellVariant) {\n data.class.push(\"\".concat(this.dark ? 'bg' : 'table', \"-\").concat(cellVariant));\n }\n }\n\n var slotScope = {\n item: item,\n index: rowIndex,\n field: field,\n unformatted: get(item, key, ''),\n value: formatted,\n toggleDetails: this.toggleDetailsFactory(hasDetailsSlot, item),\n detailsShowing: Boolean(item._showDetails)\n }; // If table supports selectable mode, then add in the following scope\n // this.supportsSelectableRows will be undefined if mixin isn't loaded\n\n if (this.supportsSelectableRows) {\n slotScope.rowSelected = this.isRowSelected(rowIndex);\n\n slotScope.selectRow = function () {\n return _this2.selectRow(rowIndex);\n };\n\n slotScope.unselectRow = function () {\n return _this2.unselectRow(rowIndex);\n };\n } // The new `v-slot` syntax doesn't like a slot name starting with\n // a square bracket and if using in-document HTML templates, the\n // v-slot attributes are lower-cased by the browser.\n // Switched to round bracket syntax to prevent confusion with\n // dynamic slot name syntax.\n // We look for slots in this order: `cell(${key})`, `cell(${key.toLowerCase()})`, 'cell()'\n // Slot names are now cached by mixin tbody in `this.$_bodyFieldSlotNameCache`\n // Will be `null` if no slot (or fallback slot) exists\n\n\n var slotName = this.$_bodyFieldSlotNameCache[key];\n var $childNodes = slotName ? this.normalizeSlot(slotName, slotScope) : toString(formatted);\n\n if (this.isStacked) {\n // We wrap in a DIV to ensure rendered as a single cell when visually stacked!\n $childNodes = [h('div', [$childNodes])];\n } // Render either a td or th cell\n\n\n return h(cellTag, data, [$childNodes]);\n },\n renderTbodyRow: function renderTbodyRow(item, rowIndex) {\n var _this3 = this;\n\n // Renders an item's row (or rows if details supported)\n var h = this.$createElement;\n var fields = this.computedFields;\n var tableStriped = this.striped;\n var hasDetailsSlot = this.hasNormalizedSlot(detailsSlotName);\n var rowShowDetails = item._showDetails && hasDetailsSlot;\n var hasRowClickHandler = this.$listeners['row-clicked'] || this.hasSelectableRowClick; // We can return more than one TR if rowDetails enabled\n\n var $rows = []; // Details ID needed for `aria-details` when details showing\n // We set it to `null` when not showing so that attribute\n // does not appear on the element\n\n var detailsId = rowShowDetails ? this.safeId(\"_details_\".concat(rowIndex, \"_\")) : null; // For each item data field in row\n\n var $tds = fields.map(function (field, colIndex) {\n return _this3.renderTbodyRowCell(field, colIndex, item, rowIndex);\n }); // Calculate the row number in the dataset (indexed from 1)\n\n var ariaRowIndex = null;\n\n if (this.currentPage && this.perPage && this.perPage > 0) {\n ariaRowIndex = String((this.currentPage - 1) * this.perPage + rowIndex + 1);\n } // Create a unique :key to help ensure that sub components are re-rendered rather than\n // re-used, which can cause issues. If a primary key is not provided we use the rendered\n // rows index within the tbody.\n // See: https://github.com/bootstrap-vue/bootstrap-vue/issues/2410\n\n\n var primaryKey = this.primaryKey;\n var primaryKeyValue = toString(get(item, primaryKey)) || null;\n var rowKey = primaryKeyValue || toString(rowIndex); // If primary key is provided, use it to generate a unique ID on each tbody > tr\n // In the format of '{tableId}__row_{primaryKeyValue}'\n\n var rowId = primaryKeyValue ? this.safeId(\"_row_\".concat(primaryKeyValue)) : null; // Selectable classes and attributes\n\n var selectableClasses = this.selectableRowClasses ? this.selectableRowClasses(rowIndex) : {};\n var selectableAttrs = this.selectableRowAttrs ? this.selectableRowAttrs(rowIndex) : {}; // Additional classes and attributes\n\n var userTrClasses = isFunction(this.tbodyTrClass) ? this.tbodyTrClass(item, 'row') : this.tbodyTrClass;\n var userTrAttrs = isFunction(this.tbodyTrAttr) ?\n /* istanbul ignore next */\n this.tbodyTrAttr(item, 'row') : this.tbodyTrAttr; // Add the item row\n\n $rows.push(h(BTr, {\n key: \"__b-table-row-\".concat(rowKey, \"__\"),\n ref: 'itemRows',\n refInFor: true,\n class: [userTrClasses, selectableClasses, rowShowDetails ? 'b-table-has-details' : ''],\n props: {\n variant: item._rowVariant || null\n },\n attrs: _objectSpread(_objectSpread({\n id: rowId\n }, userTrAttrs), {}, {\n // Users cannot override the following attributes\n tabindex: hasRowClickHandler ? '0' : null,\n 'data-pk': primaryKeyValue || null,\n 'aria-details': detailsId,\n 'aria-owns': detailsId,\n 'aria-rowindex': ariaRowIndex\n }, selectableAttrs),\n on: {\n // Note: These events are not A11Y friendly!\n mouseenter: this.rowHovered,\n mouseleave: this.rowUnhovered\n }\n }, $tds)); // Row Details slot\n\n if (rowShowDetails) {\n var detailsScope = {\n item: item,\n index: rowIndex,\n fields: fields,\n toggleDetails: this.toggleDetailsFactory(hasDetailsSlot, item)\n }; // If table supports selectable mode, then add in the following scope\n // this.supportsSelectableRows will be undefined if mixin isn't loaded\n\n if (this.supportsSelectableRows) {\n detailsScope.rowSelected = this.isRowSelected(rowIndex);\n\n detailsScope.selectRow = function () {\n return _this3.selectRow(rowIndex);\n };\n\n detailsScope.unselectRow = function () {\n return _this3.unselectRow(rowIndex);\n };\n } // Render the details slot in a TD\n\n\n var $details = h(BTd, {\n props: {\n colspan: fields.length\n },\n class: this.detailsTdClass\n }, [this.normalizeSlot(detailsSlotName, detailsScope)]); // Add a hidden row to keep table row striping consistent when details showing\n // Only added if the table is striped\n\n if (tableStriped) {\n $rows.push( // We don't use `BTr` here as we don't need the extra functionality\n h('tr', {\n key: \"__b-table-details-stripe__\".concat(rowKey),\n staticClass: 'd-none',\n attrs: {\n 'aria-hidden': 'true',\n role: 'presentation'\n }\n }));\n } // Add the actual details row\n\n\n var userDetailsTrClasses = isFunction(this.tbodyTrClass) ?\n /* istanbul ignore next */\n this.tbodyTrClass(item, detailsSlotName) : this.tbodyTrClass;\n var userDetailsTrAttrs = isFunction(this.tbodyTrAttr) ?\n /* istanbul ignore next */\n this.tbodyTrAttr(item, detailsSlotName) : this.tbodyTrAttr;\n $rows.push(h(BTr, {\n key: \"__b-table-details__\".concat(rowKey),\n staticClass: 'b-table-details',\n class: [userDetailsTrClasses],\n props: {\n variant: item._rowVariant || null\n },\n attrs: _objectSpread(_objectSpread({}, userDetailsTrAttrs), {}, {\n // Users cannot override the following attributes\n id: detailsId,\n tabindex: '-1'\n })\n }, [$details]));\n } else if (hasDetailsSlot) {\n // Only add the placeholder if a the table has a row-details slot defined (but not shown)\n $rows.push(h());\n\n if (tableStriped) {\n // Add extra placeholder if table is striped\n $rows.push(h());\n }\n } // Return the row(s)\n\n\n return $rows;\n }\n }\n};","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport KeyCodes from '../../../utils/key-codes';\nimport { arrayIncludes, from as arrayFrom } from '../../../utils/array';\nimport { attemptFocus, closest, isActiveElement, isElement } from '../../../utils/dom';\nimport { props as tbodyProps, BTbody } from '../tbody';\nimport filterEvent from './filter-event';\nimport textSelectionActive from './text-selection-active';\nimport tbodyRowMixin from './mixin-tbody-row';\n\nvar props = _objectSpread(_objectSpread({}, tbodyProps), {}, {\n tbodyClass: {\n type: [String, Array, Object] // default: undefined\n\n }\n});\n\nexport default {\n mixins: [tbodyRowMixin],\n props: props,\n beforeDestroy: function beforeDestroy() {\n this.$_bodyFieldSlotNameCache = null;\n },\n methods: {\n // Helper methods\n getTbodyTrs: function getTbodyTrs() {\n // Returns all the item TR elements (excludes detail and spacer rows)\n // `this.$refs.itemRows` is an array of item TR components/elements\n // Rows should all be B-TR components, but we map to TR elements\n // Also note that `this.$refs.itemRows` may not always be in document order\n var refs = this.$refs || {};\n var tbody = refs.tbody ? refs.tbody.$el || refs.tbody : null;\n var trs = (refs.itemRows || []).map(function (tr) {\n return tr.$el || tr;\n });\n return tbody && tbody.children && tbody.children.length > 0 && trs && trs.length > 0 ? arrayFrom(tbody.children).filter(function (tr) {\n return arrayIncludes(trs, tr);\n }) :\n /* istanbul ignore next */\n [];\n },\n getTbodyTrIndex: function getTbodyTrIndex(el) {\n // Returns index of a particular TBODY item TR\n // We set `true` on closest to include self in result\n\n /* istanbul ignore next: should not normally happen */\n if (!isElement(el)) {\n return -1;\n }\n\n var tr = el.tagName === 'TR' ? el : closest('tr', el, true);\n return tr ? this.getTbodyTrs().indexOf(tr) : -1;\n },\n emitTbodyRowEvent: function emitTbodyRowEvent(type, evt) {\n // Emits a row event, with the item object, row index and original event\n if (type && this.hasListener(type) && evt && evt.target) {\n var rowIndex = this.getTbodyTrIndex(evt.target);\n\n if (rowIndex > -1) {\n // The array of TRs correlate to the `computedItems` array\n var item = this.computedItems[rowIndex];\n this.$emit(type, item, rowIndex, evt);\n }\n }\n },\n tbodyRowEvtStopped: function tbodyRowEvtStopped(evt) {\n return this.stopIfBusy && this.stopIfBusy(evt);\n },\n // Delegated row event handlers\n onTbodyRowKeydown: function onTbodyRowKeydown(evt) {\n // Keyboard navigation and row click emulation\n var target = evt.target;\n\n if (this.tbodyRowEvtStopped(evt) || target.tagName !== 'TR' || !isActiveElement(target) || target.tabIndex !== 0) {\n // Early exit if not an item row TR\n return;\n }\n\n var keyCode = evt.keyCode;\n\n if (arrayIncludes([KeyCodes.ENTER, KeyCodes.SPACE], keyCode)) {\n // Emulated click for keyboard users, transfer to click handler\n evt.stopPropagation();\n evt.preventDefault();\n this.onTBodyRowClicked(evt);\n } else if (arrayIncludes([KeyCodes.UP, KeyCodes.DOWN, KeyCodes.HOME, KeyCodes.END], keyCode)) {\n // Keyboard navigation\n var rowIndex = this.getTbodyTrIndex(target);\n\n if (rowIndex > -1) {\n evt.stopPropagation();\n evt.preventDefault();\n var trs = this.getTbodyTrs();\n var shift = evt.shiftKey;\n\n if (keyCode === KeyCodes.HOME || shift && keyCode === KeyCodes.UP) {\n // Focus first row\n attemptFocus(trs[0]);\n } else if (keyCode === KeyCodes.END || shift && keyCode === KeyCodes.DOWN) {\n // Focus last row\n attemptFocus(trs[trs.length - 1]);\n } else if (keyCode === KeyCodes.UP && rowIndex > 0) {\n // Focus previous row\n attemptFocus(trs[rowIndex - 1]);\n } else if (keyCode === KeyCodes.DOWN && rowIndex < trs.length - 1) {\n // Focus next row\n attemptFocus(trs[rowIndex + 1]);\n }\n }\n }\n },\n onTBodyRowClicked: function onTBodyRowClicked(evt) {\n if (this.tbodyRowEvtStopped(evt)) {\n // If table is busy, then don't propagate\n return;\n } else if (filterEvent(evt) || textSelectionActive(this.$el)) {\n // Clicked on a non-disabled control so ignore\n // Or user is selecting text, so ignore\n return;\n }\n\n this.emitTbodyRowEvent('row-clicked', evt);\n },\n onTbodyRowMiddleMouseRowClicked: function onTbodyRowMiddleMouseRowClicked(evt) {\n if (!this.tbodyRowEvtStopped(evt) && evt.which === 2) {\n this.emitTbodyRowEvent('row-middle-clicked', evt);\n }\n },\n onTbodyRowContextmenu: function onTbodyRowContextmenu(evt) {\n if (!this.tbodyRowEvtStopped(evt)) {\n this.emitTbodyRowEvent('row-contextmenu', evt);\n }\n },\n onTbodyRowDblClicked: function onTbodyRowDblClicked(evt) {\n if (!this.tbodyRowEvtStopped(evt) && !filterEvent(evt)) {\n this.emitTbodyRowEvent('row-dblclicked', evt);\n }\n },\n // Note: Row hover handlers are handled by the tbody-row mixin\n // As mouseenter/mouseleave events do not bubble\n //\n // Render Helper\n renderTbody: function renderTbody() {\n var _this = this;\n\n // Render the tbody element and children\n var items = this.computedItems; // Shortcut to `createElement` (could use `this._c()` instead)\n\n var h = this.$createElement;\n var hasRowClickHandler = this.hasListener('row-clicked') || this.hasSelectableRowClick; // Prepare the tbody rows\n\n var $rows = []; // Add the item data rows or the busy slot\n\n var $busy = this.renderBusy ? this.renderBusy() : null;\n\n if ($busy) {\n // If table is busy and a busy slot, then return only the busy \"row\" indicator\n $rows.push($busy);\n } else {\n // Table isn't busy, or we don't have a busy slot\n // Create a slot cache for improved performance when looking up cell slot names\n // Values will be keyed by the field's `key` and will store the slot's name\n // Slots could be dynamic (i.e. `v-if`), so we must compute on each render\n // Used by tbody-row mixin render helper\n var cache = {};\n var defaultSlotName = this.hasNormalizedSlot('cell()') ? 'cell()' : null;\n this.computedFields.forEach(function (field) {\n var key = field.key;\n var fullName = \"cell(\".concat(key, \")\");\n var lowerName = \"cell(\".concat(key.toLowerCase(), \")\");\n cache[key] = _this.hasNormalizedSlot(fullName) ? fullName : _this.hasNormalizedSlot(lowerName) ?\n /* istanbul ignore next */\n lowerName : defaultSlotName;\n }); // Created as a non-reactive property so to not trigger component updates\n // Must be a fresh object each render\n\n this.$_bodyFieldSlotNameCache = cache; // Add static top row slot (hidden in visibly stacked mode\n // as we can't control `data-label` attr)\n\n $rows.push(this.renderTopRow ? this.renderTopRow() : h()); // Render the rows\n\n items.forEach(function (item, rowIndex) {\n // Render the individual item row (rows if details slot)\n $rows.push(_this.renderTbodyRow(item, rowIndex));\n }); // Empty items / empty filtered row slot (only shows if `items.length < 1`)\n\n $rows.push(this.renderEmpty ? this.renderEmpty() : h()); // Static bottom row slot (hidden in visibly stacked mode\n // as we can't control `data-label` attr)\n\n $rows.push(this.renderBottomRow ? this.renderBottomRow() : h());\n } // Note: these events will only emit if a listener is registered\n\n\n var handlers = {\n auxclick: this.onTbodyRowMiddleMouseRowClicked,\n // TODO:\n // Perhaps we do want to automatically prevent the\n // default context menu from showing if there is a\n // `row-contextmenu` listener registered\n contextmenu: this.onTbodyRowContextmenu,\n // The following event(s) is not considered A11Y friendly\n dblclick: this.onTbodyRowDblClicked // Hover events (`mouseenter`/`mouseleave`) are handled by `tbody-row` mixin\n\n }; // Add in click/keydown listeners if needed\n\n if (hasRowClickHandler) {\n handlers.click = this.onTBodyRowClicked;\n handlers.keydown = this.onTbodyRowKeydown;\n } // Assemble rows into the tbody\n\n\n var $tbody = h(BTbody, {\n ref: 'tbody',\n class: this.tbodyClass || null,\n props: {\n tbodyTransitionProps: this.tbodyTransitionProps,\n tbodyTransitionHandlers: this.tbodyTransitionHandlers\n },\n // BTbody transfers all native event listeners to the root element\n // TODO: Only set the handlers if the table is not busy\n on: handlers\n }, $rows); // Return the assembled tbody\n\n return $tbody;\n }\n }\n};","import { htmlOrText } from '../../../utils/html';\nimport { isFunction } from '../../../utils/inspect';\nimport { BTr } from '../tr';\nimport { BTd } from '../td';\nexport default {\n props: {\n showEmpty: {\n type: Boolean,\n default: false\n },\n emptyText: {\n type: String,\n default: 'There are no records to show'\n },\n emptyHtml: {\n type: String\n },\n emptyFilteredText: {\n type: String,\n default: 'There are no records matching your request'\n },\n emptyFilteredHtml: {\n type: String\n }\n },\n methods: {\n renderEmpty: function renderEmpty() {\n var h = this.$createElement;\n var items = this.computedItems;\n var $empty = h();\n\n if (this.showEmpty && (!items || items.length === 0) && !(this.computedBusy && this.hasNormalizedSlot('table-busy'))) {\n var isFiltered = this.isFiltered,\n emptyText = this.emptyText,\n emptyHtml = this.emptyHtml,\n emptyFilteredText = this.emptyFilteredText,\n emptyFilteredHtml = this.emptyFilteredHtml,\n computedFields = this.computedFields,\n tbodyTrClass = this.tbodyTrClass,\n tbodyTrAttr = this.tbodyTrAttr;\n $empty = this.normalizeSlot(this.isFiltered ? 'emptyfiltered' : 'empty', {\n emptyFilteredHtml: emptyFilteredHtml,\n emptyFilteredText: emptyFilteredText,\n emptyHtml: emptyHtml,\n emptyText: emptyText,\n fields: computedFields,\n // Not sure why this is included, as it will always be an empty array\n items: this.computedItems\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: computedFields.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 this.tbodyTrClass(null, 'row-empty') : tbodyTrClass],\n attrs: isFunction(tbodyTrAttr) ?\n /* istanbul ignore next */\n this.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 { isFunction } from '../../../utils/inspect';\nimport { BTr } from '../tr';\nvar slotName = 'top-row';\nexport default {\n methods: {\n renderTopRow: function renderTopRow() {\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(slotName) || this.stacked === true || this.stacked === '') {\n return h();\n }\n\n var fields = this.computedFields;\n return h(BTr, {\n key: 'b-top-row',\n staticClass: 'b-table-top-row',\n class: [isFunction(this.tbodyTrClass) ? this.tbodyTrClass(null, 'row-top') : this.tbodyTrClass],\n attrs: isFunction(this.tbodyTrAttr) ? this.tbodyTrAttr(null, 'row-top') : this.tbodyTrAttr\n }, [this.normalizeSlot(slotName, {\n columns: fields.length,\n fields: fields\n })]);\n }\n }\n};","import { isFunction } from '../../../utils/inspect';\nimport { BTr } from '../tr';\nvar slotName = 'bottom-row';\nexport default {\n methods: {\n renderBottomRow: function renderBottomRow() {\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(slotName) || this.stacked === true || this.stacked === '') {\n return h();\n }\n\n var fields = this.computedFields;\n return h(BTr, {\n key: 'b-bottom-row',\n staticClass: 'b-table-bottom-row',\n class: [isFunction(this.tbodyTrClass) ?\n /* istanbul ignore next */\n this.tbodyTrClass(null, 'row-bottom') : this.tbodyTrClass],\n attrs: isFunction(this.tbodyTrAttr) ?\n /* istanbul ignore next */\n this.tbodyTrAttr(null, 'row-bottom') : this.tbodyTrAttr\n }, this.normalizeSlot(slotName, {\n columns: fields.length,\n fields: fields\n }));\n }\n }\n};","import { isFunction } from '../../../utils/inspect';\nimport { BTr } from '../tr';\nimport { BTd } from '../td';\nvar busySlotName = 'table-busy';\nexport default {\n props: {\n busy: {\n type: Boolean,\n default: false\n }\n },\n data: function data() {\n return {\n localBusy: false\n };\n },\n computed: {\n computedBusy: function computedBusy() {\n return this.busy || this.localBusy;\n }\n },\n watch: {\n localBusy: function localBusy(newVal, oldVal) {\n if (newVal !== oldVal) {\n this.$emit('update:busy', newVal);\n }\n }\n },\n methods: {\n // Event handler helper\n stopIfBusy: function stopIfBusy(evt) {\n if (this.computedBusy) {\n // If table is busy (via provider) then don't propagate\n evt.preventDefault();\n evt.stopPropagation();\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 h = this.$createElement; // Return a busy indicator row, or `null` if not busy\n\n if (this.computedBusy && this.hasNormalizedSlot(busySlotName)) {\n // Show the busy slot\n return h(BTr, {\n key: 'table-busy-slot',\n staticClass: 'b-table-busy-slot',\n class: [isFunction(this.tbodyTrClass) ?\n /* istanbul ignore next */\n this.tbodyTrClass(null, busySlotName) : this.tbodyTrClass],\n attrs: isFunction(this.tbodyTrAttr) ?\n /* istanbul ignore next */\n this.tbodyTrAttr(null, busySlotName) : this.tbodyTrAttr\n }, [h(BTd, {\n props: {\n colspan: this.computedFields.length || null\n }\n }, [this.normalizeSlot(busySlotName)])]);\n } else {\n // We return `null` here so that we can determine if we need to\n // render the table items rows or not\n return null;\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 identity from '../../../utils/identity';\nimport looseEqual from '../../../utils/loose-equal';\nimport range from '../../../utils/range';\nimport { isArray, arrayIncludes } from '../../../utils/array';\nimport { getComponentConfig } from '../../../utils/config';\nimport { isNumber } from '../../../utils/inspect';\nimport { mathMax, mathMin } from '../../../utils/math';\nimport sanitizeRow from './sanitize-row';\nexport default {\n props: {\n selectable: {\n type: Boolean,\n default: false\n },\n selectMode: {\n type: String,\n default: 'multi',\n validator: function validator(val) {\n return arrayIncludes(['range', 'multi', 'single'], val);\n }\n },\n selectedVariant: {\n type: String,\n default: function _default() {\n return getComponentConfig('BTable', 'selectedVariant');\n }\n },\n noSelectOnClick: {\n // Disable use of click handlers for row selection\n type: Boolean,\n default: false\n }\n },\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 return this.isSelectable && this.selectedRows && this.selectedRows.length > 0 && this.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 return _ref = {\n 'b-table-selectable': this.isSelectable\n }, _defineProperty(_ref, \"b-table-select-\".concat(this.selectMode), this.isSelectable), _defineProperty(_ref, 'b-table-selecting', this.selectableHasSelection), _defineProperty(_ref, 'b-table-selectable-no-click', this.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(newVal, oldVal) {\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(newVal) && isArray(oldVal) && newVal.length === oldVal.length;\n\n for (var i = 0; equal && i < newVal.length; i++) {\n // Look for the first non-loosely equal row, after ignoring reserved fields\n equal = looseEqual(sanitizeRow(newVal[i]), sanitizeRow(oldVal[i]));\n }\n }\n\n if (!equal) {\n this.clearSelected();\n }\n },\n selectable: function selectable(newVal) {\n this.clearSelected();\n this.setSelectionHandlers(newVal);\n },\n selectMode: function selectMode() {\n this.clearSelected();\n },\n hasSelectableRowClick: function hasSelectableRowClick(newVal) {\n this.clearSelected();\n this.setSelectionHandlers(!newVal);\n },\n selectedRows: function selectedRows(_selectedRows, oldVal) {\n var _this = this;\n\n if (this.isSelectable && !looseEqual(_selectedRows, oldVal)) {\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('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 ? range(length).map(function () {\n return true;\n }) : [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 } else {\n return {};\n }\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]('row-clicked', this.selectionHandler); // Clear selection on filter, pagination, and sort changes\n\n this[method]('filtered', this.clearSelected);\n this[method]('context-changed', this.clearSelected);\n },\n selectionHandler: function selectionHandler(item, index, evt) {\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 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 (this.selectedLastRow > -1 && evt.shiftKey) {\n // range\n for (var idx = mathMin(this.selectedLastRow, index); idx <= mathMax(this.selectedLastRow, index); idx++) {\n selectedRows[idx] = true;\n }\n\n selected = true;\n } else {\n if (!(evt.ctrlKey || evt.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};","import looseEqual from '../../../utils/loose-equal';\nimport { isArray, isFunction, isPromise } from '../../../utils/inspect';\nimport { clone } from '../../../utils/object';\nimport { warn } from '../../../utils/warn';\nimport listenOnRootMixin from '../../../mixins/listen-on-root';\nexport default {\n mixins: [listenOnRootMixin],\n props: {\n // Prop override(s)\n items: {\n // Adds in 'Function' support\n type: [Array, Function],\n\n /* istanbul ignore next */\n default: function _default()\n /* istanbul ignore next */\n {\n return [];\n }\n },\n // Additional 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 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(newVal) {\n // If a new provider has been specified, trigger an update\n if (this.hasProvider || isFunction(newVal)) {\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 (!looseEqual(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 = isArray(this.items) ? this.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('refreshed'); // New root emit\n\n if (this.id) {\n this.emitOnRoot('bv::table::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.\", 'BTable');\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, \".\"), 'BTable');\n _this2.localBusy = false;\n\n _this2.$off('refreshed', _this2.refresh);\n }\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 identity from '../../../utils/identity';\nimport { isBoolean } from '../../../utils/inspect';\nimport { toString } from '../../../utils/string';\nimport attrsMixin from '../../../mixins/attrs'; // Main `` render mixin\n// Includes all main table styling options\n\nexport default {\n // Don't place attributes on root element automatically,\n // as table could be wrapped in responsive ``\n inheritAttrs: false,\n // Mixin order is important!\n mixins: [attrsMixin],\n provide: function provide() {\n return {\n bvTable: this\n };\n },\n props: {\n striped: {\n type: Boolean,\n default: false\n },\n bordered: {\n type: Boolean,\n default: false\n },\n borderless: {\n type: Boolean,\n default: false\n },\n outlined: {\n type: Boolean,\n default: false\n },\n dark: {\n type: Boolean,\n default: false\n },\n hover: {\n type: Boolean,\n default: false\n },\n small: {\n type: Boolean,\n default: false\n },\n fixed: {\n type: Boolean,\n default: false\n },\n responsive: {\n type: [Boolean, String],\n default: false\n },\n stickyHeader: {\n // If a string, it is assumed to be the table `max-height` value\n type: [Boolean, String],\n default: false\n },\n noBorderCollapse: {\n type: Boolean,\n default: false\n },\n captionTop: {\n type: Boolean,\n default: false\n },\n tableVariant: {\n type: String // default: null\n\n },\n tableClass: {\n type: [String, Array, Object] // default: null\n\n }\n },\n computed: {\n // Layout related computed props\n isResponsive: function isResponsive() {\n var responsive = this.responsive === '' ? true : this.responsive;\n return this.isStacked ? false : responsive;\n },\n isStickyHeader: function isStickyHeader() {\n var stickyHeader = this.stickyHeader === '' ? true : this.stickyHeader;\n return this.isStacked ? false : stickyHeader;\n },\n wrapperClasses: function wrapperClasses() {\n return [this.isStickyHeader ? 'b-table-sticky-header' : '', this.isResponsive === true ? 'table-responsive' : this.isResponsive ? \"table-responsive-\".concat(this.responsive) : ''].filter(identity);\n },\n wrapperStyles: function wrapperStyles() {\n return this.isStickyHeader && !isBoolean(this.isStickyHeader) ? {\n maxHeight: this.isStickyHeader\n } : {};\n },\n tableClasses: function tableClasses() {\n var hover = this.isTableSimple ? this.hover : this.hover && this.computedItems.length > 0 && !this.computedBusy;\n return [// User supplied classes\n this.tableClass, // Styling classes\n {\n 'table-striped': this.striped,\n 'table-hover': hover,\n 'table-dark': this.dark,\n 'table-bordered': this.bordered,\n 'table-borderless': this.borderless,\n 'table-sm': this.small,\n // The following are b-table custom styles\n border: this.outlined,\n 'b-table-fixed': this.fixed,\n 'b-table-caption-top': this.captionTop,\n 'b-table-no-border-collapse': this.noBorderCollapse\n }, this.tableVariant ? \"\".concat(this.dark ? 'bg' : 'table', \"-\").concat(this.tableVariant) : '', // Stacked table classes\n this.stackedTableClasses, // Selectable classes\n this.selectableTableClasses];\n },\n tableAttrs: function tableAttrs() {\n // Preserve user supplied aria-describedby, if provided in `$attrs`\n var adb = [(this.bvAttrs || {})['aria-describedby'], this.captionId].filter(identity).join(' ') || null;\n var items = this.computedItems;\n var filteredItems = this.filteredItems;\n var fields = this.computedFields;\n var selectableAttrs = this.selectableTableAttrs || {};\n var ariaAttrs = this.isTableSimple ? {} : {\n 'aria-busy': this.computedBusy ? 'true' : 'false',\n 'aria-colcount': toString(fields.length),\n 'aria-describedby': adb\n };\n var rowCount = items && filteredItems && filteredItems.length > items.length ? toString(filteredItems.length) : null;\n return _objectSpread(_objectSpread(_objectSpread({\n // We set `aria-rowcount` before merging in `$attrs`,\n // in case user has supplied their own\n 'aria-rowcount': rowCount\n }, this.bvAttrs), {}, {\n // Now we can override any `$attrs` here\n id: this.safeId(),\n role: 'table'\n }, ariaAttrs), selectableAttrs);\n }\n },\n render: function render(h) {\n var $content = [];\n\n if (this.isTableSimple) {\n $content.push(this.normalizeSlot('default'));\n } else {\n // Build the `
` (from caption mixin)\n $content.push(this.renderCaption ? this.renderCaption() : null); // Build the ` `\n\n $content.push(this.renderColgroup ? this.renderColgroup() : null); // Build the ` `\n\n $content.push(this.renderThead ? this.renderThead() : null); // Build the ` `\n\n $content.push(this.renderTbody ? this.renderTbody() : null); // Build the ` `\n\n $content.push(this.renderTfoot ? this.renderTfoot() : null);\n } // Assemble ``\n\n\n var $table = h('table', {\n key: 'b-table',\n staticClass: 'table b-table',\n class: this.tableClasses,\n attrs: this.tableAttrs\n }, $content.filter(identity)); // Add responsive/sticky wrapper if needed and return table\n\n return this.wrapperClasses.length > 0 ? h('div', {\n key: 'wrap',\n class: this.wrapperClasses,\n style: this.wrapperStyles\n }, [$table]) : $table;\n }\n};","import Vue from '../../utils/vue'; // Mixins\n\nimport attrsMixin from '../../mixins/attrs';\nimport hasListenerMixin from '../../mixins/has-listener';\nimport idMixin from '../../mixins/id';\nimport normalizeSlotMixin from '../../mixins/normalize-slot'; // Table helper Mixins\n\nimport itemsMixin from './helpers/mixin-items';\nimport stackedMixin from './helpers/mixin-stacked';\nimport filteringMixin from './helpers/mixin-filtering';\nimport sortingMixin from './helpers/mixin-sorting';\nimport paginationMixin from './helpers/mixin-pagination';\nimport captionMixin from './helpers/mixin-caption';\nimport colgroupMixin from './helpers/mixin-colgroup';\nimport theadMixin from './helpers/mixin-thead';\nimport tfootMixin from './helpers/mixin-tfoot';\nimport tbodyMixin from './helpers/mixin-tbody';\nimport emptyMixin from './helpers/mixin-empty';\nimport topRowMixin from './helpers/mixin-top-row';\nimport bottomRowMixin from './helpers/mixin-bottom-row';\nimport busyMixin from './helpers/mixin-busy';\nimport selectableMixin from './helpers/mixin-selectable';\nimport providerMixin from './helpers/mixin-provider'; // Main table renderer mixin\n\nimport tableRendererMixin from './helpers/mixin-table-renderer'; // b-table component definition\n// @vue/component\n\nexport var BTable = /*#__PURE__*/Vue.extend({\n name: 'BTable',\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] // Render function is provided by table-renderer mixin\n\n});","\r\n \r\n
\r\n \r\n
\r\n
\r\n
Error fetching interactions :(
\r\n
\r\n
\r\n
\r\n \r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./InteractionsGrid.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./InteractionsGrid.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./InteractionsGrid.vue?vue&type=template&id=4d0a8d98&\"\nimport script from \"./InteractionsGrid.vue?vue&type=script&lang=js&\"\nexport * from \"./InteractionsGrid.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n \r\n
Interactions \r\n \r\n \r\n \r\n\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Dashboard.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Dashboard.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Dashboard.vue?vue&type=template&id=535f3b0b&scoped=true&\"\nimport script from \"./Dashboard.vue?vue&type=script&lang=js&\"\nexport * from \"./Dashboard.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"535f3b0b\",\n null\n \n)\n\nexport default component.exports","import Vue from \"vue\";\r\n\r\nimport ChangeMajorForm from \"./components/ChangeMajorForm.vue\";\r\nimport UserSearchView from \"./components/user-search/UserSearchView\";\r\nimport UserProfileEditView from \"./components/user-edit/UserProfileEditView.vue\";\r\nimport SendMessageView from \"./components/send-message/SendMessageView\";\r\nimport SendBulkMessageView from \"./components/send-message/SendBulkMessageView\";\r\nimport LogInteractionView from \"./components/log-interaction/LogInteractionView\";\r\nimport UserListView from \"./components/user-list/UserListView\";\r\nimport UserProfileView from \"./components/user-view-profile/UserProfileView\";\r\nimport ImportUsersView from \"@/components/import-users/ImportUsersView\";\r\nimport UserAddForm from \"./components/user-add/UserAddForm\";\r\nimport Banner from \"./components/banner/Banner\";\r\nimport BannerForm from \"./components/banner/BannerForm\";\r\nimport Dashboard from \"@/components/dashboard/Dashboard\";\r\n// importing all bootstrap vue components is too much!\r\n// import used bootstrap vue components into each component that needs them\r\n// add the css though (only about 8K zipped)\r\n\r\nimport \"./components/lib/custom.scss\";\r\nimport \"bootstrap-vue/dist/bootstrap-vue-icons.min.css\";\r\n\r\n// register only top-level view components that will be used directly in the\r\n// C# application\r\nconst Components = {\r\n Banner,\r\n BannerForm,\r\n ChangeMajorForm,\r\n Dashboard,\r\n ImportUsersView,\r\n LogInteractionView,\r\n SendBulkMessageView,\r\n SendMessageView,\r\n UserAddForm,\r\n UserListView,\r\n UserProfileEditView,\r\n UserProfileView,\r\n UserSearchView\r\n};\r\n\r\nObject.keys(Components).forEach(name => {\r\n Vue.component(name, Components[name]);\r\n});\r\n\r\nexport default Components;\r\n","import './setPublicPath'\nimport mod from '~entry'\nexport default mod\nexport * from '~entry'\n","'use strict';\nvar $ = require('../internals/export');\nvar isObject = require('../internals/is-object');\nvar isArray = require('../internals/is-array');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar toLength = require('../internals/to-length');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar createProperty = require('../internals/create-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\nvar arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('slice');\nvar USES_TO_LENGTH = arrayMethodUsesToLength('slice', { ACCESSORS: true, 0: 0, 1: 2 });\n\nvar SPECIES = wellKnownSymbol('species');\nvar nativeSlice = [].slice;\nvar max = Math.max;\n\n// `Array.prototype.slice` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.slice\n// fallback for not array-like ES3 strings and DOM objects\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT || !USES_TO_LENGTH }, {\n slice: function slice(start, end) {\n var O = toIndexedObject(this);\n var length = toLength(O.length);\n var k = toAbsoluteIndex(start, length);\n var fin = toAbsoluteIndex(end === undefined ? length : end, length);\n // inline `ArraySpeciesCreate` for usage native `Array#slice` where it's possible\n var Constructor, result, n;\n if (isArray(O)) {\n Constructor = O.constructor;\n // cross-realm fallback\n if (typeof Constructor == 'function' && (Constructor === Array || isArray(Constructor.prototype))) {\n Constructor = undefined;\n } else if (isObject(Constructor)) {\n Constructor = Constructor[SPECIES];\n if (Constructor === null) Constructor = undefined;\n }\n if (Constructor === Array || Constructor === undefined) {\n return nativeSlice.call(O, k, fin);\n }\n }\n result = new (Constructor === undefined ? Array : Constructor)(max(fin - k, 0));\n for (n = 0; k < fin; k++, n++) if (k in O) createProperty(result, n, O[k]);\n result.length = n;\n return result;\n }\n});\n","// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = require('../internals/indexed-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nmodule.exports = function (it) {\n return IndexedObject(requireObjectCoercible(it));\n};\n","// iterable DOM collections\n// flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods\nmodule.exports = {\n CSSRuleList: 0,\n CSSStyleDeclaration: 0,\n CSSValueList: 0,\n ClientRectList: 0,\n DOMRectList: 0,\n DOMStringList: 0,\n DOMTokenList: 1,\n DataTransferItemList: 0,\n FileList: 0,\n HTMLAllCollection: 0,\n HTMLCollection: 0,\n HTMLFormElement: 0,\n HTMLSelectElement: 0,\n MediaList: 0,\n MimeTypeArray: 0,\n NamedNodeMap: 0,\n NodeList: 1,\n PaintRequestList: 0,\n Plugin: 0,\n PluginArray: 0,\n SVGLengthList: 0,\n SVGNumberList: 0,\n SVGPathSegList: 0,\n SVGPointList: 0,\n SVGStringList: 0,\n SVGTransformList: 0,\n SourceBufferList: 0,\n StyleSheetList: 0,\n TextTrackCueList: 0,\n TextTrackList: 0,\n TouchList: 0\n};\n","var NATIVE_SYMBOL = require('../internals/native-symbol');\n\nmodule.exports = NATIVE_SYMBOL\n // eslint-disable-next-line no-undef\n && !Symbol.sham\n // eslint-disable-next-line no-undef\n && typeof Symbol.iterator == 'symbol';\n","var global = require('../internals/global');\n\nmodule.exports = global.Promise;\n"],"sourceRoot":""}