0&&(this.selectedLastClicked=-1,this.selectedRows=this.selectableIsMultiSelect?bo(t,!0):[!0])},isRowSelected:function(t){return!(!Yt(t)||!this.selectedRows[t])},clearSelected:function(){this.selectedLastClicked=-1,this.selectedRows=[]},selectableRowClasses:function(t){if(this.isSelectable&&this.isRowSelected(t)){var e=this.selectedVariant;return c({"b-table-row-selected":!0},"".concat(this.dark?"bg":"table","-").concat(e),e)}return{}},selectableRowAttrs:function(t){return{"aria-selected":this.isSelectable?this.isRowSelected(t)?"true":"false":null}},setSelectionHandlers:function(t){var e=t&&!this.noSelectOnClick?"$on":"$off";this[e](dr,this.selectionHandler),this[e](Kn,this.clearSelected),this[e](jn,this.clearSelected)},selectionHandler:function(t,e,i){if(this.isSelectable&&!this.noSelectOnClick){var n=this.selectMode,r=this.selectedLastRow,o=this.selectedRows.slice(),s=!o[e];if("single"===n)o=[];else if("range"===n)if(r>-1&&i.shiftKey){for(var a=oa(r,e);a<=sa(r,e);a++)o[a]=!0;s=!0}else i.ctrlKey||i.metaKey||(o=[],s=!0),s&&(this.selectedLastRow=e);o[e]=s,this.selectedRows=o}else this.clearSelected()}}}),xw=function(t,e){return t.map((function(t,e){return[e,t]})).sort(function(t,e){return this(t[1],e[1])||t[0]-e[0]}.bind(e)).map((function(t){return t[1]}))},$w=function(t){return jt(t)?"":qt(t)?xo(t,t):t},Bw="sortBy",Dw="sortDesc",_w="asc",Fw="desc",Pw=[_w,Fw,"last"],Iw=(c(ST={labelSortAsc:Ds(Fr,"Click to sort ascending"),labelSortClear:Ds(Fr,"Click to clear sorting"),labelSortDesc:Ds(Fr,"Click to sort descending"),noFooterSorting:Ds(kr,!1),noLocalSorting:Ds(kr,!1),noSortReset:Ds(kr,!1)},Bw,Ds(Fr)),c(ST,"sortCompare",Ds($r)),c(ST,"sortCompareLocale",Ds(Er)),c(ST,"sortCompareOptions",Ds(Dr,{numeric:!0})),c(ST,Dw,Ds(kr,!1)),c(ST,"sortDirection",Ds(Fr,_w,(function(t){return vo(Pw,t)}))),c(ST,"sortIconLeft",Ds(kr,!1)),c(ST,"sortNullLast",Ds(kr,!1)),ST),Ow=L({props:Iw,data:function(){return{localSortBy:this.sortBy||"",localSortDesc:this.sortDesc||!1}},computed:{localSorting:function(){return this.hasProvider?!!this.noProviderSorting:!this.noLocalSorting},isSortable:function(){return this.computedFields.some((function(t){return t.sortable}))},sortedItems:function(){var t=va(this),e=t.localSortBy,i=t.localSortDesc,n=t.sortCompareLocale,o=t.sortNullLast,s=t.sortCompare,a=t.localSorting,l=t.filteredItems,c=t.localItems,u=(l||c||[]).slice(),d=r(r({},this.sortCompareOptions),{},{usage:"sort"});if(e&&a){var h=(this.computedFieldsObj[e]||{}).sortByFormatted,f=Gt(h)?h:h?this.getFieldFormatter(e):void 0;return xw(u,(function(t,r){var a=null;return Gt(s)&&(a=s(t,r,e,i,f,d,n)),(jt(a)||!1===a)&&(a=function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=i.sortBy,r=void 0===n?null:n,o=i.formatter,s=void 0===o?null:o,a=i.locale,l=void 0===a?void 0:a,c=i.localeOptions,u=void 0===c?{}:c,d=i.nullLast,h=void 0!==d&&d,f=ve(t,r,null),p=ve(e,r,null);return Gt(s)&&(f=s(f,r,t),p=s(p,r,e)),f=$w(f),p=$w(p),Jt(f)&&Jt(p)||Yt(f)&&Yt(p)?fp?1:0:h&&""===f&&""!==p?1:h&&""!==f&&""===p?-1:JT(f).localeCompare(JT(p),l,u)}(t,r,{sortBy:e,formatter:f,locale:n,localeOptions:d,nullLast:o})),(a||0)*(i?-1:1)}))}return u}},watch:(kT={isSortable:function(t){t?this.isSortable&&this.$on(Qn,this.handleSort):this.$off(Qn,this.handleSort)}},c(kT,Dw,(function(t){t!==this.localSortDesc&&(this.localSortDesc=t||!1)})),c(kT,Bw,(function(t){t!==this.localSortBy&&(this.localSortBy=t||"")})),c(kT,"localSortDesc",(function(t,e){t!==e&&this.$emit("update:sortDesc",t)})),c(kT,"localSortBy",(function(t,e){t!==e&&this.$emit("update:sortBy",t)})),kT),created:function(){this.isSortable&&this.$on(Qn,this.handleSort)},methods:{handleSort:function(t,e,i,n){var r=this;if(this.isSortable&&(!n||!this.noFooterSorting)){var o=!1,s=function(){var t=e.sortDirection||r.sortDirection;t===_w?r.localSortDesc=!1:t===Fw&&(r.localSortDesc=!0)};if(e.sortable){var a=!this.localSorting&&e.sortKey?e.sortKey:t;this.localSortBy===a?this.localSortDesc=!this.localSortDesc:(this.localSortBy=a,s()),o=!0}else this.localSortBy&&!this.noSortReset&&(this.localSortBy="",s(),o=!0);o&&this.$emit("sort-changed",this.context)}},sortTheadThClasses:function(t,e,i){return{"b-table-sort-icon-left":e.sortable&&this.sortIconLeft&&!(i&&this.noFooterSorting)}},sortTheadThAttrs:function(t,e,i){var n,r=this.isSortable,o=this.noFooterSorting,s=this.localSortDesc,a=this.localSortBy,l=this.localSorting;if(!r||i&&o)return{};var c=e.sortable,u=l?t:null!==(n=e.sortKey)&&void 0!==n?n:t;return{"aria-sort":c&&a===u?s?"descending":"ascending":c?"none":null}},sortTheadThLabel:function(t,e,i){if(!this.isSortable||i&&this.noFooterSorting)return null;var n=this.localSortBy,r=this.localSortDesc,o=this.labelSortAsc,s=this.labelSortDesc,a="";if(e.sortable)if(n===t)a=r?o:s;else{a=r?s:o;var l=this.sortDirection||e.sortDirection;l===_w?a=o:l===Fw&&(a=s)}else this.noSortReset||(a=n?this.labelSortClear:"");return Oo(a)||null}}}),Ew={stacked:Ds(Rr,!1)},Vw=L({props:Ew,computed:{isStacked:function(){var t=this.stacked;return""===t||t},isStackedAlways:function(){return!0===this.isStacked},stackedTableClasses:function(){var t=this.isStackedAlways;return c({"b-table-stacked":t},"b-table-stacked-".concat(this.stacked),!t&&this.isStacked)}}}),Lw={bordered:Ds(kr,!1),borderless:Ds(kr,!1),captionTop:Ds(kr,!1),dark:Ds(kr,!1),fixed:Ds(kr,!1),hover:Ds(kr,!1),noBorderCollapse:Ds(kr,!1),outlined:Ds(kr,!1),responsive:Ds(Rr,!1),small:Ds(kr,!1),stickyHeader:Ds(Rr,!1),striped:Ds(kr,!1),tableClass:Ds(Or),tableVariant:Ds(Fr)},Rw=L({mixins:[pl],provide:function(){var t=this;return{getBvTable:function(){return t}}},inheritAttrs:!1,props:Lw,computed:{isTableSimple:function(){return!1},isResponsive:function(){var t=this.responsive;return""===t||t},isStickyHeader:function(){var t=this.stickyHeader;return t=""===t||t,!this.isStacked&&t},wrapperClasses:function(){var t=this.isResponsive;return[this.isStickyHeader?"b-table-sticky-header":"",!0===t?"table-responsive":t?"table-responsive-".concat(this.responsive):""].filter(pe)},wrapperStyles:function(){var t=this.isStickyHeader;return t&&!Wt(t)?{maxHeight:t}:{}},tableClasses:function(){var t=va(this),e=t.hover,i=t.tableVariant,n=t.selectableTableClasses,r=t.stackedTableClasses,o=t.tableClass,s=t.computedBusy;return e=this.isTableSimple?e:e&&this.computedItems.length>0&&!s,[o,{"table-striped":this.striped,"table-hover":e,"table-dark":this.dark,"table-bordered":this.bordered,"table-borderless":this.borderless,"table-sm":this.small,border:this.outlined,"b-table-fixed":this.fixed,"b-table-caption-top":this.captionTop,"b-table-no-border-collapse":this.noBorderCollapse},i?"".concat(this.dark?"bg":"table","-").concat(i):"",r,n]},tableAttrs:function(){var t=va(this),e=t.computedItems,i=t.filteredItems,n=t.computedFields,o=t.selectableTableAttrs,s=t.computedBusy,a=this.isTableSimple?{}:{"aria-busy":Io(s),"aria-colcount":Io(n.length),"aria-describedby":this.bvAttrs["aria-describedby"]||this.$refs.caption?this.captionId:null};return r(r(r({"aria-rowcount":e&&i&&i.length>e.length?Io(i.length):null},this.bvAttrs),{},{id:this.safeId(),role:this.bvAttrs.role||"table"},a),o)}},render:function(t){var e=va(this),i=e.wrapperClasses,n=e.renderCaption,r=e.renderColgroup,o=e.renderThead,s=e.renderTbody,a=e.renderTfoot,l=[];this.isTableSimple?l.push(this.normalizeSlot()):(l.push(n?n():null),l.push(r?r():null),l.push(o?o():null),l.push(s?s():null),l.push(a?a():null));var c=t("table",{staticClass:"table b-table",class:this.tableClasses,attrs:this.tableAttrs,key:"b-table"},l.filter(pe));return i.length>0?t("div",{class:i,style:this.wrapperStyles,key:"wrap"},[c]):c}}),Aw=Is({tbodyTransitionHandlers:Ds(Dr),tbodyTransitionProps:Ds(Dr)},_n),Mw=L({name:_n,mixins:[pl,Tl,So],provide:function(){var t=this;return{getBvTableRowGroup:function(){return t}}},inject:{getBvTable:{default:function(){return function(){return{}}}}},inheritAttrs:!1,props:Aw,computed:{bvTable:function(){return this.getBvTable()},isTbody:function(){return!0},isDark:function(){return this.bvTable.dark},isStacked:function(){return this.bvTable.isStacked},isResponsive:function(){return this.bvTable.isResponsive},isStickyHeader:function(){return!1},hasStickyHeader:function(){return!this.isStacked&&this.bvTable.stickyHeader},tableVariant:function(){return this.bvTable.tableVariant},isTransitionGroup:function(){return this.tbodyTransitionProps||this.tbodyTransitionHandlers},tbodyAttrs:function(){return r({role:"rowgroup"},this.bvAttrs)},tbodyProps:function(){var t=this.tbodyTransitionProps;return t?r(r({},t),{},{tag:"tbody"}):{}}},render:function(t){var e={props:this.tbodyProps,attrs:this.tbodyAttrs};return this.isTransitionGroup?(e.on=this.tbodyTransitionHandlers||{},e.nativeOn=this.bvListeners):e.on=this.bvListeners,t(this.isTransitionGroup?"transition-group":"tbody",e,this.normalizeSlot())}}),Hw=["TD","TH","TR"],zw=function(t){if(!t||!t.target)return!1;var e=t.target;if(e.disabled||-1!==Hw.indexOf(e.tagName))return!1;if(Zo(".dropdown-menu",e))return!0;var i="LABEL"===e.tagName?e:Zo("label",e);if(i){var n=os(i,"for"),r=n?Qo(n):Ko("input, select, textarea",i);if(r&&!r.disabled)return!0}return Xo(e,nw)},Nw=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:document,e=hs();return!!(e&&""!==e.toString().trim()&&e.containsNode&&zo(t))&&e.containsNode(t,!0)},jw=Is(zT,"BTh"),Gw=L({name:"BTh",extends:NT,props:jw,computed:{tag:function(){return"th"}}}),Ww={detailsTdClass:Ds(Or),tbodyTrAttr:Ds(Nr),tbodyTrClass:Ds([].concat(S(Or),[$r]))},Uw=L({mixins:[Og],props:Ww,methods:{getTdValues:function(t,e,i,n){var r=this.bvParent;if(i){var o=ve(t,e,"");return Gt(i)?i(o,e,t):Ut(i)&&Gt(r[i])?r[i](o,e,t):i}return n},getThValues:function(t,e,i,n,r){var o=this.bvParent;if(i){var s=ve(t,e,"");return Gt(i)?i(s,e,t,n):Ut(i)&&Gt(o[i])?o[i](s,e,t,n):i}return r},getFormattedValue:function(t,e){var i=e.key,n=this.getFieldFormatter(i),r=ve(t,i,null);return Gt(n)&&(r=n(r,i,t)),jt(r)?"":r},toggleDetailsFactory:function(t,e){var i=this;return function(){t&&i.$set(e,ew,!e[ew])}},rowHovered:function(t){this.tbodyRowEventStopped(t)||this.emitTbodyRowEvent("row-hovered",t)},rowUnhovered:function(t){this.tbodyRowEventStopped(t)||this.emitTbodyRowEvent("row-unhovered",t)},renderTbodyRowCell:function(t,e,i,n){var o=this,s=this.isStacked,a=t.key,l=t.label,c=t.isRowHeader,u=this.$createElement,d=this.hasNormalizedSlot(ao),h=this.getFormattedValue(i,t),f=!s&&(this.isResponsive||this.stickyHeader)&&t.stickyColumn,p=f?c?Gw:NT:c?"th":"td",m=i[QT]&&i[QT][a]?i[QT][a]:t.variant||null,v={class:[t.class?t.class:"",this.getTdValues(i,a,t.tdClass,"")],props:{},attrs:r({"aria-colindex":String(e+1)},c?this.getThValues(i,a,t.thAttr,"row",{}):this.getTdValues(i,a,t.tdAttr,{})),key:"row-".concat(n,"-cell-").concat(e,"-").concat(a)};f?v.props={stackedHeading:s?l:null,stickyColumn:!0,variant:m}:(v.attrs["data-label"]=s&&!jt(l)?Io(l):null,v.attrs.role=c?"rowheader":"cell",v.attrs.scope=c?"row":null,m&&v.class.push("".concat(this.dark?"bg":"table","-").concat(m)));var g={item:i,index:n,field:t,unformatted:ve(i,a,""),value:h,toggleDetails:this.toggleDetailsFactory(d,i),detailsShowing:Boolean(i[ew])};va(this).supportsSelectableRows&&(g.rowSelected=this.isRowSelected(n),g.selectRow=function(){return o.selectRow(n)},g.unselectRow=function(){return o.unselectRow(n)});var b=this.$_bodyFieldSlotNameCache[a],y=b?this.normalizeSlot(b,g):Io(h);return this.isStacked&&(y=[u("div",[y])]),u(p,v,[y])},renderTbodyRow:function(t,e){var i=this,n=va(this),o=n.computedFields,s=n.striped,a=n.primaryKey,l=n.currentPage,u=n.perPage,d=n.tbodyTrClass,h=n.tbodyTrAttr,f=n.hasSelectableRowClick,p=this.$createElement,m=this.hasNormalizedSlot(ao),v=t[ew]&&m,g=this.$listeners["row-clicked"]||f,b=[],y=v?this.safeId("_details_".concat(e,"_")):null,T=o.map((function(n,r){return i.renderTbodyRowCell(n,r,t,e)})),w=null;l&&u&&u>0&&(w=String((l-1)*u+e+1));var C=Io(ve(t,a))||null,S=C||Io(e),k=C?this.safeId("_row_".concat(C)):null,x=va(this).selectableRowClasses?this.selectableRowClasses(e):{},$=va(this).selectableRowAttrs?this.selectableRowAttrs(e):{},B=Gt(d)?d(t,"row"):d,D=Gt(h)?h(t,"row"):h;if(b.push(p(LT,c({class:[B,x,v?"b-table-has-details":""],props:{variant:t[tw]||null},attrs:r(r({id:k},D),{},{tabindex:g?"0":null,"data-pk":C||null,"aria-details":y,"aria-owns":y,"aria-rowindex":w},$),on:{mouseenter:this.rowHovered,mouseleave:this.rowUnhovered},key:"__b-table-row-".concat(S,"__"),ref:"item-rows"},E,!0),T)),v){var _={item:t,index:e,fields:o,toggleDetails:this.toggleDetailsFactory(m,t)};va(this).supportsSelectableRows&&(_.rowSelected=this.isRowSelected(e),_.selectRow=function(){return i.selectRow(e)},_.unselectRow=function(){return i.unselectRow(e)});var F=p(NT,{props:{colspan:o.length},class:this.detailsTdClass},[this.normalizeSlot(ao,_)]);s&&b.push(p("tr",{staticClass:"d-none",attrs:{"aria-hidden":"true",role:"presentation"},key:"__b-table-details-stripe__".concat(S)}));var P=Gt(this.tbodyTrClass)?this.tbodyTrClass(t,ao):this.tbodyTrClass,I=Gt(this.tbodyTrAttr)?this.tbodyTrAttr(t,ao):this.tbodyTrAttr;b.push(p(LT,{staticClass:"b-table-details",class:[P],props:{variant:t[tw]||null},attrs:r(r({},I),{},{id:y,tabindex:"-1"}),key:"__b-table-details__".concat(S)},[F]))}else m&&(b.push(p()),s&&b.push(p()));return b}}}),Yw=function(t){return"cell(".concat(t||"",")")},qw=he(r(r(r({},Aw),Ww),{},{tbodyClass:Ds(Or)})),Kw=L({mixins:[Uw],props:qw,beforeDestroy:function(){this.$_bodyFieldSlotNameCache=null},methods:{getTbodyTrs:function(){var t=this.$refs,e=t.tbody?t.tbody.$el||t.tbody:null,i=(t["item-rows"]||[]).map((function(t){return t.$el||t}));return e&&e.children&&e.children.length>0&&i&&i.length>0?mo(e.children).filter((function(t){return vo(i,t)})):[]},getTbodyTrIndex:function(t){if(!zo(t))return-1;var e="TR"===t.tagName?t:Zo("tr",t,!0);return e?this.getTbodyTrs().indexOf(e):-1},emitTbodyRowEvent:function(t,e){if(t&&this.hasListener(t)&&e&&e.target){var i=this.getTbodyTrIndex(e.target);if(i>-1){var n=this.computedItems[i];this.$emit(t,n,i,e)}}},tbodyRowEventStopped:function(t){return this.stopIfBusy&&this.stopIfBusy(t)},onTbodyRowKeydown:function(t){var e=t.target,i=t.keyCode;if(!this.tbodyRowEventStopped(t)&&"TR"===e.tagName&&Go(e)&&0===e.tabIndex)if(vo([el,ol],i))Hs(t),this.onTBodyRowClicked(t);else if(vo([sl,Qa,il,tl],i)){var n=this.getTbodyTrIndex(e);if(n>-1){Hs(t);var r=this.getTbodyTrs(),o=t.shiftKey;i===il||o&&i===sl?vs(r[0]):i===tl||o&&i===Qa?vs(r[r.length-1]):i===sl&&n>0?vs(r[n-1]):i===Qa&&n0&&void 0!==arguments[0]&&arguments[0],i=va(this),n=i.computedFields,o=i.isSortable,s=i.isSelectable,a=i.headVariant,l=i.footVariant,c=i.headRowVariant,u=i.footRowVariant,d=this.$createElement;if(this.isStackedAlways||0===n.length)return d();var h=o||this.hasListener(Qn),f=s?this.selectAllRows:_u,p=s?this.clearSelected:_u,m=function(i,n){var s=i.label,a=i.labelHtml,l=i.variant,c=i.stickyColumn,u=i.key,m=null;i.label.trim()||i.headerTitle||(m=_o(i.key));var v={};h&&(v.click=function(n){t.headClicked(n,i,e)},v.keydown=function(n){var r=n.keyCode;r!==el&&r!==ol||t.headClicked(n,i,e)});var g=o?t.sortTheadThAttrs(u,i,e):{},b=o?t.sortTheadThClasses(u,i,e):null,y=o?t.sortTheadThLabel(u,i,e):null,T={class:[{"position-relative":y},t.fieldClasses(i),b],props:{variant:l,stickyColumn:c},style:i.thStyle||{},attrs:r(r({tabindex:h&&i.sortable?"0":null,abbr:i.headerAbbr||null,title:i.headerTitle||null,"aria-colindex":n+1,"aria-label":m},t.getThValues(null,u,i.thAttr,e?"foot":"head",{})),g),on:v,key:u},w=[iC(u),iC(u.toLowerCase()),iC()];e&&(w=[nC(u),nC(u.toLowerCase()),nC()].concat(S(w)));var C={label:s,column:u,field:i,isFoot:e,selectAllRows:f,clearSelected:p},k=t.normalizeSlot(w,C)||d("div",{domProps:Zl(a,s)}),x=y?d("span",{staticClass:"sr-only"}," (".concat(y,")")):null;return d(Gw,T,[k,x].filter(pe))},v=n.map(m).filter(pe),g=[];if(e)g.push(d(LT,{class:this.tfootTrClass,props:{variant:jt(u)?c:u}},v));else{var b={columns:n.length,fields:n,selectAllRows:f,clearSelected:p};g.push(this.normalizeSlot(ho,b)||d()),g.push(d(LT,{class:this.theadTrClass,props:{variant:c}},v))}return d(e?Zw:eC,{class:(e?this.tfootClass:this.theadClass)||null,props:e?{footVariant:l||a||null}:{headVariant:a||null},key:e?"bv-tfoot":"bv-thead"},g)}}}),sC=L({methods:{renderTopRow:function(){var t=this.computedFields,e=this.stacked,i=this.tbodyTrClass,n=this.tbodyTrAttr,r=this.$createElement;return this.hasNormalizedSlot(po)&&!0!==e&&""!==e?r(LT,{staticClass:"b-table-top-row",class:[Gt(i)?i(null,"row-top"):i],attrs:Gt(n)?n(null,"row-top"):n,key:"b-top-row"},[this.normalizeSlot(po,{columns:t.length,fields:t})]):r()}}}),aC=Is(he(r(r(r(r(r(r(r(r(r(r(r(r(r(r(r(r(r(r({},Vc),RT),GT),UT),qT),XT),ow),fw),mw),yw),Sw),Iw),Ew),Lw),qw),Jw),rC),{})),kn),lC=L({name:kn,mixins:[pl,IT,Lc,So,pw,Rw,Vw,oC,Qw,Kw,Vw,sw,Ow,vw,YT,KT,kw,ZT,sC,AT,WT,Tw],props:aC}),cC=Is(he(r(r(r(r(r(r(r(r(r({},Vc),UT),qT),fw),Ew),Lw),qw),Jw),rC)),$n),uC=L({name:$n,mixins:[pl,IT,Lc,So,pw,Rw,Vw,oC,Qw,Kw,YT,KT],props:cC}),dC=Is(he(r(r(r({},Vc),Ew),Lw)),Bn),hC=L({name:Bn,mixins:[pl,IT,Lc,So,Rw,Vw],props:dC,computed:{isTableSimple:function(){return!0}}}),fC=$e({components:{BTable:lC},plugins:{TableLitePlugin:$e({components:{BTableLite:uC}}),TableSimplePlugin:$e({components:{BTableSimple:hC,BTbody:Mw,BThead:eC,BTfoot:Zw,BTr:LT,BTd:NT,BTh:Gw}})}}),pC=function(t){return t>0},mC=Is({animation:Ds(Fr),columns:Ds(Br,5,pC),hideHeader:Ds(kr,!1),rows:Ds(Br,3,pC),showFooter:Ds(kr,!1),tableProps:Ds(Dr,{})},Tn),vC=L({name:Tn,functional:!0,props:mC,render:function(t,e){var i=e.data,n=e.props,o=n.animation,s=n.columns,a=t("th",[t(CT,{props:{animation:o}})]),l=t("tr",bo(s,a)),c=t("td",[t(CT,{props:{width:"75%",animation:o}})]),u=t("tr",bo(s,c)),d=t("tbody",bo(n.rows,u)),h=n.hideHeader?t():t("thead",[l]),f=n.showFooter?t("tfoot",[l]):t();return t(hC,I(i,{props:r({},n.tableProps)}),[h,d,f])}}),gC=Is({loading:Ds(kr,!1)},wn),bC=L({name:wn,functional:!0,props:gC,render:function(t,e){var i=e.data,n=e.props,r=e.slots,o=e.scopedSlots,s=r(),a=o||{},l={};return n.loading?t("div",I(i,{attrs:{role:"alert","aria-live":"polite","aria-busy":!0},staticClass:"b-skeleton-wrapper",key:"loading"}),Co("loading",l,a,s)):Co(Kr,l,a,s)}}),yC=$e({components:{BSkeleton:CT,BSkeletonIcon:_T,BSkeletonImg:PT,BSkeletonTable:vC,BSkeletonWrapper:bC}}),TC=$e({components:{BSpinner:Ub}}),wC=Vs("value",{type:Br}),CC=wC.mixin,SC=wC.props,kC=wC.prop,xC=wC.event,$C=function(t){return!t.disabled},BC=L({name:"BVTabButton",inject:{getBvTabs:{default:function(){return function(){return{}}}}},props:{controls:Ds(Fr),id:Ds(Fr),noKeyNav:Ds(kr,!1),posInSet:Ds(Br),setSize:Ds(Br),tab:Ds(),tabIndex:Ds(Br)},computed:{bvTabs:function(){return this.getBvTabs()}},methods:{focus:function(){vs(this.$refs.link)},handleEvent:function(t){if(!this.tab.disabled){var e=t.type,i=t.keyCode,n=t.shiftKey;"click"===e||"keydown"===e&&i===ol?(Hs(t),this.$emit(Hn,t)):"keydown"!==e||this.noKeyNav||(-1!==[sl,nl,il].indexOf(i)?(Hs(t),n||i===il?this.$emit(Xn,t):this.$emit(cr,t)):-1!==[Qa,rl,tl].indexOf(i)&&(Hs(t),n||i===tl?this.$emit(nr,t):this.$emit(sr,t)))}}},render:function(t){var e=this.id,i=this.tabIndex,n=this.setSize,o=this.posInSet,s=this.controls,a=this.handleEvent,l=this.tab,c=l.title,u=l.localActive,d=l.disabled,h=l.titleItemClass,f=l.titleLinkClass,p=l.titleLinkAttributes,m=t(xl,{staticClass:"nav-link",class:[{active:u&&!d,disabled:d},f,u?this.bvTabs.activeNavItemClass:null],props:{disabled:d},attrs:r(r({},p),{},{id:e,role:"tab",tabindex:i,"aria-selected":u&&!d?"true":"false","aria-setsize":n,"aria-posinset":o,"aria-controls":s}),on:{click:a,keydown:a},ref:"link"},[this.tab.normalizeSlot(fo)||c]);return t("li",{staticClass:"nav-item",class:[h],attrs:{role:"presentation"}},[m])}}),DC=ue(vb,["tabs","isNavBar","cardHeader"]),_C=Is(he(r(r(r(r({},Vc),SC),DC),{},{activeNavItemClass:Ds(Or),activeTabClass:Ds(Or),card:Ds(kr,!1),contentClass:Ds(Or),end:Ds(kr,!1),lazy:Ds(kr,!1),navClass:Ds(Or),navWrapperClass:Ds(Or),noFade:Ds(kr,!1),noKeyNav:Ds(kr,!1),noNavStyle:Ds(kr,!1),tag:Ds(Fr,"div")})),Dn),FC=L({name:Dn,mixins:[Lc,CC,So],provide:function(){var t=this;return{getBvTabs:function(){return t}}},props:_C,data:function(){return{currentTab:ko(this[kC],-1),tabs:[],registeredTabs:[]}},computed:{fade:function(){return!this.noFade},localNavClass:function(){var t=[];return this.card&&this.vertical&&t.push("card-header","h-100","border-bottom-0","rounded-0"),[].concat(t,[this.navClass])}},watch:(xT={},c(xT,kC,(function(t,e){if(t!==e){t=ko(t,-1),e=ko(e,0);var i=this.tabs[t];i&&!i.disabled?this.activateTab(i):t0&&void 0!==arguments[0])||arguments[0];if(this.$_observer&&this.$_observer.disconnect(),this.$_observer=null,e){var i=function(){t.$nextTick((function(){Mo((function(){t.updateTabs()}))}))};this.$_observer=Fu(this.$refs.content,i,{childList:!0,subtree:!1,attributes:!0,attributeFilter:["id"]})}},getTabs:function(){var t=this.registeredTabs,e=[];if(Y&&t.length>0){var i=t.map((function(t){return"#".concat(t.safeId())})).join(", ");e=qo(i,this.$el).map((function(t){return t.id})).filter(pe)}return xw(t,(function(t,i){return e.indexOf(t.safeId())-e.indexOf(i.safeId())}))},updateTabs:function(){var t=this.getTabs(),e=t.indexOf(t.slice().reverse().find((function(t){return t.localActive&&!t.disabled})));if(e<0){var i=this.currentTab;i>=t.length?e=t.indexOf(t.slice().reverse().find($C)):t[i]&&!t[i].disabled&&(e=i)}e<0&&(e=t.indexOf(t.find($C))),t.forEach((function(t,i){t.localActive=i===e})),this.tabs=t,this.currentTab=e},getButtonForTab:function(t){return(this.$refs.buttons||[]).find((function(e){return e.tab===t}))},updateButton:function(t){var e=this.getButtonForTab(t);e&&e.$forceUpdate&&e.$forceUpdate()},activateTab:function(t){var e=this.currentTab,i=this.tabs,n=!1;if(t){var r=i.indexOf(t);if(r!==e&&r>-1&&!t.disabled){var o=new BvEvent("activate-tab",{cancelable:!0,vueTarget:this,componentId:this.safeId()});this.$emit(o.type,r,e,o),o.defaultPrevented||(this.currentTab=r,n=!0)}}return n||this[kC]===e||this.$emit(xC,e),n},deactivateTab:function(t){return!!t&&this.activateTab(this.tabs.filter((function(e){return e!==t})).find($C))},focusButton:function(t){var e=this;this.$nextTick((function(){vs(e.getButtonForTab(t))}))},emitTabClick:function(t,e){Qt(e)&&t&&t.$emit&&!t.disabled&&t.$emit(Hn,e)},clickTab:function(t,e){this.activateTab(t),this.emitTabClick(t,e)},firstTab:function(t){var e=this.tabs.find($C);this.activateTab(e)&&t&&(this.focusButton(e),this.emitTabClick(e,t))},previousTab:function(t){var e=sa(this.currentTab,0),i=this.tabs.slice(0,e).reverse().find($C);this.activateTab(i)&&t&&(this.focusButton(i),this.emitTabClick(i,t))},nextTab:function(t){var e=sa(this.currentTab,-1),i=this.tabs.slice(e+1).find($C);this.activateTab(i)&&t&&(this.focusButton(i),this.emitTabClick(i,t))},lastTab:function(t){var e=this.tabs.slice().reverse().find($C);this.activateTab(e)&&t&&(this.focusButton(e),this.emitTabClick(e,t))}},render:function(t){var e=this,i=this.align,n=this.card,r=this.end,o=this.fill,s=this.firstTab,a=this.justified,l=this.lastTab,u=this.nextTab,d=this.noKeyNav,h=this.noNavStyle,f=this.pills,p=this.previousTab,m=this.small,v=this.tabs,g=this.vertical,b=v.find((function(t){return t.localActive&&!t.disabled})),y=v.find((function(t){return!t.disabled})),T=v.map((function(i,n){var r,o=i.safeId,a=null;return d||(a=-1,(i===b||!b&&i===y)&&(a=null)),t(BC,c({props:{controls:o?o():null,id:i.controlledBy||(o?o("_BV_tab_button_"):null),noKeyNav:d,posInSet:n+1,setSize:v.length,tab:i,tabIndex:a},on:(r={},c(r,Hn,(function(t){e.clickTab(i,t)})),c(r,Xn,s),c(r,cr,p),c(r,sr,u),c(r,nr,l),r),key:i._uid||n,ref:"buttons"},E,!0))})),w=t(gb,{class:this.localNavClass,attrs:{role:"tablist",id:this.safeId("_BV_tab_controls_")},props:{fill:o,justified:a,align:i,tabs:!h&&!f,pills:!h&&f,vertical:g,small:m,cardHeader:n&&!g},ref:"nav"},[this.normalizeSlot("tabs-start")||t(),T,this.normalizeSlot("tabs-end")||t()]);w=t("div",{class:[{"card-header":n&&!g&&!r,"card-footer":n&&!g&&r,"col-auto":g},this.navWrapperClass],key:"bv-tabs-nav"},[w]);var C=this.normalizeSlot()||[],S=t();0===C.length&&(S=t("div",{class:["tab-pane","active",{"card-body":n}],key:"bv-empty-tab"},this.normalizeSlot(Xr)));var k=t("div",{staticClass:"tab-content",class:[{col:g},this.contentClass],attrs:{id:this.safeId("_BV_tab_container_")},key:"bv-content",ref:"content"},[C,S]);return t(this.tag,{staticClass:"tabs",class:{row:g,"no-gutters":g&&n},attrs:{id:this.safeId()}},[r?k:t(),w,r?t():k])}}),PC="active",IC="update:active",OC=Is(he(r(r({},Vc),{},(c($T={},PC,Ds(kr,!1)),c($T,"buttonId",Ds(Fr)),c($T,"disabled",Ds(kr,!1)),c($T,"lazy",Ds(kr,!1)),c($T,"noBody",Ds(kr,!1)),c($T,"tag",Ds(Fr,"div")),c($T,"title",Ds(Fr)),c($T,"titleItemClass",Ds(Or)),c($T,"titleLinkAttributes",Ds(Dr)),c($T,"titleLinkClass",Ds(Or)),$T))),Sn),EC=$e({components:{BTabs:FC,BTab:L({name:Sn,mixins:[Lc,So],inject:{getBvTabs:{default:function(){return function(){return{}}}}},props:OC,data:function(){return{localActive:this.active&&!this.disabled}},computed:{bvTabs:function(){return this.getBvTabs()},_isTab:function(){return!0},tabClasses:function(){var t=this.localActive;return[{active:t,disabled:this.disabled,"card-body":this.bvTabs.card&&!this.noBody},t?this.bvTabs.activeTabClass:null]},controlledBy:function(){return this.buttonId||this.safeId("__BV_tab_button__")},computedNoFade:function(){return!this.bvTabs.fade},computedLazy:function(){return this.bvTabs.lazy||this.lazy}},watch:(BT={},c(BT,PC,(function(t,e){t!==e&&(t?this.activate():this.deactivate()||this.$emit(IC,this.localActive))})),c(BT,"disabled",(function(t,e){if(t!==e){var i=this.bvTabs.firstTab;t&&this.localActive&&i&&(this.localActive=!1,i())}})),c(BT,"localActive",(function(t){this.$emit(IC,t)})),BT),mounted:function(){this.registerTab()},updated:function(){var t=this.bvTabs.updateButton;t&&this.hasNormalizedSlot(fo)&&t(this)},beforeDestroy:function(){this.unregisterTab()},methods:{registerTab:function(){var t=this.bvTabs.registerTab;t&&t(this)},unregisterTab:function(){var t=this.bvTabs.unregisterTab;t&&t(this)},activate:function(){var t=this.bvTabs.activateTab;return!(!t||this.disabled)&&t(this)},deactivate:function(){var t=this.bvTabs.deactivateTab;return!(!t||!this.localActive)&&t(this)}},render:function(t){var e=this.localActive,i=t(this.tag,{staticClass:"tab-pane",class:this.tabClasses,directives:[{name:"show",value:e}],attrs:{role:"tabpanel",id:this.safeId(),"aria-hidden":e?"false":"true","aria-labelledby":this.controlledBy||null},ref:"panel"},[e||!this.computedLazy?this.normalizeSlot():t()]);return t(Ks,{props:{mode:"out-in",noFade:this.computedNoFade}},[i])}})}}),VC=$e({components:{BTime:Ev}});function LC(t){return LC="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},LC(t)}function RC(t){return function(t){if(Array.isArray(t)){for(var e=0,i=new Array(t.length);e1&&void 0!==arguments[1]&&arguments[1],i=t.to,n=t.from;if(i&&(n||!1!==e)&&this.transports[i])if(e)this.transports[i]=[];else{var r=this.$_getTransportIndex(t);if(r>=0){var o=this.transports[i].slice(0);o.splice(r,1),this.transports[i]=o}}},registerTarget:function(t,e,i){AC&&(this.trackInstances&&!i&&this.targets[t]&&console.warn("[portal-vue]: Target ".concat(t," already exists")),this.$set(this.targets,t,Object.freeze([e])))},unregisterTarget:function(t){this.$delete(this.targets,t)},registerSource:function(t,e,i){AC&&(this.trackInstances&&!i&&this.sources[t]&&console.warn("[portal-vue]: source ".concat(t," already exists")),this.$set(this.sources,t,Object.freeze([e])))},unregisterSource:function(t){this.$delete(this.sources,t)},hasTarget:function(t){return!(!this.targets[t]||!this.targets[t][0])},hasSource:function(t){return!(!this.sources[t]||!this.sources[t][0])},hasContentFor:function(t){return!!this.transports[t]&&!!this.transports[t].length},$_getTransportIndex:function(t){var e=t.to,i=t.from;for(var n in this.transports[e])if(this.transports[e][n].from===i)return+n;return-1}}}),GC=new jC(HC),WC=1,UC=i.default.extend({name:"portal",props:{disabled:{type:Boolean},name:{type:String,default:function(){return String(WC++)}},order:{type:Number,default:0},slim:{type:Boolean},slotProps:{type:Object,default:function(){return{}}},tag:{type:String,default:"DIV"},to:{type:String,default:function(){return String(Math.round(1e7*Math.random()))}}},created:function(){var t=this;this.$nextTick((function(){GC.registerSource(t.name,t)}))},mounted:function(){this.disabled||this.sendUpdate()},updated:function(){this.disabled?this.clear():this.sendUpdate()},beforeDestroy:function(){GC.unregisterSource(this.name),this.clear()},watch:{to:function(t,e){e&&e!==t&&this.clear(e),this.sendUpdate()}},methods:{clear:function(t){var e={from:this.name,to:t||this.to};GC.close(e)},normalizeSlots:function(){return this.$scopedSlots.default?[this.$scopedSlots.default]:this.$slots.default},normalizeOwnChildren:function(t){return"function"==typeof t?t(this.slotProps):t},sendUpdate:function(){var t=this.normalizeSlots();if(t){var e={from:this.name,to:this.to,passengers:RC(t),order:this.order};GC.open(e)}else this.clear()}},render:function(t){var e=this.$slots.default||this.$scopedSlots.default||[],i=this.tag;return e&&this.disabled?e.length<=1&&this.slim?this.normalizeOwnChildren(e)[0]:t(i,[this.normalizeOwnChildren(e)]):this.slim?t():t(i,{class:{"v-portal":!0},style:{display:"none"},key:"v-portal-placeholder"})}}),YC=i.default.extend({name:"portalTarget",props:{multiple:{type:Boolean,default:!1},name:{type:String,required:!0},slim:{type:Boolean,default:!1},slotProps:{type:Object,default:function(){return{}}},tag:{type:String,default:"div"},transition:{type:[String,Object,Function]}},data:function(){return{transports:GC.transports,firstRender:!0}},created:function(){var t=this;this.$nextTick((function(){GC.registerTarget(t.name,t)}))},watch:{ownTransports:function(){this.$emit("change",this.children().length>0)},name:function(t,e){GC.unregisterTarget(e),GC.registerTarget(t,this)}},mounted:function(){var t=this;this.transition&&this.$nextTick((function(){t.firstRender=!1}))},beforeDestroy:function(){GC.unregisterTarget(this.name)},computed:{ownTransports:function(){var t=this.transports[this.name]||[];return this.multiple?t:0===t.length?[]:[t[t.length-1]]},passengers:function(){return function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return t.reduce((function(t,i){var n=i.passengers[0],r="function"==typeof n?n(e):i.passengers;return t.concat(r)}),[])}(this.ownTransports,this.slotProps)}},methods:{children:function(){return 0!==this.passengers.length?this.passengers:this.$scopedSlots.default?this.$scopedSlots.default(this.slotProps):this.$slots.default||[]},noWrapper:function(){var t=this.slim&&!this.transition;return t&&this.children().length>1&&console.warn("[portal-vue]: PortalTarget with `slim` option received more than one child element."),t}},render:function(t){var e=this.noWrapper(),i=this.children(),n=this.transition||this.tag;return e?i[0]:this.slim&&!n?t():t(n,{props:{tag:this.transition&&this.tag?this.tag:void 0},class:{"vue-portal-target":!0}},i)}}),qC=0,KC=["disabled","name","order","slim","slotProps","tag","to"],XC=["multiple","transition"];i.default.extend({name:"MountingPortal",inheritAttrs:!1,props:{append:{type:[Boolean,String]},bail:{type:Boolean},mountTo:{type:String,required:!0},disabled:{type:Boolean},name:{type:String,default:function(){return"mounted_"+String(qC++)}},order:{type:Number,default:0},slim:{type:Boolean},slotProps:{type:Object,default:function(){return{}}},tag:{type:String,default:"DIV"},to:{type:String,default:function(){return String(Math.round(1e7*Math.random()))}},multiple:{type:Boolean,default:!1},targetSlim:{type:Boolean},targetSlotProps:{type:Object,default:function(){return{}}},targetTag:{type:String,default:"div"},transition:{type:[String,Object,Function]}},created:function(){if("undefined"!=typeof document){var t=document.querySelector(this.mountTo);if(t){var e=this.$props;if(GC.targets[e.name])e.bail?console.warn("[portal-vue]: Target ".concat(e.name," is already mounted.\n Aborting because 'bail: true' is set")):this.portalTarget=GC.targets[e.name];else{var i=e.append;if(i){var n="string"==typeof i?i:"DIV",r=document.createElement(n);t.appendChild(r),t=r}var o=MC(this.$props,XC);o.slim=this.targetSlim,o.tag=this.targetTag,o.slotProps=this.targetSlotProps,o.name=this.to,this.portalTarget=new YC({el:t,parent:this.$parent||this,propsData:o})}}else console.error("[portal-vue]: Mount Point '".concat(this.mountTo,"' not found in document"))}},beforeDestroy:function(){var t=this.portalTarget;if(this.append){var e=t.$el;e.parentNode.removeChild(e)}t.$destroy()},render:function(t){if(!this.portalTarget)return console.warn("[portal-vue] Target wasn't mounted"),t();if(!this.$scopedSlots.manual){var e=MC(this.$props,KC);return t(UC,{props:e,attrs:this.$attrs,on:this.$listeners,scopedSlots:this.$scopedSlots},this.$slots.default)}var i=this.$scopedSlots.manual({to:this.to});return Array.isArray(i)&&(i=i[0]),i||t()}});var ZC,JC,QC=L({mixins:[So],data:function(){return{name:"b-toaster"}},methods:{onAfterEnter:function(t){var e=this;Mo((function(){es(t,"".concat(e.name,"-enter-to"))}))}},render:function(t){return t("transition-group",{props:{tag:"div",name:this.name},on:{afterEnter:this.onAfterEnter}},this.normalizeSlot())}}),tS=Is({ariaAtomic:Ds(Fr),ariaLive:Ds(Fr),name:Ds(Fr,void 0,!0),role:Ds(Fr)},En),eS=L({name:En,mixins:[gl],props:tS,data:function(){return{doRender:!1,dead:!1,staticName:this.name}},beforeMount:function(){var t=this.name;this.staticName=t,GC.hasTarget(t)?(ye('A "" with name "'.concat(t,'" already exists in the document.'),En),this.dead=!0):this.doRender=!0},beforeDestroy:function(){this.doRender&&this.emitOnRoot(Ns(En,Gn),this.name)},destroyed:function(){var t=this.$el;t&&t.parentNode&&t.parentNode.removeChild(t)},render:function(t){var e=t("div",{class:["d-none",{"b-dead-toaster":this.dead}]});if(this.doRender){var i=t(YC,{staticClass:"b-toaster-slot",props:{name:this.staticName,multiple:!0,tag:"div",slim:!1,transition:QC}});e=t("div",{staticClass:"b-toaster",class:[this.staticName],attrs:{id:this.staticName,role:this.role||null,"aria-live":this.ariaLive,"aria-atomic":this.ariaAtomic}},[i])}return e}}),iS=Vs("visible",{type:kr,defaultValue:!1,event:Mn}),nS=iS.mixin,rS=iS.props,oS=iS.prop,sS=iS.event,aS=ce(kl,["href","to"]),lS=Is(he(r(r(r(r({},Vc),rS),aS),{},{appendToast:Ds(kr,!1),autoHideDelay:Ds(Hr,5e3),bodyClass:Ds(Or),headerClass:Ds(Or),headerTag:Ds(Fr,"header"),isStatus:Ds(kr,!1),noAutoHide:Ds(kr,!1),noCloseButton:Ds(kr,!1),noFade:Ds(kr,!1),noHoverPause:Ds(kr,!1),solid:Ds(kr,!1),static:Ds(kr,!1),title:Ds(Fr),toastClass:Ds(Or),toaster:Ds(Fr,"b-toaster-top-right"),variant:Ds(Fr)})),On),cS=L({name:On,mixins:[pl,Lc,nS,gl,So,Vg],inheritAttrs:!1,props:lS,data:function(){return{isMounted:!1,doRender:!1,localShow:!1,isTransitioning:!1,isHiding:!1,order:0,dismissStarted:0,resumeDismiss:0}},computed:{toastClasses:function(){var t=this.appendToast,e=this.variant;return c({"b-toast-solid":this.solid,"b-toast-append":t,"b-toast-prepend":!t},"b-toast-".concat(e),e)},slotScope:function(){return{hide:this.hide}},computedDuration:function(){return sa(ko(this.autoHideDelay,0),1e3)},computedToaster:function(){return String(this.toaster)},transitionHandlers:function(){return{beforeEnter:this.onBeforeEnter,afterEnter:this.onAfterEnter,beforeLeave:this.onBeforeLeave,afterLeave:this.onAfterLeave}},computedAttrs:function(){return r(r({},this.bvAttrs),{},{id:this.safeId(),tabindex:"0"})}},watch:(ZC={},c(ZC,oS,(function(t){this[t?"show":"hide"]()})),c(ZC,"localShow",(function(t){t!==this[oS]&&this.$emit(sS,t)})),c(ZC,"toaster",(function(){this.$nextTick(this.ensureToaster)})),c(ZC,"static",(function(t){t&&this.localShow&&this.ensureToaster()})),ZC),created:function(){this.$_dismissTimer=null},mounted:function(){var t=this;this.isMounted=!0,this.$nextTick((function(){t[oS]&&Mo((function(){t.show()}))})),this.listenOnRoot(js(On,fr),(function(e){e===t.safeId()&&t.show()})),this.listenOnRoot(js(On,er),(function(e){e&&e!==t.safeId()||t.hide()})),this.listenOnRoot(Ns(En,Gn),(function(e){e===t.computedToaster&&t.hide()}))},beforeDestroy:function(){this.clearDismissTimer()},methods:{show:function(){var t=this;if(!this.localShow){this.ensureToaster();var e=this.buildEvent(fr);this.emitEvent(e),this.dismissStarted=this.resumeDismiss=0,this.order=Date.now()*(this.appendToast?1:-1),this.isHiding=!1,this.doRender=!0,this.$nextTick((function(){Mo((function(){t.localShow=!0}))}))}},hide:function(){var t=this;if(this.localShow){var e=this.buildEvent(er);this.emitEvent(e),this.setHoverHandler(!1),this.dismissStarted=this.resumeDismiss=0,this.clearDismissTimer(),this.isHiding=!0,Mo((function(){t.localShow=!1}))}},buildEvent:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return new BvEvent(t,r(r({cancelable:!1,target:this.$el||null,relatedTarget:null},e),{},{vueTarget:this,componentId:this.safeId()}))},emitEvent:function(t){var e=t.type;this.emitOnRoot(Ns(On,e),t),this.$emit(e,t)},ensureToaster:function(){if(!this.static){var t=this.computedToaster;if(!GC.hasTarget(t)){var e=document.createElement("div");document.body.appendChild(e),Lg(this.bvEventRoot,eS,{propsData:{name:t}}).$mount(e)}}},startDismissTimer:function(){this.clearDismissTimer(),this.noAutoHide||(this.$_dismissTimer=setTimeout(this.hide,this.resumeDismiss||this.computedDuration),this.dismissStarted=Date.now(),this.resumeDismiss=0)},clearDismissTimer:function(){clearTimeout(this.$_dismissTimer),this.$_dismissTimer=null},setHoverHandler:function(t){var e=this.$refs["b-toast"];Ms(t,e,"mouseenter",this.onPause,wr),Ms(t,e,"mouseleave",this.onUnPause,wr)},onPause:function(){if(!this.noAutoHide&&!this.noHoverPause&&this.$_dismissTimer&&!this.resumeDismiss){var t=Date.now()-this.dismissStarted;t>0&&(this.clearDismissTimer(),this.resumeDismiss=sa(this.computedDuration-t,1e3))}},onUnPause:function(){this.noAutoHide||this.noHoverPause||!this.resumeDismiss?this.resumeDismiss=this.dismissStarted=0:this.startDismissTimer()},onLinkClick:function(){var t=this;this.$nextTick((function(){Mo((function(){t.hide()}))}))},onBeforeEnter:function(){this.isTransitioning=!0},onAfterEnter:function(){this.isTransitioning=!1;var t=this.buildEvent(pr);this.emitEvent(t),this.startDismissTimer(),this.setHoverHandler(!0)},onBeforeLeave:function(){this.isTransitioning=!0},onAfterLeave:function(){this.isTransitioning=!1,this.order=0,this.resumeDismiss=this.dismissStarted=0;var t=this.buildEvent(tr);this.emitEvent(t),this.doRender=!1},makeToast:function(t){var e=this,i=this.title,n=this.slotScope,r=Ca(this),o=[],s=this.normalizeSlot("toast-title",n);s?o.push(s):i&&o.push(t("strong",{staticClass:"mr-2"},i)),this.noCloseButton||o.push(t(Ws,{staticClass:"ml-auto mb-1",on:{click:function(){e.hide()}}}));var a=t();o.length>0&&(a=t(this.headerTag,{staticClass:"toast-header",class:this.headerClass},o));var l=t(r?xl:"div",{staticClass:"toast-body",class:this.bodyClass,props:r?Fs(aS,this):{},on:r?{click:this.onLinkClick}:{}},this.normalizeSlot(Kr,n));return t("div",{staticClass:"toast",class:this.toastClass,attrs:this.computedAttrs,key:"toast-".concat(this._uid),ref:"toast"},[a,l])}},render:function(t){if(!this.doRender||!this.isMounted)return t();var e=this.order,i=this.static,n=this.isHiding,o=this.isStatus,s="b-toast-".concat(this._uid),a=t("div",{staticClass:"b-toast",class:this.toastClasses,attrs:r(r({},i?{}:this.scopedStyleAttrs),{},{id:this.safeId("_toast_outer"),role:n?null:o?"status":"alert","aria-live":n?null:o?"polite":"assertive","aria-atomic":n?null:"true"}),key:s,ref:"b-toast"},[t(Ks,{props:{noFade:this.noFade},on:this.transitionHandlers},[this.localShow?this.makeToast(t):t()])]);return t(UC,{props:{name:s,to:this.computedToaster,order:e,slim:!0,disabled:i}},[a])}}),uS="$bvToast",dS=["id"].concat(S(se(ue(lS,["static","visible"])))),hS={toastContent:"default",title:"toast-title"},fS=function(t){return dS.reduce((function(e,i){return zt(t[i])||(e[i]=t[i]),e}),{})},pS=$e({plugins:{plugin:function(t){var e=t.extend({name:"BVToastPop",extends:cS,mixins:[Og],destroyed:function(){var t=this.$el;t&&t.parentNode&&t.parentNode.removeChild(t)},mounted:function(){var t=this,e=function(){t.localShow=!1,t.doRender=!1,t.$nextTick((function(){t.$nextTick((function(){Mo((function(){t.$destroy()}))}))}))};this.bvParent.$once(br,e),this.$once(tr,e),this.listenOnRoot(Ns(En,Gn),(function(i){i===t.toaster&&e()}))}}),i=function(t,i){if(!Te(uS)){var n=Lg(i,e,{propsData:r(r(r({},fS(ws(On))),ue(t,se(hS))),{},{static:!1,visible:!0})});se(hS).forEach((function(e){var r=t[e];zt(r)||("title"===e&&Ut(r)&&(r=[i.$createElement("strong",{class:"mr-2"},r)]),n.$slots[hS[e]]=go(r))}));var o=document.createElement("div");document.body.appendChild(o),n.$mount(o)}},n=function(){function t(e){s(this,t),ee(this,{_vm:e,_root:ml(e)}),ne(this,{_vm:{enumerable:!0,configurable:!1,writable:!1},_root:{enumerable:!0,configurable:!1,writable:!1}})}return l(t,[{key:"toast",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};t&&!Te(uS)&&i(r(r({},fS(e)),{},{toastContent:t}),this._vm)}},{key:"show",value:function(t){t&&this._root.$emit(js(On,fr),t)}},{key:"hide",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;this._root.$emit(js(On,er),t)}}]),t}();t.mixin({beforeCreate:function(){this._bv__toast=new n(this)}}),ae(t.prototype,uS)||re(t.prototype,uS,{get:function(){return this&&this._bv__toast||ye('"'.concat(uS,'" must be accessed from a Vue instance "this" context.'),On),this._bv__toast}})}}}),mS=$e({components:{BToast:cS,BToaster:eS},plugins:{BVToastPlugin:pS}}),vS="__BV_Tooltip__",gS={focus:!0,hover:!0,click:!0,blur:!0,manual:!0},bS=/^html$/i,yS=/^noninteractive$/i,TS=/^nofade$/i,wS=/^(auto|top(left|right)?|bottom(left|right)?|left(top|bottom)?|right(top|bottom)?)$/i,CS=/^(window|viewport|scrollParent)$/i,SS=/^d\d+$/i,kS=/^ds\d+$/i,xS=/^dh\d+$/i,$S=/^o-?\d+$/i,BS=/^v-.+$/i,DS=/\s+/,_S=function(t,e,i){if(Y){var n=function(t,e){var i={title:void 0,trigger:"",placement:"top",fallbackPlacement:"flip",container:!1,animation:!0,offset:0,id:null,html:!1,interactive:!0,disabled:!1,delay:ws(Vn,"delay",50),boundary:String(ws(Vn,"boundary","scrollParent")),boundaryPadding:ko(ws(Vn,"boundaryPadding",5),0),variant:ws(Vn,"variant"),customClass:ws(Vn,"customClass")};if(Ut(t.value)||Yt(t.value)||Gt(t.value)?i.title=t.value:Zt(t.value)&&(i=r(r({},i),t.value)),zt(i.title)){var n=O?e.props:(e.data||{}).attrs;i.title=n&&!jt(n.title)?n.title:void 0}Zt(i.delay)||(i.delay={show:ko(i.delay,0),hide:ko(i.delay,0)}),t.arg&&(i.container="#".concat(t.arg)),se(t.modifiers).forEach((function(t){if(bS.test(t))i.html=!0;else if(yS.test(t))i.interactive=!1;else if(TS.test(t))i.animation=!1;else if(wS.test(t))i.placement=t;else if(CS.test(t))t="scrollparent"===t?"scrollParent":t,i.boundary=t;else if(SS.test(t)){var e=ko(t.slice(1),0);i.delay.show=e,i.delay.hide=e}else kS.test(t)?i.delay.show=ko(t.slice(2),0):xS.test(t)?i.delay.hide=ko(t.slice(2),0):$S.test(t)?i.offset=ko(t.slice(1),0):BS.test(t)&&(i.variant=t.slice(2)||null)}));var o={};return go(i.trigger||"").filter(pe).join(" ").trim().toLowerCase().split(DS).forEach((function(t){gS[t]&&(o[t]=!0)})),se(t.modifiers).forEach((function(t){t=t.toLowerCase(),gS[t]&&(o[t]=!0)})),i.trigger=se(o).join(" "),"blur"===i.trigger&&(i.trigger="focus"),i.trigger||(i.trigger="hover focus"),i}(e,i);if(!t[vS]){var o=ld(i,e);t[vS]=Lg(o,By,{_scopeId:Eg(o,void 0)}),t[vS].__bv_prev_data__={},t[vS].$on(fr,(function(){Gt(n.title)&&t[vS].updateData({title:n.title(t)})}))}var s={title:n.title,triggers:n.trigger,placement:n.placement,fallbackPlacement:n.fallbackPlacement,variant:n.variant,customClass:n.customClass,container:n.container,boundary:n.boundary,delay:n.delay,offset:n.offset,noFade:!n.animation,id:n.id,interactive:n.interactive,disabled:n.disabled,html:n.html},a=t[vS].__bv_prev_data__;if(t[vS].__bv_prev_data__=s,!ll(s,a)){var l={target:t};se(s).forEach((function(e){s[e]!==a[e]&&(l[e]="title"===e&&Gt(s[e])?s[e](t):s[e])})),t[vS].updateData(l)}}},FS=$e({directives:{VBTooltip:{bind:function(t,e,i){_S(t,e,i)},componentUpdated:function(t,e,i){z((function(){_S(t,e,i)}))},unbind:function(t){!function(t){t[vS]&&(t[vS].$destroy(),t[vS]=null),delete t[vS]}(t)}}}}),PS=$e({plugins:{AlertPlugin:ra,AspectPlugin:ma,AvatarPlugin:Gl,BadgePlugin:Kl,BreadcrumbPlugin:rc,ButtonPlugin:oc,ButtonGroupPlugin:lc,ButtonToolbarPlugin:hc,CalendarPlugin:Gc,CardPlugin:Du,CarouselPlugin:Gu,CollapsePlugin:Ed,DropdownPlugin:Df,EmbedPlugin:If,FormPlugin:Wf,FormCheckboxPlugin:xp,FormDatepickerPlugin:Np,FormFilePlugin:tm,FormGroupPlugin:dm,FormInputPlugin:km,FormRadioPlugin:Bm,FormRatingPlugin:Am,FormSelectPlugin:Jm,FormSpinbuttonPlugin:av,FormTagsPlugin:wv,FormTextareaPlugin:kv,FormTimepickerPlugin:Gv,ImagePlugin:Wv,InputGroupPlugin:ig,JumbotronPlugin:ag,LayoutPlugin:fg,LinkPlugin:pg,ListGroupPlugin:wg,MediaPlugin:Dg,ModalPlugin:mb,NavPlugin:Bb,NavbarPlugin:Gb,OverlayPlugin:Xb,PaginationPlugin:dy,PaginationNavPlugin:my,PopoverPlugin:Zy,ProgressPlugin:iT,SidebarPlugin:TT,SkeletonPlugin:yC,SpinnerPlugin:TC,TablePlugin:fC,TabsPlugin:EC,TimePlugin:VC,ToastPlugin:mS,TooltipPlugin:$e({components:{BTooltip:Iy},plugins:{VBTooltipPlugin:FS}})}}),IS=$e({directives:{VBHover:Fp}}),OS=$e({directives:{VBModal:lb}}),ES="active",VS=".nav-link",LS=".nav-item",RS=".list-group-item",AS=".dropdown-item",MS=Ns("BVScrollspy","activate"),HS="position",zS={element:"body",offset:10,method:"auto",throttle:75},NS={element:"(string|element|component)",offset:"number",method:"string",throttle:"number"},jS=["webkitTransitionEnd","transitionend","otransitionend","oTransitionEnd"],GS=function(t){return function(t){return Object.prototype.toString.call(t)}(t).match(/\s([a-zA-Z]+)/)[1].toLowerCase()},WS=function(){function t(e,i,n){s(this,t),this.$el=e,this.$scroller=null,this.$selector=[VS,RS,AS].join(","),this.$offsets=[],this.$targets=[],this.$activeTarget=null,this.$scrollHeight=0,this.$resizeTimeout=null,this.$scrollerObserver=null,this.$targetsObserver=null,this.$root=n||null,this.$config=null,this.updateConfig(i)}return l(t,[{key:"updateConfig",value:function(t,e){this.$scroller&&(this.unlisten(),this.$scroller=null);var i=r(r({},this.constructor.Default),t);if(e&&(this.$root=e),function(t,e,i){for(var n in i)if(ae(i,n)){var r=i[n],o=e[n],s=o&&zo(o)?"element":GS(o);s=o&&o._isVue?"component":s,new RegExp(r).test(s)||ye("".concat(t,': Option "').concat(n,'" provided type "').concat(s,'" but expected type "').concat(r,'"'))}}(this.constructor.Name,i,this.constructor.DefaultType),this.$config=i,this.$root){var n=this;this.$root.$nextTick((function(){n.listen()}))}else this.listen()}},{key:"dispose",value:function(){this.unlisten(),clearTimeout(this.$resizeTimeout),this.$resizeTimeout=null,this.$el=null,this.$config=null,this.$scroller=null,this.$selector=null,this.$offsets=null,this.$targets=null,this.$activeTarget=null,this.$scrollHeight=null}},{key:"listen",value:function(){var t=this,e=this.getScroller();e&&"BODY"!==e.tagName&&Rs(e,"scroll",this,wr),Rs(window,"scroll",this,wr),Rs(window,"resize",this,wr),Rs(window,"orientationchange",this,wr),jS.forEach((function(e){Rs(window,e,t,wr)})),this.setObservers(!0),this.handleEvent("refresh")}},{key:"unlisten",value:function(){var t=this,e=this.getScroller();this.setObservers(!1),e&&"BODY"!==e.tagName&&As(e,"scroll",this,wr),As(window,"scroll",this,wr),As(window,"resize",this,wr),As(window,"orientationchange",this,wr),jS.forEach((function(e){As(window,e,t,wr)}))}},{key:"setObservers",value:function(t){var e=this;this.$scrollerObserver&&this.$scrollerObserver.disconnect(),this.$targetsObserver&&this.$targetsObserver.disconnect(),this.$scrollerObserver=null,this.$targetsObserver=null,t&&(this.$targetsObserver=Fu(this.$el,(function(){e.handleEvent("mutation")}),{subtree:!0,childList:!0,attributes:!0,attributeFilter:["href"]}),this.$scrollerObserver=Fu(this.getScroller(),(function(){e.handleEvent("mutation")}),{subtree:!0,childList:!0,characterData:!0,attributes:!0,attributeFilter:["id","style","class"]}))}},{key:"handleEvent",value:function(t){var e=Ut(t)?t:t.type,i=this;"scroll"===e?(this.$scrollerObserver||this.listen(),this.process()):/(resize|orientationchange|mutation|refresh)/.test(e)&&(i.$resizeTimeout||(i.$resizeTimeout=setTimeout((function(){i.refresh(),i.process(),i.$resizeTimeout=null}),i.$config.throttle)))}},{key:"refresh",value:function(){var t=this,e=this.getScroller();if(e){var i=e!==e.window?HS:"offset",n="auto"===this.$config.method?i:this.$config.method,r=n===HS?ps:fs,o=n===HS?this.getScrollTop():0;return this.$offsets=[],this.$targets=[],this.$scrollHeight=this.getScrollHeight(),qo(this.$selector,this.$el).map((function(t){return os(t,"href")})).filter((function(t){return t&&Ft.test(t||"")})).map((function(t){var i=t.replace(Ft,"$1").trim();if(!i)return null;var n=Ko(i,e);return n&&Wo(n)?{offset:ko(r(n).top,0)+o,target:i}:null})).filter(pe).sort((function(t,e){return t.offset-e.offset})).reduce((function(e,i){return e[i.target]||(t.$offsets.push(i.offset),t.$targets.push(i.target),e[i.target]=!0),e}),{}),this}}},{key:"process",value:function(){var t=this.getScrollTop()+this.$config.offset,e=this.getScrollHeight(),i=this.$config.offset+e-this.getOffsetHeight();if(this.$scrollHeight!==e&&this.refresh(),t>=i){var n=this.$targets[this.$targets.length-1];this.$activeTarget!==n&&this.activate(n)}else{if(this.$activeTarget&&t0)return this.$activeTarget=null,void this.clear();for(var r=this.$offsets.length;r--;){this.$activeTarget!==this.$targets[r]&&t>=this.$offsets[r]&&(zt(this.$offsets[r+1])||t0&&this.$root&&this.$root.$emit(MS,t,i)}},{key:"clear",value:function(){var t=this;qo("".concat(this.$selector,", ").concat(LS),this.$el).filter((function(t){return is(t,ES)})).forEach((function(e){return t.setActiveState(e,!1)}))}},{key:"setActiveState",value:function(t,e){t&&(e?ts(t,ES):es(t,ES))}}],[{key:"Name",get:function(){return"v-b-scrollspy"}},{key:"Default",get:function(){return zS}},{key:"DefaultType",get:function(){return NS}}]),t}(),US="__BV_Scrollspy__",YS=/^\d+$/,qS=/^(auto|position|offset)$/,KS=function(t,e,i){if(Y){var n=function(t){var e={};return t.arg&&(e.element="#".concat(t.arg)),se(t.modifiers).forEach((function(t){YS.test(t)?e.offset=ko(t,0):qS.test(t)&&(e.method=t)})),Ut(t.value)?e.element=t.value:Yt(t.value)?e.offset=da(t.value):Xt(t.value)&&se(t.value).filter((function(t){return!!WS.DefaultType[t]})).forEach((function(i){e[i]=t.value[i]})),e}(e);t[US]?t[US].updateConfig(n,ml(ld(i,e))):t[US]=new WS(t,n,ml(ld(i,e)))}},XS={install:xe({plugins:{componentsPlugin:PS,directivesPlugin:$e({plugins:{VBHoverPlugin:IS,VBModalPlugin:OS,VBPopoverPlugin:Xy,VBScrollspyPlugin:$e({directives:{VBScrollspy:{bind:function(t,e,i){KS(t,e,i)},inserted:function(t,e,i){KS(t,e,i)},update:function(t,e,i){e.value!==e.oldValue&&KS(t,e,i)},componentUpdated:function(t,e,i){e.value!==e.oldValue&&KS(t,e,i)},unbind:function(t){!function(t){t[US]&&(t[US].dispose(),t[US]=null,delete t[US])}(t)}}}}),VBTogglePlugin:Od,VBTooltipPlugin:FS,VBVisiblePlugin:$e({directives:{VBVisible:gu}})}})}}),NAME:"BootstrapVue"};return JC=XS,N&&window.Vue&&window.Vue.use(JC),N&&JC.NAME&&(window[JC.NAME]=JC),XS}));
+//# sourceMappingURL=bootstrap-vue.min.js.map
\ No newline at end of file
diff --git a/BTCPayServer/wwwroot/vendor/bootstrap-vue/bootstrap-vue.min.min.css.map b/BTCPayServer/wwwroot/vendor/bootstrap-vue/bootstrap-vue.min.min.css.map
new file mode 100644
index 000000000..84a7d1949
--- /dev/null
+++ b/BTCPayServer/wwwroot/vendor/bootstrap-vue/bootstrap-vue.min.min.css.map
@@ -0,0 +1 @@
+{"version":3,"sources":["../scripts/index.scss","../src/_utilities.scss","../node_modules/bootstrap/scss/mixins/_breakpoints.scss","../src/_custom-controls.scss","../src/components/avatar/_avatar.scss","dist/bootstrap-vue.css","../src/components/calendar/_calendar.scss","../src/components/card/_card-img.scss","../node_modules/bootstrap/scss/mixins/_border-radius.scss","../src/components/dropdown/_dropdown.scss","../src/components/dropdown/_dropdown-form.scss","../src/components/dropdown/_dropdown-text.scss","../src/components/form-checkbox/_form-checkbox.scss","../src/components/input-group/_input-group.scss","../src/components/form-btn-label-control/_form-btn-label-control.scss","../src/components/form-file/_form-file.scss","../src/components/form-input/_form-input.scss","../node_modules/bootstrap/scss/mixins/_transition.scss","../src/components/form-radio/_form-radio.scss","../src/components/form-rating/_form-rating.scss","../src/components/form-spinbutton/_spinbutton.scss","../src/components/form-tags/_form-tags.scss","../src/components/media/_media.scss","../src/components/modal/_modal.scss","../src/components/pagination/_pagination.scss","../src/components/popover/_popover.scss","../src/components/sidebar/_sidebar.scss","../src/components/skeleton/_skeleton.scss","../src/components/table/_table.scss","../src/components/time/_time.scss","../src/components/toast/_toast.scss","../src/components/toast/_toaster.scss","../src/components/toast/_toaster-transition.scss","../src/components/tooltip/_tooltip.scss","../src/icons/_icons.scss"],"names":[],"mappings":"iBAAA;;ACSE,wBACE,QAAA,EC+DA,4BDzDE,mBACE,QAAA,gBCwDJ,4BDzDE,mBACE,QAAA,gBCwDJ,4BDzDE,mBACE,QAAA,gBCwDJ,6BDzDE,mBACE,QAAA,gBADF,mBACE,QAAA,eETN,oBACE,MAAA,QACA,iBAAA,KACA,aAAA,QACA,QAAA,EAIE,WAAA,EAAA,EAAA,EAAA,MAAA,oBAGF,6BACE,aAAA,QACA,WAAA,EAAA,EAAA,EAAA,MAAA,oBAGF,+BACE,aAAA,QACA,WAAA,EAAA,EAAA,EAAA,MAAA,oBCxBN,UACE,QAAA,YACA,YAAA,OACA,gBAAA,OACA,eAAA,OACA,YAAA,EACA,MAAA,OACA,OAAA,OACA,UAAA,QACA,YAAA,IACA,YAAA,EACA,UAAA,KACA,WAAA,KACA,WAAA,OACA,SAAA,QACA,SAAA,SACA,WAAA,MAAA,KAAA,WAAA,CAAA,iBAAA,KAAA,WAAA,CAAA,WAAA,KAAA,YAGA,gBACE,QAAA,EAGF,cAAA,gBAEE,QAAA,EACA,OAAA,EAEA,gCAAA,kCACE,WAAA,kBAAA,KAAA,YAAA,WAAA,UAAA,KAAA,YAAA,WAAA,UAAA,KAAA,WAAA,CAAA,kBAAA,KAAA,YAGF,4CAAA,8CACE,OAAA,QAGE,oEAAA,sEACE,kBAAA,YAAA,UAAA,YAMR,mBAAA,mBAAA,oBAGE,QAAA,IACA,eAAA,KAGF,2BCuCF,wBADA,yBDnCI,cAAA,QACA,MAAA,KACA,OAAA,KACA,SAAA,OACA,QAAA,KACA,gBAAA,OACA,YAAA,OAEA,mBAAA,4BAAA,WAAA,4BAGF,yBACE,eAAA,UACA,YAAA,OAGF,gBACE,gBAAA,KAGF,kBACE,MAAA,IACA,OAAA,KACA,UAAA,KAGF,4BACE,MAAA,KACA,OAAA,KACA,WAAA,KACA,cAAA,QAGA,cAAA,MAAA,WAAA,MAGF,0BAEE,SAAA,SACA,WAAA,MACA,UAAA,MACA,QAAA,MACA,YAAA,EACA,cAAA,KACA,UAAA,IACA,YAAA,IACA,QAAA,EAIJ,aACE,MAAA,OACA,OAAA,OAEA,4BACE,UAAA,YAGF,6BACE,UAAA,aAIJ,aACE,MAAA,OACA,OAAA,OAEA,4BACE,UAAA,aAGF,6BACE,UAAA,aAKF,sCACE,QAAA,KACA,UAAA,KAGF,0BACE,OAAA,IAAA,MAAA,QC0BJ,iEDrBI,8DACE,QAAA,EE9IN,YACE,QAAA,YAEA,8BAEE,UAAA,MAGF,+BDqKF,4BCnKI,cAAA,OAGF,iCACE,QAAA,OAGF,mBACE,QAAA,OACA,UAAA,IAEA,4BACE,iBAAA,QACA,QAAA,EAIJ,+BACE,WAAA,MAGF,6BACE,QAAA,EACA,OAAA,EAGA,SAAA,OAEA,kCAEE,UAAA,OAIJ,qCACE,QAAA,OAOE,uDACE,MAAA,KACA,OAAA,KACA,UAAA,KACA,YAAA,EACA,OAAA,IAAA,KACA,QAAA,IAAA,EAUJ,0BAAA,0BAAA,qCAGE,OAAA,QACA,eAAA,KC1EN,eCgDI,uBAAA,mBACA,0BAAA,mBD7CJ,gBC8BI,wBAAA,mBACA,2BAAA,mBCvBI,0EACE,QAAA,eAQF,qEACE,QAAA,eAQN,+BACE,QAAA,ECvBJ,iBACE,QAAA,aACA,QAAA,OAAA,OACA,MAAA,KACA,MAAA,KACA,YAAA,IAEA,uBAME,QAAA,IAAA,iBACA,QAAA,IAAA,KAAA,mCAGF,0BAAA,0BAEE,QAAA,YACA,MAAA,QACA,eAAA,KCrBJ,iBACE,QAAA,aACA,QAAA,OAAA,OACA,cAAA,EACA,MAAA,KACA,MAAA,KACA,YAAA,QCZJ,qCPqQA,iCOnQE,UAAA,QACA,YAAA,IACA,aAAA,SAEA,mEPqQF,+DOpQI,IAAA,SACA,KAAA,UACA,MAAA,QACA,OAAA,QJMA,cAAA,MIFF,kEPqQF,8DOpQI,IAAA,SACA,KAAA,UACA,MAAA,QACA,OAAA,QACA,gBAAA,IAAA,IAIJ,qCPqQA,iCOnQE,UAAA,QACA,YAAA,IACA,aAAA,UAEA,mEPqQF,+DOpQI,IAAA,UACA,KAAA,WACA,MAAA,QACA,OAAA,QJjBA,cAAA,MIqBF,kEPqQF,8DOpQI,IAAA,UACA,KAAA,WACA,MAAA,QACA,OAAA,QACA,gBAAA,IAAA,IAIJ,mCPqQA,+BOnQE,aAAA,UAEA,yDPqQF,qDOpQI,UAAA,QACA,YAAA,IAEA,iEPsQJ,6DOrQM,IAAA,SACA,OAAA,QACA,KAAA,WACA,MAAA,UACA,cAAA,QAGF,gEPsQJ,4DOrQM,IAAA,qBAIA,KAAA,uBAIA,MAAA,oBACA,OAAA,oBACA,cAAA,QACA,gBAAA,IAAA,IAKF,8FPsQJ,0FOrQM,kBAAA,qBAAA,UAAA,qBAKN,mCPsQA,+BOpQE,aAAA,WAEA,yDPsQF,qDOrQI,UAAA,QACA,YAAA,IAEA,iEPuQJ,6DOtQM,IAAA,UACA,KAAA,YACA,MAAA,WACA,OAAA,QACA,cAAA,SAGF,gEPuQJ,4DOtQM,IAAA,sBAIA,KAAA,wBAIA,MAAA,oBACA,OAAA,oBACA,cAAA,SACA,gBAAA,IAAA,IAKF,8FPuQJ,0FOtQM,kBAAA,sBAAA,UAAA,sBP6QN,mGADA,kEQxXM,kDACE,wBAAA,EACA,2BAAA,EAOF,iDRsXN,gFADA,oEQpXQ,uBAAA,EACA,0BAAA,ECfN,uCACE,QAAA,KACA,YAAA,QACA,OAAA,KACA,QAAA,EAGA,iBAAA,KAIE,oDACE,QAAA,EAMF,gDAAA,iDAEE,eAAA,YAEA,sDAAA,uDACE,WAAA,MAKN,4CACE,YAAA,EACA,UAAA,QACA,WAAA,eACA,OAAA,EAEA,qDACE,eAAA,KAIJ,qDACE,MAAA,QAGF,uDACE,MAAA,QAGF,sDACE,QAAA,MAGF,qDACE,OAAA,KAIA,WAAA,uCACA,aAAA,OACA,OAAA,EACA,OAAA,EACA,QAAA,EACA,WAAA,IACA,WAAA,WACA,UAAA,QACA,YAAA,OAEE,OAAA,QAGF,qEACE,WAAA,sCAGF,qEACE,WAAA,qCAKA,iFACE,WAAA,sCACA,YAAA,OACA,eAAA,OAGF,iFACE,WAAA,qCACA,YAAA,MACA,eAAA,MAMN,2DAAA,2DAEE,iBAAA,QACA,QAAA,EAGF,2DACE,eAAA,KAEA,iEACE,OAAA,QAOJ,mDACE,QAAA,MCpHN,mBACE,YAAA,OACA,WAAA,OVkeF,wCACA,wCU9dE,iCVgeF,mCACA,mCAFA,4BU5dI,UAAA,QACA,OAAA,yBAGF,wCV+dF,8CACA,mCACA,yCU/dI,QAAA,MAAA,KACA,YAAA,IAGF,wCVgeF,mCGveI,cAAA,MOUA,+CVieJ,0CUheM,UAAA,QACA,OAAA,mBPZF,cAAA,EAAA,MAAA,MAAA,EHofJ,wCACA,wCUjeE,iCVmeF,mCACA,mCAFA,4BU/dI,UAAA,QACA,OAAA,0BAGF,wCVkeF,8CACA,mCACA,yCUleI,QAAA,OAAA,MACA,YAAA,IAGF,wCVmeF,mCGpgBI,cAAA,MOoCA,+CVoeJ,0CUneM,UAAA,QACA,OAAA,oBPtCF,cAAA,EAAA,MAAA,MAAA,EQbA,yBAAA,uBAAA,qCAAA,mCAIE,oBAAA,MAAA,wBAAA,OAON,+BACE,OAAA,2BAEA,QAAA,QAAA,OXyhBF,+CWthBA,+CAEE,OAAA,0BAEA,QAAA,QAAA,OXwhBF,+CWrhBA,+CAEE,OAAA,yBACA,QAAA,QAAA,OAGF,wCAEE,iBAAA,QACA,QAAA,IAKA,2BACE,SAAA,SACA,KAAA,EAAA,EAAA,KACA,MAAA,GACA,cAAA,EXuhBJ,wCADA,yCADA,0CWnhBI,yCXkhBJ,mDW7gBM,YAAA,KXuhBN,wCADA,yCADA,0CW5gBI,yCX2gBJ,mDW1gBM,YAAA,KAIJ,iCACE,QAAA,EAIA,4CRvCA,wBAAA,EACA,2BAAA,EQyCA,6CR5BA,uBAAA,EACA,0BAAA,EQgCF,2BACE,OAAA,2BACA,QAAA,EAAA,OACA,iBAAA,KACA,gBAAA,YACA,OAAA,IAAA,MAAA,QACA,OAAA,2BAGE,cAAA,OC1EA,WAAA,aAAA,KAAA,WAAA,CAAA,WAAA,KAAA,YAIA,uCD6DJ,2BC5DM,WAAA,MD+EJ,iCACE,MAAA,QACA,iBAAA,KACA,aAAA,QACA,QAAA,EAIE,WAAA,EAAA,EAAA,EAAA,MAAA,oBAIJ,oCAAA,qCAEE,iBAAA,QAKN,8BACE,OAAA,yBACA,QAAA,EAAA,KRvGE,cAAA,MQ2GJ,8BACE,OAAA,0BACA,QAAA,EAAA,MR7GE,cAAA,MQqHA,oCAAA,gDAEE,aAAA,QAEA,0CAAA,sDACE,aAAA,QACA,WAAA,EAAA,EAAA,EAAA,MAAA,oBAUA,mDAAA,+DACE,WAAA,EAAA,EAAA,EAAA,IAAA,IAAA,CAAA,EAAA,EAAA,EAAA,MAAA,QAEF,+CAAA,2DACE,WAAA,EAAA,EAAA,EAAA,IAAA,IAAA,CAAA,EAAA,EAAA,EAAA,MAAA,QAEF,wCAAA,oDACE,WAAA,EAAA,EAAA,EAAA,IAAA,IAAA,CAAA,EAAA,EAAA,EAAA,MAAA,QAIJ,6CAAA,yDACE,iBAAA,QACA,iBAAA,KAEA,oDAAA,gEACE,iBAAA,QACA,iBAAA,KAIJ,sDAAA,kEACE,iBAAA,oBAGF,yCAAA,qDACE,iBAAA,QACA,iBAAA,KAEA,gDAAA,4DACE,iBAAA,QACA,iBAAA,KAIJ,yCAAA,qDACE,WAAA,oBX8e6C,uCACrD,sCW5eM,mDX2eN,kDWzeQ,QAAA,MAGF,kCAAA,8CACE,iBAAA,QACA,iBAAA,KAEA,yCAAA,qDACE,iBAAA,QACA,iBAAA,KAIJ,wCAAA,oDACE,WAAA,oBAEF,wCAAA,oDACE,WAAA,oBA1EJ,sCAAA,kDAEE,aAAA,QAEA,4CAAA,wDACE,aAAA,QACA,WAAA,EAAA,EAAA,EAAA,MAAA,oBAUA,qDAAA,iEACE,WAAA,EAAA,EAAA,EAAA,IAAA,IAAA,CAAA,EAAA,EAAA,EAAA,MAAA,QAEF,iDAAA,6DACE,WAAA,EAAA,EAAA,EAAA,IAAA,IAAA,CAAA,EAAA,EAAA,EAAA,MAAA,QAEF,0CAAA,sDACE,WAAA,EAAA,EAAA,EAAA,IAAA,IAAA,CAAA,EAAA,EAAA,EAAA,MAAA,QAIJ,+CAAA,2DACE,iBAAA,QACA,iBAAA,KAEA,sDAAA,kEACE,iBAAA,QACA,iBAAA,KAIJ,wDAAA,oEACE,iBAAA,oBAGF,2CAAA,uDACE,iBAAA,QACA,iBAAA,KAEA,kDAAA,8DACE,iBAAA,QACA,iBAAA,KAIJ,2CAAA,uDACE,WAAA,oBXyiBiD,2CACzD,0CWviBM,uDXsiBN,sDWpiBQ,QAAA,MAGF,oCAAA,gDACE,iBAAA,QACA,iBAAA,KAEA,2CAAA,uDACE,iBAAA,QACA,iBAAA,KAIJ,0CAAA,sDACE,WAAA,oBAEF,0CAAA,sDACE,WAAA,oBE/MR,kCbsvBA,8BapvBE,UAAA,QACA,YAAA,IACA,aAAA,SAEA,gEbsvBF,4DarvBI,IAAA,SACA,KAAA,UACA,MAAA,QACA,OAAA,QACA,cAAA,IAGF,+DbsvBF,2DarvBI,IAAA,SACA,KAAA,UACA,MAAA,QACA,OAAA,QACA,WAAA,UAAA,GAAA,CAAA,IAAA,IAIJ,kCbsvBA,8BapvBE,UAAA,QACA,YAAA,IACA,aAAA,UAEA,gEbsvBF,4DarvBI,IAAA,UACA,KAAA,WACA,MAAA,QACA,OAAA,QACA,cAAA,IAGF,+DbsvBF,2DarvBI,IAAA,UACA,KAAA,WACA,MAAA,QACA,OAAA,QACA,WAAA,UAAA,GAAA,CAAA,IAAA,IC5CJ,UACE,WAAA,OAEA,wBACE,MAAA,KAGF,yBdqyBF,0BcnyBI,QAAA,EAAA,MAGF,0BAEE,UAAA,MAGF,yBACE,QAAA,YACA,gBAAA,OACA,QAAA,EAEA,wCACE,QAAA,YACA,WAAA,IAAA,KAAA,YAIJ,mBAAA,mBAEE,iBAAA,QACA,MAAA,QAIA,uDACE,OAAA,Qd+xBN,4EczxBM,gGACE,kBAAA,WAAA,UAAA,WASJ,uCACE,kBAAA,YAAA,UAAA,YCrDN,mBACE,WAAA,OAEA,SAAA,OAEA,iBAAA,KACA,QAAA,EAIE,8CAAA,+CAEE,eAAA,YAIJ,0BACE,UAAA,QACA,QAAA,EACA,OAAA,EACA,iBAAA,YACA,MAAA,KACA,OAAA,EACA,QAAA,EAAA,Ofy0BJ,8Bev0BI,8BAEE,QAAA,MACA,UAAA,OAEA,OAAA,MAIJ,+BACE,OAAA,KACA,MAAA,KAEA,sCACE,OAAA,EAAA,OACA,QAAA,OAAA,EAIJ,yDAEI,aAAA,KAIJ,mDACE,MAAA,KAGF,wBACE,YAAA,EACA,WAAA,eAEA,iCACE,eAAA,KAGF,yDACE,kBAAA,YAAA,UAAA,YAIJ,4BAAA,4BAEE,iBAAA,QAGF,4BACE,eAAA,KCxEF,mBACE,MAAA,QACA,iBAAA,KACA,aAAA,QACA,QAAA,EAIE,WAAA,EAAA,EAAA,EAAA,MAAA,oBAGF,4BACE,aAAA,QACA,WAAA,EAAA,EAAA,EAAA,MAAA,oBAGF,8BACE,aAAA,QACA,WAAA,EAAA,EAAA,EAAA,MAAA,oBAIJ,sBACE,iBAAA,QAIJ,kBACE,WAAA,QhB+3BF,8BgB73BE,qCAEE,WAAA,OAIJ,mBACE,MAAA,QAGF,YAGE,UAAA,IACA,YAAA,IACA,YAAA,IACA,aAAA,OAEA,qBACE,QAAA,IAIF,qCACE,MAAA,QACA,UAAA,KACA,YAAA,EACA,MAAA,KACA,YAAA,OAIJ,6BACE,YAAA,IAGF,6BACE,YAAA,ICpEF,aACE,QAAA,KACA,aAAA,KAGF,mBACE,aAAA,EACA,YAAA,KCLF,gBACE,QAAA,GCSI,0CACE,cAAA,gBACA,YAAA,OACA,YAAA,EAIA,sDACE,YAAA,ECnBV,mBACE,QAAA,MACA,QAAA,EAEA,QAAA,EAEA,mCACE,QAAA,EAGF,wBACE,QAAA,EAgBE,2BACE,iBAAA,QACA,aAAA,QAKE,oEAAA,iDACE,iBAAA,QAGF,mEAAA,gDACE,iBAAA,QAOF,sEAAA,mDACE,mBAAA,QAGF,qEAAA,kDACE,mBAAA,QAOF,uEAAA,oDACE,oBAAA,QAGF,sEAAA,mDAEE,oBAAA,QAIJ,gFAAA,6DACE,oBAAA,QAMA,qEAAA,kDACE,kBAAA,QAGF,oEAAA,iDACE,kBAAA,QAoBN,mCACE,MAAA,QACA,iBAAA,QACA,oBAAA,QAGF,iCACE,MAAA,QAhFF,6BACE,iBAAA,QACA,aAAA,QAKE,sEAAA,mDACE,iBAAA,QAGF,qEAAA,kDACE,iBAAA,QAOF,wEAAA,qDACE,mBAAA,QAGF,uEAAA,oDACE,mBAAA,QAOF,yEAAA,sDACE,oBAAA,QAGF,wEAAA,qDAEE,oBAAA,QAIJ,kFAAA,+DACE,oBAAA,QAMA,uEAAA,oDACE,kBAAA,QAGF,sEAAA,mDACE,kBAAA,QAoBN,qCACE,MAAA,QACA,iBAAA,QACA,oBAAA,QAGF,mCACE,MAAA,QAhFF,2BACE,iBAAA,QACA,aAAA,QAKE,oEAAA,iDACE,iBAAA,QAGF,mEAAA,gDACE,iBAAA,QAOF,sEAAA,mDACE,mBAAA,QAGF,qEAAA,kDACE,mBAAA,QAOF,uEAAA,oDACE,oBAAA,QAGF,sEAAA,mDAEE,oBAAA,QAIJ,gFAAA,6DACE,oBAAA,QAMA,qEAAA,kDACE,kBAAA,QAGF,oEAAA,iDACE,kBAAA,QAoBN,mCACE,MAAA,QACA,iBAAA,QACA,oBAAA,QAGF,iCACE,MAAA,QAhFF,wBACE,iBAAA,QACA,aAAA,QAKE,iEAAA,8CACE,iBAAA,QAGF,gEAAA,6CACE,iBAAA,QAOF,mEAAA,gDACE,mBAAA,QAGF,kEAAA,+CACE,mBAAA,QAOF,oEAAA,iDACE,oBAAA,QAGF,mEAAA,gDAEE,oBAAA,QAIJ,6EAAA,0DACE,oBAAA,QAMA,kEAAA,+CACE,kBAAA,QAGF,iEAAA,8CACE,kBAAA,QAoBN,gCACE,MAAA,QACA,iBAAA,QACA,oBAAA,QAGF,8BACE,MAAA,QAhFF,2BACE,iBAAA,QACA,aAAA,QAKE,oEAAA,iDACE,iBAAA,QAGF,mEAAA,gDACE,iBAAA,QAOF,sEAAA,mDACE,mBAAA,QAGF,qEAAA,kDACE,mBAAA,QAOF,uEAAA,oDACE,oBAAA,QAGF,sEAAA,mDAEE,oBAAA,QAIJ,gFAAA,6DACE,oBAAA,QAMA,qEAAA,kDACE,kBAAA,QAGF,oEAAA,iDACE,kBAAA,QAoBN,mCACE,MAAA,QACA,iBAAA,QACA,oBAAA,QAGF,iCACE,MAAA,QAhFF,0BACE,iBAAA,QACA,aAAA,QAKE,mEAAA,gDACE,iBAAA,QAGF,kEAAA,+CACE,iBAAA,QAOF,qEAAA,kDACE,mBAAA,QAGF,oEAAA,iDACE,mBAAA,QAOF,sEAAA,mDACE,oBAAA,QAGF,qEAAA,kDAEE,oBAAA,QAIJ,+EAAA,4DACE,oBAAA,QAMA,oEAAA,iDACE,kBAAA,QAGF,mEAAA,gDACE,kBAAA,QAoBN,kCACE,MAAA,QACA,iBAAA,QACA,oBAAA,QAGF,gCACE,MAAA,QAhFF,yBACE,iBAAA,QACA,aAAA,QAKE,kEAAA,+CACE,iBAAA,QAGF,iEAAA,8CACE,iBAAA,QAOF,oEAAA,iDACE,mBAAA,QAGF,mEAAA,gDACE,mBAAA,QAOF,qEAAA,kDACE,oBAAA,QAGF,oEAAA,iDAEE,oBAAA,QAIJ,8EAAA,2DACE,oBAAA,QAMA,mEAAA,gDACE,kBAAA,QAGF,kEAAA,+CACE,kBAAA,QAoBN,iCACE,MAAA,QACA,iBAAA,QACA,oBAAA,QAGF,+BACE,MAAA,QAhFF,wBACE,iBAAA,QACA,aAAA,QAKE,iEAAA,8CACE,iBAAA,QAGF,gEAAA,6CACE,iBAAA,QAOF,mEAAA,gDACE,mBAAA,QAGF,kEAAA,+CACE,mBAAA,QAOF,oEAAA,iDACE,oBAAA,QAGF,mEAAA,gDAEE,oBAAA,QAIJ,6EAAA,0DACE,oBAAA,QAMA,kEAAA,+CACE,kBAAA,QAGF,iEAAA,8CACE,kBAAA,QAoBN,gCACE,MAAA,QACA,iBAAA,QACA,oBAAA,QAGF,8BACE,MAAA,QC5GR,iBACE,SAAA,MACA,IAAA,EACA,KAAA,EACA,MAAA,EACA,OAAA,EACA,SAAA,QACA,QAAA,eAGF,oBACE,SAAA,MACA,IAAA,EACA,KAAA,EACA,QAAA,GACA,MAAA,MACA,OAAA,MACA,QAAA,GAGF,WACE,QAAA,KACA,eAAA,OACA,SAAA,MACA,IAAA,EACA,MAAA,MACA,UAAA,KACA,OAAA,MACA,WAAA,KACA,OAAA,EACA,QAAA,EACA,kBAAA,cAAA,UAAA,cAEA,iBACE,WAAA,kBAAA,IAAA,YAAA,WAAA,UAAA,IAAA,YAAA,WAAA,UAAA,IAAA,WAAA,CAAA,kBAAA,IAAA,YACA,uCAFF,iBAGI,WAAA,MAIJ,iCACE,KAAA,EACA,MAAA,KAEA,kDACE,kBAAA,kBAAA,UAAA,kBAGF,0DACE,YAAA,KAIJ,2BACE,KAAA,KACA,MAAA,EAEA,4CACE,kBAAA,iBAAA,UAAA,iBAGF,oDACE,aAAA,KAIJ,6BACE,UAAA,OACA,QAAA,MAAA,KACA,QAAA,KACA,eAAA,IACA,UAAA,EACA,YAAA,OAIE,uCACE,eAAA,YAIJ,oCACE,MAAA,KACA,UAAA,OAIJ,2BACE,UAAA,EACA,OAAA,KACA,WAAA,KAGF,6BACE,UAAA,EC7FJ,oBACE,OAAA,KAIF,YACE,SAAA,SACA,SAAA,OACA,iBAAA,gBACA,OAAA,KAEA,mBAAA,4BAAA,WAAA,4BAGA,oBACE,QAAA,IAKJ,iBACE,OAAA,KACA,cAAA,OAGE,cAAA,OAKJ,mBACE,MAAA,KACA,QAAA,QAAA,OACA,UAAA,KACA,YAAA,IAGE,cAAA,OAKJ,mBACE,MAAA,MACA,OAAA,MACA,cAAA,IAIF,kBACE,OAAA,2BACA,QAAA,QAAA,OACA,YAAA,IACA,OAAA,QAAA,MAAA,IAGE,cAAA,OAMF,6BACE,MAAA,gBAKJ,gBACE,OAAA,KACA,MAAA,KAKA,gCACE,QAAA,GACA,SAAA,SACA,IAAA,EACA,MAAA,EACA,OAAA,EACA,KAAA,EACA,QAAA,EAEA,WAAA,oEACA,kBAAA,wBAAA,MAAA,OAAA,SAAA,UAAA,wBAAA,MAAA,OAAA,SAEA,uCAZF,gCAaI,WAAA,IACA,kBAAA,KAAA,UAAA,MAKN,2CACE,KACE,kBAAA,kBAAA,UAAA,kBAEF,GACE,kBAAA,iBAAA,UAAA,kBALJ,mCACE,KACE,kBAAA,kBAAA,UAAA,kBAEF,GACE,kBAAA,iBAAA,UAAA,kBAKJ,yBACE,kBAAA,wBAAA,MAAA,YAAA,UAAA,SAAA,UAAA,wBAAA,MAAA,YAAA,UAAA,SAGA,uCAJF,yBAKI,kBAAA,KAAA,UAAA,MAIJ,2CACE,GACE,QAAA,EAEF,KACE,QAAA,IALJ,mCACE,GACE,QAAA,EAEF,KACE,QAAA,IAKJ,0BACE,kBAAA,yBAAA,MAAA,QAAA,UAAA,SAAA,UAAA,yBAAA,MAAA,QAAA,UAAA,SAGA,uCAJF,0BAKI,kBAAA,KAAA,UAAA,MAIJ,4CACE,GACE,kBAAA,SAAA,UAAA,SAEF,KACE,kBAAA,YAAA,UAAA,aALJ,oCACE,GACE,kBAAA,SAAA,UAAA,SAEF,KACE,kBAAA,YAAA,UAAA,aCtIF,6BAEE,aAAA,MAKF,0CACE,gBAAA,SACA,eAAA,EAIF,+BACE,QAAA,IAIF,2CACE,WAAA,eAIF,uBACE,aAAA,OAIA,2CACE,aAAA,cAQF,mCvBigDJ,sCADA,sCuB7/CM,iBAAA,iBAMF,0DvB4/CJ,0DuB1/CM,MAAA,QAIA,iBAAA,mDACA,kBAAA,UAQF,gCvBo/CJ,mCADA,mCuB9+CM,iBAAA,iCAMF,kEvB6+CJ,kEuB3+CM,MAAA,KAIA,iBAAA,+DACA,kBAAA,UAQJ,uBvBq+CF,kBACA,2BuBl+CI,cAAA,KAEA,8BvBo+CJ,yBACA,kCuBl+CM,cAAA,EAIJ,uBACE,WAAA,KAMA,WAAA,MAGF,aAGE,uBACE,WAAA,kBACA,WAAA,gBAIJ,2DAEE,kDAEE,SAAA,eAAA,SAAA,OACA,IAAA,EACA,QAAA,EvB69CN,sEACA,sEuBj9CU,sEvBm9CV,iEACA,iEAFA,iEAIA,0EACA,0EAFA,0EuBp9CY,SAAA,eAAA,SAAA,OACA,KAAA,EAKF,sEvBs9CV,iEACA,0EuBp9CY,QAAA,EAMF,sEvBk9CV,sEACA,iEACA,iEACA,0EACA,0EuBn9CY,QAAA,EvBw9CZ,+CACA,+CuBt8CQ,+CAEE,MAAA,QAGA,iBAAA,KvBs8CV,uDACA,uDuB/7CU,uDAEE,MAAA,KAEA,iBAAA,QAQJ,8EAIE,iBAAA,iDACA,kBAAA,UAIA,sFAIE,iBAAA,6DACA,kBAAA,UAQJ,iEACE,MAAA,QAIA,iBAAA,mDACA,kBAAA,UAIA,yEACE,MAAA,KAIA,iBAAA,+DACA,kBAAA,WvBq6CZ,oCuBt4CM,oCACE,OAAA,QACA,iBAAA,KACA,kBAAA,UACA,gBAAA,MAAA,IvBy4CR,iEuBv4CQ,iEAEE,oBAAA,MAAA,iBAAA,OACA,cAAA,qBvBy4CV,2DuBt4CQ,2DAEE,oBAAA,KAAA,iBAAA,OACA,aAAA,qBvBw4CV,yCuBp4CM,yCACE,iBAAA,4PvBu4CR,8CuBp4CM,8CACE,iBAAA,yRvBu4CR,+CuBp4CM,+CACE,iBAAA,yRASJ,oDAAA,oDvB83CJ,+CuB73CM,iBAAA,4PAGF,yDAAA,yDvB83CJ,oDuB73CM,iBAAA,yRAGF,0DAAA,0DvB83CJ,qDuB73CM,iBAAA,yRvBi4CN,oDuB13CI,oDACE,iBAAA,4PvB63CN,yDuB13CI,yDACE,iBAAA,yRvB63CN,0DuB13CI,0DACE,iBAAA,yRvB63CN,0EuBp3CQ,0EAEE,oBAAA,MAAA,gBAAA,OACA,cAAA,oBvBs3CV,oEuBn3CQ,oEAEE,oBAAA,KAAA,gBAAA,OACA,aAAA,oBAUN,6EACE,OAAA,QAMA,oHACE,oBAAA,KAAA,iBAAA,KAAA,gBAAA,KAAA,YAAA,K1B3SJ,4B0ByTI,kCAEI,QAAA,MACA,MAAA,KAGA,0CvB+1CZ,wCACA,2CACA,8CACA,8CuB71Cc,QAAA,MvBi2Cd,wCuB71CY,wCAEE,QAAA,KvBi2Cd,8DADA,2DADA,8DuB71Cc,2DAEE,QAAA,KAKJ,0CACE,aAAA,cAQI,gEACE,QAAA,iBACA,MAAA,IACA,MAAA,KACA,WAAA,MACA,cAAA,WACA,YAAA,IACA,WAAA,OACA,QAAA,EAAA,eAAA,EAAA,EACA,OAAA,EAIF,+DACE,QAAA,MACA,MAAA,KACA,QAAA,GAIF,4DACE,QAAA,aACA,MAAA,iBAEA,QAAA,EAAA,EAAA,EAAA,eACA,OAAA,EAKJ,sDAAA,mDAEE,QAAA,KAIF,wDACE,iBAAA,IAIF,wDvBy0ChB,wDuBv0CkB,iBAAA,K1BvYd,4B0ByTI,kCAEI,QAAA,MACA,MAAA,KAGA,0CvBy5CZ,wCACA,2CACA,8CACA,8CuBv5Cc,QAAA,MvB25Cd,wCuBv5CY,wCAEE,QAAA,KvB25Cd,8DADA,2DADA,8DuBv5Cc,2DAEE,QAAA,KAKJ,0CACE,aAAA,cAQI,gEACE,QAAA,iBACA,MAAA,IACA,MAAA,KACA,WAAA,MACA,cAAA,WACA,YAAA,IACA,WAAA,OACA,QAAA,EAAA,eAAA,EAAA,EACA,OAAA,EAIF,+DACE,QAAA,MACA,MAAA,KACA,QAAA,GAIF,4DACE,QAAA,aACA,MAAA,iBAEA,QAAA,EAAA,EAAA,EAAA,eACA,OAAA,EAKJ,sDAAA,mDAEE,QAAA,KAIF,wDACE,iBAAA,IAIF,wDvBm4ChB,wDuBj4CkB,iBAAA,K1BvYd,4B0ByTI,kCAEI,QAAA,MACA,MAAA,KAGA,0CvBm9CZ,wCACA,2CACA,8CACA,8CuBj9Cc,QAAA,MvBq9Cd,wCuBj9CY,wCAEE,QAAA,KvBq9Cd,8DADA,2DADA,8DuBj9Cc,2DAEE,QAAA,KAKJ,0CACE,aAAA,cAQI,gEACE,QAAA,iBACA,MAAA,IACA,MAAA,KACA,WAAA,MACA,cAAA,WACA,YAAA,IACA,WAAA,OACA,QAAA,EAAA,eAAA,EAAA,EACA,OAAA,EAIF,+DACE,QAAA,MACA,MAAA,KACA,QAAA,GAIF,4DACE,QAAA,aACA,MAAA,iBAEA,QAAA,EAAA,EAAA,EAAA,eACA,OAAA,EAKJ,sDAAA,mDAEE,QAAA,KAIF,wDACE,iBAAA,IAIF,wDvB67ChB,wDuB37CkB,iBAAA,K1BvYd,6B0ByTI,kCAEI,QAAA,MACA,MAAA,KAGA,0CvB6gDZ,wCACA,2CACA,8CACA,8CuB3gDc,QAAA,MvB+gDd,wCuB3gDY,wCAEE,QAAA,KvB+gDd,8DADA,2DADA,8DuB3gDc,2DAEE,QAAA,KAKJ,0CACE,aAAA,cAQI,gEACE,QAAA,iBACA,MAAA,IACA,MAAA,KACA,WAAA,MACA,cAAA,WACA,YAAA,IACA,WAAA,OACA,QAAA,EAAA,eAAA,EAAA,EACA,OAAA,EAIF,+DACE,QAAA,MACA,MAAA,KACA,QAAA,GAIF,4DACE,QAAA,aACA,MAAA,iBAEA,QAAA,EAAA,EAAA,EAAA,eACA,OAAA,EAKJ,sDAAA,mDAEE,QAAA,KAIF,wDACE,iBAAA,IAIF,wDvBu/ChB,wDuBr/CkB,iBAAA,KA9EV,+BAEI,QAAA,MACA,MAAA,KAGA,uCvBskDZ,qCACA,wCACA,2CACA,2CuBpkDc,QAAA,MvBwkDd,qCuBpkDY,qCAEE,QAAA,KvBwkDd,2DADA,wDADA,2DuBpkDc,wDAEE,QAAA,KAKJ,uCACE,aAAA,cAQI,6DACE,QAAA,iBACA,MAAA,IACA,MAAA,KACA,WAAA,MACA,cAAA,WACA,YAAA,IACA,WAAA,OACA,QAAA,EAAA,eAAA,EAAA,EACA,OAAA,EAIF,4DACE,QAAA,MACA,MAAA,KACA,QAAA,GAIF,yDACE,QAAA,aACA,MAAA,iBAEA,QAAA,EAAA,EAAA,EAAA,eACA,OAAA,EAKJ,mDAAA,gDAEE,QAAA,KAIF,qDACE,iBAAA,IAIF,qDvBgjDhB,qDuB9iDkB,iBAAA,IC9clB,QACE,UAAA,MxBmgEF,wBwBjgEE,mCAAA,mCAGE,iBAAA,QACA,QAAA,EAGF,mCACE,eAAA,KAMA,4CACE,eAAA,YAIJ,uBACE,cAAA,MAEA,8BACE,QAAA,OACA,UAAA,IAIJ,uBACE,WAAA,MAGF,qBACE,YAAA,MCnCJ,SACE,QAAA,MACA,SAAA,SACA,UAAA,MACA,4BAAA,OAAA,oBAAA,OACA,gBAAA,YAEA,QAAA,EtBQE,cAAA,OsBLF,gBAGE,iBAAA,sBAGF,0BACE,cAAA,OAIA,8BACE,iBAAA,KAIJ,gBAGE,QAAA,EAEA,gCACE,QAAA,EAGF,4BACE,QAAA,MAOJ,wBACE,iBAAA,sBACA,aAAA,sBACA,MAAA,QAEA,sCACE,MAAA,QACA,iBAAA,sBACA,oBAAA,sBASF,sCACE,iBAAA,QAlBJ,0BACE,iBAAA,sBACA,aAAA,sBACA,MAAA,QAEA,wCACE,MAAA,QACA,iBAAA,sBACA,oBAAA,sBASF,wCACE,iBAAA,QAlBJ,wBACE,iBAAA,sBACA,aAAA,sBACA,MAAA,QAEA,sCACE,MAAA,QACA,iBAAA,sBACA,oBAAA,sBASF,sCACE,iBAAA,QAlBJ,qBACE,iBAAA,sBACA,aAAA,sBACA,MAAA,QAEA,mCACE,MAAA,QACA,iBAAA,sBACA,oBAAA,sBASF,mCACE,iBAAA,QAlBJ,wBACE,iBAAA,sBACA,aAAA,sBACA,MAAA,QAEA,sCACE,MAAA,QACA,iBAAA,sBACA,oBAAA,sBASF,sCACE,iBAAA,QAlBJ,uBACE,iBAAA,sBACA,aAAA,sBACA,MAAA,QAEA,qCACE,MAAA,QACA,iBAAA,sBACA,oBAAA,sBASF,qCACE,iBAAA,QAlBJ,sBACE,iBAAA,sBACA,aAAA,sBACA,MAAA,QAEA,oCACE,MAAA,QACA,iBAAA,sBACA,oBAAA,sBASF,oCACE,iBAAA,KAlBJ,qBACE,iBAAA,sBACA,aAAA,sBACA,MAAA,QAEA,mCACE,MAAA,QACA,iBAAA,sBACA,oBAAA,sBASF,mCACE,iBAAA,QC7DN,WACE,QAAA,KAEA,2BACE,SAAA,SACA,QAAA,MAEA,iCACE,QAAA,eAeJ,mCAAA,iCAAA,iCAAA,kCAAA,gCAAA,8BAAA,8BAAA,+BAQE,SAAA,MACA,KAAA,MACA,MAAA,MACA,OAAA,EACA,QAAA,EACA,OAAA,EACA,SAAA,QAEA,mDAAA,iDAAA,iDAAA,kDAAA,gDAAA,8CAAA,8CAAA,+CACE,SAAA,SACA,UAAA,MACA,MAAA,KACA,KAAA,EACA,MAAA,EACA,QAAA,EACA,OAAA,EAMF,iDAAA,8CACE,MAAA,KACA,UAAA,K1BspEgD,0DACtD,wD0BrpEM,uD1BopEN,qD0BjpEQ,MAAA,KACA,UAAA,KAKN,gCAAA,8BAAA,8BAAA,+BAIE,IAAA,EAEA,gDAAA,8CAAA,8CAAA,+CACE,IAAA,MAIJ,mCAAA,iCAAA,iCAAA,kCAIE,OAAA,EAEA,mDAAA,iDAAA,iDAAA,kDACE,OAAA,MAQF,mDAAA,kDAAA,gDAAA,+CACE,YAAA,KAQF,mDAAA,iDAAA,gDAAA,8CACE,aAAA,KC9FA,iEAAA,iEAAA,yDAAA,kEAAA,kEAAA,0DAAA,8DAAA,8DAAA,sDAAA,+DAAA,+DAAA,uDAGE,WAAA,kBAAA,MAAA,WAAA,UAAA,MAAA,WAAA,UAAA,KAAA,CAAA,kBAAA,MAQA,6EAAA,yEAAA,8EAAA,0EAAA,0EAAA,sEAAA,2EAAA,uEAGE,iBAAA,MAOJ,iEAAA,kEAAA,8DAAA,+DACE,SAAA,SACA,iBAAA,MAEA,6EAAA,8EAAA,0EAAA,2EACE,iBAAA,GCnCV,mBACE,QAAA,MACA,QAAA,GAEA,QAAA,EAEA,mCACE,QAAA,EAGF,wBACE,QAAA,GAKF,kCACE,eAAA,KAGF,0BACE,OAAA,EAAA,OAKA,8EAAA,+EAAA,4EAAA,6EAAA,4EAAA,6EAAA,6EAAA,8EAAA,+EAAA,gFAAA,iFAAA,kFAAA,+EAAA,gFAAA,+EAAA,gFAAA,0CAAA,2CACE,OAAA,OAAA,EAaE,4EAAA,yDACE,iBAAA,QAKF,8EAAA,2DACE,mBAAA,QAKF,+EAAA,4DACE,oBAAA,QAKF,6EAAA,0DACE,kBAAA,QAmBJ,0CACE,MAAA,KACA,iBAAA,QAxCA,8EAAA,2DACE,iBAAA,QAKF,gFAAA,6DACE,mBAAA,QAKF,iFAAA,8DACE,oBAAA,QAKF,+EAAA,4DACE,kBAAA,QAmBJ,4CACE,MAAA,KACA,iBAAA,QAxCA,4EAAA,yDACE,iBAAA,QAKF,8EAAA,2DACE,mBAAA,QAKF,+EAAA,4DACE,oBAAA,QAKF,6EAAA,0DACE,kBAAA,QAmBJ,0CACE,MAAA,KACA,iBAAA,QAxCA,yEAAA,sDACE,iBAAA,QAKF,2EAAA,wDACE,mBAAA,QAKF,4EAAA,yDACE,oBAAA,QAKF,0EAAA,uDACE,kBAAA,QAmBJ,uCACE,MAAA,KACA,iBAAA,QAxCA,4EAAA,yDACE,iBAAA,QAKF,8EAAA,2DACE,mBAAA,QAKF,+EAAA,4DACE,oBAAA,QAKF,6EAAA,0DACE,kBAAA,QAmBJ,0CACE,MAAA,QACA,iBAAA,QAxCA,2EAAA,wDACE,iBAAA,QAKF,6EAAA,0DACE,mBAAA,QAKF,8EAAA,2DACE,oBAAA,QAKF,4EAAA,yDACE,kBAAA,QAmBJ,yCACE,MAAA,KACA,iBAAA,QAxCA,0EAAA,uDACE,iBAAA,QAKF,4EAAA,yDACE,mBAAA,QAKF,6EAAA,0DACE,oBAAA,QAKF,2EAAA,wDACE,kBAAA,QAmBJ,wCACE,MAAA,QACA,iBAAA,QAxCA,yEAAA,sDACE,iBAAA,QAKF,2EAAA,wDACE,mBAAA,QAKF,4EAAA,yDACE,oBAAA,QAKF,0EAAA,uDACE,kBAAA,QAmBJ,uCACE,MAAA,KACA,iBAAA,QC/EN,WACE,QAAA,aACA,SAAA,QAGA,eAAA,OAGF,+BAAA,8CAEE,yBAAA,OAAA,iBAAA,OACA,kBAAA,KAAA,SAAA,YAAA,UAAA,uBAAA,UAAA,KAAA,SAAA,YAAA,UAAA,uBAGA,uCANF,+BAAA,8CAOI,kBAAA,KAAA,UAAA,MAIJ,wCAAA,uDAEE,yBAAA,OAAA,iBAAA,OACA,kBAAA,KAAA,SAAA,YAAA,UAAA,gCAAA,UAAA,KAAA,SAAA,YAAA,UAAA,gCAGA,uCANF,wCAAA,uDAOI,kBAAA,KAAA,UAAA,MAIJ,8BAAA,6CAEE,yBAAA,OAAA,iBAAA,OACA,kBAAA,KAAA,SAAA,YAAA,UAAA,sBAAA,UAAA,KAAA,SAAA,YAAA,UAAA,sBAEA,uCALF,8BAAA,6CAMI,kBAAA,KAAA,UAAA,MAIJ,8BAAA,6CAEE,yBAAA,OAAA,iBAAA,OACA,kBAAA,GAAA,SAAA,OAAA,OAAA,sBAAA,UAAA,GAAA,SAAA,OAAA,OAAA,sBAEA,uCALF,8BAAA,6CAMI,kBAAA,KAAA,UAAA,MAIJ,sCAAA,qDAEE,yBAAA,OAAA,iBAAA,OACA,UAAA,GAAA,SAAA,OAAA,QAAA,sBAEA,uCALF,sCAAA,qDAMI,kBAAA,KAAA,UAAA,MAIJ,oCAAA,mDAEE,yBAAA,OAAA,iBAAA,OACA,kBAAA,GAAA,SAAA,SAAA,OAAA,sBAAA,UAAA,GAAA,SAAA,SAAA,OAAA,sBAEA,uCALF,oCAAA,mDAMI,kBAAA,KAAA,UAAA,MAIJ,4CAAA,2DAEE,yBAAA,OAAA,iBAAA,OACA,UAAA,GAAA,SAAA,SAAA,QAAA,sBAGA,uCANF,4CAAA,2DAOI,kBAAA,KAAA,UAAA,MAIJ,+BAAA,8CAEE,yBAAA,OAAA,iBAAA,OACA,kBAAA,KAAA,SAAA,YAAA,UAAA,uBAAA,UAAA,KAAA,SAAA,YAAA,UAAA,uBAGA,uCANF,+BAAA,8CAOI,kBAAA,KAAA,UAAA,MAMN,0CACE,GACE,kBAAA,iBAAA,UAAA,iBAEF,KACE,kBAAA,gBAAA,UAAA,iBALJ,kCACE,GACE,kBAAA,iBAAA,UAAA,iBAEF,KACE,kBAAA,gBAAA,UAAA,iBAIJ,mDACE,GACE,kBAAA,gBAAA,UAAA,gBAEF,KACE,kBAAA,iBAAA,UAAA,kBALJ,2CACE,GACE,kBAAA,gBAAA,UAAA,gBAEF,KACE,kBAAA,iBAAA,UAAA,kBAIJ,yCACE,GACE,QAAA,GAEF,KACE,QAAA,GALJ,iCACE,GACE,QAAA,GAEF,KACE,QAAA,GAIJ,yCACE,GACE,kBAAA,UAAA,UAAA,UAEF,KACE,kBAAA,eAAA,UAAA,gBALJ,iCACE,GACE,kBAAA,UAAA,UAAA,UAEF,KACE,kBAAA,eAAA,UAAA,gBAIJ,0CACE,GACE,QAAA,GACA,kBAAA,UAAA,UAAA,UAEF,KACE,QAAA,EACA,kBAAA,SAAA,UAAA,UAPJ,kCACE,GACE,QAAA,GACA,kBAAA,UAAA,UAAA,UAEF,KACE,QAAA,EACA,kBAAA,SAAA,UAAA,UAWA,gB7By8EJ,0BADA,4BAEA,6BAHA,qB6Bt8EM,UAAA,KACA,eAAA","sourcesContent":["/*!\n * BootstrapVue Custom CSS (https://bootstrap-vue.org)\n */\n\n// Include Bootstrap functions, variables, and mixins\n@import \"bootstrap/scss/functions\";\n@import \"bootstrap/scss/variables\";\n@import \"bootstrap/scss/mixins\";\n\n// Import BootstrapVue custom SCSS\n@import \"../src/index.scss\";\n","// --- BootstrapVue utility / helper classes ---\n\n$bv-utility-classes-defined: false !default;\n\n// Make sure to include these style definitions only once\n@if $bv-utility-classes-defined == false {\n $bv-utility-classes-defined: true;\n\n // No focus outline helper (use sparingly)\n .bv-no-focus-ring:focus {\n outline: none;\n }\n\n // Create `.bv-d--down-none` helper classes\n @each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-down($breakpoint) {\n .bv-d-#{$breakpoint}-down-none {\n display: none !important;\n }\n }\n }\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @return if($n != null and $n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width. Null for the largest (last) breakpoint.\n// The maximum value is calculated as the minimum of the next one less 0.02px\n// to work around the limitations of `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $next: breakpoint-next($name, $breakpoints);\n @return if($next, breakpoint-min($next, $breakpoints) - .02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $max: breakpoint-max($name, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($name, $breakpoints) {\n @content;\n }\n }\n}\n","// Special styling for some BootstrapVue custom form controls that do\n// not have a native HTML input type root element (or tabindex)\n// Used by BFormSpinbutton, BFormDatepicker, BFormTimepicker, BTime, BCalendar\n.form-control {\n // Adds focus styling to the form-control class (via the focus class)\n // Specifically when we are using non focusable elements, or when true focus\n // is within the `.form-control` element.\n // Mimics the `.form-control:focus` styling\n &.focus {\n color: $input-focus-color;\n background-color: $input-focus-bg;\n border-color: $input-focus-border-color;\n outline: 0;\n @if $enable-shadows {\n box-shadow: $input-box-shadow, $input-focus-box-shadow;\n } @else {\n box-shadow: $input-focus-box-shadow;\n }\n\n &.is-valid {\n border-color: $form-feedback-valid-color;\n box-shadow: 0 0 0 $input-focus-width rgba($form-feedback-valid-color, 0.25);\n }\n\n &.is-invalid {\n border-color: $form-feedback-invalid-color;\n box-shadow: 0 0 0 $input-focus-width rgba($form-feedback-invalid-color, 0.25);\n }\n }\n}\n","// BAvatar custom styles\n\n.b-avatar {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n vertical-align: middle;\n flex-shrink: 0;\n width: $b-avatar-size;\n height: $b-avatar-size;\n font-size: inherit;\n font-weight: 400;\n line-height: 1;\n max-width: 100%;\n max-height: auto;\n text-align: center;\n overflow: visible;\n position: relative;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out,\n box-shadow 0.15s ease-in-out;\n\n &:focus {\n outline: 0;\n }\n\n &.btn,\n &[href] {\n padding: 0;\n border: 0;\n\n .b-avatar-img img {\n transition: transform 0.15s ease-in-out;\n }\n\n &:not(:disabled):not(.disabled) {\n cursor: if($enable-pointer-cursor-for-buttons, pointer, null);\n\n &:hover {\n .b-avatar-img img {\n transform: scale(1.15);\n }\n }\n }\n }\n\n &.disabled,\n &:disabled,\n &[disabled] {\n opacity: $btn-disabled-opacity;\n pointer-events: none;\n }\n\n .b-avatar-custom,\n .b-avatar-text,\n .b-avatar-img {\n border-radius: inherit;\n width: 100%;\n height: 100%;\n overflow: hidden;\n display: flex;\n justify-content: center;\n align-items: center;\n // https://gist.github.com/ayamflow/b602ab436ac9f05660d9c15190f4fd7b\n mask-image: radial-gradient(white, black);\n }\n\n .b-avatar-text {\n text-transform: uppercase;\n white-space: nowrap;\n }\n\n &[href] {\n text-decoration: none;\n }\n\n > .b-icon {\n width: 60%;\n height: auto;\n max-width: 100%;\n }\n\n .b-avatar-img img {\n width: 100%;\n height: 100%;\n max-height: auto;\n border-radius: inherit;\n // This is not supported in IE11 and Edge <16\n // https://caniuse.com/object-fit\n object-fit: cover;\n }\n\n .b-avatar-badge {\n // Positioning will be handled via inline styles\n position: absolute;\n min-height: 1.5em;\n min-width: 1.5em;\n padding: 0.25em;\n line-height: 1;\n border-radius: 10em;\n font-size: 70%;\n font-weight: 700;\n z-index: 1;\n }\n}\n\n.b-avatar-sm {\n width: $b-avatar-size-sm;\n height: $b-avatar-size-sm;\n\n .b-avatar-text {\n font-size: calc(#{$b-avatar-size-sm * $b-avatar-font-size-scale});\n }\n\n .b-avatar-badge {\n font-size: calc(#{$b-avatar-size-sm * $b-avatar-badge-font-size-scale});\n }\n}\n\n.b-avatar-lg {\n width: $b-avatar-size-lg;\n height: $b-avatar-size-lg;\n\n .b-avatar-text {\n font-size: calc(#{$b-avatar-size-lg * $b-avatar-font-size-scale});\n }\n\n .b-avatar-badge {\n font-size: calc(#{$b-avatar-size-lg * $b-avatar-badge-font-size-scale});\n }\n}\n\n.b-avatar-group {\n .b-avatar-group-inner {\n display: flex;\n flex-wrap: wrap;\n }\n\n .b-avatar {\n border: $border-width solid $border-color;\n }\n\n a,\n .btn {\n &.b-avatar:hover:not(.disabled):not(disabled) {\n z-index: 1;\n }\n }\n}\n","@charset \"UTF-8\";\n/*!\n * BootstrapVue Custom CSS (https://bootstrap-vue.org)\n */\n.bv-no-focus-ring:focus {\n outline: none;\n}\n\n@media (max-width: 575.98px) {\n .bv-d-xs-down-none {\n display: none !important;\n }\n}\n@media (max-width: 767.98px) {\n .bv-d-sm-down-none {\n display: none !important;\n }\n}\n@media (max-width: 991.98px) {\n .bv-d-md-down-none {\n display: none !important;\n }\n}\n@media (max-width: 1199.98px) {\n .bv-d-lg-down-none {\n display: none !important;\n }\n}\n.bv-d-xl-down-none {\n display: none !important;\n}\n\n.form-control.focus {\n color: #495057;\n background-color: #fff;\n border-color: #80bdff;\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n.form-control.focus.is-valid {\n border-color: #28a745;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n.form-control.focus.is-invalid {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.b-avatar {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n vertical-align: middle;\n flex-shrink: 0;\n width: 2.5rem;\n height: 2.5rem;\n font-size: inherit;\n font-weight: 400;\n line-height: 1;\n max-width: 100%;\n max-height: auto;\n text-align: center;\n overflow: visible;\n position: relative;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n.b-avatar:focus {\n outline: 0;\n}\n.b-avatar.btn, .b-avatar[href] {\n padding: 0;\n border: 0;\n}\n.b-avatar.btn .b-avatar-img img, .b-avatar[href] .b-avatar-img img {\n transition: -webkit-transform 0.15s ease-in-out;\n transition: transform 0.15s ease-in-out;\n transition: transform 0.15s ease-in-out, -webkit-transform 0.15s ease-in-out;\n}\n.b-avatar.btn:not(:disabled):not(.disabled), .b-avatar[href]:not(:disabled):not(.disabled) {\n cursor: pointer;\n}\n.b-avatar.btn:not(:disabled):not(.disabled):hover .b-avatar-img img, .b-avatar[href]:not(:disabled):not(.disabled):hover .b-avatar-img img {\n -webkit-transform: scale(1.15);\n transform: scale(1.15);\n}\n.b-avatar.disabled, .b-avatar:disabled, .b-avatar[disabled] {\n opacity: 0.65;\n pointer-events: none;\n}\n.b-avatar .b-avatar-custom,\n.b-avatar .b-avatar-text,\n.b-avatar .b-avatar-img {\n border-radius: inherit;\n width: 100%;\n height: 100%;\n overflow: hidden;\n display: flex;\n justify-content: center;\n align-items: center;\n -webkit-mask-image: radial-gradient(white, black);\n mask-image: radial-gradient(white, black);\n}\n.b-avatar .b-avatar-text {\n text-transform: uppercase;\n white-space: nowrap;\n}\n.b-avatar[href] {\n text-decoration: none;\n}\n.b-avatar > .b-icon {\n width: 60%;\n height: auto;\n max-width: 100%;\n}\n.b-avatar .b-avatar-img img {\n width: 100%;\n height: 100%;\n max-height: auto;\n border-radius: inherit;\n -o-object-fit: cover;\n object-fit: cover;\n}\n.b-avatar .b-avatar-badge {\n position: absolute;\n min-height: 1.5em;\n min-width: 1.5em;\n padding: 0.25em;\n line-height: 1;\n border-radius: 10em;\n font-size: 70%;\n font-weight: 700;\n z-index: 1;\n}\n\n.b-avatar-sm {\n width: 1.5rem;\n height: 1.5rem;\n}\n.b-avatar-sm .b-avatar-text {\n font-size: calc(0.6rem);\n}\n.b-avatar-sm .b-avatar-badge {\n font-size: calc(0.42rem);\n}\n\n.b-avatar-lg {\n width: 3.5rem;\n height: 3.5rem;\n}\n.b-avatar-lg .b-avatar-text {\n font-size: calc(1.4rem);\n}\n.b-avatar-lg .b-avatar-badge {\n font-size: calc(0.98rem);\n}\n\n.b-avatar-group .b-avatar-group-inner {\n display: flex;\n flex-wrap: wrap;\n}\n.b-avatar-group .b-avatar {\n border: 1px solid #dee2e6;\n}\n.b-avatar-group a.b-avatar:hover:not(.disabled):not(disabled),\n.b-avatar-group .btn.b-avatar:hover:not(.disabled):not(disabled) {\n z-index: 1;\n}\n\n.b-calendar {\n display: inline-flex;\n}\n.b-calendar .b-calendar-inner {\n min-width: 250px;\n}\n.b-calendar .b-calendar-header,\n.b-calendar .b-calendar-nav {\n margin-bottom: 0.25rem;\n}\n.b-calendar .b-calendar-nav .btn {\n padding: 0.25rem;\n}\n.b-calendar output {\n padding: 0.25rem;\n font-size: 80%;\n}\n.b-calendar output.readonly {\n background-color: #e9ecef;\n opacity: 1;\n}\n.b-calendar .b-calendar-footer {\n margin-top: 0.5rem;\n}\n.b-calendar .b-calendar-grid {\n padding: 0;\n margin: 0;\n overflow: hidden;\n}\n.b-calendar .b-calendar-grid .row {\n flex-wrap: nowrap;\n}\n.b-calendar .b-calendar-grid-caption {\n padding: 0.25rem;\n}\n.b-calendar .b-calendar-grid-body .col[data-date] .btn {\n width: 32px;\n height: 32px;\n font-size: 14px;\n line-height: 1;\n margin: 3px auto;\n padding: 9px 0;\n}\n.b-calendar .btn:disabled, .b-calendar .btn.disabled, .b-calendar .btn[aria-disabled=true] {\n cursor: default;\n pointer-events: none;\n}\n\n.card-img-left {\n border-top-left-radius: calc(0.25rem - 1px);\n border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.card-img-right {\n border-top-right-radius: calc(0.25rem - 1px);\n border-bottom-right-radius: calc(0.25rem - 1px);\n}\n\n.dropdown:not(.dropleft) .dropdown-toggle.dropdown-toggle-no-caret::after {\n display: none !important;\n}\n.dropdown.dropleft .dropdown-toggle.dropdown-toggle-no-caret::before {\n display: none !important;\n}\n.dropdown .dropdown-menu:focus {\n outline: none;\n}\n\n.b-dropdown-form {\n display: inline-block;\n padding: 0.25rem 1.5rem;\n width: 100%;\n clear: both;\n font-weight: 400;\n}\n.b-dropdown-form:focus {\n outline: 1px dotted !important;\n outline: 5px auto -webkit-focus-ring-color !important;\n}\n.b-dropdown-form.disabled, .b-dropdown-form:disabled {\n outline: 0 !important;\n color: #adb5bd;\n pointer-events: none;\n}\n\n.b-dropdown-text {\n display: inline-block;\n padding: 0.25rem 1.5rem;\n margin-bottom: 0;\n width: 100%;\n clear: both;\n font-weight: lighter;\n}\n\n.custom-checkbox.b-custom-control-lg,\n.input-group-lg .custom-checkbox {\n font-size: 1.25rem;\n line-height: 1.5;\n padding-left: 1.875rem;\n}\n.custom-checkbox.b-custom-control-lg .custom-control-label::before,\n.input-group-lg .custom-checkbox .custom-control-label::before {\n top: 0.3125rem;\n left: -1.875rem;\n width: 1.25rem;\n height: 1.25rem;\n border-radius: 0.3rem;\n}\n.custom-checkbox.b-custom-control-lg .custom-control-label::after,\n.input-group-lg .custom-checkbox .custom-control-label::after {\n top: 0.3125rem;\n left: -1.875rem;\n width: 1.25rem;\n height: 1.25rem;\n background-size: 50% 50%;\n}\n\n.custom-checkbox.b-custom-control-sm,\n.input-group-sm .custom-checkbox {\n font-size: 0.875rem;\n line-height: 1.5;\n padding-left: 1.3125rem;\n}\n.custom-checkbox.b-custom-control-sm .custom-control-label::before,\n.input-group-sm .custom-checkbox .custom-control-label::before {\n top: 0.21875rem;\n left: -1.3125rem;\n width: 0.875rem;\n height: 0.875rem;\n border-radius: 0.2rem;\n}\n.custom-checkbox.b-custom-control-sm .custom-control-label::after,\n.input-group-sm .custom-checkbox .custom-control-label::after {\n top: 0.21875rem;\n left: -1.3125rem;\n width: 0.875rem;\n height: 0.875rem;\n background-size: 50% 50%;\n}\n\n.custom-switch.b-custom-control-lg,\n.input-group-lg .custom-switch {\n padding-left: 2.8125rem;\n}\n.custom-switch.b-custom-control-lg .custom-control-label,\n.input-group-lg .custom-switch .custom-control-label {\n font-size: 1.25rem;\n line-height: 1.5;\n}\n.custom-switch.b-custom-control-lg .custom-control-label::before,\n.input-group-lg .custom-switch .custom-control-label::before {\n top: 0.3125rem;\n height: 1.25rem;\n left: -2.8125rem;\n width: 2.1875rem;\n border-radius: 0.625rem;\n}\n.custom-switch.b-custom-control-lg .custom-control-label::after,\n.input-group-lg .custom-switch .custom-control-label::after {\n top: calc(\n 0.3125rem + 2px\n );\n left: calc(\n -2.8125rem + 2px\n );\n width: calc(\n 1.25rem - 4px\n);\n height: calc(\n 1.25rem - 4px\n);\n border-radius: 0.625rem;\n background-size: 50% 50%;\n}\n.custom-switch.b-custom-control-lg .custom-control-input:checked ~ .custom-control-label::after,\n.input-group-lg .custom-switch .custom-control-input:checked ~ .custom-control-label::after {\n -webkit-transform: translateX(0.9375rem);\n transform: translateX(0.9375rem);\n}\n\n.custom-switch.b-custom-control-sm,\n.input-group-sm .custom-switch {\n padding-left: 1.96875rem;\n}\n.custom-switch.b-custom-control-sm .custom-control-label,\n.input-group-sm .custom-switch .custom-control-label {\n font-size: 0.875rem;\n line-height: 1.5;\n}\n.custom-switch.b-custom-control-sm .custom-control-label::before,\n.input-group-sm .custom-switch .custom-control-label::before {\n top: 0.21875rem;\n left: -1.96875rem;\n width: 1.53125rem;\n height: 0.875rem;\n border-radius: 0.4375rem;\n}\n.custom-switch.b-custom-control-sm .custom-control-label::after,\n.input-group-sm .custom-switch .custom-control-label::after {\n top: calc(\n 0.21875rem + 2px\n );\n left: calc(\n -1.96875rem + 2px\n );\n width: calc(\n 0.875rem - 4px\n);\n height: calc(\n 0.875rem - 4px\n);\n border-radius: 0.4375rem;\n background-size: 50% 50%;\n}\n.custom-switch.b-custom-control-sm .custom-control-input:checked ~ .custom-control-label::after,\n.input-group-sm .custom-switch .custom-control-input:checked ~ .custom-control-label::after {\n -webkit-transform: translateX(0.65625rem);\n transform: translateX(0.65625rem);\n}\n\n.input-group > .input-group-prepend > .btn-group > .btn,\n.input-group > .input-group-append:not(:last-child) > .btn-group > .btn,\n.input-group > .input-group-append:last-child > .btn-group:not(:last-child):not(.dropdown-toggle) > .btn {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.input-group > .input-group-append > .btn-group > .btn,\n.input-group > .input-group-prepend:not(:first-child) > .btn-group > .btn,\n.input-group > .input-group-prepend:first-child > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.b-form-btn-label-control.form-control {\n display: flex;\n align-items: stretch;\n height: auto;\n padding: 0;\n background-image: none;\n}\n.input-group .b-form-btn-label-control.form-control {\n padding: 0;\n}\n\n[dir=rtl] .b-form-btn-label-control.form-control, .b-form-btn-label-control.form-control[dir=rtl] {\n flex-direction: row-reverse;\n}\n[dir=rtl] .b-form-btn-label-control.form-control > label, .b-form-btn-label-control.form-control[dir=rtl] > label {\n text-align: right;\n}\n\n.b-form-btn-label-control.form-control > .btn {\n line-height: 1;\n font-size: inherit;\n box-shadow: none !important;\n border: 0;\n}\n.b-form-btn-label-control.form-control > .btn:disabled {\n pointer-events: none;\n}\n.b-form-btn-label-control.form-control.is-valid > .btn {\n color: #28a745;\n}\n.b-form-btn-label-control.form-control.is-invalid > .btn {\n color: #dc3545;\n}\n.b-form-btn-label-control.form-control > .dropdown-menu {\n padding: 0.5rem;\n}\n.b-form-btn-label-control.form-control > .form-control {\n height: auto;\n min-height: calc(calc(1.5em + 0.75rem + 2px) - 2px);\n padding-left: 0.25rem;\n margin: 0;\n border: 0;\n outline: 0;\n background: transparent;\n word-break: break-word;\n font-size: inherit;\n white-space: normal;\n cursor: pointer;\n}\n.b-form-btn-label-control.form-control > .form-control.form-control-sm {\n min-height: calc(calc(1.5em + 0.5rem + 2px) - 2px);\n}\n.b-form-btn-label-control.form-control > .form-control.form-control-lg {\n min-height: calc(calc(1.5em + 1rem + 2px) - 2px);\n}\n.input-group.input-group-sm .b-form-btn-label-control.form-control > .form-control {\n min-height: calc(calc(1.5em + 0.5rem + 2px) - 2px);\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n}\n\n.input-group.input-group-lg .b-form-btn-label-control.form-control > .form-control {\n min-height: calc(calc(1.5em + 1rem + 2px) - 2px);\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n}\n\n.b-form-btn-label-control.form-control[aria-disabled=true], .b-form-btn-label-control.form-control[aria-readonly=true] {\n background-color: #e9ecef;\n opacity: 1;\n}\n.b-form-btn-label-control.form-control[aria-disabled=true] {\n pointer-events: none;\n}\n.b-form-btn-label-control.form-control[aria-disabled=true] > label {\n cursor: default;\n}\n\n.b-form-btn-label-control.btn-group > .dropdown-menu {\n padding: 0.5rem;\n}\n\n.custom-file-label {\n white-space: nowrap;\n overflow-x: hidden;\n}\n\n.b-custom-control-lg.custom-file,\n.b-custom-control-lg .custom-file-input,\n.b-custom-control-lg .custom-file-label,\n.input-group-lg.custom-file,\n.input-group-lg .custom-file-input,\n.input-group-lg .custom-file-label {\n font-size: 1.25rem;\n height: calc(1.5em + 1rem + 2px);\n}\n.b-custom-control-lg .custom-file-label,\n.b-custom-control-lg .custom-file-label:after,\n.input-group-lg .custom-file-label,\n.input-group-lg .custom-file-label:after {\n padding: 0.5rem 1rem;\n line-height: 1.5;\n}\n.b-custom-control-lg .custom-file-label,\n.input-group-lg .custom-file-label {\n border-radius: 0.3rem;\n}\n.b-custom-control-lg .custom-file-label::after,\n.input-group-lg .custom-file-label::after {\n font-size: inherit;\n height: calc(\n 1.5em + 1rem\n);\n border-radius: 0 0.3rem 0.3rem 0;\n}\n\n.b-custom-control-sm.custom-file,\n.b-custom-control-sm .custom-file-input,\n.b-custom-control-sm .custom-file-label,\n.input-group-sm.custom-file,\n.input-group-sm .custom-file-input,\n.input-group-sm .custom-file-label {\n font-size: 0.875rem;\n height: calc(1.5em + 0.5rem + 2px);\n}\n.b-custom-control-sm .custom-file-label,\n.b-custom-control-sm .custom-file-label:after,\n.input-group-sm .custom-file-label,\n.input-group-sm .custom-file-label:after {\n padding: 0.25rem 0.5rem;\n line-height: 1.5;\n}\n.b-custom-control-sm .custom-file-label,\n.input-group-sm .custom-file-label {\n border-radius: 0.2rem;\n}\n.b-custom-control-sm .custom-file-label::after,\n.input-group-sm .custom-file-label::after {\n font-size: inherit;\n height: calc(\n 1.5em + 0.5rem\n);\n border-radius: 0 0.2rem 0.2rem 0;\n}\n\n.was-validated .form-control:invalid, .was-validated .form-control:valid, .form-control.is-invalid, .form-control.is-valid {\n background-position: right calc(0.375em + 0.1875rem) center;\n}\n\ninput[type=color].form-control {\n height: calc(1.5em + 0.75rem + 2px);\n padding: 0.125rem 0.25rem;\n}\n\ninput[type=color].form-control.form-control-sm,\n.input-group-sm input[type=color].form-control {\n height: calc(1.5em + 0.5rem + 2px);\n padding: 0.125rem 0.25rem;\n}\n\ninput[type=color].form-control.form-control-lg,\n.input-group-lg input[type=color].form-control {\n height: calc(1.5em + 1rem + 2px);\n padding: 0.125rem 0.25rem;\n}\n\ninput[type=color].form-control:disabled {\n background-color: #adb5bd;\n opacity: 0.65;\n}\n\n.input-group > .custom-range {\n position: relative;\n flex: 1 1 auto;\n width: 1%;\n margin-bottom: 0;\n}\n.input-group > .custom-range + .form-control,\n.input-group > .custom-range + .form-control-plaintext,\n.input-group > .custom-range + .custom-select,\n.input-group > .custom-range + .custom-range,\n.input-group > .custom-range + .custom-file {\n margin-left: -1px;\n}\n.input-group > .form-control + .custom-range,\n.input-group > .form-control-plaintext + .custom-range,\n.input-group > .custom-select + .custom-range,\n.input-group > .custom-range + .custom-range,\n.input-group > .custom-file + .custom-range {\n margin-left: -1px;\n}\n.input-group > .custom-range:focus {\n z-index: 3;\n}\n.input-group > .custom-range:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.input-group > .custom-range:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.input-group > .custom-range {\n height: calc(1.5em + 0.75rem + 2px);\n padding: 0 0.75rem;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #ced4da;\n height: calc(1.5em + 0.75rem + 2px);\n border-radius: 0.25rem;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .input-group > .custom-range {\n transition: none;\n }\n}\n.input-group > .custom-range:focus {\n color: #495057;\n background-color: #fff;\n border-color: #80bdff;\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n.input-group > .custom-range:disabled, .input-group > .custom-range[readonly] {\n background-color: #e9ecef;\n}\n\n.input-group-lg > .custom-range {\n height: calc(1.5em + 1rem + 2px);\n padding: 0 1rem;\n border-radius: 0.3rem;\n}\n\n.input-group-sm > .custom-range {\n height: calc(1.5em + 0.5rem + 2px);\n padding: 0 0.5rem;\n border-radius: 0.2rem;\n}\n\n.was-validated .input-group .custom-range:valid, .input-group .custom-range.is-valid {\n border-color: #28a745;\n}\n.was-validated .input-group .custom-range:valid:focus, .input-group .custom-range.is-valid:focus {\n border-color: #28a745;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated .custom-range:valid:focus::-webkit-slider-thumb, .custom-range.is-valid:focus::-webkit-slider-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem #9be7ac;\n}\n.was-validated .custom-range:valid:focus::-moz-range-thumb, .custom-range.is-valid:focus::-moz-range-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem #9be7ac;\n}\n.was-validated .custom-range:valid:focus::-ms-thumb, .custom-range.is-valid:focus::-ms-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem #9be7ac;\n}\n.was-validated .custom-range:valid::-webkit-slider-thumb, .custom-range.is-valid::-webkit-slider-thumb {\n background-color: #28a745;\n background-image: none;\n}\n.was-validated .custom-range:valid::-webkit-slider-thumb:active, .custom-range.is-valid::-webkit-slider-thumb:active {\n background-color: #9be7ac;\n background-image: none;\n}\n.was-validated .custom-range:valid::-webkit-slider-runnable-track, .custom-range.is-valid::-webkit-slider-runnable-track {\n background-color: rgba(40, 167, 69, 0.35);\n}\n.was-validated .custom-range:valid::-moz-range-thumb, .custom-range.is-valid::-moz-range-thumb {\n background-color: #28a745;\n background-image: none;\n}\n.was-validated .custom-range:valid::-moz-range-thumb:active, .custom-range.is-valid::-moz-range-thumb:active {\n background-color: #9be7ac;\n background-image: none;\n}\n.was-validated .custom-range:valid::-moz-range-track, .custom-range.is-valid::-moz-range-track {\n background: rgba(40, 167, 69, 0.35);\n}\n.was-validated .custom-range:valid ~ .valid-feedback,\n.was-validated .custom-range:valid ~ .valid-tooltip, .custom-range.is-valid ~ .valid-feedback,\n.custom-range.is-valid ~ .valid-tooltip {\n display: block;\n}\n.was-validated .custom-range:valid::-ms-thumb, .custom-range.is-valid::-ms-thumb {\n background-color: #28a745;\n background-image: none;\n}\n.was-validated .custom-range:valid::-ms-thumb:active, .custom-range.is-valid::-ms-thumb:active {\n background-color: #9be7ac;\n background-image: none;\n}\n.was-validated .custom-range:valid::-ms-track-lower, .custom-range.is-valid::-ms-track-lower {\n background: rgba(40, 167, 69, 0.35);\n}\n.was-validated .custom-range:valid::-ms-track-upper, .custom-range.is-valid::-ms-track-upper {\n background: rgba(40, 167, 69, 0.35);\n}\n\n.was-validated .input-group .custom-range:invalid, .input-group .custom-range.is-invalid {\n border-color: #dc3545;\n}\n.was-validated .input-group .custom-range:invalid:focus, .input-group .custom-range.is-invalid:focus {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .custom-range:invalid:focus::-webkit-slider-thumb, .custom-range.is-invalid:focus::-webkit-slider-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem #f6cdd1;\n}\n.was-validated .custom-range:invalid:focus::-moz-range-thumb, .custom-range.is-invalid:focus::-moz-range-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem #f6cdd1;\n}\n.was-validated .custom-range:invalid:focus::-ms-thumb, .custom-range.is-invalid:focus::-ms-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem #f6cdd1;\n}\n.was-validated .custom-range:invalid::-webkit-slider-thumb, .custom-range.is-invalid::-webkit-slider-thumb {\n background-color: #dc3545;\n background-image: none;\n}\n.was-validated .custom-range:invalid::-webkit-slider-thumb:active, .custom-range.is-invalid::-webkit-slider-thumb:active {\n background-color: #f6cdd1;\n background-image: none;\n}\n.was-validated .custom-range:invalid::-webkit-slider-runnable-track, .custom-range.is-invalid::-webkit-slider-runnable-track {\n background-color: rgba(220, 53, 69, 0.35);\n}\n.was-validated .custom-range:invalid::-moz-range-thumb, .custom-range.is-invalid::-moz-range-thumb {\n background-color: #dc3545;\n background-image: none;\n}\n.was-validated .custom-range:invalid::-moz-range-thumb:active, .custom-range.is-invalid::-moz-range-thumb:active {\n background-color: #f6cdd1;\n background-image: none;\n}\n.was-validated .custom-range:invalid::-moz-range-track, .custom-range.is-invalid::-moz-range-track {\n background: rgba(220, 53, 69, 0.35);\n}\n.was-validated .custom-range:invalid ~ .invalid-feedback,\n.was-validated .custom-range:invalid ~ .invalid-tooltip, .custom-range.is-invalid ~ .invalid-feedback,\n.custom-range.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n.was-validated .custom-range:invalid::-ms-thumb, .custom-range.is-invalid::-ms-thumb {\n background-color: #dc3545;\n background-image: none;\n}\n.was-validated .custom-range:invalid::-ms-thumb:active, .custom-range.is-invalid::-ms-thumb:active {\n background-color: #f6cdd1;\n background-image: none;\n}\n.was-validated .custom-range:invalid::-ms-track-lower, .custom-range.is-invalid::-ms-track-lower {\n background: rgba(220, 53, 69, 0.35);\n}\n.was-validated .custom-range:invalid::-ms-track-upper, .custom-range.is-invalid::-ms-track-upper {\n background: rgba(220, 53, 69, 0.35);\n}\n\n.custom-radio.b-custom-control-lg,\n.input-group-lg .custom-radio {\n font-size: 1.25rem;\n line-height: 1.5;\n padding-left: 1.875rem;\n}\n.custom-radio.b-custom-control-lg .custom-control-label::before,\n.input-group-lg .custom-radio .custom-control-label::before {\n top: 0.3125rem;\n left: -1.875rem;\n width: 1.25rem;\n height: 1.25rem;\n border-radius: 50%;\n}\n.custom-radio.b-custom-control-lg .custom-control-label::after,\n.input-group-lg .custom-radio .custom-control-label::after {\n top: 0.3125rem;\n left: -1.875rem;\n width: 1.25rem;\n height: 1.25rem;\n background: no-repeat 50%/50% 50%;\n}\n\n.custom-radio.b-custom-control-sm,\n.input-group-sm .custom-radio {\n font-size: 0.875rem;\n line-height: 1.5;\n padding-left: 1.3125rem;\n}\n.custom-radio.b-custom-control-sm .custom-control-label::before,\n.input-group-sm .custom-radio .custom-control-label::before {\n top: 0.21875rem;\n left: -1.3125rem;\n width: 0.875rem;\n height: 0.875rem;\n border-radius: 50%;\n}\n.custom-radio.b-custom-control-sm .custom-control-label::after,\n.input-group-sm .custom-radio .custom-control-label::after {\n top: 0.21875rem;\n left: -1.3125rem;\n width: 0.875rem;\n height: 0.875rem;\n background: no-repeat 50%/50% 50%;\n}\n\n.b-rating {\n text-align: center;\n}\n.b-rating.d-inline-flex {\n width: auto;\n}\n.b-rating .b-rating-star,\n.b-rating .b-rating-value {\n padding: 0 0.25em;\n}\n.b-rating .b-rating-value {\n min-width: 2.5em;\n}\n.b-rating .b-rating-star {\n display: inline-flex;\n justify-content: center;\n outline: 0;\n}\n.b-rating .b-rating-star .b-rating-icon {\n display: inline-flex;\n transition: all 0.15s ease-in-out;\n}\n.b-rating.disabled, .b-rating:disabled {\n background-color: #e9ecef;\n color: #6c757d;\n}\n.b-rating:not(.disabled):not(.readonly) .b-rating-star {\n cursor: pointer;\n}\n.b-rating:not(.disabled):not(.readonly):focus:not(:hover) .b-rating-star.focused .b-rating-icon,\n.b-rating:not(.disabled):not(.readonly) .b-rating-star:hover .b-rating-icon {\n -webkit-transform: scale(1.5);\n transform: scale(1.5);\n}\n.b-rating[dir=rtl] .b-rating-star-half {\n -webkit-transform: scale(-1, 1);\n transform: scale(-1, 1);\n}\n\n.b-form-spinbutton {\n text-align: center;\n overflow: hidden;\n background-image: none;\n padding: 0;\n}\n[dir=rtl] .b-form-spinbutton:not(.flex-column), .b-form-spinbutton[dir=rtl]:not(.flex-column) {\n flex-direction: row-reverse;\n}\n\n.b-form-spinbutton output {\n font-size: inherit;\n outline: 0;\n border: 0;\n background-color: transparent;\n width: auto;\n margin: 0;\n padding: 0 0.25rem;\n}\n.b-form-spinbutton output > div,\n.b-form-spinbutton output > bdi {\n display: block;\n min-width: 2.25em;\n height: 1.5em;\n}\n.b-form-spinbutton.flex-column {\n height: auto;\n width: auto;\n}\n.b-form-spinbutton.flex-column output {\n margin: 0 0.25rem;\n padding: 0.25rem 0;\n}\n.b-form-spinbutton:not(.d-inline-flex):not(.flex-column) {\n output-width: 100%;\n}\n.b-form-spinbutton.d-inline-flex:not(.flex-column) {\n width: auto;\n}\n.b-form-spinbutton .btn {\n line-height: 1;\n box-shadow: none !important;\n}\n.b-form-spinbutton .btn:disabled {\n pointer-events: none;\n}\n.b-form-spinbutton .btn:hover:not(:disabled) > div > .b-icon {\n -webkit-transform: scale(1.25);\n transform: scale(1.25);\n}\n.b-form-spinbutton.disabled, .b-form-spinbutton.readonly {\n background-color: #e9ecef;\n}\n.b-form-spinbutton.disabled {\n pointer-events: none;\n}\n\n.b-form-tags.focus {\n color: #495057;\n background-color: #fff;\n border-color: #80bdff;\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n.b-form-tags.focus.is-valid {\n border-color: #28a745;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n.b-form-tags.focus.is-invalid {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n.b-form-tags.disabled {\n background-color: #e9ecef;\n}\n\n.b-form-tags-list {\n margin-top: -0.25rem;\n}\n.b-form-tags-list .b-form-tags-field,\n.b-form-tags-list .b-form-tag {\n margin-top: 0.25rem;\n}\n\n.b-form-tags-input {\n color: #495057;\n}\n\n.b-form-tag {\n font-size: 75%;\n font-weight: normal;\n line-height: 1.5;\n margin-right: 0.25rem;\n}\n.b-form-tag.disabled {\n opacity: 0.75;\n}\n.b-form-tag > button.b-form-tag-remove {\n color: inherit;\n font-size: 125%;\n line-height: 1;\n float: none;\n margin-left: 0.25rem;\n}\n\n.form-control-sm .b-form-tag {\n line-height: 1.5;\n}\n\n.form-control-lg .b-form-tag {\n line-height: 1.5;\n}\n\n.media-aside {\n display: flex;\n margin-right: 1rem;\n}\n\n.media-aside-right {\n margin-right: 0;\n margin-left: 1rem;\n}\n\n.modal-backdrop {\n opacity: 0.5;\n}\n\n.b-pagination-pills .page-item .page-link {\n border-radius: 50rem !important;\n margin-left: 0.25rem;\n line-height: 1;\n}\n.b-pagination-pills .page-item:first-child .page-link {\n margin-left: 0;\n}\n\n.popover.b-popover {\n display: block;\n opacity: 1;\n outline: 0;\n}\n.popover.b-popover.fade:not(.show) {\n opacity: 0;\n}\n.popover.b-popover.show {\n opacity: 1;\n}\n\n.b-popover-primary.popover {\n background-color: #cce5ff;\n border-color: #b8daff;\n}\n.b-popover-primary.bs-popover-top > .arrow::before, .b-popover-primary.bs-popover-auto[x-placement^=top] > .arrow::before {\n border-top-color: #b8daff;\n}\n.b-popover-primary.bs-popover-top > .arrow::after, .b-popover-primary.bs-popover-auto[x-placement^=top] > .arrow::after {\n border-top-color: #cce5ff;\n}\n.b-popover-primary.bs-popover-right > .arrow::before, .b-popover-primary.bs-popover-auto[x-placement^=right] > .arrow::before {\n border-right-color: #b8daff;\n}\n.b-popover-primary.bs-popover-right > .arrow::after, .b-popover-primary.bs-popover-auto[x-placement^=right] > .arrow::after {\n border-right-color: #cce5ff;\n}\n.b-popover-primary.bs-popover-bottom > .arrow::before, .b-popover-primary.bs-popover-auto[x-placement^=bottom] > .arrow::before {\n border-bottom-color: #b8daff;\n}\n.b-popover-primary.bs-popover-bottom > .arrow::after, .b-popover-primary.bs-popover-auto[x-placement^=bottom] > .arrow::after {\n border-bottom-color: #bdddff;\n}\n.b-popover-primary.bs-popover-bottom .popover-header::before, .b-popover-primary.bs-popover-auto[x-placement^=bottom] .popover-header::before {\n border-bottom-color: #bdddff;\n}\n.b-popover-primary.bs-popover-left > .arrow::before, .b-popover-primary.bs-popover-auto[x-placement^=left] > .arrow::before {\n border-left-color: #b8daff;\n}\n.b-popover-primary.bs-popover-left > .arrow::after, .b-popover-primary.bs-popover-auto[x-placement^=left] > .arrow::after {\n border-left-color: #cce5ff;\n}\n.b-popover-primary .popover-header {\n color: #212529;\n background-color: #bdddff;\n border-bottom-color: #a3d0ff;\n}\n.b-popover-primary .popover-body {\n color: #004085;\n}\n\n.b-popover-secondary.popover {\n background-color: #e2e3e5;\n border-color: #d6d8db;\n}\n.b-popover-secondary.bs-popover-top > .arrow::before, .b-popover-secondary.bs-popover-auto[x-placement^=top] > .arrow::before {\n border-top-color: #d6d8db;\n}\n.b-popover-secondary.bs-popover-top > .arrow::after, .b-popover-secondary.bs-popover-auto[x-placement^=top] > .arrow::after {\n border-top-color: #e2e3e5;\n}\n.b-popover-secondary.bs-popover-right > .arrow::before, .b-popover-secondary.bs-popover-auto[x-placement^=right] > .arrow::before {\n border-right-color: #d6d8db;\n}\n.b-popover-secondary.bs-popover-right > .arrow::after, .b-popover-secondary.bs-popover-auto[x-placement^=right] > .arrow::after {\n border-right-color: #e2e3e5;\n}\n.b-popover-secondary.bs-popover-bottom > .arrow::before, .b-popover-secondary.bs-popover-auto[x-placement^=bottom] > .arrow::before {\n border-bottom-color: #d6d8db;\n}\n.b-popover-secondary.bs-popover-bottom > .arrow::after, .b-popover-secondary.bs-popover-auto[x-placement^=bottom] > .arrow::after {\n border-bottom-color: #dadbde;\n}\n.b-popover-secondary.bs-popover-bottom .popover-header::before, .b-popover-secondary.bs-popover-auto[x-placement^=bottom] .popover-header::before {\n border-bottom-color: #dadbde;\n}\n.b-popover-secondary.bs-popover-left > .arrow::before, .b-popover-secondary.bs-popover-auto[x-placement^=left] > .arrow::before {\n border-left-color: #d6d8db;\n}\n.b-popover-secondary.bs-popover-left > .arrow::after, .b-popover-secondary.bs-popover-auto[x-placement^=left] > .arrow::after {\n border-left-color: #e2e3e5;\n}\n.b-popover-secondary .popover-header {\n color: #212529;\n background-color: #dadbde;\n border-bottom-color: #ccced2;\n}\n.b-popover-secondary .popover-body {\n color: #383d41;\n}\n\n.b-popover-success.popover {\n background-color: #d4edda;\n border-color: #c3e6cb;\n}\n.b-popover-success.bs-popover-top > .arrow::before, .b-popover-success.bs-popover-auto[x-placement^=top] > .arrow::before {\n border-top-color: #c3e6cb;\n}\n.b-popover-success.bs-popover-top > .arrow::after, .b-popover-success.bs-popover-auto[x-placement^=top] > .arrow::after {\n border-top-color: #d4edda;\n}\n.b-popover-success.bs-popover-right > .arrow::before, .b-popover-success.bs-popover-auto[x-placement^=right] > .arrow::before {\n border-right-color: #c3e6cb;\n}\n.b-popover-success.bs-popover-right > .arrow::after, .b-popover-success.bs-popover-auto[x-placement^=right] > .arrow::after {\n border-right-color: #d4edda;\n}\n.b-popover-success.bs-popover-bottom > .arrow::before, .b-popover-success.bs-popover-auto[x-placement^=bottom] > .arrow::before {\n border-bottom-color: #c3e6cb;\n}\n.b-popover-success.bs-popover-bottom > .arrow::after, .b-popover-success.bs-popover-auto[x-placement^=bottom] > .arrow::after {\n border-bottom-color: #c9e8d1;\n}\n.b-popover-success.bs-popover-bottom .popover-header::before, .b-popover-success.bs-popover-auto[x-placement^=bottom] .popover-header::before {\n border-bottom-color: #c9e8d1;\n}\n.b-popover-success.bs-popover-left > .arrow::before, .b-popover-success.bs-popover-auto[x-placement^=left] > .arrow::before {\n border-left-color: #c3e6cb;\n}\n.b-popover-success.bs-popover-left > .arrow::after, .b-popover-success.bs-popover-auto[x-placement^=left] > .arrow::after {\n border-left-color: #d4edda;\n}\n.b-popover-success .popover-header {\n color: #212529;\n background-color: #c9e8d1;\n border-bottom-color: #b7e1c1;\n}\n.b-popover-success .popover-body {\n color: #155724;\n}\n\n.b-popover-info.popover {\n background-color: #d1ecf1;\n border-color: #bee5eb;\n}\n.b-popover-info.bs-popover-top > .arrow::before, .b-popover-info.bs-popover-auto[x-placement^=top] > .arrow::before {\n border-top-color: #bee5eb;\n}\n.b-popover-info.bs-popover-top > .arrow::after, .b-popover-info.bs-popover-auto[x-placement^=top] > .arrow::after {\n border-top-color: #d1ecf1;\n}\n.b-popover-info.bs-popover-right > .arrow::before, .b-popover-info.bs-popover-auto[x-placement^=right] > .arrow::before {\n border-right-color: #bee5eb;\n}\n.b-popover-info.bs-popover-right > .arrow::after, .b-popover-info.bs-popover-auto[x-placement^=right] > .arrow::after {\n border-right-color: #d1ecf1;\n}\n.b-popover-info.bs-popover-bottom > .arrow::before, .b-popover-info.bs-popover-auto[x-placement^=bottom] > .arrow::before {\n border-bottom-color: #bee5eb;\n}\n.b-popover-info.bs-popover-bottom > .arrow::after, .b-popover-info.bs-popover-auto[x-placement^=bottom] > .arrow::after {\n border-bottom-color: #c5e7ed;\n}\n.b-popover-info.bs-popover-bottom .popover-header::before, .b-popover-info.bs-popover-auto[x-placement^=bottom] .popover-header::before {\n border-bottom-color: #c5e7ed;\n}\n.b-popover-info.bs-popover-left > .arrow::before, .b-popover-info.bs-popover-auto[x-placement^=left] > .arrow::before {\n border-left-color: #bee5eb;\n}\n.b-popover-info.bs-popover-left > .arrow::after, .b-popover-info.bs-popover-auto[x-placement^=left] > .arrow::after {\n border-left-color: #d1ecf1;\n}\n.b-popover-info .popover-header {\n color: #212529;\n background-color: #c5e7ed;\n border-bottom-color: #b2dfe7;\n}\n.b-popover-info .popover-body {\n color: #0c5460;\n}\n\n.b-popover-warning.popover {\n background-color: #fff3cd;\n border-color: #ffeeba;\n}\n.b-popover-warning.bs-popover-top > .arrow::before, .b-popover-warning.bs-popover-auto[x-placement^=top] > .arrow::before {\n border-top-color: #ffeeba;\n}\n.b-popover-warning.bs-popover-top > .arrow::after, .b-popover-warning.bs-popover-auto[x-placement^=top] > .arrow::after {\n border-top-color: #fff3cd;\n}\n.b-popover-warning.bs-popover-right > .arrow::before, .b-popover-warning.bs-popover-auto[x-placement^=right] > .arrow::before {\n border-right-color: #ffeeba;\n}\n.b-popover-warning.bs-popover-right > .arrow::after, .b-popover-warning.bs-popover-auto[x-placement^=right] > .arrow::after {\n border-right-color: #fff3cd;\n}\n.b-popover-warning.bs-popover-bottom > .arrow::before, .b-popover-warning.bs-popover-auto[x-placement^=bottom] > .arrow::before {\n border-bottom-color: #ffeeba;\n}\n.b-popover-warning.bs-popover-bottom > .arrow::after, .b-popover-warning.bs-popover-auto[x-placement^=bottom] > .arrow::after {\n border-bottom-color: #ffefbe;\n}\n.b-popover-warning.bs-popover-bottom .popover-header::before, .b-popover-warning.bs-popover-auto[x-placement^=bottom] .popover-header::before {\n border-bottom-color: #ffefbe;\n}\n.b-popover-warning.bs-popover-left > .arrow::before, .b-popover-warning.bs-popover-auto[x-placement^=left] > .arrow::before {\n border-left-color: #ffeeba;\n}\n.b-popover-warning.bs-popover-left > .arrow::after, .b-popover-warning.bs-popover-auto[x-placement^=left] > .arrow::after {\n border-left-color: #fff3cd;\n}\n.b-popover-warning .popover-header {\n color: #212529;\n background-color: #ffefbe;\n border-bottom-color: #ffe9a4;\n}\n.b-popover-warning .popover-body {\n color: #856404;\n}\n\n.b-popover-danger.popover {\n background-color: #f8d7da;\n border-color: #f5c6cb;\n}\n.b-popover-danger.bs-popover-top > .arrow::before, .b-popover-danger.bs-popover-auto[x-placement^=top] > .arrow::before {\n border-top-color: #f5c6cb;\n}\n.b-popover-danger.bs-popover-top > .arrow::after, .b-popover-danger.bs-popover-auto[x-placement^=top] > .arrow::after {\n border-top-color: #f8d7da;\n}\n.b-popover-danger.bs-popover-right > .arrow::before, .b-popover-danger.bs-popover-auto[x-placement^=right] > .arrow::before {\n border-right-color: #f5c6cb;\n}\n.b-popover-danger.bs-popover-right > .arrow::after, .b-popover-danger.bs-popover-auto[x-placement^=right] > .arrow::after {\n border-right-color: #f8d7da;\n}\n.b-popover-danger.bs-popover-bottom > .arrow::before, .b-popover-danger.bs-popover-auto[x-placement^=bottom] > .arrow::before {\n border-bottom-color: #f5c6cb;\n}\n.b-popover-danger.bs-popover-bottom > .arrow::after, .b-popover-danger.bs-popover-auto[x-placement^=bottom] > .arrow::after {\n border-bottom-color: #f6cace;\n}\n.b-popover-danger.bs-popover-bottom .popover-header::before, .b-popover-danger.bs-popover-auto[x-placement^=bottom] .popover-header::before {\n border-bottom-color: #f6cace;\n}\n.b-popover-danger.bs-popover-left > .arrow::before, .b-popover-danger.bs-popover-auto[x-placement^=left] > .arrow::before {\n border-left-color: #f5c6cb;\n}\n.b-popover-danger.bs-popover-left > .arrow::after, .b-popover-danger.bs-popover-auto[x-placement^=left] > .arrow::after {\n border-left-color: #f8d7da;\n}\n.b-popover-danger .popover-header {\n color: #212529;\n background-color: #f6cace;\n border-bottom-color: #f2b4ba;\n}\n.b-popover-danger .popover-body {\n color: #721c24;\n}\n\n.b-popover-light.popover {\n background-color: #fefefe;\n border-color: #fdfdfe;\n}\n.b-popover-light.bs-popover-top > .arrow::before, .b-popover-light.bs-popover-auto[x-placement^=top] > .arrow::before {\n border-top-color: #fdfdfe;\n}\n.b-popover-light.bs-popover-top > .arrow::after, .b-popover-light.bs-popover-auto[x-placement^=top] > .arrow::after {\n border-top-color: #fefefe;\n}\n.b-popover-light.bs-popover-right > .arrow::before, .b-popover-light.bs-popover-auto[x-placement^=right] > .arrow::before {\n border-right-color: #fdfdfe;\n}\n.b-popover-light.bs-popover-right > .arrow::after, .b-popover-light.bs-popover-auto[x-placement^=right] > .arrow::after {\n border-right-color: #fefefe;\n}\n.b-popover-light.bs-popover-bottom > .arrow::before, .b-popover-light.bs-popover-auto[x-placement^=bottom] > .arrow::before {\n border-bottom-color: #fdfdfe;\n}\n.b-popover-light.bs-popover-bottom > .arrow::after, .b-popover-light.bs-popover-auto[x-placement^=bottom] > .arrow::after {\n border-bottom-color: #f6f6f6;\n}\n.b-popover-light.bs-popover-bottom .popover-header::before, .b-popover-light.bs-popover-auto[x-placement^=bottom] .popover-header::before {\n border-bottom-color: #f6f6f6;\n}\n.b-popover-light.bs-popover-left > .arrow::before, .b-popover-light.bs-popover-auto[x-placement^=left] > .arrow::before {\n border-left-color: #fdfdfe;\n}\n.b-popover-light.bs-popover-left > .arrow::after, .b-popover-light.bs-popover-auto[x-placement^=left] > .arrow::after {\n border-left-color: #fefefe;\n}\n.b-popover-light .popover-header {\n color: #212529;\n background-color: #f6f6f6;\n border-bottom-color: #eaeaea;\n}\n.b-popover-light .popover-body {\n color: #818182;\n}\n\n.b-popover-dark.popover {\n background-color: #d6d8d9;\n border-color: #c6c8ca;\n}\n.b-popover-dark.bs-popover-top > .arrow::before, .b-popover-dark.bs-popover-auto[x-placement^=top] > .arrow::before {\n border-top-color: #c6c8ca;\n}\n.b-popover-dark.bs-popover-top > .arrow::after, .b-popover-dark.bs-popover-auto[x-placement^=top] > .arrow::after {\n border-top-color: #d6d8d9;\n}\n.b-popover-dark.bs-popover-right > .arrow::before, .b-popover-dark.bs-popover-auto[x-placement^=right] > .arrow::before {\n border-right-color: #c6c8ca;\n}\n.b-popover-dark.bs-popover-right > .arrow::after, .b-popover-dark.bs-popover-auto[x-placement^=right] > .arrow::after {\n border-right-color: #d6d8d9;\n}\n.b-popover-dark.bs-popover-bottom > .arrow::before, .b-popover-dark.bs-popover-auto[x-placement^=bottom] > .arrow::before {\n border-bottom-color: #c6c8ca;\n}\n.b-popover-dark.bs-popover-bottom > .arrow::after, .b-popover-dark.bs-popover-auto[x-placement^=bottom] > .arrow::after {\n border-bottom-color: #ced0d2;\n}\n.b-popover-dark.bs-popover-bottom .popover-header::before, .b-popover-dark.bs-popover-auto[x-placement^=bottom] .popover-header::before {\n border-bottom-color: #ced0d2;\n}\n.b-popover-dark.bs-popover-left > .arrow::before, .b-popover-dark.bs-popover-auto[x-placement^=left] > .arrow::before {\n border-left-color: #c6c8ca;\n}\n.b-popover-dark.bs-popover-left > .arrow::after, .b-popover-dark.bs-popover-auto[x-placement^=left] > .arrow::after {\n border-left-color: #d6d8d9;\n}\n.b-popover-dark .popover-header {\n color: #212529;\n background-color: #ced0d2;\n border-bottom-color: #c1c4c5;\n}\n.b-popover-dark .popover-body {\n color: #1b1e21;\n}\n\n.b-sidebar-outer {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n height: 0;\n overflow: visible;\n z-index: calc(1030 + 5);\n}\n\n.b-sidebar-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n z-index: -1;\n width: 100vw;\n height: 100vh;\n opacity: 0.6;\n}\n\n.b-sidebar {\n display: flex;\n flex-direction: column;\n position: fixed;\n top: 0;\n width: 320px;\n max-width: 100%;\n height: 100vh;\n max-height: 100%;\n margin: 0;\n outline: 0;\n -webkit-transform: translateX(0);\n transform: translateX(0);\n}\n.b-sidebar.slide {\n transition: -webkit-transform 0.3s ease-in-out;\n transition: transform 0.3s ease-in-out;\n transition: transform 0.3s ease-in-out, -webkit-transform 0.3s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .b-sidebar.slide {\n transition: none;\n }\n}\n.b-sidebar:not(.b-sidebar-right) {\n left: 0;\n right: auto;\n}\n.b-sidebar:not(.b-sidebar-right).slide:not(.show) {\n -webkit-transform: translateX(-100%);\n transform: translateX(-100%);\n}\n.b-sidebar:not(.b-sidebar-right) > .b-sidebar-header .close {\n margin-left: auto;\n}\n.b-sidebar.b-sidebar-right {\n left: auto;\n right: 0;\n}\n.b-sidebar.b-sidebar-right.slide:not(.show) {\n -webkit-transform: translateX(100%);\n transform: translateX(100%);\n}\n.b-sidebar.b-sidebar-right > .b-sidebar-header .close {\n margin-right: auto;\n}\n.b-sidebar > .b-sidebar-header {\n font-size: 1.5rem;\n padding: 0.5rem 1rem;\n display: flex;\n flex-direction: row;\n flex-grow: 0;\n align-items: center;\n}\n[dir=rtl] .b-sidebar > .b-sidebar-header {\n flex-direction: row-reverse;\n}\n\n.b-sidebar > .b-sidebar-header .close {\n float: none;\n font-size: 1.5rem;\n}\n.b-sidebar > .b-sidebar-body {\n flex-grow: 1;\n height: 100%;\n overflow-y: auto;\n}\n.b-sidebar > .b-sidebar-footer {\n flex-grow: 0;\n}\n\n.b-skeleton-wrapper {\n cursor: wait;\n}\n\n.b-skeleton {\n position: relative;\n overflow: hidden;\n background-color: rgba(0, 0, 0, 0.12);\n cursor: wait;\n -webkit-mask-image: radial-gradient(white, black);\n mask-image: radial-gradient(white, black);\n}\n.b-skeleton::before {\n content: \" \";\n}\n\n.b-skeleton-text {\n height: 1rem;\n margin-bottom: 0.25rem;\n border-radius: 0.25rem;\n}\n\n.b-skeleton-button {\n width: 75px;\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n line-height: 1.5;\n border-radius: 0.25rem;\n}\n\n.b-skeleton-avatar {\n width: 2.5em;\n height: 2.5em;\n border-radius: 50%;\n}\n\n.b-skeleton-input {\n height: calc(1.5em + 0.75rem + 2px);\n padding: 0.375rem 0.75rem;\n line-height: 1.5;\n border: #ced4da solid 1px;\n border-radius: 0.25rem;\n}\n\n.b-skeleton-icon-wrapper svg {\n color: rgba(0, 0, 0, 0.12);\n}\n\n.b-skeleton-img {\n height: 100%;\n width: 100%;\n}\n\n.b-skeleton-animate-wave::after {\n content: \"\";\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 0;\n background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.4), transparent);\n -webkit-animation: b-skeleton-animate-wave 1.75s linear infinite;\n animation: b-skeleton-animate-wave 1.75s linear infinite;\n}\n@media (prefers-reduced-motion: reduce) {\n .b-skeleton-animate-wave::after {\n background: none;\n -webkit-animation: none;\n animation: none;\n }\n}\n\n@-webkit-keyframes b-skeleton-animate-wave {\n from {\n -webkit-transform: translateX(-100%);\n transform: translateX(-100%);\n }\n to {\n -webkit-transform: translateX(100%);\n transform: translateX(100%);\n }\n}\n\n@keyframes b-skeleton-animate-wave {\n from {\n -webkit-transform: translateX(-100%);\n transform: translateX(-100%);\n }\n to {\n -webkit-transform: translateX(100%);\n transform: translateX(100%);\n }\n}\n.b-skeleton-animate-fade {\n -webkit-animation: b-skeleton-animate-fade 0.875s ease-in-out alternate infinite;\n animation: b-skeleton-animate-fade 0.875s ease-in-out alternate infinite;\n}\n@media (prefers-reduced-motion: reduce) {\n .b-skeleton-animate-fade {\n -webkit-animation: none;\n animation: none;\n }\n}\n\n@-webkit-keyframes b-skeleton-animate-fade {\n 0% {\n opacity: 1;\n }\n 100% {\n opacity: 0.4;\n }\n}\n\n@keyframes b-skeleton-animate-fade {\n 0% {\n opacity: 1;\n }\n 100% {\n opacity: 0.4;\n }\n}\n.b-skeleton-animate-throb {\n -webkit-animation: b-skeleton-animate-throb 0.875s ease-in alternate infinite;\n animation: b-skeleton-animate-throb 0.875s ease-in alternate infinite;\n}\n@media (prefers-reduced-motion: reduce) {\n .b-skeleton-animate-throb {\n -webkit-animation: none;\n animation: none;\n }\n}\n\n@-webkit-keyframes b-skeleton-animate-throb {\n 0% {\n -webkit-transform: scale(1);\n transform: scale(1);\n }\n 100% {\n -webkit-transform: scale(0.975);\n transform: scale(0.975);\n }\n}\n\n@keyframes b-skeleton-animate-throb {\n 0% {\n -webkit-transform: scale(1);\n transform: scale(1);\n }\n 100% {\n -webkit-transform: scale(0.975);\n transform: scale(0.975);\n }\n}\n.table.b-table.b-table-fixed {\n table-layout: fixed;\n}\n.table.b-table.b-table-no-border-collapse {\n border-collapse: separate;\n border-spacing: 0;\n}\n.table.b-table[aria-busy=true] {\n opacity: 0.55;\n}\n.table.b-table > tbody > tr.b-table-details > td {\n border-top: none !important;\n}\n.table.b-table > caption {\n caption-side: bottom;\n}\n.table.b-table.b-table-caption-top > caption {\n caption-side: top !important;\n}\n.table.b-table > tbody > .table-active,\n.table.b-table > tbody > .table-active > th,\n.table.b-table > tbody > .table-active > td {\n background-color: rgba(0, 0, 0, 0.075);\n}\n.table.b-table.table-hover > tbody > tr.table-active:hover td,\n.table.b-table.table-hover > tbody > tr.table-active:hover th {\n color: #212529;\n background-image: linear-gradient(rgba(0, 0, 0, 0.075), rgba(0, 0, 0, 0.075));\n background-repeat: no-repeat;\n}\n.table.b-table > tbody > .bg-active,\n.table.b-table > tbody > .bg-active > th,\n.table.b-table > tbody > .bg-active > td {\n background-color: rgba(255, 255, 255, 0.075) !important;\n}\n.table.b-table.table-hover.table-dark > tbody > tr.bg-active:hover td,\n.table.b-table.table-hover.table-dark > tbody > tr.bg-active:hover th {\n color: #fff;\n background-image: linear-gradient(rgba(255, 255, 255, 0.075), rgba(255, 255, 255, 0.075));\n background-repeat: no-repeat;\n}\n\n.b-table-sticky-header,\n.table-responsive,\n[class*=table-responsive-] {\n margin-bottom: 1rem;\n}\n.b-table-sticky-header > .table,\n.table-responsive > .table,\n[class*=table-responsive-] > .table {\n margin-bottom: 0;\n}\n\n.b-table-sticky-header {\n overflow-y: auto;\n max-height: 300px;\n}\n\n@media print {\n .b-table-sticky-header {\n overflow-y: visible !important;\n max-height: none !important;\n }\n}\n@supports ((position: -webkit-sticky) or (position: sticky)) {\n .b-table-sticky-header > .table.b-table > thead > tr > th {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 2;\n }\n\n .b-table-sticky-header > .table.b-table > thead > tr > .b-table-sticky-column,\n.b-table-sticky-header > .table.b-table > tbody > tr > .b-table-sticky-column,\n.b-table-sticky-header > .table.b-table > tfoot > tr > .b-table-sticky-column,\n.table-responsive > .table.b-table > thead > tr > .b-table-sticky-column,\n.table-responsive > .table.b-table > tbody > tr > .b-table-sticky-column,\n.table-responsive > .table.b-table > tfoot > tr > .b-table-sticky-column,\n[class*=table-responsive-] > .table.b-table > thead > tr > .b-table-sticky-column,\n[class*=table-responsive-] > .table.b-table > tbody > tr > .b-table-sticky-column,\n[class*=table-responsive-] > .table.b-table > tfoot > tr > .b-table-sticky-column {\n position: -webkit-sticky;\n position: sticky;\n left: 0;\n }\n .b-table-sticky-header > .table.b-table > thead > tr > .b-table-sticky-column,\n.table-responsive > .table.b-table > thead > tr > .b-table-sticky-column,\n[class*=table-responsive-] > .table.b-table > thead > tr > .b-table-sticky-column {\n z-index: 5;\n }\n .b-table-sticky-header > .table.b-table > tbody > tr > .b-table-sticky-column,\n.b-table-sticky-header > .table.b-table > tfoot > tr > .b-table-sticky-column,\n.table-responsive > .table.b-table > tbody > tr > .b-table-sticky-column,\n.table-responsive > .table.b-table > tfoot > tr > .b-table-sticky-column,\n[class*=table-responsive-] > .table.b-table > tbody > tr > .b-table-sticky-column,\n[class*=table-responsive-] > .table.b-table > tfoot > tr > .b-table-sticky-column {\n z-index: 2;\n }\n\n .table.b-table > thead > tr > .table-b-table-default,\n.table.b-table > tbody > tr > .table-b-table-default,\n.table.b-table > tfoot > tr > .table-b-table-default {\n color: #212529;\n background-color: #fff;\n }\n .table.b-table.table-dark > thead > tr > .bg-b-table-default,\n.table.b-table.table-dark > tbody > tr > .bg-b-table-default,\n.table.b-table.table-dark > tfoot > tr > .bg-b-table-default {\n color: #fff;\n background-color: #343a40;\n }\n .table.b-table.table-striped > tbody > tr:nth-of-type(odd) > .table-b-table-default {\n background-image: linear-gradient(rgba(0, 0, 0, 0.05), rgba(0, 0, 0, 0.05));\n background-repeat: no-repeat;\n }\n .table.b-table.table-striped.table-dark > tbody > tr:nth-of-type(odd) > .bg-b-table-default {\n background-image: linear-gradient(rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0.05));\n background-repeat: no-repeat;\n }\n .table.b-table.table-hover > tbody > tr:hover > .table-b-table-default {\n color: #212529;\n background-image: linear-gradient(rgba(0, 0, 0, 0.075), rgba(0, 0, 0, 0.075));\n background-repeat: no-repeat;\n }\n .table.b-table.table-hover.table-dark > tbody > tr:hover > .bg-b-table-default {\n color: #fff;\n background-image: linear-gradient(rgba(255, 255, 255, 0.075), rgba(255, 255, 255, 0.075));\n background-repeat: no-repeat;\n }\n}\n.table.b-table > thead > tr > [aria-sort],\n.table.b-table > tfoot > tr > [aria-sort] {\n cursor: pointer;\n background-image: none;\n background-repeat: no-repeat;\n background-size: 0.65em 1em;\n}\n.table.b-table > thead > tr > [aria-sort]:not(.b-table-sort-icon-left),\n.table.b-table > tfoot > tr > [aria-sort]:not(.b-table-sort-icon-left) {\n background-position: right calc(0.75rem / 2) center;\n padding-right: calc(0.75rem + 0.65em);\n}\n.table.b-table > thead > tr > [aria-sort].b-table-sort-icon-left,\n.table.b-table > tfoot > tr > [aria-sort].b-table-sort-icon-left {\n background-position: left calc(0.75rem / 2) center;\n padding-left: calc(0.75rem + 0.65em);\n}\n.table.b-table > thead > tr > [aria-sort=none],\n.table.b-table > tfoot > tr > [aria-sort=none] {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='101' height='101' view-box='0 0 101 101' preserveAspectRatio='none'%3e%3cpath fill='black' opacity='.3' d='M51 1l25 23 24 22H1l25-22zM51 101l25-23 24-22H1l25 22z'/%3e%3c/svg%3e\");\n}\n.table.b-table > thead > tr > [aria-sort=ascending],\n.table.b-table > tfoot > tr > [aria-sort=ascending] {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='101' height='101' view-box='0 0 101 101' preserveAspectRatio='none'%3e%3cpath fill='black' d='M51 1l25 23 24 22H1l25-22z'/%3e%3cpath fill='black' opacity='.3' d='M51 101l25-23 24-22H1l25 22z'/%3e%3c/svg%3e\");\n}\n.table.b-table > thead > tr > [aria-sort=descending],\n.table.b-table > tfoot > tr > [aria-sort=descending] {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='101' height='101' view-box='0 0 101 101' preserveAspectRatio='none'%3e%3cpath fill='black' opacity='.3' d='M51 1l25 23 24 22H1l25-22z'/%3e%3cpath fill='black' d='M51 101l25-23 24-22H1l25 22z'/%3e%3c/svg%3e\");\n}\n.table.b-table.table-dark > thead > tr > [aria-sort=none], .table.b-table.table-dark > tfoot > tr > [aria-sort=none],\n.table.b-table > .thead-dark > tr > [aria-sort=none] {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='101' height='101' view-box='0 0 101 101' preserveAspectRatio='none'%3e%3cpath fill='white' opacity='.3' d='M51 1l25 23 24 22H1l25-22zM51 101l25-23 24-22H1l25 22z'/%3e%3c/svg%3e\");\n}\n.table.b-table.table-dark > thead > tr > [aria-sort=ascending], .table.b-table.table-dark > tfoot > tr > [aria-sort=ascending],\n.table.b-table > .thead-dark > tr > [aria-sort=ascending] {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='101' height='101' view-box='0 0 101 101' preserveAspectRatio='none'%3e%3cpath fill='white' d='M51 1l25 23 24 22H1l25-22z'/%3e%3cpath fill='white' opacity='.3' d='M51 101l25-23 24-22H1l25 22z'/%3e%3c/svg%3e\");\n}\n.table.b-table.table-dark > thead > tr > [aria-sort=descending], .table.b-table.table-dark > tfoot > tr > [aria-sort=descending],\n.table.b-table > .thead-dark > tr > [aria-sort=descending] {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='101' height='101' view-box='0 0 101 101' preserveAspectRatio='none'%3e%3cpath fill='white' opacity='.3' d='M51 1l25 23 24 22H1l25-22z'/%3e%3cpath fill='white' d='M51 101l25-23 24-22H1l25 22z'/%3e%3c/svg%3e\");\n}\n.table.b-table > thead > tr > .table-dark[aria-sort=none],\n.table.b-table > tfoot > tr > .table-dark[aria-sort=none] {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='101' height='101' view-box='0 0 101 101' preserveAspectRatio='none'%3e%3cpath fill='white' opacity='.3' d='M51 1l25 23 24 22H1l25-22zM51 101l25-23 24-22H1l25 22z'/%3e%3c/svg%3e\");\n}\n.table.b-table > thead > tr > .table-dark[aria-sort=ascending],\n.table.b-table > tfoot > tr > .table-dark[aria-sort=ascending] {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='101' height='101' view-box='0 0 101 101' preserveAspectRatio='none'%3e%3cpath fill='white' d='M51 1l25 23 24 22H1l25-22z'/%3e%3cpath fill='white' opacity='.3' d='M51 101l25-23 24-22H1l25 22z'/%3e%3c/svg%3e\");\n}\n.table.b-table > thead > tr > .table-dark[aria-sort=descending],\n.table.b-table > tfoot > tr > .table-dark[aria-sort=descending] {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='101' height='101' view-box='0 0 101 101' preserveAspectRatio='none'%3e%3cpath fill='white' opacity='.3' d='M51 1l25 23 24 22H1l25-22z'/%3e%3cpath fill='white' d='M51 101l25-23 24-22H1l25 22z'/%3e%3c/svg%3e\");\n}\n.table.b-table.table-sm > thead > tr > [aria-sort]:not(.b-table-sort-icon-left),\n.table.b-table.table-sm > tfoot > tr > [aria-sort]:not(.b-table-sort-icon-left) {\n background-position: right calc(0.3rem / 2) center;\n padding-right: calc(0.3rem + 0.65em);\n}\n.table.b-table.table-sm > thead > tr > [aria-sort].b-table-sort-icon-left,\n.table.b-table.table-sm > tfoot > tr > [aria-sort].b-table-sort-icon-left {\n background-position: left calc(0.3rem / 2) center;\n padding-left: calc(0.3rem + 0.65em);\n}\n\n.table.b-table.b-table-selectable:not(.b-table-selectable-no-click) > tbody > tr {\n cursor: pointer;\n}\n.table.b-table.b-table-selectable:not(.b-table-selectable-no-click).b-table-selecting.b-table-select-range > tbody > tr {\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n@media (max-width: 575.98px) {\n .table.b-table.b-table-stacked-sm {\n display: block;\n width: 100%;\n }\n .table.b-table.b-table-stacked-sm > caption,\n.table.b-table.b-table-stacked-sm > tbody,\n.table.b-table.b-table-stacked-sm > tbody > tr,\n.table.b-table.b-table-stacked-sm > tbody > tr > td,\n.table.b-table.b-table-stacked-sm > tbody > tr > th {\n display: block;\n }\n .table.b-table.b-table-stacked-sm > thead,\n.table.b-table.b-table-stacked-sm > tfoot {\n display: none;\n }\n .table.b-table.b-table-stacked-sm > thead > tr.b-table-top-row,\n.table.b-table.b-table-stacked-sm > thead > tr.b-table-bottom-row,\n.table.b-table.b-table-stacked-sm > tfoot > tr.b-table-top-row,\n.table.b-table.b-table-stacked-sm > tfoot > tr.b-table-bottom-row {\n display: none;\n }\n .table.b-table.b-table-stacked-sm > caption {\n caption-side: top !important;\n }\n .table.b-table.b-table-stacked-sm > tbody > tr > [data-label]::before {\n content: attr(data-label);\n width: 40%;\n float: left;\n text-align: right;\n overflow-wrap: break-word;\n font-weight: bold;\n font-style: normal;\n padding: 0 calc(1rem / 2) 0 0;\n margin: 0;\n }\n .table.b-table.b-table-stacked-sm > tbody > tr > [data-label]::after {\n display: block;\n clear: both;\n content: \"\";\n }\n .table.b-table.b-table-stacked-sm > tbody > tr > [data-label] > div {\n display: inline-block;\n width: calc(100% - 40%);\n padding: 0 0 0 calc(1rem / 2);\n margin: 0;\n }\n .table.b-table.b-table-stacked-sm > tbody > tr.top-row, .table.b-table.b-table-stacked-sm > tbody > tr.bottom-row {\n display: none;\n }\n .table.b-table.b-table-stacked-sm > tbody > tr > :first-child {\n border-top-width: 3px;\n }\n .table.b-table.b-table-stacked-sm > tbody > tr > [rowspan] + td,\n.table.b-table.b-table-stacked-sm > tbody > tr > [rowspan] + th {\n border-top-width: 3px;\n }\n}\n@media (max-width: 767.98px) {\n .table.b-table.b-table-stacked-md {\n display: block;\n width: 100%;\n }\n .table.b-table.b-table-stacked-md > caption,\n.table.b-table.b-table-stacked-md > tbody,\n.table.b-table.b-table-stacked-md > tbody > tr,\n.table.b-table.b-table-stacked-md > tbody > tr > td,\n.table.b-table.b-table-stacked-md > tbody > tr > th {\n display: block;\n }\n .table.b-table.b-table-stacked-md > thead,\n.table.b-table.b-table-stacked-md > tfoot {\n display: none;\n }\n .table.b-table.b-table-stacked-md > thead > tr.b-table-top-row,\n.table.b-table.b-table-stacked-md > thead > tr.b-table-bottom-row,\n.table.b-table.b-table-stacked-md > tfoot > tr.b-table-top-row,\n.table.b-table.b-table-stacked-md > tfoot > tr.b-table-bottom-row {\n display: none;\n }\n .table.b-table.b-table-stacked-md > caption {\n caption-side: top !important;\n }\n .table.b-table.b-table-stacked-md > tbody > tr > [data-label]::before {\n content: attr(data-label);\n width: 40%;\n float: left;\n text-align: right;\n overflow-wrap: break-word;\n font-weight: bold;\n font-style: normal;\n padding: 0 calc(1rem / 2) 0 0;\n margin: 0;\n }\n .table.b-table.b-table-stacked-md > tbody > tr > [data-label]::after {\n display: block;\n clear: both;\n content: \"\";\n }\n .table.b-table.b-table-stacked-md > tbody > tr > [data-label] > div {\n display: inline-block;\n width: calc(100% - 40%);\n padding: 0 0 0 calc(1rem / 2);\n margin: 0;\n }\n .table.b-table.b-table-stacked-md > tbody > tr.top-row, .table.b-table.b-table-stacked-md > tbody > tr.bottom-row {\n display: none;\n }\n .table.b-table.b-table-stacked-md > tbody > tr > :first-child {\n border-top-width: 3px;\n }\n .table.b-table.b-table-stacked-md > tbody > tr > [rowspan] + td,\n.table.b-table.b-table-stacked-md > tbody > tr > [rowspan] + th {\n border-top-width: 3px;\n }\n}\n@media (max-width: 991.98px) {\n .table.b-table.b-table-stacked-lg {\n display: block;\n width: 100%;\n }\n .table.b-table.b-table-stacked-lg > caption,\n.table.b-table.b-table-stacked-lg > tbody,\n.table.b-table.b-table-stacked-lg > tbody > tr,\n.table.b-table.b-table-stacked-lg > tbody > tr > td,\n.table.b-table.b-table-stacked-lg > tbody > tr > th {\n display: block;\n }\n .table.b-table.b-table-stacked-lg > thead,\n.table.b-table.b-table-stacked-lg > tfoot {\n display: none;\n }\n .table.b-table.b-table-stacked-lg > thead > tr.b-table-top-row,\n.table.b-table.b-table-stacked-lg > thead > tr.b-table-bottom-row,\n.table.b-table.b-table-stacked-lg > tfoot > tr.b-table-top-row,\n.table.b-table.b-table-stacked-lg > tfoot > tr.b-table-bottom-row {\n display: none;\n }\n .table.b-table.b-table-stacked-lg > caption {\n caption-side: top !important;\n }\n .table.b-table.b-table-stacked-lg > tbody > tr > [data-label]::before {\n content: attr(data-label);\n width: 40%;\n float: left;\n text-align: right;\n overflow-wrap: break-word;\n font-weight: bold;\n font-style: normal;\n padding: 0 calc(1rem / 2) 0 0;\n margin: 0;\n }\n .table.b-table.b-table-stacked-lg > tbody > tr > [data-label]::after {\n display: block;\n clear: both;\n content: \"\";\n }\n .table.b-table.b-table-stacked-lg > tbody > tr > [data-label] > div {\n display: inline-block;\n width: calc(100% - 40%);\n padding: 0 0 0 calc(1rem / 2);\n margin: 0;\n }\n .table.b-table.b-table-stacked-lg > tbody > tr.top-row, .table.b-table.b-table-stacked-lg > tbody > tr.bottom-row {\n display: none;\n }\n .table.b-table.b-table-stacked-lg > tbody > tr > :first-child {\n border-top-width: 3px;\n }\n .table.b-table.b-table-stacked-lg > tbody > tr > [rowspan] + td,\n.table.b-table.b-table-stacked-lg > tbody > tr > [rowspan] + th {\n border-top-width: 3px;\n }\n}\n@media (max-width: 1199.98px) {\n .table.b-table.b-table-stacked-xl {\n display: block;\n width: 100%;\n }\n .table.b-table.b-table-stacked-xl > caption,\n.table.b-table.b-table-stacked-xl > tbody,\n.table.b-table.b-table-stacked-xl > tbody > tr,\n.table.b-table.b-table-stacked-xl > tbody > tr > td,\n.table.b-table.b-table-stacked-xl > tbody > tr > th {\n display: block;\n }\n .table.b-table.b-table-stacked-xl > thead,\n.table.b-table.b-table-stacked-xl > tfoot {\n display: none;\n }\n .table.b-table.b-table-stacked-xl > thead > tr.b-table-top-row,\n.table.b-table.b-table-stacked-xl > thead > tr.b-table-bottom-row,\n.table.b-table.b-table-stacked-xl > tfoot > tr.b-table-top-row,\n.table.b-table.b-table-stacked-xl > tfoot > tr.b-table-bottom-row {\n display: none;\n }\n .table.b-table.b-table-stacked-xl > caption {\n caption-side: top !important;\n }\n .table.b-table.b-table-stacked-xl > tbody > tr > [data-label]::before {\n content: attr(data-label);\n width: 40%;\n float: left;\n text-align: right;\n overflow-wrap: break-word;\n font-weight: bold;\n font-style: normal;\n padding: 0 calc(1rem / 2) 0 0;\n margin: 0;\n }\n .table.b-table.b-table-stacked-xl > tbody > tr > [data-label]::after {\n display: block;\n clear: both;\n content: \"\";\n }\n .table.b-table.b-table-stacked-xl > tbody > tr > [data-label] > div {\n display: inline-block;\n width: calc(100% - 40%);\n padding: 0 0 0 calc(1rem / 2);\n margin: 0;\n }\n .table.b-table.b-table-stacked-xl > tbody > tr.top-row, .table.b-table.b-table-stacked-xl > tbody > tr.bottom-row {\n display: none;\n }\n .table.b-table.b-table-stacked-xl > tbody > tr > :first-child {\n border-top-width: 3px;\n }\n .table.b-table.b-table-stacked-xl > tbody > tr > [rowspan] + td,\n.table.b-table.b-table-stacked-xl > tbody > tr > [rowspan] + th {\n border-top-width: 3px;\n }\n}\n.table.b-table.b-table-stacked {\n display: block;\n width: 100%;\n}\n.table.b-table.b-table-stacked > caption,\n.table.b-table.b-table-stacked > tbody,\n.table.b-table.b-table-stacked > tbody > tr,\n.table.b-table.b-table-stacked > tbody > tr > td,\n.table.b-table.b-table-stacked > tbody > tr > th {\n display: block;\n}\n.table.b-table.b-table-stacked > thead,\n.table.b-table.b-table-stacked > tfoot {\n display: none;\n}\n.table.b-table.b-table-stacked > thead > tr.b-table-top-row,\n.table.b-table.b-table-stacked > thead > tr.b-table-bottom-row,\n.table.b-table.b-table-stacked > tfoot > tr.b-table-top-row,\n.table.b-table.b-table-stacked > tfoot > tr.b-table-bottom-row {\n display: none;\n}\n.table.b-table.b-table-stacked > caption {\n caption-side: top !important;\n}\n.table.b-table.b-table-stacked > tbody > tr > [data-label]::before {\n content: attr(data-label);\n width: 40%;\n float: left;\n text-align: right;\n overflow-wrap: break-word;\n font-weight: bold;\n font-style: normal;\n padding: 0 calc(1rem / 2) 0 0;\n margin: 0;\n}\n.table.b-table.b-table-stacked > tbody > tr > [data-label]::after {\n display: block;\n clear: both;\n content: \"\";\n}\n.table.b-table.b-table-stacked > tbody > tr > [data-label] > div {\n display: inline-block;\n width: calc(100% - 40%);\n padding: 0 0 0 calc(1rem / 2);\n margin: 0;\n}\n.table.b-table.b-table-stacked > tbody > tr.top-row, .table.b-table.b-table-stacked > tbody > tr.bottom-row {\n display: none;\n}\n.table.b-table.b-table-stacked > tbody > tr > :first-child {\n border-top-width: 3px;\n}\n.table.b-table.b-table-stacked > tbody > tr > [rowspan] + td,\n.table.b-table.b-table-stacked > tbody > tr > [rowspan] + th {\n border-top-width: 3px;\n}\n\n.b-time {\n min-width: 150px;\n}\n.b-time[aria-disabled=true] output, .b-time[aria-readonly=true] output,\n.b-time output.disabled {\n background-color: #e9ecef;\n opacity: 1;\n}\n.b-time[aria-disabled=true] output {\n pointer-events: none;\n}\n[dir=rtl] .b-time > .d-flex:not(.flex-column) {\n flex-direction: row-reverse;\n}\n\n.b-time .b-time-header {\n margin-bottom: 0.5rem;\n}\n.b-time .b-time-header output {\n padding: 0.25rem;\n font-size: 80%;\n}\n.b-time .b-time-footer {\n margin-top: 0.5rem;\n}\n.b-time .b-time-ampm {\n margin-left: 0.5rem;\n}\n\n.b-toast {\n display: block;\n position: relative;\n max-width: 350px;\n -webkit-backface-visibility: hidden;\n backface-visibility: hidden;\n background-clip: padding-box;\n z-index: 1;\n border-radius: 0.25rem;\n}\n.b-toast .toast {\n background-color: rgba(255, 255, 255, 0.85);\n}\n.b-toast:not(:last-child) {\n margin-bottom: 0.75rem;\n}\n.b-toast.b-toast-solid .toast {\n background-color: white;\n}\n.b-toast .toast {\n opacity: 1;\n}\n.b-toast .toast.fade:not(.show) {\n opacity: 0;\n}\n.b-toast .toast .toast-body {\n display: block;\n}\n\n.b-toast-primary .toast {\n background-color: rgba(230, 242, 255, 0.85);\n border-color: rgba(184, 218, 255, 0.85);\n color: #004085;\n}\n.b-toast-primary .toast .toast-header {\n color: #004085;\n background-color: rgba(204, 229, 255, 0.85);\n border-bottom-color: rgba(184, 218, 255, 0.85);\n}\n.b-toast-primary.b-toast-solid .toast {\n background-color: #e6f2ff;\n}\n\n.b-toast-secondary .toast {\n background-color: rgba(239, 240, 241, 0.85);\n border-color: rgba(214, 216, 219, 0.85);\n color: #383d41;\n}\n.b-toast-secondary .toast .toast-header {\n color: #383d41;\n background-color: rgba(226, 227, 229, 0.85);\n border-bottom-color: rgba(214, 216, 219, 0.85);\n}\n.b-toast-secondary.b-toast-solid .toast {\n background-color: #eff0f1;\n}\n\n.b-toast-success .toast {\n background-color: rgba(230, 245, 233, 0.85);\n border-color: rgba(195, 230, 203, 0.85);\n color: #155724;\n}\n.b-toast-success .toast .toast-header {\n color: #155724;\n background-color: rgba(212, 237, 218, 0.85);\n border-bottom-color: rgba(195, 230, 203, 0.85);\n}\n.b-toast-success.b-toast-solid .toast {\n background-color: #e6f5e9;\n}\n\n.b-toast-info .toast {\n background-color: rgba(229, 244, 247, 0.85);\n border-color: rgba(190, 229, 235, 0.85);\n color: #0c5460;\n}\n.b-toast-info .toast .toast-header {\n color: #0c5460;\n background-color: rgba(209, 236, 241, 0.85);\n border-bottom-color: rgba(190, 229, 235, 0.85);\n}\n.b-toast-info.b-toast-solid .toast {\n background-color: #e5f4f7;\n}\n\n.b-toast-warning .toast {\n background-color: rgba(255, 249, 231, 0.85);\n border-color: rgba(255, 238, 186, 0.85);\n color: #856404;\n}\n.b-toast-warning .toast .toast-header {\n color: #856404;\n background-color: rgba(255, 243, 205, 0.85);\n border-bottom-color: rgba(255, 238, 186, 0.85);\n}\n.b-toast-warning.b-toast-solid .toast {\n background-color: #fff9e7;\n}\n\n.b-toast-danger .toast {\n background-color: rgba(252, 237, 238, 0.85);\n border-color: rgba(245, 198, 203, 0.85);\n color: #721c24;\n}\n.b-toast-danger .toast .toast-header {\n color: #721c24;\n background-color: rgba(248, 215, 218, 0.85);\n border-bottom-color: rgba(245, 198, 203, 0.85);\n}\n.b-toast-danger.b-toast-solid .toast {\n background-color: #fcedee;\n}\n\n.b-toast-light .toast {\n background-color: rgba(255, 255, 255, 0.85);\n border-color: rgba(253, 253, 254, 0.85);\n color: #818182;\n}\n.b-toast-light .toast .toast-header {\n color: #818182;\n background-color: rgba(254, 254, 254, 0.85);\n border-bottom-color: rgba(253, 253, 254, 0.85);\n}\n.b-toast-light.b-toast-solid .toast {\n background-color: white;\n}\n\n.b-toast-dark .toast {\n background-color: rgba(227, 229, 229, 0.85);\n border-color: rgba(198, 200, 202, 0.85);\n color: #1b1e21;\n}\n.b-toast-dark .toast .toast-header {\n color: #1b1e21;\n background-color: rgba(214, 216, 217, 0.85);\n border-bottom-color: rgba(198, 200, 202, 0.85);\n}\n.b-toast-dark.b-toast-solid .toast {\n background-color: #e3e5e5;\n}\n\n.b-toaster {\n z-index: 1100;\n}\n.b-toaster .b-toaster-slot {\n position: relative;\n display: block;\n}\n.b-toaster .b-toaster-slot:empty {\n display: none !important;\n}\n\n.b-toaster.b-toaster-top-right, .b-toaster.b-toaster-top-left, .b-toaster.b-toaster-top-center, .b-toaster.b-toaster-top-full, .b-toaster.b-toaster-bottom-right, .b-toaster.b-toaster-bottom-left, .b-toaster.b-toaster-bottom-center, .b-toaster.b-toaster-bottom-full {\n position: fixed;\n left: 0.5rem;\n right: 0.5rem;\n margin: 0;\n padding: 0;\n height: 0;\n overflow: visible;\n}\n.b-toaster.b-toaster-top-right .b-toaster-slot, .b-toaster.b-toaster-top-left .b-toaster-slot, .b-toaster.b-toaster-top-center .b-toaster-slot, .b-toaster.b-toaster-top-full .b-toaster-slot, .b-toaster.b-toaster-bottom-right .b-toaster-slot, .b-toaster.b-toaster-bottom-left .b-toaster-slot, .b-toaster.b-toaster-bottom-center .b-toaster-slot, .b-toaster.b-toaster-bottom-full .b-toaster-slot {\n position: absolute;\n max-width: 350px;\n width: 100%;\n /* IE 11 fix */\n left: 0;\n right: 0;\n padding: 0;\n margin: 0;\n}\n.b-toaster.b-toaster-top-full .b-toaster-slot, .b-toaster.b-toaster-bottom-full .b-toaster-slot {\n width: 100%;\n max-width: 100%;\n}\n.b-toaster.b-toaster-top-full .b-toaster-slot .b-toast,\n.b-toaster.b-toaster-top-full .b-toaster-slot .toast, .b-toaster.b-toaster-bottom-full .b-toaster-slot .b-toast,\n.b-toaster.b-toaster-bottom-full .b-toaster-slot .toast {\n width: 100%;\n max-width: 100%;\n}\n.b-toaster.b-toaster-top-right, .b-toaster.b-toaster-top-left, .b-toaster.b-toaster-top-center, .b-toaster.b-toaster-top-full {\n top: 0;\n}\n.b-toaster.b-toaster-top-right .b-toaster-slot, .b-toaster.b-toaster-top-left .b-toaster-slot, .b-toaster.b-toaster-top-center .b-toaster-slot, .b-toaster.b-toaster-top-full .b-toaster-slot {\n top: 0.5rem;\n}\n.b-toaster.b-toaster-bottom-right, .b-toaster.b-toaster-bottom-left, .b-toaster.b-toaster-bottom-center, .b-toaster.b-toaster-bottom-full {\n bottom: 0;\n}\n.b-toaster.b-toaster-bottom-right .b-toaster-slot, .b-toaster.b-toaster-bottom-left .b-toaster-slot, .b-toaster.b-toaster-bottom-center .b-toaster-slot, .b-toaster.b-toaster-bottom-full .b-toaster-slot {\n bottom: 0.5rem;\n}\n.b-toaster.b-toaster-top-right .b-toaster-slot, .b-toaster.b-toaster-bottom-right .b-toaster-slot, .b-toaster.b-toaster-top-center .b-toaster-slot, .b-toaster.b-toaster-bottom-center .b-toaster-slot {\n margin-left: auto;\n}\n.b-toaster.b-toaster-top-left .b-toaster-slot, .b-toaster.b-toaster-bottom-left .b-toaster-slot, .b-toaster.b-toaster-top-center .b-toaster-slot, .b-toaster.b-toaster-bottom-center .b-toaster-slot {\n margin-right: auto;\n}\n\n.b-toaster.b-toaster-top-right .b-toast.b-toaster-enter-active, .b-toaster.b-toaster-top-right .b-toast.b-toaster-leave-active, .b-toaster.b-toaster-top-right .b-toast.b-toaster-move, .b-toaster.b-toaster-top-left .b-toast.b-toaster-enter-active, .b-toaster.b-toaster-top-left .b-toast.b-toaster-leave-active, .b-toaster.b-toaster-top-left .b-toast.b-toaster-move, .b-toaster.b-toaster-bottom-right .b-toast.b-toaster-enter-active, .b-toaster.b-toaster-bottom-right .b-toast.b-toaster-leave-active, .b-toaster.b-toaster-bottom-right .b-toast.b-toaster-move, .b-toaster.b-toaster-bottom-left .b-toast.b-toaster-enter-active, .b-toaster.b-toaster-bottom-left .b-toast.b-toaster-leave-active, .b-toaster.b-toaster-bottom-left .b-toast.b-toaster-move {\n transition: -webkit-transform 0.175s;\n transition: transform 0.175s;\n transition: transform 0.175s, -webkit-transform 0.175s;\n}\n.b-toaster.b-toaster-top-right .b-toast.b-toaster-enter-to .toast.fade, .b-toaster.b-toaster-top-right .b-toast.b-toaster-enter-active .toast.fade, .b-toaster.b-toaster-top-left .b-toast.b-toaster-enter-to .toast.fade, .b-toaster.b-toaster-top-left .b-toast.b-toaster-enter-active .toast.fade, .b-toaster.b-toaster-bottom-right .b-toast.b-toaster-enter-to .toast.fade, .b-toaster.b-toaster-bottom-right .b-toast.b-toaster-enter-active .toast.fade, .b-toaster.b-toaster-bottom-left .b-toast.b-toaster-enter-to .toast.fade, .b-toaster.b-toaster-bottom-left .b-toast.b-toaster-enter-active .toast.fade {\n transition-delay: 0.175s;\n}\n.b-toaster.b-toaster-top-right .b-toast.b-toaster-leave-active, .b-toaster.b-toaster-top-left .b-toast.b-toaster-leave-active, .b-toaster.b-toaster-bottom-right .b-toast.b-toaster-leave-active, .b-toaster.b-toaster-bottom-left .b-toast.b-toaster-leave-active {\n position: absolute;\n transition-delay: 0.175s;\n}\n.b-toaster.b-toaster-top-right .b-toast.b-toaster-leave-active .toast.fade, .b-toaster.b-toaster-top-left .b-toast.b-toaster-leave-active .toast.fade, .b-toaster.b-toaster-bottom-right .b-toast.b-toaster-leave-active .toast.fade, .b-toaster.b-toaster-bottom-left .b-toast.b-toaster-leave-active .toast.fade {\n transition-delay: 0s;\n}\n.tooltip.b-tooltip {\n display: block;\n opacity: 0.9;\n outline: 0;\n}\n.tooltip.b-tooltip.fade:not(.show) {\n opacity: 0;\n}\n.tooltip.b-tooltip.show {\n opacity: 0.9;\n}\n.tooltip.b-tooltip.noninteractive {\n pointer-events: none;\n}\n.tooltip.b-tooltip .arrow {\n margin: 0 0.25rem;\n}\n.tooltip.b-tooltip.bs-tooltip-right .arrow, .tooltip.b-tooltip.b-tooltip-dark.bs-tooltip-auto[x-placement^=right] .arrow, .tooltip.b-tooltip.b-tooltip-light.bs-tooltip-auto[x-placement^=right] .arrow, .tooltip.b-tooltip.b-tooltip-danger.bs-tooltip-auto[x-placement^=right] .arrow, .tooltip.b-tooltip.b-tooltip-warning.bs-tooltip-auto[x-placement^=right] .arrow, .tooltip.b-tooltip.b-tooltip-info.bs-tooltip-auto[x-placement^=right] .arrow, .tooltip.b-tooltip.b-tooltip-success.bs-tooltip-auto[x-placement^=right] .arrow, .tooltip.b-tooltip.b-tooltip-secondary.bs-tooltip-auto[x-placement^=right] .arrow, .tooltip.b-tooltip.b-tooltip-primary.bs-tooltip-auto[x-placement^=right] .arrow, .tooltip.b-tooltip.bs-tooltip-left .arrow, .tooltip.b-tooltip.b-tooltip-dark.bs-tooltip-auto[x-placement^=left] .arrow, .tooltip.b-tooltip.b-tooltip-light.bs-tooltip-auto[x-placement^=left] .arrow, .tooltip.b-tooltip.b-tooltip-danger.bs-tooltip-auto[x-placement^=left] .arrow, .tooltip.b-tooltip.b-tooltip-warning.bs-tooltip-auto[x-placement^=left] .arrow, .tooltip.b-tooltip.b-tooltip-info.bs-tooltip-auto[x-placement^=left] .arrow, .tooltip.b-tooltip.b-tooltip-success.bs-tooltip-auto[x-placement^=left] .arrow, .tooltip.b-tooltip.b-tooltip-secondary.bs-tooltip-auto[x-placement^=left] .arrow, .tooltip.b-tooltip.b-tooltip-primary.bs-tooltip-auto[x-placement^=left] .arrow {\n margin: 0.25rem 0;\n}\n\n.tooltip.b-tooltip-primary.bs-tooltip-top .arrow::before, .tooltip.b-tooltip-primary.bs-tooltip-auto[x-placement^=top] .arrow::before {\n border-top-color: #007bff;\n}\n.tooltip.b-tooltip-primary.bs-tooltip-right .arrow::before, .tooltip.b-tooltip-primary.bs-tooltip-auto[x-placement^=right] .arrow::before {\n border-right-color: #007bff;\n}\n.tooltip.b-tooltip-primary.bs-tooltip-bottom .arrow::before, .tooltip.b-tooltip-primary.bs-tooltip-auto[x-placement^=bottom] .arrow::before {\n border-bottom-color: #007bff;\n}\n.tooltip.b-tooltip-primary.bs-tooltip-left .arrow::before, .tooltip.b-tooltip-primary.bs-tooltip-auto[x-placement^=left] .arrow::before {\n border-left-color: #007bff;\n}\n.tooltip.b-tooltip-primary .tooltip-inner {\n color: #fff;\n background-color: #007bff;\n}\n\n.tooltip.b-tooltip-secondary.bs-tooltip-top .arrow::before, .tooltip.b-tooltip-secondary.bs-tooltip-auto[x-placement^=top] .arrow::before {\n border-top-color: #6c757d;\n}\n.tooltip.b-tooltip-secondary.bs-tooltip-right .arrow::before, .tooltip.b-tooltip-secondary.bs-tooltip-auto[x-placement^=right] .arrow::before {\n border-right-color: #6c757d;\n}\n.tooltip.b-tooltip-secondary.bs-tooltip-bottom .arrow::before, .tooltip.b-tooltip-secondary.bs-tooltip-auto[x-placement^=bottom] .arrow::before {\n border-bottom-color: #6c757d;\n}\n.tooltip.b-tooltip-secondary.bs-tooltip-left .arrow::before, .tooltip.b-tooltip-secondary.bs-tooltip-auto[x-placement^=left] .arrow::before {\n border-left-color: #6c757d;\n}\n.tooltip.b-tooltip-secondary .tooltip-inner {\n color: #fff;\n background-color: #6c757d;\n}\n\n.tooltip.b-tooltip-success.bs-tooltip-top .arrow::before, .tooltip.b-tooltip-success.bs-tooltip-auto[x-placement^=top] .arrow::before {\n border-top-color: #28a745;\n}\n.tooltip.b-tooltip-success.bs-tooltip-right .arrow::before, .tooltip.b-tooltip-success.bs-tooltip-auto[x-placement^=right] .arrow::before {\n border-right-color: #28a745;\n}\n.tooltip.b-tooltip-success.bs-tooltip-bottom .arrow::before, .tooltip.b-tooltip-success.bs-tooltip-auto[x-placement^=bottom] .arrow::before {\n border-bottom-color: #28a745;\n}\n.tooltip.b-tooltip-success.bs-tooltip-left .arrow::before, .tooltip.b-tooltip-success.bs-tooltip-auto[x-placement^=left] .arrow::before {\n border-left-color: #28a745;\n}\n.tooltip.b-tooltip-success .tooltip-inner {\n color: #fff;\n background-color: #28a745;\n}\n\n.tooltip.b-tooltip-info.bs-tooltip-top .arrow::before, .tooltip.b-tooltip-info.bs-tooltip-auto[x-placement^=top] .arrow::before {\n border-top-color: #17a2b8;\n}\n.tooltip.b-tooltip-info.bs-tooltip-right .arrow::before, .tooltip.b-tooltip-info.bs-tooltip-auto[x-placement^=right] .arrow::before {\n border-right-color: #17a2b8;\n}\n.tooltip.b-tooltip-info.bs-tooltip-bottom .arrow::before, .tooltip.b-tooltip-info.bs-tooltip-auto[x-placement^=bottom] .arrow::before {\n border-bottom-color: #17a2b8;\n}\n.tooltip.b-tooltip-info.bs-tooltip-left .arrow::before, .tooltip.b-tooltip-info.bs-tooltip-auto[x-placement^=left] .arrow::before {\n border-left-color: #17a2b8;\n}\n.tooltip.b-tooltip-info .tooltip-inner {\n color: #fff;\n background-color: #17a2b8;\n}\n\n.tooltip.b-tooltip-warning.bs-tooltip-top .arrow::before, .tooltip.b-tooltip-warning.bs-tooltip-auto[x-placement^=top] .arrow::before {\n border-top-color: #ffc107;\n}\n.tooltip.b-tooltip-warning.bs-tooltip-right .arrow::before, .tooltip.b-tooltip-warning.bs-tooltip-auto[x-placement^=right] .arrow::before {\n border-right-color: #ffc107;\n}\n.tooltip.b-tooltip-warning.bs-tooltip-bottom .arrow::before, .tooltip.b-tooltip-warning.bs-tooltip-auto[x-placement^=bottom] .arrow::before {\n border-bottom-color: #ffc107;\n}\n.tooltip.b-tooltip-warning.bs-tooltip-left .arrow::before, .tooltip.b-tooltip-warning.bs-tooltip-auto[x-placement^=left] .arrow::before {\n border-left-color: #ffc107;\n}\n.tooltip.b-tooltip-warning .tooltip-inner {\n color: #212529;\n background-color: #ffc107;\n}\n\n.tooltip.b-tooltip-danger.bs-tooltip-top .arrow::before, .tooltip.b-tooltip-danger.bs-tooltip-auto[x-placement^=top] .arrow::before {\n border-top-color: #dc3545;\n}\n.tooltip.b-tooltip-danger.bs-tooltip-right .arrow::before, .tooltip.b-tooltip-danger.bs-tooltip-auto[x-placement^=right] .arrow::before {\n border-right-color: #dc3545;\n}\n.tooltip.b-tooltip-danger.bs-tooltip-bottom .arrow::before, .tooltip.b-tooltip-danger.bs-tooltip-auto[x-placement^=bottom] .arrow::before {\n border-bottom-color: #dc3545;\n}\n.tooltip.b-tooltip-danger.bs-tooltip-left .arrow::before, .tooltip.b-tooltip-danger.bs-tooltip-auto[x-placement^=left] .arrow::before {\n border-left-color: #dc3545;\n}\n.tooltip.b-tooltip-danger .tooltip-inner {\n color: #fff;\n background-color: #dc3545;\n}\n\n.tooltip.b-tooltip-light.bs-tooltip-top .arrow::before, .tooltip.b-tooltip-light.bs-tooltip-auto[x-placement^=top] .arrow::before {\n border-top-color: #f8f9fa;\n}\n.tooltip.b-tooltip-light.bs-tooltip-right .arrow::before, .tooltip.b-tooltip-light.bs-tooltip-auto[x-placement^=right] .arrow::before {\n border-right-color: #f8f9fa;\n}\n.tooltip.b-tooltip-light.bs-tooltip-bottom .arrow::before, .tooltip.b-tooltip-light.bs-tooltip-auto[x-placement^=bottom] .arrow::before {\n border-bottom-color: #f8f9fa;\n}\n.tooltip.b-tooltip-light.bs-tooltip-left .arrow::before, .tooltip.b-tooltip-light.bs-tooltip-auto[x-placement^=left] .arrow::before {\n border-left-color: #f8f9fa;\n}\n.tooltip.b-tooltip-light .tooltip-inner {\n color: #212529;\n background-color: #f8f9fa;\n}\n\n.tooltip.b-tooltip-dark.bs-tooltip-top .arrow::before, .tooltip.b-tooltip-dark.bs-tooltip-auto[x-placement^=top] .arrow::before {\n border-top-color: #343a40;\n}\n.tooltip.b-tooltip-dark.bs-tooltip-right .arrow::before, .tooltip.b-tooltip-dark.bs-tooltip-auto[x-placement^=right] .arrow::before {\n border-right-color: #343a40;\n}\n.tooltip.b-tooltip-dark.bs-tooltip-bottom .arrow::before, .tooltip.b-tooltip-dark.bs-tooltip-auto[x-placement^=bottom] .arrow::before {\n border-bottom-color: #343a40;\n}\n.tooltip.b-tooltip-dark.bs-tooltip-left .arrow::before, .tooltip.b-tooltip-dark.bs-tooltip-auto[x-placement^=left] .arrow::before {\n border-left-color: #343a40;\n}\n.tooltip.b-tooltip-dark .tooltip-inner {\n color: #fff;\n background-color: #343a40;\n}\n\n.b-icon.bi {\n display: inline-block;\n overflow: visible;\n vertical-align: -0.15em;\n}\n.b-icon.b-icon-animation-cylon, .b-icon.b-iconstack .b-icon-animation-cylon > g {\n -webkit-transform-origin: center;\n transform-origin: center;\n -webkit-animation: 0.75s infinite ease-in-out alternate b-icon-animation-cylon;\n animation: 0.75s infinite ease-in-out alternate b-icon-animation-cylon;\n}\n@media (prefers-reduced-motion: reduce) {\n .b-icon.b-icon-animation-cylon, .b-icon.b-iconstack .b-icon-animation-cylon > g {\n -webkit-animation: none;\n animation: none;\n }\n}\n.b-icon.b-icon-animation-cylon-vertical, .b-icon.b-iconstack .b-icon-animation-cylon-vertical > g {\n -webkit-transform-origin: center;\n transform-origin: center;\n -webkit-animation: 0.75s infinite ease-in-out alternate b-icon-animation-cylon-vertical;\n animation: 0.75s infinite ease-in-out alternate b-icon-animation-cylon-vertical;\n}\n@media (prefers-reduced-motion: reduce) {\n .b-icon.b-icon-animation-cylon-vertical, .b-icon.b-iconstack .b-icon-animation-cylon-vertical > g {\n -webkit-animation: none;\n animation: none;\n }\n}\n.b-icon.b-icon-animation-fade, .b-icon.b-iconstack .b-icon-animation-fade > g {\n -webkit-transform-origin: center;\n transform-origin: center;\n -webkit-animation: 0.75s infinite ease-in-out alternate b-icon-animation-fade;\n animation: 0.75s infinite ease-in-out alternate b-icon-animation-fade;\n}\n@media (prefers-reduced-motion: reduce) {\n .b-icon.b-icon-animation-fade, .b-icon.b-iconstack .b-icon-animation-fade > g {\n -webkit-animation: none;\n animation: none;\n }\n}\n.b-icon.b-icon-animation-spin, .b-icon.b-iconstack .b-icon-animation-spin > g {\n -webkit-transform-origin: center;\n transform-origin: center;\n -webkit-animation: 2s infinite linear normal b-icon-animation-spin;\n animation: 2s infinite linear normal b-icon-animation-spin;\n}\n@media (prefers-reduced-motion: reduce) {\n .b-icon.b-icon-animation-spin, .b-icon.b-iconstack .b-icon-animation-spin > g {\n -webkit-animation: none;\n animation: none;\n }\n}\n.b-icon.b-icon-animation-spin-reverse, .b-icon.b-iconstack .b-icon-animation-spin-reverse > g {\n -webkit-transform-origin: center;\n transform-origin: center;\n animation: 2s infinite linear reverse b-icon-animation-spin;\n}\n@media (prefers-reduced-motion: reduce) {\n .b-icon.b-icon-animation-spin-reverse, .b-icon.b-iconstack .b-icon-animation-spin-reverse > g {\n -webkit-animation: none;\n animation: none;\n }\n}\n.b-icon.b-icon-animation-spin-pulse, .b-icon.b-iconstack .b-icon-animation-spin-pulse > g {\n -webkit-transform-origin: center;\n transform-origin: center;\n -webkit-animation: 1s infinite steps(8) normal b-icon-animation-spin;\n animation: 1s infinite steps(8) normal b-icon-animation-spin;\n}\n@media (prefers-reduced-motion: reduce) {\n .b-icon.b-icon-animation-spin-pulse, .b-icon.b-iconstack .b-icon-animation-spin-pulse > g {\n -webkit-animation: none;\n animation: none;\n }\n}\n.b-icon.b-icon-animation-spin-reverse-pulse, .b-icon.b-iconstack .b-icon-animation-spin-reverse-pulse > g {\n -webkit-transform-origin: center;\n transform-origin: center;\n animation: 1s infinite steps(8) reverse b-icon-animation-spin;\n}\n@media (prefers-reduced-motion: reduce) {\n .b-icon.b-icon-animation-spin-reverse-pulse, .b-icon.b-iconstack .b-icon-animation-spin-reverse-pulse > g {\n -webkit-animation: none;\n animation: none;\n }\n}\n.b-icon.b-icon-animation-throb, .b-icon.b-iconstack .b-icon-animation-throb > g {\n -webkit-transform-origin: center;\n transform-origin: center;\n -webkit-animation: 0.75s infinite ease-in-out alternate b-icon-animation-throb;\n animation: 0.75s infinite ease-in-out alternate b-icon-animation-throb;\n}\n@media (prefers-reduced-motion: reduce) {\n .b-icon.b-icon-animation-throb, .b-icon.b-iconstack .b-icon-animation-throb > g {\n -webkit-animation: none;\n animation: none;\n }\n}\n\n@-webkit-keyframes b-icon-animation-cylon {\n 0% {\n -webkit-transform: translateX(-25%);\n transform: translateX(-25%);\n }\n 100% {\n -webkit-transform: translateX(25%);\n transform: translateX(25%);\n }\n}\n\n@keyframes b-icon-animation-cylon {\n 0% {\n -webkit-transform: translateX(-25%);\n transform: translateX(-25%);\n }\n 100% {\n -webkit-transform: translateX(25%);\n transform: translateX(25%);\n }\n}\n@-webkit-keyframes b-icon-animation-cylon-vertical {\n 0% {\n -webkit-transform: translateY(25%);\n transform: translateY(25%);\n }\n 100% {\n -webkit-transform: translateY(-25%);\n transform: translateY(-25%);\n }\n}\n@keyframes b-icon-animation-cylon-vertical {\n 0% {\n -webkit-transform: translateY(25%);\n transform: translateY(25%);\n }\n 100% {\n -webkit-transform: translateY(-25%);\n transform: translateY(-25%);\n }\n}\n@-webkit-keyframes b-icon-animation-fade {\n 0% {\n opacity: 0.1;\n }\n 100% {\n opacity: 1;\n }\n}\n@keyframes b-icon-animation-fade {\n 0% {\n opacity: 0.1;\n }\n 100% {\n opacity: 1;\n }\n}\n@-webkit-keyframes b-icon-animation-spin {\n 0% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n 100% {\n -webkit-transform: rotate(359deg);\n transform: rotate(359deg);\n }\n}\n@keyframes b-icon-animation-spin {\n 0% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n 100% {\n -webkit-transform: rotate(359deg);\n transform: rotate(359deg);\n }\n}\n@-webkit-keyframes b-icon-animation-throb {\n 0% {\n opacity: 0.5;\n -webkit-transform: scale(0.5);\n transform: scale(0.5);\n }\n 100% {\n opacity: 1;\n -webkit-transform: scale(1);\n transform: scale(1);\n }\n}\n@keyframes b-icon-animation-throb {\n 0% {\n opacity: 0.5;\n -webkit-transform: scale(0.5);\n transform: scale(0.5);\n }\n 100% {\n opacity: 1;\n -webkit-transform: scale(1);\n transform: scale(1);\n }\n}\n.btn .b-icon.bi,\n.nav-link .b-icon.bi,\n.dropdown-toggle .b-icon.bi,\n.dropdown-item .b-icon.bi,\n.input-group-text .b-icon.bi {\n font-size: 125%;\n vertical-align: text-bottom;\n}\n\n/*# sourceMappingURL=bootstrap-vue.css.map */","// BCalendar custom styles\n\n.b-calendar {\n display: inline-flex;\n\n .b-calendar-inner {\n // Prevent calendar from going below this width\n min-width: 250px;\n }\n\n .b-calendar-header,\n .b-calendar-nav {\n margin-bottom: 0.25rem;\n }\n\n .b-calendar-nav .btn {\n padding: 0.25rem;\n }\n\n output {\n padding: 0.25rem;\n font-size: 80%;\n\n &.readonly {\n background-color: $input-disabled-bg;\n opacity: 1;\n }\n }\n\n .b-calendar-footer {\n margin-top: 0.5rem;\n }\n\n .b-calendar-grid {\n padding: 0;\n margin: 0;\n // Easy rounded corners on contained elements,\n // specifically the footer of the calendar grid\n overflow: hidden;\n\n .row {\n // Prevent grid rows from wrapping\n flex-wrap: nowrap;\n }\n }\n\n .b-calendar-grid-caption {\n padding: 0.25rem;\n }\n\n .b-calendar-grid-body {\n .col[data-date] {\n // We hard code the sizes in `px` to fit\n // correctly on small mobile device screens\n .btn {\n width: 32px;\n height: 32px;\n font-size: 14px;\n line-height: 1;\n margin: 3px auto;\n padding: 9px 0;\n }\n }\n }\n\n // Style to get around Bootstrap v4.4 bug\n // with hand cursor on disabled buttons\n // As well, when a button is still focusable, but is\n // `aria-disabled` we want `pointer-events: none`\n .btn {\n &:disabled,\n &.disabled,\n &[aria-disabled=\"true\"] {\n cursor: default;\n pointer-events: none;\n }\n }\n}\n",".card-img-left {\n @include border-left-radius($card-inner-border-radius);\n}\n\n.card-img-right {\n @include border-right-radius($card-inner-border-radius);\n}\n","// stylelint-disable property-disallowed-list\n// Single side border-radius\n\n// Helper function to replace negative values with 0\n@function valid-radius($radius) {\n $return: ();\n @each $value in $radius {\n @if type-of($value) == number {\n $return: append($return, max($value, 0));\n } @else {\n $return: append($return, $value);\n }\n }\n @return $return;\n}\n\n@mixin border-radius($radius: $border-radius, $fallback-border-radius: false) {\n @if $enable-rounded {\n border-radius: valid-radius($radius);\n }\n @else if $fallback-border-radius != false {\n border-radius: $fallback-border-radius;\n }\n}\n\n@mixin border-top-radius($radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n border-top-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-right-radius($radius) {\n @if $enable-rounded {\n border-top-right-radius: valid-radius($radius);\n border-bottom-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-radius($radius) {\n @if $enable-rounded {\n border-bottom-right-radius: valid-radius($radius);\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-left-radius($radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-top-left-radius($radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-top-right-radius($radius) {\n @if $enable-rounded {\n border-top-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-right-radius($radius) {\n @if $enable-rounded {\n border-bottom-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-left-radius($radius) {\n @if $enable-rounded {\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n","$bv-dropdown-defined: false !default;\n\n// Make sure to include these style definitions only once\n@if $bv-dropdown-defined == false {\n $bv-dropdown-defined: true;\n\n // Hide the caret for `no-caret` setting\n // See: https://github.com/bootstrap-vue/bootstrap-vue/issues/1473\n // See: https://github.com/twbs/bootstrap/issues/23724\n .dropdown {\n &:not(.dropleft) {\n .dropdown-toggle {\n &.dropdown-toggle-no-caret::after {\n display: none !important;\n }\n }\n }\n\n // See: https://github.com/bootstrap-vue/bootstrap-vue/issues/2909\n &.dropleft {\n .dropdown-toggle {\n &.dropdown-toggle-no-caret::before {\n display: none !important;\n }\n }\n }\n\n // Hide the focus ring introduced by Bootstratp v4.4 reboot\n // on items with tabindex=\"-1\", as we know how users feel\n // about blue rings where they don't expect them.\n .dropdown-menu:focus {\n outline: none;\n }\n\n // Prevent dropdown background overflow if there's no padding\n // See https://github.com/twbs/bootstrap/pull/27703\n // Added here to address wrapping of items\n @if $dropdown-padding-y == 0 {\n .dropdown-menu {\n > :first-child {\n .dropdown-item,\n .dropdown-form,\n .dropdown-text {\n @include border-top-radius($dropdown-inner-border-radius);\n }\n }\n\n > :last-child {\n .dropdown-item,\n .dropdown-form,\n .dropdown-text {\n @include border-bottom-radius($dropdown-inner-border-radius);\n }\n }\n }\n }\n }\n}\n","$bv-dropdown-form-defined: false !default;\n\n@if $bv-dropdown-form-defined == false {\n // This test will only include these style definitions once\n $bv-dropdown-form-defined: true;\n\n // Custom styles for \n // Based on class `.dropdown-item`\n .b-dropdown-form {\n display: inline-block;\n padding: $dropdown-item-padding-y $dropdown-item-padding-x;\n width: 100%;\n clear: both;\n font-weight: $font-weight-normal;\n\n &:focus {\n // From https://github.com/twbs/bootstrap/blob/master/scss/_reboot.scss\n // mimicking button:focus styling.\n // We add important here as anything with tabindex `-1` and focused will not\n // have a focus ring due to reboot.scss and its `!important` override.\n // Needed for keyboard navigation high-lighting\n outline: 1px dotted !important;\n outline: 5px auto -webkit-focus-ring-color !important;\n }\n\n &.disabled,\n &:disabled {\n outline: 0 !important;\n color: $dropdown-link-disabled-color;\n pointer-events: none;\n // background-color: transparent;\n // Remove CSS gradients if they're enabled\n // @if $enable-gradients {\n // background-image: none;\n // }\n }\n }\n}\n","$bv-dropdown-text-defined: false !default;\n\n@if $bv-dropdown-text-defined == false {\n // This test will only include these style definitions once\n $bv-dropdown-text-defined: true;\n\n // Custom styles for \n // Based on class `.dropdown-item`\n .b-dropdown-text {\n display: inline-block;\n padding: $dropdown-item-padding-y $dropdown-item-padding-x;\n margin-bottom: 0;\n width: 100%;\n clear: both;\n font-weight: $font-weight-lighter;\n }\n}\n","// Adds control sizing to Bootstrap custom checkbox/switch inputs\n\n.custom-checkbox.b-custom-control-lg,\n.input-group-lg .custom-checkbox {\n font-size: $font-size-lg;\n line-height: $line-height-lg;\n padding-left: $b-custom-control-gutter-lg + $b-custom-control-indicator-size-lg;\n\n .custom-control-label::before {\n top: ($font-size-lg * $line-height-lg - $b-custom-control-indicator-size-lg) * 0.5;\n left: -($b-custom-control-gutter-lg + $b-custom-control-indicator-size-lg);\n width: $b-custom-control-indicator-size-lg;\n height: $b-custom-control-indicator-size-lg;\n @include border-radius($b-custom-checkbox-indicator-border-radius-lg);\n }\n\n .custom-control-label::after {\n top: ($font-size-lg * $line-height-lg - $b-custom-control-indicator-size-lg) * 0.5;\n left: -($b-custom-control-gutter-lg + $b-custom-control-indicator-size-lg);\n width: $b-custom-control-indicator-size-lg;\n height: $b-custom-control-indicator-size-lg;\n background-size: $b-custom-control-indicator-bg-size-lg;\n }\n}\n\n.custom-checkbox.b-custom-control-sm,\n.input-group-sm .custom-checkbox {\n font-size: $font-size-sm;\n line-height: $line-height-sm;\n padding-left: $b-custom-control-gutter-sm + $b-custom-control-indicator-size-sm;\n\n .custom-control-label::before {\n top: ($font-size-sm * $line-height-sm - $b-custom-control-indicator-size-sm) * 0.5;\n left: -($b-custom-control-gutter-sm + $b-custom-control-indicator-size-sm);\n width: $b-custom-control-indicator-size-sm;\n height: $b-custom-control-indicator-size-sm;\n @include border-radius($b-custom-checkbox-indicator-border-radius-sm);\n }\n\n .custom-control-label::after {\n top: ($font-size-sm * $line-height-sm - $b-custom-control-indicator-size-sm) * 0.5;\n left: -($b-custom-control-gutter-sm + $b-custom-control-indicator-size-sm);\n width: $b-custom-control-indicator-size-sm;\n height: $b-custom-control-indicator-size-sm;\n background-size: $b-custom-control-indicator-bg-size-sm;\n }\n}\n\n.custom-switch.b-custom-control-lg,\n.input-group-lg .custom-switch {\n padding-left: $b-custom-switch-width-lg + $b-custom-control-gutter-lg;\n\n .custom-control-label {\n font-size: $font-size-lg;\n line-height: $line-height-lg;\n\n &::before {\n top: ($font-size-lg * $line-height-lg - $b-custom-control-indicator-size-lg) * 0.5;\n height: $b-custom-control-indicator-size-lg;\n left: -($b-custom-switch-width-lg + $b-custom-control-gutter-lg);\n width: $b-custom-switch-width-lg;\n border-radius: $b-custom-switch-indicator-border-radius-lg;\n }\n\n &::after {\n top: calc(\n #{(($font-size-lg * $line-height-lg - $b-custom-control-indicator-size-lg) * 0.5)} + #{$custom-control-indicator-border-width *\n 2}\n );\n left: calc(\n #{- ($b-custom-switch-width-lg + $b-custom-control-gutter-lg)} + #{$custom-control-indicator-border-width *\n 2}\n );\n width: $b-custom-switch-indicator-size-lg;\n height: $b-custom-switch-indicator-size-lg;\n border-radius: $b-custom-switch-indicator-border-radius-lg;\n background-size: $b-custom-control-indicator-bg-size-lg;\n }\n }\n\n .custom-control-input:checked ~ .custom-control-label {\n &::after {\n transform: translateX($b-custom-switch-width-lg - $b-custom-control-indicator-size-lg);\n }\n }\n}\n\n.custom-switch.b-custom-control-sm,\n.input-group-sm .custom-switch {\n padding-left: $b-custom-switch-width-sm + $b-custom-control-gutter-sm;\n\n .custom-control-label {\n font-size: $font-size-sm;\n line-height: $line-height-sm;\n\n &::before {\n top: ($font-size-sm * $line-height-sm - $b-custom-control-indicator-size-sm) * 0.5;\n left: -($b-custom-switch-width-sm + $b-custom-control-gutter-sm);\n width: $b-custom-switch-width-sm;\n height: $b-custom-control-indicator-size-sm;\n border-radius: $b-custom-switch-indicator-border-radius-sm;\n }\n\n &::after {\n top: calc(\n #{(($font-size-sm * $line-height-sm - $b-custom-control-indicator-size-sm) * 0.5)} + #{$custom-control-indicator-border-width *\n 2}\n );\n left: calc(\n #{- ($b-custom-switch-width-sm + $b-custom-control-gutter-sm)} + #{$custom-control-indicator-border-width *\n 2}\n );\n width: $b-custom-switch-indicator-size-sm;\n height: $b-custom-switch-indicator-size-sm;\n border-radius: $b-custom-switch-indicator-border-radius-sm;\n background-size: $b-custom-control-indicator-bg-size-sm;\n }\n }\n\n .custom-control-input:checked ~ .custom-control-label {\n &::after {\n transform: translateX($b-custom-switch-width-sm - $b-custom-control-indicator-size-sm);\n }\n }\n}\n","$bv-input-group-dropdown-patched: false !default;\n\n// Make sure to include these style definitions only once\n@if $bv-input-group-dropdown-patched == false {\n $bv-input-group-dropdown-patched: true;\n\n // Workaround for https://github.com/bootstrap-vue/bootstrap-vue/issues/1560\n // Workaround for https://github.com/bootstrap-vue/bootstrap-vue/issues/2114 */\n // Based on: `~bootstrap/scss/_input-group.scss`\n .input-group {\n > .input-group-prepend > .btn-group,\n > .input-group-append:not(:last-child) > .btn-group,\n > .input-group-append:last-child > .btn-group:not(:last-child):not(.dropdown-toggle) {\n > .btn {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n }\n\n > .input-group-append > .btn-group,\n > .input-group-prepend:not(:first-child) > .btn-group,\n > .input-group-prepend:first-child > .btn-group:not(:first-child) {\n > .btn {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n }\n }\n}\n","$bv-form-btn-label-control-defined: false !default;\n\n// Make sure to include these style definitions only once\n@if $bv-form-btn-label-control-defined == false {\n $bv-form-btn-label-control-defined: true;\n\n // Custom BVFormBtnLabelControl styling\n // Currently used by BFormTimepicker and BFormDatepicker\n // Does not apply to button-only styling\n .b-form-btn-label-control.form-control {\n display: flex;\n align-items: stretch;\n height: auto;\n padding: 0;\n // Remove background validation images and padding from\n // main wrapper as they will be present in the inner label element\n background-image: none;\n\n @at-root {\n // Handle `.input-group` padding overrides\n .input-group & {\n padding: 0;\n }\n }\n\n @at-root {\n // Prevent the button/label from reversing order on in horizontal RTL mode\n [dir=\"rtl\"] &,\n &[dir=\"rtl\"] {\n flex-direction: row-reverse;\n\n > label {\n text-align: right;\n }\n }\n }\n\n > .btn {\n line-height: 1;\n font-size: inherit;\n box-shadow: none !important;\n border: 0;\n\n &:disabled {\n pointer-events: none;\n }\n }\n\n &.is-valid > .btn {\n color: $form-feedback-valid-color;\n }\n\n &.is-invalid > .btn {\n color: $form-feedback-invalid-color;\n }\n\n > .dropdown-menu {\n padding: 0.5rem;\n }\n\n > .form-control {\n height: auto;\n // Set a minimum height, as we have height set to `auto`\n // (to allow the content to wrap, if needed)\n // We subtract off the border, as we have border set to `0`\n min-height: calc(#{$input-height} - #{$input-height-border});\n padding-left: 0.25rem;\n margin: 0;\n border: 0;\n outline: 0;\n background: transparent;\n word-break: break-word;\n font-size: inherit;\n white-space: normal;\n @if $enable-pointer-cursor-for-buttons {\n cursor: pointer;\n }\n\n &.form-control-sm {\n min-height: calc(#{$input-height-sm} - #{$input-height-border});\n }\n\n &.form-control-lg {\n min-height: calc(#{$input-height-lg} - #{$input-height-border});\n }\n\n @at-root {\n // Handle input group sizing\n .input-group.input-group-sm & {\n min-height: calc(#{$input-height-sm} - #{$input-height-border});\n padding-top: $input-padding-y-sm;\n padding-bottom: $input-padding-y-sm;\n }\n\n .input-group.input-group-lg & {\n min-height: calc(#{$input-height-lg} - #{$input-height-border});\n padding-top: $input-padding-y-lg;\n padding-bottom: $input-padding-y-lg;\n }\n }\n }\n\n // Disabled and read-only styling\n &[aria-disabled=\"true\"],\n &[aria-readonly=\"true\"] {\n background-color: $input-disabled-bg;\n opacity: 1;\n }\n\n &[aria-disabled=\"true\"] {\n pointer-events: none;\n\n > label {\n cursor: default;\n }\n }\n }\n\n // Button only mode menu padding overrides\n .b-form-btn-label-control.btn-group {\n > .dropdown-menu {\n padding: 0.5rem;\n }\n }\n}\n","// Adds in sizes for custom-file\n\n// Prevent file names from overflowing the file input\n// These styles can be removed when the related Bootstrap bug gets fixed:\n// https://github.com/twbs/bootstrap/issues/31577\n.custom-file-label {\n white-space: nowrap;\n overflow-x: hidden;\n}\n\n.b-custom-control-lg,\n.input-group-lg {\n &.custom-file,\n .custom-file-input,\n .custom-file-label {\n font-size: $b-custom-file-font-size-lg;\n height: $b-custom-file-height-lg;\n }\n\n .custom-file-label,\n .custom-file-label:after {\n padding: $b-custom-file-padding-y-lg $b-custom-file-padding-x-lg;\n line-height: $b-custom-file-line-height-lg;\n }\n\n .custom-file-label {\n @include border-radius($b-custom-file-border-radius-lg);\n\n &::after {\n font-size: inherit;\n height: $b-custom-file-height-inner-lg;\n @include border-radius(0 $b-custom-file-border-radius-lg $b-custom-file-border-radius-lg 0);\n }\n }\n}\n\n.b-custom-control-sm,\n.input-group-sm {\n &.custom-file,\n .custom-file-input,\n .custom-file-label {\n font-size: $b-custom-file-font-size-sm;\n height: $b-custom-file-height-sm;\n }\n\n .custom-file-label,\n .custom-file-label:after {\n padding: $b-custom-file-padding-y-sm $b-custom-file-padding-x-sm;\n line-height: $b-custom-file-line-height-sm;\n }\n\n .custom-file-label {\n @include border-radius($b-custom-file-border-radius-sm);\n\n &::after {\n font-size: inherit;\n height: $b-custom-file-height-inner-sm;\n @include border-radius(0 $b-custom-file-border-radius-sm $b-custom-file-border-radius-sm 0);\n }\n }\n}\n","// Temporary fix for cssnano bug: https://github.com/cssnano/cssnano/issues/712\n// By moving center to last value in `background-position` property\n// See: https://github.com/bootstrap-vue/bootstrap-vue/issues/2599\n@if $enable-validation-icons {\n .form-control {\n .was-validated &:invalid,\n .was-validated &:valid,\n &.is-invalid,\n &.is-valid {\n background-position: right $input-height-inner-quarter center;\n }\n }\n}\n\n// Bootstrap v4.x does not have special styling for color input\n// So we define some basic styles to compensate\ninput[type=\"color\"].form-control {\n height: $input-height;\n // We use the smaller padding to make the color block larger\n padding: ($input-padding-y-sm * 0.5) ($input-padding-x-sm * 0.5);\n}\n\ninput[type=\"color\"].form-control.form-control-sm,\n.input-group-sm input[type=\"color\"].form-control {\n height: $input-height-sm;\n // We use the smaller padding to make the color block larger\n padding: ($input-padding-y-sm * 0.5) ($input-padding-x-sm * 0.5);\n}\n\ninput[type=\"color\"].form-control.form-control-lg,\n.input-group-lg input[type=\"color\"].form-control {\n height: $input-height-lg;\n padding: ($input-padding-y-sm * 0.5) ($input-padding-x-sm * 0.5);\n}\n\ninput[type=\"color\"].form-control:disabled {\n // Disabled styling needs to be a bit different than regular inputs\n background-color: $gray-500;\n opacity: $btn-disabled-opacity;\n}\n\n// --- Base `.input-group > .custom-range` styling (no PR yet on Bootstrap v4) ---\n.input-group {\n > .custom-range {\n position: relative;\n flex: 1 1 auto;\n width: 1%;\n margin-bottom: 0;\n\n + .form-control,\n + .form-control-plaintext,\n + .custom-select,\n + .custom-range,\n + .custom-file {\n margin-left: -$input-border-width;\n }\n }\n\n > .form-control,\n > .form-control-plaintext,\n > .custom-select,\n > .custom-range,\n > .custom-file {\n + .custom-range {\n margin-left: -$input-border-width;\n }\n }\n\n > .custom-range:focus {\n z-index: 3;\n }\n\n > .custom-range {\n &:not(:last-child) {\n @include border-right-radius(0);\n }\n &:not(:first-child) {\n @include border-left-radius(0);\n }\n }\n\n > .custom-range {\n height: $input-height;\n padding: 0 $input-padding-x;\n background-color: $input-bg;\n background-clip: padding-box;\n border: $input-border-width solid $input-border-color;\n height: $input-height;\n\n @if $enable-rounded {\n border-radius: $input-border-radius;\n } @else {\n border-radius: 0;\n }\n\n @include box-shadow($input-box-shadow);\n @include transition($input-transition);\n // Bootstrap v4.3.2 has deprecated this mixin\n // @include form-control-focus();\n // So we manually add its content here\n &:focus {\n color: $input-focus-color; // only needed for fallback to text input\n background-color: $input-focus-bg;\n border-color: $input-focus-border-color;\n outline: 0;\n @if $enable-shadows {\n box-shadow: $input-box-shadow, $input-focus-box-shadow;\n } @else {\n box-shadow: $input-focus-box-shadow;\n }\n }\n\n &:disabled,\n &[readonly] {\n background-color: $input-disabled-bg;\n }\n }\n}\n\n.input-group-lg > .custom-range {\n height: $input-height-lg;\n padding: 0 $input-padding-x-lg;\n @include border-radius($input-border-radius-lg);\n}\n\n.input-group-sm > .custom-range {\n height: $input-height-sm;\n padding: 0 $input-padding-x-sm;\n @include border-radius($input-border-radius-sm);\n}\n\n// --- : custom-range validation styling - valid (no PR yet for Bootstrap v4.2) ---\n// Mixin for generating `.input-group .custom-range` validation styling\n@mixin bv-custom-range-validation-state($state, $color) {\n .input-group .custom-range {\n .was-validated &:#{$state},\n &.is-#{$state} {\n border-color: $color;\n\n &:focus {\n border-color: $color;\n box-shadow: 0 0 0 $input-focus-width rgba($color, 0.25);\n }\n }\n }\n\n .custom-range {\n .was-validated &:#{$state},\n &.is-#{$state} {\n // Pseudo-elements must be split across multiple rulesets to have an affect\n &:focus {\n &::-webkit-slider-thumb {\n box-shadow: 0 0 0 1px $body-bg, 0 0 0 $input-btn-focus-width lighten($color, 35%);\n }\n &::-moz-range-thumb {\n box-shadow: 0 0 0 1px $body-bg, 0 0 0 $input-btn-focus-width lighten($color, 35%);\n }\n &::-ms-thumb {\n box-shadow: 0 0 0 1px $body-bg, 0 0 0 $input-btn-focus-width lighten($color, 35%);\n }\n }\n\n &::-webkit-slider-thumb {\n background-color: $color;\n background-image: none;\n\n &:active {\n background-color: lighten($color, 35%);\n background-image: none;\n }\n }\n\n &::-webkit-slider-runnable-track {\n background-color: rgba($color, 0.35);\n }\n\n &::-moz-range-thumb {\n background-color: $color;\n background-image: none;\n\n &:active {\n background-color: lighten($color, 35%);\n background-image: none;\n }\n }\n\n &::-moz-range-track {\n background: rgba($color, 0.35);\n }\n\n ~ .#{$state}-feedback,\n ~ .#{$state}-tooltip {\n display: block;\n }\n\n &::-ms-thumb {\n background-color: $color;\n background-image: none;\n\n &:active {\n background-color: lighten($color, 35%);\n background-image: none;\n }\n }\n\n &::-ms-track-lower {\n background: rgba($color, 0.35);\n }\n &::-ms-track-upper {\n background: rgba($color, 0.35);\n }\n }\n }\n}\n\n@include bv-custom-range-validation-state(\"valid\", $form-feedback-valid-color);\n@include bv-custom-range-validation-state(\"invalid\", $form-feedback-invalid-color);\n","// stylelint-disable property-disallowed-list\n@mixin transition($transition...) {\n @if length($transition) == 0 {\n $transition: $transition-base;\n }\n\n @if length($transition) > 1 {\n @each $value in $transition {\n @if $value == null or $value == none {\n @warn \"The keyword 'none' or 'null' must be used as a single argument.\";\n }\n }\n }\n\n @if $enable-transitions {\n @if nth($transition, 1) != null {\n transition: $transition;\n }\n\n @if $enable-prefers-reduced-motion-media-query and nth($transition, 1) != null and nth($transition, 1) != none {\n @media (prefers-reduced-motion: reduce) {\n transition: none;\n }\n }\n }\n}\n","// Adds control sizing to Bootstrap custom radio inputs\n\n.custom-radio.b-custom-control-lg,\n.input-group-lg .custom-radio {\n font-size: $font-size-lg;\n line-height: $line-height-lg;\n padding-left: $b-custom-control-gutter-lg + $b-custom-control-indicator-size-lg;\n\n .custom-control-label::before {\n top: ($font-size-lg * $line-height-lg - $b-custom-control-indicator-size-lg) * 0.5;\n left: -($b-custom-control-gutter-lg + $b-custom-control-indicator-size-lg);\n width: $b-custom-control-indicator-size-lg;\n height: $b-custom-control-indicator-size-lg;\n border-radius: $b-custom-radio-indicator-border-radius-lg;\n }\n\n .custom-control-label::after {\n top: ($font-size-lg * $line-height-lg - $b-custom-control-indicator-size-lg) * 0.5;\n left: -($b-custom-control-gutter-lg + $b-custom-control-indicator-size-lg);\n width: $b-custom-control-indicator-size-lg;\n height: $b-custom-control-indicator-size-lg;\n background: no-repeat 50% / #{$b-custom-control-indicator-bg-size-lg};\n }\n}\n\n.custom-radio.b-custom-control-sm,\n.input-group-sm .custom-radio {\n font-size: $font-size-sm;\n line-height: $line-height-sm;\n padding-left: $b-custom-control-gutter-sm + $b-custom-control-indicator-size-sm;\n\n .custom-control-label::before {\n top: ($font-size-sm * $line-height-sm - $b-custom-control-indicator-size-sm) * 0.5;\n left: -($b-custom-control-gutter-sm + $b-custom-control-indicator-size-sm);\n width: $b-custom-control-indicator-size-sm;\n height: $b-custom-control-indicator-size-sm;\n border-radius: $b-custom-radio-indicator-border-radius-sm;\n }\n\n .custom-control-label::after {\n top: ($font-size-sm * $line-height-sm - $b-custom-control-indicator-size-sm) * 0.5;\n left: -($b-custom-control-gutter-sm + $b-custom-control-indicator-size-sm);\n width: $b-custom-control-indicator-size-sm;\n height: $b-custom-control-indicator-size-sm;\n background: no-repeat 50% / #{$b-custom-control-indicator-bg-size-sm};\n }\n}\n",".b-rating {\n text-align: center;\n\n &.d-inline-flex {\n width: auto;\n }\n\n .b-rating-star,\n .b-rating-value {\n padding: 0 0.25em;\n }\n\n .b-rating-value {\n // Keep the stars from moving when value changes (usually)\n min-width: 2.5em;\n }\n\n .b-rating-star {\n display: inline-flex;\n justify-content: center;\n outline: 0;\n\n .b-rating-icon {\n display: inline-flex;\n transition: all 0.15s ease-in-out;\n }\n }\n\n &.disabled,\n &:disabled {\n background-color: $input-disabled-bg;\n color: $text-muted;\n }\n\n &:not(.disabled):not(.readonly) {\n .b-rating-star {\n cursor: pointer;\n }\n\n // Zoom focused or hovered icons\n &:focus:not(:hover) .b-rating-star.focused,\n .b-rating-star:hover {\n .b-rating-icon {\n transform: scale(1.5);\n }\n }\n }\n\n // Flip the half icon if RTL mode\n // We transform the outer star wrapper so that we do not\n // interfere with the hover/focus transform above\n &[dir=\"rtl\"] {\n .b-rating-star-half {\n transform: scale(-1, 1);\n }\n }\n}\n",".b-form-spinbutton {\n text-align: center;\n // Quick way to get end buttons rounded on outside edges\n overflow: hidden;\n // Hide validation icon, as there is no room for it\n background-image: none;\n padding: 0;\n\n @at-root {\n // Prevent the buttons from reversing order on in horizontal RTL mode\n [dir=\"rtl\"] &:not(.flex-column),\n &[dir=\"rtl\"]:not(.flex-column) {\n flex-direction: row-reverse;\n }\n }\n\n output {\n font-size: inherit;\n outline: 0;\n border: 0;\n background-color: transparent;\n width: auto;\n margin: 0;\n padding: 0 0.25rem;\n\n > div,\n > bdi {\n display: block;\n min-width: 2.25em;\n // We set a height to ensure an empty value isn't collapsed\n height: 1em * $input-line-height;\n }\n }\n\n &.flex-column {\n height: auto;\n width: auto;\n\n output {\n margin: 0 0.25rem;\n padding: 0.25rem 0;\n }\n }\n\n &:not(.d-inline-flex):not(.flex-column) {\n output: {\n width: 100%;\n }\n }\n\n &.d-inline-flex:not(.flex-column) {\n width: auto;\n }\n\n .btn {\n line-height: 1;\n box-shadow: none !important;\n\n &:disabled {\n pointer-events: none;\n }\n\n &:hover:not(:disabled) > div > .b-icon {\n transform: scale(1.25);\n }\n }\n\n &.disabled,\n &.readonly {\n background-color: $input-disabled-bg;\n }\n\n &.disabled {\n pointer-events: none;\n }\n}\n",".b-form-tags {\n &.focus {\n color: $input-focus-color;\n background-color: $input-focus-bg;\n border-color: $input-focus-border-color;\n outline: 0;\n @if $enable-shadows {\n box-shadow: $input-box-shadow, $input-focus-box-shadow;\n } @else {\n box-shadow: $input-focus-box-shadow;\n }\n\n &.is-valid {\n border-color: $form-feedback-valid-color;\n box-shadow: 0 0 0 $input-focus-width rgba($form-feedback-valid-color, 0.25);\n }\n\n &.is-invalid {\n border-color: $form-feedback-invalid-color;\n box-shadow: 0 0 0 $input-focus-width rgba($form-feedback-invalid-color, 0.25);\n }\n }\n\n &.disabled {\n background-color: $input-disabled-bg;\n }\n}\n\n.b-form-tags-list {\n margin-top: -0.25rem;\n\n .b-form-tags-field,\n .b-form-tag {\n margin-top: 0.25rem;\n }\n}\n\n.b-form-tags-input {\n color: $input-color;\n}\n\n.b-form-tag {\n // Override default badge settings\n // Due to using text-truncate on the inner content\n font-size: 75%;\n font-weight: normal;\n line-height: $input-line-height;\n margin-right: 0.25rem;\n\n &.disabled {\n opacity: 0.75;\n }\n\n // Override default close button settings\n > button.b-form-tag-remove {\n color: inherit;\n font-size: 125%;\n line-height: 1;\n float: none;\n margin-left: 0.25rem;\n }\n}\n\n.form-control-sm .b-form-tag {\n line-height: $input-line-height-sm;\n}\n\n.form-control-lg .b-form-tag {\n line-height: $input-line-height-lg;\n}\n",".media-aside {\n display: flex;\n margin-right: 1rem;\n}\n\n.media-aside-right {\n margin-right: 0;\n margin-left: 1rem;\n}\n","// Needed to allow Vue transition system to work with Bootstrap v4 .modal-backdrop\n// as modal opacity is 1 by default\n.modal-backdrop {\n opacity: $modal-backdrop-opacity;\n}\n","// and require the helper utility classes\n@import \"../../utilities\";\n\n$bv-pagination-classes-defined: false !default;\n\n// Make sure to include these style definitions only once\n@if $bv-pagination-classes-defined == false {\n $bv-pagination-classes-defined: true;\n\n // Pagination pill style\n .b-pagination-pills {\n .page-item {\n .page-link {\n border-radius: 50rem !important;\n margin-left: 0.25rem;\n line-height: 1;\n }\n\n &:first-child {\n .page-link {\n margin-left: 0;\n }\n }\n }\n }\n}\n","// Some overrides to make popover transitions work with Vue ``\n.popover.b-popover {\n display: block;\n opacity: 1;\n // Needed due to Bootstrap v4.4 reboot.css changes\n outline: 0;\n\n &.fade:not(.show) {\n opacity: 0;\n }\n\n &.show {\n opacity: 1;\n }\n}\n\n@if $bv-enable-popover-variants {\n @each $variant, $value in $theme-colors {\n .b-popover-#{$variant} {\n $po-bg-color: theme-color-level($variant, $b-popover-bg-level);\n $po-border-color: theme-color-level($variant, $b-popover-border-level);\n $po-color: theme-color-level($variant, $b-popover-color-level);\n $po-header-bg: darken($po-bg-color, 3%);\n $po-header-color: color-yiq($po-header-bg);\n $po-arrow-color: $po-bg-color;\n $po-arrow-color-bottom: $po-header-bg;\n $po-arrow-outer-color: fade-in($po-border-color, 0.05);\n\n &.popover {\n background-color: $po-bg-color;\n border-color: $po-border-color;\n }\n\n &.bs-popover-top {\n > .arrow {\n &::before {\n border-top-color: $po-arrow-outer-color;\n }\n\n &::after {\n border-top-color: $po-arrow-color;\n }\n }\n }\n\n &.bs-popover-right {\n > .arrow {\n &::before {\n border-right-color: $po-arrow-outer-color;\n }\n\n &::after {\n border-right-color: $po-arrow-color;\n }\n }\n }\n\n &.bs-popover-bottom {\n > .arrow {\n &::before {\n border-bottom-color: $po-arrow-outer-color;\n }\n\n &::after {\n // Use the header bg color\n border-bottom-color: $po-arrow-color-bottom;\n }\n }\n\n .popover-header::before {\n border-bottom-color: $po-header-bg;\n }\n }\n\n &.bs-popover-left {\n > .arrow {\n &::before {\n border-left-color: $po-arrow-outer-color;\n }\n\n &::after {\n border-left-color: $po-arrow-color;\n }\n }\n }\n\n &.bs-popover-auto {\n &[x-placement^=\"top\"] {\n @extend .bs-popover-top;\n }\n &[x-placement^=\"right\"] {\n @extend .bs-popover-right;\n }\n &[x-placement^=\"bottom\"] {\n @extend .bs-popover-bottom;\n }\n &[x-placement^=\"left\"] {\n @extend .bs-popover-left;\n }\n }\n\n .popover-header {\n color: $po-header-color;\n background-color: $po-header-bg;\n border-bottom-color: darken($po-header-bg, 5%);\n }\n\n .popover-body {\n color: $po-color;\n }\n }\n }\n}\n",".b-sidebar-outer {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n height: 0;\n overflow: visible;\n z-index: $b-sidebar-zindex;\n}\n\n.b-sidebar-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n z-index: -1;\n width: 100vw;\n height: 100vh;\n opacity: 0.6;\n}\n\n.b-sidebar {\n display: flex;\n flex-direction: column;\n position: fixed;\n top: 0;\n width: $b-sidebar-width;\n max-width: 100%;\n height: 100vh;\n max-height: 100%;\n margin: 0;\n outline: 0;\n transform: translateX(0);\n\n &.slide {\n transition: transform $b-sidebar-transition-duration ease-in-out;\n @media (prefers-reduced-motion: reduce) {\n transition: none;\n }\n }\n\n &:not(.b-sidebar-right) {\n left: 0;\n right: auto;\n\n &.slide:not(.show) {\n transform: translateX(-100%);\n }\n\n > .b-sidebar-header .close {\n margin-left: auto;\n }\n }\n\n &.b-sidebar-right {\n left: auto;\n right: 0;\n\n &.slide:not(.show) {\n transform: translateX(100%);\n }\n\n > .b-sidebar-header .close {\n margin-right: auto;\n }\n }\n\n > .b-sidebar-header {\n font-size: $b-sidebar-header-font-size;\n padding: $b-sidebar-header-padding-y $b-sidebar-header-padding-x;\n display: flex;\n flex-direction: row;\n flex-grow: 0;\n align-items: center;\n\n @at-root {\n // Keep the buttons on the correct end when in RTL mode\n [dir=\"rtl\"] & {\n flex-direction: row-reverse;\n }\n }\n\n .close {\n float: none;\n font-size: $b-sidebar-header-font-size;\n }\n }\n\n > .b-sidebar-body {\n flex-grow: 1;\n height: 100%;\n overflow-y: auto;\n }\n\n > .b-sidebar-footer {\n flex-grow: 0;\n }\n}\n","// Wrapper\n.b-skeleton-wrapper {\n cursor: $b-skeleton-loading-cursor;\n}\n\n// Base\n.b-skeleton {\n position: relative;\n overflow: hidden;\n background-color: $b-skeleton-background-color;\n cursor: $b-skeleton-loading-cursor;\n // https://gist.github.com/ayamflow/b602ab436ac9f05660d9c15190f4fd7b\n mask-image: radial-gradient(white, black);\n\n // Use `::before` since `::after` is used for the wave-animation\n &::before {\n content: \"\\00a0\";\n }\n}\n\n// Text\n.b-skeleton-text {\n height: $font-size-base;\n margin-bottom: $b-skeleton-text-spacing;\n\n @if $enable-rounded {\n border-radius: 0.25rem;\n }\n}\n\n// Button\n.b-skeleton-button {\n width: $b-skeleton-btn-width;\n padding: $btn-padding-y $btn-padding-x;\n font-size: $btn-font-size;\n line-height: $btn-line-height;\n\n @if $enable-rounded {\n border-radius: $btn-border-radius;\n }\n}\n\n// Avatar\n.b-skeleton-avatar {\n width: 2.5em;\n height: 2.5em;\n border-radius: 50%;\n}\n\n// Input\n.b-skeleton-input {\n height: $input-height;\n padding: $input-padding-y $input-padding-x;\n line-height: $input-line-height;\n border: $input-border-color solid $input-border-width;\n\n @if $enable-rounded {\n border-radius: $input-border-radius;\n }\n}\n\n// Icon\n.b-skeleton-icon-wrapper {\n svg {\n color: $b-skeleton-background-color;\n }\n}\n\n// Image\n.b-skeleton-img {\n height: 100%;\n width: 100%;\n}\n\n// Wave animation\n.b-skeleton-animate-wave {\n &::after {\n content: \"\";\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 0;\n\n background: $b-skeleton-animate-wave-background;\n animation: b-skeleton-animate-wave $b-skeleton-animation-duration linear infinite;\n\n @media (prefers-reduced-motion: reduce) {\n background: none;\n animation: none;\n }\n }\n}\n\n@keyframes b-skeleton-animate-wave {\n from {\n transform: translateX(-100%);\n }\n to {\n transform: translateX(100%);\n }\n}\n\n// Fade animation\n.b-skeleton-animate-fade {\n animation: b-skeleton-animate-fade ($b-skeleton-animation-duration * 0.5) ease-in-out alternate\n infinite;\n\n @media (prefers-reduced-motion: reduce) {\n animation: none;\n }\n}\n\n@keyframes b-skeleton-animate-fade {\n 0% {\n opacity: 1;\n }\n 100% {\n opacity: 0.4;\n }\n}\n\n// Throb animation\n.b-skeleton-animate-throb {\n animation: b-skeleton-animate-throb ($b-skeleton-animation-duration * 0.5) ease-in alternate\n infinite;\n\n @media (prefers-reduced-motion: reduce) {\n animation: none;\n }\n}\n\n@keyframes b-skeleton-animate-throb {\n 0% {\n transform: scale(1);\n }\n 100% {\n transform: scale(0.975);\n }\n}\n","// --- General styling ---\n\n.table.b-table {\n // Table fixed header width layout\n &.b-table-fixed {\n // Fixed width columns\n table-layout: fixed;\n }\n\n // Disabled border-collapse\n // Mainly for use with sticky headers and columns\n &.b-table-no-border-collapse {\n border-collapse: separate;\n border-spacing: 0;\n }\n\n // Table busy styling\n &[aria-busy=\"true\"] {\n opacity: $b-table-busy-opacity;\n }\n\n // Details row styling\n > tbody > tr.b-table-details > td {\n border-top: none !important;\n }\n\n // Caption positioning\n > caption {\n caption-side: bottom;\n }\n\n &.b-table-caption-top {\n > caption {\n caption-side: top !important;\n }\n }\n\n // Re-declare `table-active` class here so that it can take\n // precedence over row variants when used on selectable rows\n // Class can only be applied to rows and not individual cells\n > tbody > .table-active {\n &,\n > th,\n > td {\n background-color: $table-active-bg;\n }\n }\n\n // Add special hover styling for `table-active` row variant\n &.table-hover > tbody > tr.table-active:hover {\n td,\n th {\n color: $table-hover-color;\n // `$table-hover-bg` default is a very transparent black\n // We overlay it over the background color to achieve the\n // same color effect while keeping the background solid\n background-image: linear-gradient($table-hover-bg, $table-hover-bg);\n background-repeat: no-repeat;\n }\n }\n\n // Add in missing `bg-active` class for table tbody rows\n // Bootstrap v4.3 is missing this for dark tables\n // `bg-active` class cannot be applied to individual cells\n > tbody > .bg-active {\n &,\n > th,\n > td {\n // Important is needed to override the standard `bg-variants`\n // as the also use `!important`\n background-color: $table-dark-active-bg !important;\n }\n }\n\n // Add special hover styling for `bg-active` row variant (dark tables)\n &.table-hover.table-dark > tbody > tr.bg-active:hover {\n td,\n th {\n color: $table-dark-hover-color;\n // `$table-dark-hover-bg` default is a very transparent white\n // We overlay it over the background color to achieve the\n // same color effect while keeping the background solid\n background-image: linear-gradient($table-dark-hover-bg, $table-dark-hover-bg);\n background-repeat: no-repeat;\n }\n }\n}\n\n// --- Table sticky header styling ---\n\n@if $bv-enable-table-sticky {\n .b-table-sticky-header,\n .table-responsive,\n [class*=\"table-responsive-\"] {\n // Move the table bottom margin to the wrapper\n margin-bottom: $spacer;\n\n > .table {\n // Reset `margin-bottom` to we don't get a space after\n // the table inside the scroll area\n margin-bottom: 0;\n }\n }\n\n .b-table-sticky-header {\n overflow-y: auto;\n // Annoyingly, when overflow-y is set, browsers convert\n // 'overflow-x: visible' to 'overflow-x: auto' - so it becomes\n // responsive in the x axis automatically\n // Default `max-height` before a scrollbar will show\n // We don't use `height` as table could be shorter than this value\n max-height: $b-table-sticky-header-max-height;\n }\n\n @media print {\n // Override any styles (including inline styles)\n // when printing\n .b-table-sticky-header {\n overflow-y: visible !important;\n max-height: none !important;\n }\n }\n\n @supports (position: sticky) {\n // Positioning of sticky headers\n .b-table-sticky-header > .table.b-table > thead > tr > th {\n // Header cells need to be sticky on top\n position: sticky;\n top: 0;\n z-index: 2;\n }\n\n // Positioning of sticky columns\n // Sticky columns only work when table has sticky\n // headers and/or is responsive\n .b-table-sticky-header,\n .table-responsive,\n [class*=\"table-responsive-\"] {\n > .table.b-table {\n > thead,\n > tbody,\n > tfoot {\n > tr > .b-table-sticky-column {\n position: sticky;\n left: 0;\n }\n }\n\n > thead {\n > tr > .b-table-sticky-column {\n // z-index needs to be higher than sticky columns and\n // sticky headers for correct layering\n z-index: 5;\n }\n }\n\n > tbody,\n > tfoot {\n > tr > .b-table-sticky-column {\n // z-index needs to be lower than sticky header that\n // is also a sticky column\n z-index: 2;\n }\n }\n }\n }\n\n // Default theme color background for table cells that are sticky\n // Applied only when no variant is applied to the rows, or no head-variant\n // Needed because Bootstrap v4 does not have table child elements set up\n // to inherit their background color from parent element by default\n //\n // An issue made at twbs/bootstrap repo for table\n // background color inheritance:\n // https://github.com/twbs/bootstrap/issues/29244\n // If implemented, would negate the need for all the below SCSS\n .table.b-table {\n > thead,\n > tbody,\n > tfoot {\n > tr > .table-b-table-default {\n // Default cell color\n color: $table-color;\n // `$table-bg` is null by default in Bootstrap v4 variables\n // but could have a value set by the consumer\n background-color: if($table-bg, $table-bg, $body-bg);\n }\n }\n\n &.table-dark {\n > thead,\n > tbody,\n > tfoot {\n > tr > .bg-b-table-default {\n // Default cell color in table dark mode\n color: $table-dark-color;\n // Default cell background color in table dark mode\n background-color: $table-dark-bg;\n }\n }\n }\n\n // Handle case of zebra striping\n &.table-striped {\n // \"fake\" zebra striping via use of a transparent background image\n > tbody > tr:nth-of-type(#{$table-striped-order}) > .table-b-table-default {\n // `$table-accent-bg` (used for striping) default is a very transparent black\n // We overlay it over the background color to achieve the same color\n // effect while keeping the background solid.\n background-image: linear-gradient($table-accent-bg, $table-accent-bg);\n background-repeat: no-repeat;\n }\n\n &.table-dark {\n > tbody > tr:nth-of-type(#{$table-striped-order}) > .bg-b-table-default {\n // `$table-dark-accent-bg` (used for striping) default is a very transparent white\n // We overlay it over the background color to achieve the same color\n // effect while keeping the background solid.\n background-image: linear-gradient($table-dark-accent-bg, $table-dark-accent-bg);\n background-repeat: no-repeat;\n }\n }\n }\n\n // Handle case of hover\n &.table-hover {\n // \"fake\" hover via use of a transparent background image\n > tbody > tr:hover > .table-b-table-default {\n color: $table-hover-color;\n // `$table-hover-bg` default is a very transparent black\n // We overlay it over the background color to achieve the same color\n // effect while keeping the background solid.\n background-image: linear-gradient($table-hover-bg, $table-hover-bg);\n background-repeat: no-repeat;\n }\n\n &.table-dark {\n > tbody > tr:hover > .bg-b-table-default {\n color: $table-dark-hover-color;\n // `$table-dark-hover-bg` default is a very transparent white\n // We overlay it over the background color to achieve the same color\n // effect while keeping the background solid.\n background-image: linear-gradient($table-dark-hover-bg, $table-dark-hover-bg);\n background-repeat: no-repeat;\n }\n }\n }\n }\n }\n}\n\n// --- Header sort styling ---\n\n// Bootstrap v4.4 will include this variable as `$escaped-characters`\n// But if we want to preserve backwards compatibility with v4.3, we leave this in\n$bv-escaped-characters: ((\"<\", \"%3c\"), (\">\", \"%3e\"), (\"#\", \"%23\"));\n\n// Bootstrap v4.4 will include this method as `escape-svg`\n// But if we want to preserve backwards compatibility with v4.3, we leave this in\n// See https://codepen.io/kevinweber/pen/dXWoRw\n@function bv-escape-svg($string) {\n @if str-index($string, \"data:image/svg+xml\") {\n @each $char, $encoded in $bv-escaped-characters {\n $string: str-replace($string, $char, $encoded);\n }\n }\n\n @return $string;\n}\n\n.table.b-table {\n > thead,\n > tfoot {\n > tr {\n > [aria-sort] {\n cursor: pointer;\n background-image: none;\n background-repeat: no-repeat;\n background-size: $b-table-sort-icon-bg-width $b-table-sort-icon-bg-height;\n\n &:not(.b-table-sort-icon-left) {\n // Default is icon on the right\n background-position: right calc(#{$table-cell-padding} / 2) center;\n padding-right: calc(#{$table-cell-padding} + #{$b-table-sort-icon-bg-width});\n }\n\n &.b-table-sort-icon-left {\n // Left aligned sort icon\n background-position: left calc(#{$table-cell-padding} / 2) center;\n padding-left: calc(#{$table-cell-padding} + #{$b-table-sort-icon-bg-width});\n }\n }\n\n > [aria-sort=\"none\"] {\n background-image: bv-escape-svg($b-table-sort-icon-bg-not-sorted);\n }\n\n > [aria-sort=\"ascending\"] {\n background-image: bv-escape-svg($b-table-sort-icon-bg-ascending);\n }\n\n > [aria-sort=\"descending\"] {\n background-image: bv-escape-svg($b-table-sort-icon-bg-descending);\n }\n }\n }\n\n // Sort icons for dark tables, headers, footers\n &.table-dark > thead > tr,\n &.table-dark > tfoot > tr,\n > .thead-dark > tr {\n > [aria-sort=\"none\"] {\n background-image: bv-escape-svg($b-table-sort-icon-bg-dark-not-sorted);\n }\n\n > [aria-sort=\"ascending\"] {\n background-image: bv-escape-svg($b-table-sort-icon-bg-dark-ascending);\n }\n\n > [aria-sort=\"descending\"] {\n background-image: bv-escape-svg($b-table-sort-icon-bg-dark-descending);\n }\n }\n\n // Sort icons when header cell has `table-dark` class\n > thead > tr > .table-dark,\n > tfoot > tr > .table-dark {\n &[aria-sort=\"none\"] {\n background-image: bv-escape-svg($b-table-sort-icon-bg-dark-not-sorted);\n }\n\n &[aria-sort=\"ascending\"] {\n background-image: bv-escape-svg($b-table-sort-icon-bg-dark-ascending);\n }\n\n &[aria-sort=\"descending\"] {\n background-image: bv-escape-svg($b-table-sort-icon-bg-dark-descending);\n }\n }\n\n // Padding and position adjustment for small tables\n &.table-sm {\n > thead,\n > tfoot {\n > tr > [aria-sort] {\n &:not(.b-table-sort-icon-left) {\n // Default is icon on the right\n background-position: right calc(#{$table-cell-padding-sm} / 2) center;\n padding-right: calc(#{$table-cell-padding-sm} + #{$b-table-sort-icon-bg-width});\n }\n\n &.b-table-sort-icon-left {\n // Left aligned sort icon\n background-position: left calc(#{$table-cell-padding-sm} / 2) center;\n padding-left: calc(#{$table-cell-padding-sm} + #{$b-table-sort-icon-bg-width});\n }\n }\n }\n }\n}\n\n// --- Selectable rows ---\n.table.b-table {\n &.b-table-selectable:not(.b-table-selectable-no-click) {\n & > tbody > tr {\n cursor: pointer;\n }\n\n &.b-table-selecting {\n // Disabled text-selection when in range mode when\n // at least one row selected\n &.b-table-select-range > tbody > tr {\n user-select: none;\n }\n }\n }\n}\n\n// --- Stacked tables ---\n@if $bv-enable-table-stacked {\n .table.b-table {\n &.b-table-stacked {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $next: breakpoint-next($breakpoint, $grid-breakpoints);\n $infix: breakpoint-infix($next, $grid-breakpoints);\n\n {$infix} {\n @include media-breakpoint-down($breakpoint) {\n display: block;\n width: 100%;\n\n // Convert to blocks when stacked\n > caption,\n > tbody,\n > tbody > tr,\n > tbody > tr > td,\n > tbody > tr > th {\n display: block;\n }\n\n // Hide when stacked\n > thead,\n > tfoot {\n display: none;\n\n > tr.b-table-top-row,\n > tr.b-table-bottom-row {\n display: none;\n }\n }\n\n // Caption positioning\n > caption {\n caption-side: top !important;\n }\n\n > tbody {\n > tr {\n // Turn cells with labels into micro-grids\n > [data-label] {\n // Cell header label pseudo element\n &::before {\n content: attr(data-label);\n width: $b-table-stacked-heading-width;\n float: left;\n text-align: right;\n overflow-wrap: break-word;\n font-weight: bold;\n font-style: normal;\n padding: 0 calc(#{$b-table-stacked-gap} / 2) 0 0;\n margin: 0;\n }\n\n // Add clearfix in-case field label wraps\n &::after {\n display: block;\n clear: both;\n content: \"\";\n }\n\n // Cell value (we wrap the cell value in a div when stacked)\n > div {\n display: inline-block;\n width: calc(100% - #{$b-table-stacked-heading-width});\n // Add \"gap\" between \"cells\"\n padding: 0 0 0 calc(#{$b-table-stacked-gap} / 2);\n margin: 0;\n }\n }\n\n // Dont show the fixed top/bottom rows\n &.top-row,\n &.bottom-row {\n display: none;\n }\n\n // Give the top cell of each \"row\" a heavy border\n > :first-child {\n border-top-width: (3 * $table-border-width);\n }\n\n // Give any cell after a rowspan'ed cell a heavy top border\n > [rowspan] + td,\n > [rowspan] + th {\n border-top-width: (3 * $table-border-width);\n }\n }\n }\n }\n }\n }\n }\n }\n}\n","// BTime custom SCSS\n\n.b-time {\n min-width: 150px;\n\n &[aria-disabled=\"true\"] output,\n &[aria-readonly=\"true\"] output,\n output.disabled {\n background-color: $input-disabled-bg;\n opacity: 1;\n }\n\n &[aria-disabled=\"true\"] output {\n pointer-events: none;\n }\n\n @at-root {\n // Prevent the spinbuttons from reversing order in RTL mode\n // as time is always read LTR\n [dir=\"rtl\"] & > .d-flex:not(.flex-column) {\n flex-direction: row-reverse;\n }\n }\n\n .b-time-header {\n margin-bottom: 0.5rem;\n\n output {\n padding: 0.25rem;\n font-size: 80%;\n }\n }\n\n .b-time-footer {\n margin-top: 0.5rem;\n }\n\n .b-time-ampm {\n margin-left: 0.5rem;\n }\n}\n","// --- custom SCSS ---\n\n// Toast wrapper element class (needed for list transition in toasters)\n.b-toast {\n display: block;\n position: relative;\n max-width: $toast-max-width;\n backface-visibility: hidden;\n background-clip: padding-box;\n\n z-index: 1;\n @include border-radius($toast-border-radius);\n\n .toast {\n // Allow us to override Bootstrap's default toast opacity\n // As they do not provide it as a variable\n background-color: rgba($toast-background-color, $b-toast-background-opacity);\n }\n\n &:not(:last-child) {\n margin-bottom: $toast-padding-x;\n }\n\n &.b-toast-solid {\n .toast {\n background-color: rgba($toast-background-color, 1);\n }\n }\n\n .toast {\n // Override default Bootstrap v4.x opacity of 0\n // Needed for re-usable fade transition\n opacity: 1;\n\n &.fade:not(.show) {\n opacity: 0;\n }\n\n .toast-body {\n display: block; // Needed when we use a link as the body element\n }\n }\n}\n\n@mixin b-toast-variant($background, $border, $color) {\n // Based on alert-variant mixin\n .toast {\n background-color: rgba(lighten($background, 5%), $b-toast-background-opacity);\n border-color: rgba($border, $b-toast-background-opacity);\n color: $color;\n\n .toast-header {\n color: $color;\n background-color: rgba($background, $b-toast-background-opacity);\n border-bottom-color: rgba($border, $b-toast-background-opacity);\n }\n\n // .toast-body[href] {\n // color: darken($color, 10%);\n // }\n }\n\n &.b-toast-solid {\n .toast {\n background-color: rgba(lighten($background, 5%), 1);\n }\n }\n}\n\n// Toast variants\n@each $color, $value in $theme-colors {\n .b-toast-#{$color} {\n @include b-toast-variant(\n theme-color-level($color, $b-toast-bg-level),\n theme-color-level($color, $b-toast-border-level),\n theme-color-level($color, $b-toast-color-level)\n );\n }\n}\n","// --- custom SCSS ---\n\n// Base toaster styling\n.b-toaster {\n z-index: $b-toaster-zindex;\n\n .b-toaster-slot {\n position: relative;\n display: block;\n\n &:empty {\n display: none !important;\n }\n }\n}\n\n// Built-in toaster styling\n// - b-toaster-top-right\n// - b-toaster-top-left\n// - b-toaster-top-center\n// - b-toaster-top-full\n// - b-toaster-bottom-right\n// - b-toaster-bottom-left\n// - b-toaster-bottom-center\n// - b-toaster-bottom-full\n.b-toaster {\n &.b-toaster-top-right,\n &.b-toaster-top-left,\n &.b-toaster-top-center,\n &.b-toaster-top-full,\n &.b-toaster-bottom-right,\n &.b-toaster-bottom-left,\n &.b-toaster-bottom-center,\n &.b-toaster-bottom-full {\n position: fixed;\n left: $b-toaster-offset-left;\n right: $b-toaster-offset-right;\n margin: 0;\n padding: 0;\n height: 0;\n overflow: visible;\n\n .b-toaster-slot {\n position: absolute;\n max-width: $toast-max-width;\n width: 100%; /* IE 11 fix */\n left: 0;\n right: 0;\n padding: 0;\n margin: 0;\n }\n }\n\n &.b-toaster-top-full,\n &.b-toaster-bottom-full {\n .b-toaster-slot {\n width: 100%;\n max-width: 100%;\n\n .b-toast,\n .toast {\n // Override Bootstrap toast max-width\n width: 100%;\n max-width: 100%;\n }\n }\n }\n\n &.b-toaster-top-right,\n &.b-toaster-top-left,\n &.b-toaster-top-center,\n &.b-toaster-top-full {\n top: 0;\n\n .b-toaster-slot {\n top: $b-toaster-offset-top;\n }\n }\n\n &.b-toaster-bottom-right,\n &.b-toaster-bottom-left,\n &.b-toaster-bottom-center,\n &.b-toaster-bottom-full {\n bottom: 0;\n\n .b-toaster-slot {\n bottom: $b-toaster-offset-bottom;\n }\n }\n\n &.b-toaster-top-right,\n &.b-toaster-bottom-right,\n &.b-toaster-top-center,\n &.b-toaster-bottom-center {\n .b-toaster-slot {\n margin-left: auto;\n }\n }\n\n &.b-toaster-top-left,\n &.b-toaster-bottom-left,\n &.b-toaster-top-center,\n &.b-toaster-bottom-center {\n .b-toaster-slot {\n margin-right: auto;\n }\n }\n}\n","// --- custom transition SCSS ---\n\n// PortalVue appears to have issues with transition classes on portaled items\n\n.b-toaster {\n &.b-toaster-top-right,\n &.b-toaster-top-left,\n &.b-toaster-bottom-right,\n &.b-toaster-bottom-left {\n .b-toast {\n &.b-toaster-enter-active,\n &.b-toaster-leave-active,\n &.b-toaster-move {\n transition: transform 0.175s;\n }\n\n &.b-toaster-enter {\n }\n\n &.b-toaster-enter-to,\n &.b-toaster-enter-active {\n .toast.fade {\n // Delay the appearance of the toast until\n // the move transition has completed\n transition-delay: 0.175s;\n }\n }\n\n &.b-toaster-enter-to {\n }\n\n &.b-toaster-leave-active {\n position: absolute;\n transition-delay: 0.175s;\n\n .toast.fade {\n transition-delay: 0s;\n }\n }\n\n &.b-toaster-leave-to {\n }\n }\n }\n}\n","// Some overrides to make tooltip transitions work with Vue ``\n.tooltip.b-tooltip {\n display: block;\n opacity: $tooltip-opacity;\n // Needed due to Bootstrap v4.4 reboot.css changes\n outline: 0;\n\n &.fade:not(.show) {\n opacity: 0;\n }\n\n &.show {\n opacity: $tooltip-opacity;\n }\n\n // Disabled pointer events when in 'noninteractive' mode to hide\n // the tooltip when the user hovers over its content\n &.noninteractive {\n pointer-events: none;\n }\n\n .arrow {\n margin: 0 $tooltip-border-radius;\n }\n\n &.bs-tooltip-right,\n &.bs-tooltip-left {\n .arrow {\n margin: $tooltip-border-radius 0;\n }\n }\n}\n\n// Create custom variants for tooltips\n@if $bv-enable-tooltip-variants {\n @each $variant, $value in $theme-colors {\n .tooltip.b-tooltip-#{$variant} {\n $tip-bg-color: theme-color-level($variant, $b-tooltip-bg-level);\n $tip-text-color: color-yiq($tip-bg-color);\n\n &.bs-tooltip-top {\n .arrow::before {\n border-top-color: $tip-bg-color;\n }\n }\n\n &.bs-tooltip-right {\n .arrow::before {\n border-right-color: $tip-bg-color;\n }\n }\n\n &.bs-tooltip-bottom {\n .arrow::before {\n border-bottom-color: $tip-bg-color;\n }\n }\n\n &.bs-tooltip-left {\n .arrow::before {\n border-left-color: $tip-bg-color;\n }\n }\n\n &.bs-tooltip-auto {\n &[x-placement^=\"top\"] {\n @extend .bs-tooltip-top;\n }\n &[x-placement^=\"right\"] {\n @extend .bs-tooltip-right;\n }\n &[x-placement^=\"bottom\"] {\n @extend .bs-tooltip-bottom;\n }\n &[x-placement^=\"left\"] {\n @extend .bs-tooltip-left;\n }\n }\n\n .tooltip-inner {\n color: $tip-text-color;\n background-color: $tip-bg-color;\n }\n }\n }\n}\n","// Base icon styling\n.b-icon {\n &.bi {\n display: inline-block;\n overflow: visible;\n // The following is required to compensate for alignment\n // issues with the Bootstrap Icons alpha implementation\n vertical-align: $b-icon-vertical-offset;\n }\n\n &.b-icon-animation-cylon,\n &.b-iconstack .b-icon-animation-cylon > g {\n transform-origin: center;\n animation: $b-icon-animation-cylon-duration infinite ease-in-out alternate\n b-icon-animation-cylon;\n\n @media (prefers-reduced-motion: reduce) {\n animation: none;\n }\n }\n\n &.b-icon-animation-cylon-vertical,\n &.b-iconstack .b-icon-animation-cylon-vertical > g {\n transform-origin: center;\n animation: $b-icon-animation-cylon-vertical-duration infinite ease-in-out alternate\n b-icon-animation-cylon-vertical;\n\n @media (prefers-reduced-motion: reduce) {\n animation: none;\n }\n }\n\n &.b-icon-animation-fade,\n &.b-iconstack .b-icon-animation-fade > g {\n transform-origin: center;\n animation: $b-icon-animation-fade-duration infinite ease-in-out alternate b-icon-animation-fade;\n\n @media (prefers-reduced-motion: reduce) {\n animation: none;\n }\n }\n\n &.b-icon-animation-spin,\n &.b-iconstack .b-icon-animation-spin > g {\n transform-origin: center;\n animation: $b-icon-animation-spin-duration infinite linear normal b-icon-animation-spin;\n\n @media (prefers-reduced-motion: reduce) {\n animation: none;\n }\n }\n\n &.b-icon-animation-spin-reverse,\n &.b-iconstack .b-icon-animation-spin-reverse > g {\n transform-origin: center;\n animation: $b-icon-animation-spin-reverse-duration infinite linear reverse b-icon-animation-spin;\n\n @media (prefers-reduced-motion: reduce) {\n animation: none;\n }\n }\n\n &.b-icon-animation-spin-pulse,\n &.b-iconstack .b-icon-animation-spin-pulse > g {\n transform-origin: center;\n animation: $b-icon-animation-spin-pulse-duration infinite steps(8) normal b-icon-animation-spin;\n\n @media (prefers-reduced-motion: reduce) {\n animation: none;\n }\n }\n\n &.b-icon-animation-spin-reverse-pulse,\n &.b-iconstack .b-icon-animation-spin-reverse-pulse > g {\n transform-origin: center;\n animation: $b-icon-animation-spin-reverse-pulse-duration infinite steps(8) reverse\n b-icon-animation-spin;\n\n @media (prefers-reduced-motion: reduce) {\n animation: none;\n }\n }\n\n &.b-icon-animation-throb,\n &.b-iconstack .b-icon-animation-throb > g {\n transform-origin: center;\n animation: $b-icon-animation-throb-duration infinite ease-in-out alternate\n b-icon-animation-throb;\n\n @media (prefers-reduced-motion: reduce) {\n animation: none;\n }\n }\n}\n\n// Animation for spinning icons\n@keyframes b-icon-animation-cylon {\n 0% {\n transform: translateX(-25%);\n }\n 100% {\n transform: translateX(25%);\n }\n}\n\n@keyframes b-icon-animation-cylon-vertical {\n 0% {\n transform: translateY(25%);\n }\n 100% {\n transform: translateY(-25%);\n }\n}\n\n@keyframes b-icon-animation-fade {\n 0% {\n opacity: 0.1;\n }\n 100% {\n opacity: 1;\n }\n}\n\n@keyframes b-icon-animation-spin {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(359deg);\n }\n}\n\n@keyframes b-icon-animation-throb {\n 0% {\n opacity: 0.5;\n transform: scale(0.5);\n }\n 100% {\n opacity: 1;\n transform: scale(1);\n }\n}\n\n// Make icons slightly larger in buttons, nav-links, dropdowns, and input-group-text\n.btn,\n.nav-link,\n.dropdown-toggle,\n.dropdown-item,\n.input-group-text {\n .b-icon {\n &.bi {\n font-size: 125%;\n vertical-align: text-bottom;\n }\n }\n}\n"]}
\ No newline at end of file
diff --git a/BTCPayServer/wwwroot/vendor/bootstrap-vue/bootstrap-vue.min.min.js.map b/BTCPayServer/wwwroot/vendor/bootstrap-vue/bootstrap-vue.min.min.js.map
new file mode 100644
index 000000000..3123e646a
--- /dev/null
+++ b/BTCPayServer/wwwroot/vendor/bootstrap-vue/bootstrap-vue.min.min.js.map
@@ -0,0 +1 @@
+{"version":3,"names":["e","Object","assign","t","r","s","arguments","length","a","prototype","hasOwnProperty","call","apply","this","toUpperCase","c","o","split","n","i","l","trim","replace","keys","Array","isArray","style","y","concat","p","f","isVue3","Vue","version","startsWith","REF_FOR_KEY","ALLOWED_FIELDS_IN_DATA","extend","bind","originalExtend","KNOWN_COMPONENTS","originalVModelDynamicCreated","vModelDynamic","created","originalVModelDynamicBeforeUpdate","beforeUpdate","el","binding","vnode","_assign","definition","_typeof","render","__alreadyPatched","originalRender","h","patchedH","tag","dataObjOrChildren","rawSlots","slots","undefined","filter","Boolean","isTag","includes","attrs","props","normalizedData","_objectSpread2$3","_objectWithoutProperties","scopedSlots","$hasNormal","functional","_ctx$children","_ctx$children$default","ctx","patchedCtx","data","forEach","key","IGNORED_CHILDREN_KEYS","children","default","k","on","listeners","nextTick","HAS_WINDOW_SUPPORT","window","HAS_DOCUMENT_SUPPORT","document","HAS_NAVIGATOR_SUPPORT","navigator","HAS_PROMISE_SUPPORT","Promise","HAS_MUTATION_OBSERVER_SUPPORT","MutationObserver","WebKitMutationObserver","MozMutationObserver","IS_BROWSER","WINDOW","DOCUMENT","NAVIGATOR","USER_AGENT","userAgent","toLowerCase","IS_JSDOM","indexOf","test","checkMultipleVueWarned","MULTIPLE_VUE_WARNING","HAS_PASSIVE_EVENT_SUPPORT","passiveEventSupported","options","passive","addEventListener","removeEventListener","_unused","HAS_TOUCH_SUPPORT","documentElement","maxTouchPoints","HAS_POINTER_EVENT_SUPPORT","PointerEvent","MSPointerEvent","HAS_INTERACTION_OBSERVER_SUPPORT","IntersectionObserverEntry","NAME","DEFAULT_BREAKPOINT","RX_ARRAY_NOTATION","RX_BV_PREFIX","RX_DIGITS","RX_EXTENSION","RX_HASH","RX_HASH_ID","RX_HTML_TAGS","RX_HYPHENATE","RX_LOWER_UPPER","RX_NUMBER","RX_PLUS","RX_REGEXP_REPLACE","RX_SPACES","RX_SPACE_SPLIT","RX_STAR","RX_START_SPACE_WORD","RX_TRIM_LEFT","RX_UNDERSCORE","RX_UN_KEBAB","RX_DATE","RX_DATE_SPLIT","RX_TIME","RX_HREF","RX_ENCODED_COMMA","RX_ENCODE_REVERSE","RX_QUERY_START","RX_ASPECT","RX_ASPECT_SEPARATOR","RX_COL_CLASS","RX_ICON_PREFIX","RX_STRIP_LOCALE_MODS","Element","_Object","_inherits","_super","_createSuper","_classCallCheck","_wrapNativeSuper","HTMLElement","_Element","_super2","SVGElement","_Element2","_super3","File","_Object2","_super4","toType","value","_typeof$1","isUndefined","isNull","isUndefinedOrNull","isFunction","isBoolean","isString","isNumber","isNumeric","String","isObject","obj","isPlainObject","toString","isDate","Date","isEvent","Event","isRegExp","slice","toRawType","create","proto","optionalProps","defineProperties","defineProperty","prop","descriptor","getOwnPropertyNames","clone","pick","reduce","result","_defineProperty","omit","mergeDeep","target","source","sortKeys","sort","cloneDeep","defaultValue","val","_toConsumableArray$1","identity","x","getRaw","path","join","steps","every","step","get","getEnv","fallback","env","process","getNoWarn","warn","message","console","warnNotClient","warnNoPromiseSupport","BvConfig","$_config","_this","config","configKeys","subConfig","some","b","setConfig","OurVue","checkMultipleVue","installFactory","_ref","components","directives","plugins","install","installed","registerComponents","registerDirectives","registerPlugins","pluginFactory","plugin","use","registerComponent","name","def","component","registerDirective","directive","NAME_ALERT","NAME_ASPECT","NAME_AVATAR","NAME_AVATAR_GROUP","NAME_BADGE","NAME_BREADCRUMB","NAME_BREADCRUMB_ITEM","NAME_BREADCRUMB_LINK","NAME_BUTTON","NAME_BUTTON_CLOSE","NAME_BUTTON_GROUP","NAME_BUTTON_TOOLBAR","NAME_CALENDAR","NAME_CARD","NAME_CARD_BODY","NAME_CARD_FOOTER","NAME_CARD_GROUP","NAME_CARD_HEADER","NAME_CARD_IMG","NAME_CARD_IMG_LAZY","NAME_CARD_SUB_TITLE","NAME_CARD_TEXT","NAME_CARD_TITLE","NAME_CAROUSEL","NAME_CAROUSEL_SLIDE","NAME_COL","NAME_COLLAPSE","NAME_CONTAINER","NAME_DROPDOWN","NAME_DROPDOWN_DIVIDER","NAME_DROPDOWN_FORM","NAME_DROPDOWN_GROUP","NAME_DROPDOWN_HEADER","NAME_DROPDOWN_ITEM","NAME_DROPDOWN_ITEM_BUTTON","NAME_DROPDOWN_TEXT","NAME_EMBED","NAME_FORM","NAME_FORM_CHECKBOX","NAME_FORM_CHECKBOX_GROUP","NAME_FORM_DATALIST","NAME_FORM_DATEPICKER","NAME_FORM_FILE","NAME_FORM_GROUP","NAME_FORM_INPUT","NAME_FORM_INVALID_FEEDBACK","NAME_FORM_RADIO","NAME_FORM_RADIO_GROUP","NAME_FORM_RATING","NAME_FORM_ROW","NAME_FORM_SELECT","NAME_FORM_SELECT_OPTION","NAME_FORM_SELECT_OPTION_GROUP","NAME_FORM_SPINBUTTON","NAME_FORM_TAG","NAME_FORM_TAGS","NAME_FORM_TEXT","NAME_FORM_TEXTAREA","NAME_FORM_TIMEPICKER","NAME_FORM_VALID_FEEDBACK","NAME_ICON","NAME_IMG","NAME_IMG_LAZY","NAME_INPUT_GROUP","NAME_INPUT_GROUP_ADDON","NAME_INPUT_GROUP_APPEND","NAME_INPUT_GROUP_PREPEND","NAME_INPUT_GROUP_TEXT","NAME_JUMBOTRON","NAME_LINK","NAME_LIST_GROUP","NAME_LIST_GROUP_ITEM","NAME_MEDIA","NAME_MEDIA_ASIDE","NAME_MEDIA_BODY","NAME_MODAL","NAME_NAV","NAME_NAVBAR","NAME_NAVBAR_BRAND","NAME_NAVBAR_NAV","NAME_NAVBAR_TOGGLE","NAME_NAV_FORM","NAME_NAV_ITEM","NAME_NAV_ITEM_DROPDOWN","NAME_OVERLAY","NAME_PAGINATION","NAME_PAGINATION_NAV","NAME_POPOVER","NAME_PROGRESS","NAME_PROGRESS_BAR","NAME_ROW","NAME_SIDEBAR","NAME_SKELETON","NAME_SKELETON_ICON","NAME_SKELETON_IMG","NAME_SKELETON_TABLE","NAME_SKELETON_WRAPPER","NAME_SPINNER","NAME_TAB","NAME_TABLE","NAME_TABLE_CELL","NAME_TABLE_LITE","NAME_TABLE_SIMPLE","NAME_TABS","NAME_TBODY","NAME_TFOOT","NAME_THEAD","NAME_TIME","NAME_TOAST","NAME_TOASTER","NAME_TOOLTIP","NAME_TRANSPORTER","EVENT_NAME_BLUR","EVENT_NAME_CANCEL","EVENT_NAME_CHANGE","EVENT_NAME_CLICK","EVENT_NAME_CLOSE","EVENT_NAME_CONTEXT","EVENT_NAME_CONTEXT_CHANGED","EVENT_NAME_DESTROYED","EVENT_NAME_DISABLE","EVENT_NAME_DISABLED","EVENT_NAME_ENABLE","EVENT_NAME_ENABLED","EVENT_NAME_FILTERED","EVENT_NAME_FIRST","EVENT_NAME_FOCUSIN","EVENT_NAME_FOCUSOUT","EVENT_NAME_HEAD_CLICKED","EVENT_NAME_HIDDEN","EVENT_NAME_HIDE","EVENT_NAME_INPUT","EVENT_NAME_LAST","EVENT_NAME_MOUSEENTER","EVENT_NAME_MOUSELEAVE","EVENT_NAME_NEXT","EVENT_NAME_OPEN","EVENT_NAME_PAGE_CLICK","EVENT_NAME_PREV","EVENT_NAME_REFRESHED","EVENT_NAME_ROW_CLICKED","EVENT_NAME_SELECTED","EVENT_NAME_SHOW","EVENT_NAME_SHOWN","EVENT_NAME_SLIDING_END","EVENT_NAME_TOGGLE","HOOK_EVENT_NAME_BEFORE_DESTROY","HOOK_EVENT_NAME_DESTROYED","ROOT_EVENT_NAME_PREFIX","EVENT_OPTIONS_PASSIVE","EVENT_OPTIONS_NO_CAPTURE","capture","PROP_TYPE_ANY","PROP_TYPE_ARRAY","PROP_TYPE_BOOLEAN","PROP_TYPE_DATE","PROP_TYPE_FUNCTION","Function","PROP_TYPE_NUMBER","Number","PROP_TYPE_OBJECT","PROP_TYPE_REG_EXP","RegExp","PROP_TYPE_STRING","PROP_TYPE_ARRAY_FUNCTION","PROP_TYPE_ARRAY_OBJECT","PROP_TYPE_ARRAY_OBJECT_STRING","PROP_TYPE_ARRAY_STRING","PROP_TYPE_BOOLEAN_NUMBER","PROP_TYPE_BOOLEAN_NUMBER_STRING","PROP_TYPE_BOOLEAN_STRING","PROP_TYPE_DATE_STRING","PROP_TYPE_FUNCTION_STRING","PROP_TYPE_NUMBER_STRING","PROP_TYPE_NUMBER_OBJECT_STRING","PROP_TYPE_OBJECT_FUNCTION","PROP_TYPE_OBJECT_STRING","SLOT_NAME_APPEND","SLOT_NAME_BADGE","SLOT_NAME_BOTTOM_ROW","SLOT_NAME_BUTTON_CONTENT","SLOT_NAME_CUSTOM_FOOT","SLOT_NAME_DEFAULT","SLOT_NAME_EMPTY","SLOT_NAME_FILE_NAME","SLOT_NAME_FIRST","SLOT_NAME_FOOTER","SLOT_NAME_HEADER","SLOT_NAME_LABEL","SLOT_NAME_LEAD","SLOT_NAME_MODAL_CANCEL","SLOT_NAME_MODAL_OK","SLOT_NAME_MODAL_TITLE","SLOT_NAME_PREPEND","SLOT_NAME_ROW_DETAILS","SLOT_NAME_TABLE_BUSY","SLOT_NAME_TABLE_CAPTION","SLOT_NAME_TABLE_COLGROUP","SLOT_NAME_THEAD_TOP","SLOT_NAME_TITLE","SLOT_NAME_TOP_ROW","from","arrayIncludes","array","_len","args","_key","createArray","fillFn","mapFn","map","flatten","item","flattenDeep","hasNormalizedSlot","names","$scopedSlots","$slots","normalizeSlot","slot","scope","normalizeSlotMixin","methods","vNodes","toInteger","NaN","integer","parseInt","isNaN","toFloat","float","parseFloat","toFixed","precision","kebabCase","str","pascalCase","_","charAt","startCase","$1","$2","upperFirst","escapeRegExp","spaces","JSON","stringify","lowerCase","ELEMENT_PROTO","TABABLE_SELECTOR","matchesEl","matches","msMatchesSelector","webkitMatchesSelector","closestEl","closest","sel","parentElement","parentNode","nodeType","Node","ELEMENT_NODE","requestAF","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","msRequestAnimationFrame","oRequestAnimationFrame","cb","setTimeout","MutationObs","isElement","getActiveElement","excludes","activeElement","isActiveElement","isVisible","contains","body","getStyle","bcr","getBCR","height","width","isDisabled","disabled","hasAttr","hasClass","reflow","offsetHeight","selectAll","selector","root","arrayFrom","querySelectorAll","select","querySelector","includeRoot","parent","child","getById","id","getElementById","addClass","className","classList","add","removeClass","remove","setAttr","attr","setAttribute","removeAttr","removeAttribute","getAttr","getAttribute","hasAttribute","setStyle","removeStyle","getBoundingClientRect","getCS","getComputedStyle","getSel","getSelection","offset","_offset","top","left","getClientRects","win","ownerDocument","defaultView","pageYOffset","pageXOffset","position","parentOffset","elStyles","doc","offsetParent","offsetParentStyles","borderTopWidth","borderLeftWidth","marginTop","marginLeft","getTabables","rootEl","tabIndex","attemptFocus","focus","attemptBlur","blur","_unused2","memoize","fn","cache","argsKey","VueProto","getConfigValue","bvConfig","getComponentConfig","propKey","getBreakpoints","_getBreakpointsCached","getBreakpointsUpCached","breakpoints","prefixPropName","prefix","unprefixPropName","suffixPropName","suffix","makeProp","type","requiredOrValidator","validator","required","copyProps","transformFn","copied","pluckProps","keysToPluck","objToPluck","memo","makePropConfigurable","componentKey","makePropsConfigurable","configurablePropDefaultFnName","hasPropFunction","makeModelMixin","_ref$type","_ref$defaultValue","_ref$validator","_ref$event","event","mixin","model","parseEventOptions","eventOn","eventName","handler","eventOff","eventOnOff","method","stopEvent","_ref$preventDefault","preventDefault","_ref$propagation","propagation","_ref$immediatePropaga","immediatePropagation","stopPropagation","stopImmediatePropagation","getBaseEventName","getRootEventName","getRootActionEventName","actionName","ariaLabel","content","textVariant","BButtonClose","componentData","staticClass","class","click","domProps","innerHTML","mergeData","NO_FADE_PROPS","enterClass","enterActiveClass","enterToClass","leaveClass","leaveActiveClass","leaveToClass","FADE_PROPS","appear","mode","noFade","transProps","BVTransition","appearClass","appearActiveClass","appearToClass","css","dataCopy","_makeModelMixin$k","modelMixin","modelProps","MODEL_PROP_NAME","MODEL_EVENT_NAME","parseCountDown","show","parseShow","dismissLabel","dismissible","fade","variant","AlertPlugin","BAlert","mixins","countDown","localShow","watch","_watch$k","newValue","clearCountDownInterval","$emit","$_countDownTimeout","$nextTick","$_filterTimer","beforeDestroy","dismiss","clearTimeout","$alert","$dismissButton","role","mathMin","Math","min","mathMax","max","mathAbs","abs","mathCeil","ceil","mathFloor","floor","mathPow","pow","mathRound","round","CLASS_NAME","aspect","BAspect","computed","padding","ratio","_aspect$split$map2","_slicedToArray","v","$sizer","paddingBottom","$content","AspectPlugin","safeVueInstance","Proxy","encodeReserveReplacer","charCodeAt","encode","encodeURIComponent","decode","decodeURIComponent","stringifyQueryObj","query","results","value2","push","parseQuery","parsed","param","parts","shift","isLink","href","to","isRouterLink","computeHref","_ref3","toFallback","hash","BASE_ATTRS","viewBox","focusable","STACKED_ATTRS","animation","flipH","flipV","fontScale","rotate","scale","shiftH","shiftV","stacked","title","BVIconBase","_class","hasScale","hasTransforms","hasShift","hasContent","$inner","transform","fontSize","xmlns","fill","iconProps","BVIconBaseProps","makeIcon","kebabName","iconName","iconNameClass","iconTitle","svgContent","BIconBlank","BIconCalendar","BIconCalendarFill","BIconChevronBarLeft","BIconChevronDoubleLeft","BIconChevronDown","BIconChevronLeft","BIconChevronUp","BIconCircleFill","BIconClock","BIconClockFill","BIconDash","BIconPersonFill","BIconPlus","BIconStar","BIconStarFill","BIconStarHalf","BIconX","findIconComponent","$options","$parent","icon","BIcon","CODE_DOWN","CODE_END","CODE_ENTER","CODE_HOME","CODE_LEFT","CODE_RIGHT","CODE_SPACE","CODE_UP","compareArrays","equal","looseEqual","aValidType","bValidType","getTime","aHasKey","bHasKey","isEmpty","makePropWatcher","propName","oldValue","$delete","$data","$set","makePropCacheMixin","proxyPropName","attrsMixinVue2","attrsMixinVue3","bvAttrs","$attrs","attrsMixin","getEventRoot","vm","$root","bvEventRoot","PROP","listenOnRootMixin","callback","listenOffRoot","registerRootListener","unregisterRootListener","listenOnRoot","$on","listenOnRootOnce","_this2","_callback","$once","$off","emitOnRoot","_this$bvEventRoot","listenersMixinVue2","listenersMixinVue3","bvListeners","$listeners","listenersMixin","ROOT_EVENT_NAME_CLICKED","routerLinkProps","activeClass","append","exact","exactActiveClass","exactPath","exactPathActiveClass","routerTag","nuxtLinkProps","noPrefetch","prefetch","active","rel","routerComponentName","BLink","inheritAttrs","computedTag","thisOrParent","hasRouter","$router","hasNuxt","$nuxt","computeTag","computedRel","_ref2","computeRel","computedHref","computedProps","computedAttrs","tabindex","computedListeners","onClick","_arguments","eventIsEvent","suppliedHandler","_event$currentTarget$","currentTarget","__vue__","$el","linkProps","BLinkProps","block","pill","pressed","size","squared","handleFocus","isLinkStrict","isToggle","isButton","isNonStandardTag","computeClass","computeLinkProps","computeAttrs","button","link","toggle","nonStandardTag","hashLink","autocomplete","BButton","keydown","keyCode","focusin","focusout","SIZES","computeSize","alt","badge","badgeLeft","badgeOffset","badgeTop","badgeVariant","buttonType","rounded","square","src","text","BAvatar","inject","getBvAvatarGroup","localSrc","bvAvatarGroup","computedSize","computedVariant","computedRounded","fontStyle","marginStyle","overlapScale","marginRight","badgeStyle","FONT_SIZE_SCALE","bottom","right","onImgError","_class2","error","$badge","hasBadgeSlot","badgeText","overlap","AvatarPlugin","BAvatarGroup","provide","paddingStyle","paddingLeft","paddingRight","BBadge","BadgePlugin","stripTags","htmlOrText","textContent","ariaCurrent","html","BBreadcrumbLink","suppliedProps","BBreadcrumbLinkProps","BBreadcrumbItem","items","BBreadcrumb","childNodes","activeDefined","idx","BreadcrumbPlugin","ButtonPlugin","BBtn","BBtnClose","buttonProps","ariaRole","vertical","BButtonGroup","ButtonGroupPlugin","BBtnGroup","ITEM_SELECTOR","justify","keyNav","BButtonToolbar","mounted","getItems","focusFirst","focusPrev","index","reverse","focusNext","focusLast","onFocusin","relatedTarget","onKeydown","shiftKey","ButtonToolbarPlugin","BBtnToolbar","CALENDAR_GREGORY","CALENDAR_LONG","CALENDAR_SHORT","DATE_FORMAT_2_DIGIT","DATE_FORMAT_NUMERIC","createDate","_construct","parseYMD","date","_date$split$map2","year","month","day","getFullYear","getMonth","getDate","formatYMD","createDateFormatter","locale","Intl","DateTimeFormat","format","datesEqual","date1","date2","firstDateOfMonth","setDate","lastDateOfMonth","setMonth","addYears","numberOfYears","setFullYear","oneMonthAgo","oneMonthAhead","oneYearAgo","oneYearAhead","oneDecadeAgo","oneDecadeAhead","constrainDate","RTL_LANGS","isLocaleRTL","locale1","locale2","idMixin","localId_","safeId","_makeModelMixin$j","idProps","ariaControls","dateDisabledFn","dateFormatOptions","weekday","dateInfoFn","direction","headerTag","hidden","hideHeader","initialDate","labelCalendar","labelCurrentMonth","labelHelp","labelNav","labelNextDecade","labelNextMonth","labelNextYear","labelNoDateSelected","labelPrevDecade","labelPrevMonth","labelPrevYear","labelSelected","labelToday","navButtonVariant","noHighlightToday","noKeyNav","readonly","roleDescription","selectedVariant","showDecadeNav","startWeekday","todayVariant","valueAsDate","weekdayHeaderFormat","BCalendar","selected","selectedYMD","activeYMD","getToday","gridHasFocus","isLive","valueId","widgetId","navId","gridId","gridCaptionId","gridHelpId","activeId","selectedDate","activeDate","computedMin","computedMax","computedWeekStarts","computedLocale","locales","calendar","resolvedOptions","resolveLocale","computedDateDisabledFn","computedDateInfoFn","calendarLocale","fmt","calendarYear","calendarMonth","calendarFirstDay","calendarDaysInMonth","computedTodayVariant","computedNavButtonVariant","isRTL","dir","context","selectedFormatted","formatDateString","activeFormatted","dateDisabled","rtl","dateOutOfRange","rangeFn","ymd","hour","minute","second","formatYearMonth","formatWeekdayName","formatWeekdayNameShort","formatDay","nf","NumberFormat","minimumIntegerDigits","minimumFractionDigits","maximumFractionDigits","notation","prevDecadeDisabled","prevYearDisabled","prevMonthDisabled","thisMonthDisabled","nextMonthDisabled","nextYearDisabled","nextDecadeDisabled","matrix","firstDay","daysInMonth","startIndex","getDay","currentDay","week","j","dayYMD","dayDisabled","dateInfo","label","isThisMonth","info","calendarHeadings","d","_watch$j","old","newYMD","oldYMD","setLive","_this3","activated","deactivated","$refs","grid","_this4","emitSelected","_this5","setGridFocusFlag","onKeydownWrapper","altKey","ctrlKey","checkDate","constrainedToday","onKeydownGrid","onClickDay","clickedDate","gotoPrevDecade","gotoPrevYear","gotoPrevMonth","gotoCurrentMonth","gotoNextMonth","gotoNextYear","gotoNextDecade","onHeaderClick","_this6","hideDecadeNav","todayYMD","highlightToday","$header","for","navScope","navProps","navPrevProps","navNextProps","$prevDecadeIcon","$prevYearIcon","$prevMonthIcon","$thisMonthIcon","$nextMonthIcon","$nextYearIcon","$nextDecadeIcon","makeNavBtn","btnDisabled","shortcut","$nav","$gridCaption","$gridWeekDays","$gridBody","$cells","dIndex","isSelected","isActive","isToday","idCell","$btn","pointerEvents","$gridHelp","$grid","ref","$slot","$widget","lang","CalendarPlugin","bgVariant","borderVariant","titleTag","BCardTitle","subTitle","subTitleTag","subTitleTextVariant","BCardSubTitle","titleProps","subTitleProps","cardProps","bodyClass","overlay","BCardBody","bodyBgVariant","bodyBorderVariant","bodyTextVariant","$title","$subTitle","bodyTag","BCardProps","header","headerClass","headerHtml","BCardHeader","headerBgVariant","headerBorderVariant","headerTextVariant","footer","footerClass","footerHtml","BCardFooter","footerBgVariant","footerBorderVariant","footerTextVariant","footerTag","BLANK_TEMPLATE","blank","blankColor","center","fluid","fluidGrow","sizes","srcset","thumbnail","BImg","align","color","makeBlankImgSrc","BImgProps","end","start","BCardImg","baseClass","cardImgProps","BCardImgProps","imgSrc","BCardBodyProps","BCardHeaderProps","BCardFooterProps","noBody","BCard","imgLeft","imgRight","imgStart","imgEnd","imgBottom","slotScope","$imgFirst","$imgLast","$img","hasHeaderSlot","$footer","OBSERVER_PROP_NAME","VisibilityObserver","margin","once","observer","visible","doneOnce","createObserver","stop","IntersectionObserver","rootMargin","threshold","observe","entries","entry","isIntersecting","intersectionRatio","disconnect","destroy","modifiers","mod","_prevModifiers","VBVisible","componentUpdated","unbind","MODEL_PROP_NAME_SHOW","imgProps","blankHeight","blankSrc","blankWidth","BImgLazy","isShown","computedSrc","computedBlank","computedWidth","computedHeight","computedSrcset","computedSizes","_watch$i","updateShowProp","MODEL_EVENT_NAME_PREFIX","doShow","_modifiers","$props","BImgLazyProps","BCardImgLazy","textTag","BCardText","columns","deck","BCardGroup","CardPlugin","noop","observeDom","obs","mutations","changed","mutation","TEXT_NODE","addedNodes","removedNodes","childList","subtree","_makeModelMixin$i","DIRECTION","next","dirClass","overlayClass","prev","PointerType","TOUCH","PEN","TransitionEndEvents","WebkitTransition","MozTransition","OTransition","transition","background","controls","imgHeight","imgWidth","indicators","interval","labelGotoSlide","labelIndicators","labelNext","labelPrev","noAnimation","noHoverPause","noTouch","noWrap","BCarousel","getBvCarousel","isSliding","transitionEndEvent","slides","isPaused","touchStartX","touchDeltaX","numSlides","_watch$h","setSlide","pause","doSlide","$_interval","$_animationTimeout","$_touchTimeout","$_observer","getTransitionEndEvent","updateSlides","setObserver","clearInterval","clearAnimationTimeout","clearTouchTimeout","_clearInterval","inner","attributes","attributeFilter","slide","visibilityState","setInterval","restart","isCycling","calcDirection","currentSlide","nextSlide","called","onceTransEnd","curIndex","nextIndex","handleClick","handleSwipe","absDeltaX","touchStart","pointerType","clientX","touches","touchMove","touchEnd","idInner","$controls","makeControl","handlerWrapper","$indicators","mouseenter","mouseleave","tagName","imgAlt","imgBlank","imgBlankColor","caption","captionHtml","captionTag","contentTag","contentVisibleUp","textHtml","BCarouselSlide","bvCarousel","contentClasses","dragstart","$contentChildren","$child","CarouselPlugin","CLASS_NAME_SHOW","TRANSITION_PROPS","TRANSITION_HANDLERS","enter","scrollHeight","afterEnter","leave","afterLeave","BVCollapse","ROOT_ACTION_EVENT_NAME_TOGGLE","ROOT_ACTION_EVENT_NAME_REQUEST_STATE","ROOT_EVENT_NAME_ACCORDION","ROOT_EVENT_NAME_STATE","ROOT_EVENT_NAME_SYNC_STATE","_makeModelMixin$h","accordion","isNav","BCollapse","transitioning","classObject","collapse","close","_watch$g","emitState","handleToggleEvent","handleAccordionEvent","setWindowEvents","handleResize","emitSync","updated","onEnter","onAfterEnter","onLeave","onAfterLeave","checkDisplayBlock","restore","isBlock","display","clickHandler","openedId","openAccordion","isThis","getInstanceFromDirective","bindings","instance","CLASS_BV_TOGGLE_COLLAPSED","CLASS_BV_TOGGLE_NOT_COLLAPSED","BV_BASE","BV_TOGGLE_ROOT_HANDLER","BV_TOGGLE_CLICK_HANDLER","BV_TOGGLE_STATE","BV_TOGGLE_TARGETS","ATTR_ARIA_CONTROLS","ATTR_ARIA_EXPANDED","ATTR_ROLE","ATTR_TABINDEX","STYLE_OVERFLOW_ANCHOR","KEYDOWN_KEY_CODES","removeClickListener","removeRootListeners","setToggleState","state","resetProp","handleUpdate","targets","arg","arr","getTargets","addClickListener","VBToggle","addRootListeners","VBTogglePlugin","CollapsePlugin","isBrowser","timeoutDuration","longerTimeoutBrowsers","debounce","resolve","then","scheduled","functionToCheck","getStyleComputedProperty","element","property","getParentNode","nodeName","host","getScrollParent","_getStyleComputedProp","overflow","overflowX","overflowY","getReferenceNode","reference","referenceNode","isIE11","MSInputMethodContext","documentMode","isIE10","isIE","getOffsetParent","noOffsetParent","nextElementSibling","getRoot","node","findCommonOffsetParent","element1","element2","order","compareDocumentPosition","DOCUMENT_POSITION_FOLLOWING","range","createRange","setStart","setEnd","commonAncestorContainer","firstElementChild","element1root","getScroll","side","upperSide","scrollingElement","includeScroll","rect","subtract","scrollTop","scrollLeft","modifier","getBordersSize","styles","axis","sideA","sideB","getSize","computedStyle","getWindowSizes","classCallCheck","Constructor","TypeError","createClass","enumerable","configurable","writable","protoProps","staticProps","_extends","getClientRect","offsets","clientWidth","clientHeight","horizScrollbar","offsetWidth","vertScrollbar","getOffsetRectRelativeToArbitraryNode","fixedPosition","isHTML","childrenRect","parentRect","scrollParent","getViewportOffsetRectRelativeToArtbitraryNode","excludeScroll","relativeOffset","innerWidth","innerHeight","isFixed","getFixedPositionOffsetParent","getBoundaries","popper","boundariesElement","boundaries","boundariesNode","_getWindowSizes","isPaddingNumber","getArea","computeAutoPlacement","placement","refRect","rects","sortedAreas","area","filteredAreas","computedPlacement","variation","getReferenceOffsets","commonOffsetParent","getOuterSizes","marginBottom","getOppositePlacement","matched","getPopperOffsets","referenceOffsets","popperRect","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","find","check","runModifiers","ends","modifiersToRun","findIndex","cur","match","enabled","update","isDestroyed","arrowStyles","flipped","positionFixed","flip","originalPlacement","isCreated","onUpdate","onCreate","isModifierEnabled","modifierName","getSupportedPropertyName","prefixes","upperProp","toCheck","willChange","disableEventListeners","removeOnDestroy","removeChild","getWindow","attachToScrollParents","scrollParents","isBody","setupEventListeners","updateBound","scrollElement","eventsEnabled","enableEventListeners","scheduleUpdate","cancelAnimationFrame","isFinite","setStyles","unit","isFirefox","isModifierRequired","requestingName","requestedName","requesting","isRequired","_requesting","requested","placements","validPlacements","clockwise","counter","BEHAVIORS","parseOffset","basePlacement","useHeight","fragments","frag","divider","search","splitRegex","ops","op","mergeWithPrevious","toValue","index2","shiftvariation","_data$offsets","isVertical","shiftOffsets","preventOverflow","transformProp","popperStyles","priority","primary","escapeWithReference","secondary","keepTogether","opSide","arrow","_data$offsets$arrow","arrowElement","len","sideCapitalized","altSide","arrowElementSize","popperMarginSide","popperBorderSide","sideValue","placementOpposite","flipOrder","behavior","refOffsets","overlapsRef","overflowsLeft","overflowsRight","overflowsTop","overflowsBottom","overflowsBoundaries","flippedVariationByRef","flipVariations","flippedVariationByContent","flipVariationsByContent","flippedVariation","getOppositeVariation","subtractLength","hide","bound","computeStyle","legacyGpuAccelerationOption","gpuAcceleration","offsetParentRect","shouldRound","noRound","referenceWidth","popperWidth","isVariation","horizontalToInteger","verticalToInteger","getRoundedOffsets","devicePixelRatio","prefixedProperty","invertTop","invertLeft","applyStyle","onLoad","modifierOptions","Defaults","Popper","jquery","Utils","global","PopperUtils","BvEvent","eventInit","constructor","cancelable","nativeEvent","vueTarget","componentId","defaultPrevented","_createClass","clickOutMixin","listenForClickOut","clickOutElement","clickOutEventName","_clickOutHandler","beforeCreate","isClickOut","clickOutHandler","focusInMixin","listenForFocusIn","focusInElement","_focusInHandler","focusInHandler","registry","WeakMap","ROOT_EVENT_NAME_SHOWN","ROOT_EVENT_NAME_HIDDEN","SELECTOR_ITEM","boundary","dropleft","dropright","dropup","noFlip","popperOpts","dropdownMixin","getBvDropdown","getBvNavbar","visibleChangePrevented","bvNavbar","inNavbar","toggler","directionClass","boundaryClass","hideDelay","bvEvent","menu","emitEvent","focusToggler","showMenu","hideMenu","$_popper","$_hideTimeout","whileOpenListen","destroyPopper","set","clearHideTimeout","delete","createPopper","focusMenu","getPopperConfig","updatePopper","popperConfig","isOpen","rootCloseListener","refocus","_event","onMousedown","onEsc","onSplitClick","hideHandler","up","focusItem","dropdownProps","lazy","menuClass","noCaret","splitButtonType","splitClass","splitHref","splitTo","splitVariant","toggleAttrs","toggleClass","toggleTag","toggleText","BDropdown","dropdownClasses","menuClasses","toggleClasses","commonProps","$buttonChildren","buttonContentDomProps","$split","btnProps","$toggle","mousedown","$menu","linkClass","BDropdownItem","bvDropdown","closeDropdown","buttonClass","BDropdownItemButton","BDropdownHeader","BDropdownDivider","inline","novalidate","validated","BForm","formControlProps","formClass","BDropdownForm","textClass","BDropdownText","ariaDescribedby","headerClasses","headerVariant","BDropdownGroup","headerId","ariaDescribedBy","DropdownPlugin","BDd","BDdItem","BDropdownItemBtn","BDdItemButton","BDdItemBtn","BDdHeader","BDdDivider","BDdForm","BDdText","BDdGroup","TYPES","BEmbed","EmbedPlugin","disabledField","htmlField","textField","valueField","formOptionsMixin","formOptions","normalizeOptions","normalizeOption","option","formOptionsProps","BFormDatalist","BFormText","ariaLive","forceShow","tooltip","BFormInvalidFeedback","BFormValidFeedback","BFormRow","FormPlugin","BDatalist","BFormFeedback","looseIndexOf","SELECTOR","autofocus","form","formControlMixin","handleAutofocus","plain","formCustomMixin","custom","formSizeMixin","sizeFormClass","formStateMixin","computedState","stateClass","computedAriaInvalid","ariaInvalid","_makeModelMixin$g","formSizeProps","formStateProps","formCustomProps","ariaLabelledby","buttonVariant","formRadioCheckMixin","localChecked","isGroup","bvGroup","hasFocus","computedLocalChecked","isChecked","isRadio","isBtnMode","buttons","isPlain","isCustom","isSwitch","switches","switch","isInline","computedName","groupName","computedForm","computedButtonVariant","buttonClasses","_watch$f","computedLocalCheckedWatcher","_methods","checked","input","$input","change","handleChange","$button","$label","MODEL_PROP_NAME_INDETERMINATE","MODEL_EVENT_NAME_INDETERMINATE","formRadioCheckProps","_objectSpread2$2","BFormCheckbox","getBvGroup","setIndeterminate","indeterminate","_ref$target","uncheckedValue","BFormRadio","PASS_DOWN_ATTRS","_makeModelMixin$f","formRadioCheckGroupMixin","groupClasses","classes","_watch$e","isRadioGroup","optionComponent","$inputs","formRadioCheckGroupProps","_objectSpread2$1","BFormCheckboxGroup","getBvCheckGroup","FormCheckboxPlugin","BCheckbox","BCheck","BCheckboxGroup","BCheckGroup","MOUSEENTER","updateListeners","listener","_ref$value","hasListener","handlerChanged","createListener","VBHover","buttonOnly","formattedValue","placeholder","BVFormBtnLabelControl","isHovered","idButton","idLabel","idMenu","idWrapper","computedDir","setFocus","handleHover","hovered","invalid","btnScope","opened","$hidden","_makeModelMixin$e","calendarProps","BCalendarProps","formBtnLabelControlProps","BVFormBtnLabelControlProps","calendarWidth","closeButton","closeButtonVariant","dark","labelCloseButton","labelResetButton","labelTodayButton","noCloseOnSelect","resetButton","resetButtonVariant","resetValue","todayButton","todayButtonVariant","BFormDatepicker","localYMD","localLocale","calendarYM","computedLang","computedResetValue","_watch$d","control","setAndClose","onSelected","onInput","onContext","onTodayButton","onResetButton","onCloseButton","onShow","onShown","onHidden","defaultButtonFn","$createElement","$calendar","shown","FormDatepickerPlugin","BDatepicker","_makeModelMixin$d","VALUE_EMPTY_DEPRECATED_MSG","isValidValue","isFile","getDataTransferItemEntry","getAsEntry","webkitGetAsEntry","getAllFileEntriesInDirectory","directoryReader","entryPromises","readDirectoryEntries","readEntries","all","isDirectory","createReader","file","$path","accept","browseText","directory","dropPlaceholder","fileNameFormatter","multiple","noDrop","noDropPlaceholder","noTraverse","BFormFile","files","dragging","dropAllowed","computedAccept","extOrType","startMatch","endMatch","rx","computedCapture","webkitdirectory","computedFileNameFormatter","defaultFileNameFormatter","clonedFiles","flattenedFiles","fileNames","labelContent","allowed","filesTraversed","_watch$c","reset","$_form","$form","isFileValid","isFilesArrayValid","setFiles","setInputFiles","dataTransfer","ClipboardEvent","clipboardData","DataTransfer","handleFiles","isDrop","filteredFiles","focusHandler","onChange","_event$dataTransfer","dataTransferItemList","traverseDirectories","kind","getAllFileEntries","webkitRelativePath","onDragenter","_event$dataTransfer2","dropEffect","onDragover","_event$dataTransfer3","onDragleave","onDrop","zIndex","dragenter","dragover","dragleave","drop","FormFilePlugin","BFile","escapeChar","cssEscape","firstCharCode","char","charCode","ALIGN_SELF_VALUES","computeBreakpointClass","breakpoint","breakpointPropMap","BCol","breakpointCol","breakpointOffset","breakpointOrder","col","alignSelf","cols","_classList$push","hasColClasses","INPUTS","INPUT_SELECTOR","LEGEND_INTERACTIVE_ELEMENTS","BFormGroup","description","feedbackAriaLive","invalidFeedback","labelClass","labelFor","labelSize","labelSrOnly","validFeedback","contentColProps","getColProps","labelAlignClasses","getAlignClasses","labelColProps","isHorizontal","updateAriaDescribedby","propValue","newIds","oldIds","ids","onLegendClick","inputs","isFieldset","labelId","labelTag","$invalidFeedback","invalidFeedbackContent","invalidFeedbackId","$validFeedback","validFeedbackContent","validFeedbackId","$description","descriptionContent","descriptionId","FormGroupPlugin","BFormFieldset","formSelectionMixin","selectionStart","selectionEnd","selectionDirection","_this$$refs$input","setSelectionRange","_this$$refs$input2","setRangeText","_this$$refs$input3","_makeModelMixin$c","formatter","lazyFormatter","number","plaintext","formTextMixin","localValue","vModelValue","modifyValue","computedClass","isRange","isColor","computedDebounce","hasFormatter","stringifyValue","modifiedValue","clearDebounce","$_inputDebounceTimer","formatValue","force","updateValue","doUpdate","composing","onBlur","formValidityMixin","validity","validationMessage","willValidate","setCustomValidity","checkValidity","reportValidity","formTextProps","list","noWheel","BFormInput","localType","setWheelStopper","onWheelFocus","onWheelBlur","stopWheel","FormInputPlugin","BInput","BFormRadioGroup","getBvRadioGroup","FormRadioPlugin","BRadio","BRadioGroup","_makeModelMixin$b","computeStars","stars","clampValue","BVFormRatingStar","focused","hasClear","rating","star","minStar","iconClear","iconEmpty","iconFull","iconHalf","noBorder","showClear","showValue","showValueMax","BFormRating","computedStars","computedRating","isInteractive","formattedRating","formatOptions","toLocaleString","_watch$b","amountRtl","onFocus","renderIcon","iconEmptyFn","iconHalfFn","iconFullFn","iconClearFn","$icon","empty","half","full","FormRatingPlugin","BRating","_makeModelMixin$a","labelField","optionsField","optionsMixin","BFormSelectOption","BFormSelectOptionGroup","selectSize","BFormSelect","computedSelectSize","inputClass","selectedValue","_value","FormSelectPlugin","BSelect","BSelectOption","BSelectOptionGroup","_makeModelMixin$9","KEY_CODES","formatterFn","labelDecrement","labelIncrement","repeatDelay","repeatInterval","repeatStepMultiplier","repeatThreshold","wrap","BFormSpinbutton","spinId","computedInline","computedReadonly","computedRequired","computedStep","computedDelay","delay","computedInterval","computedThreshold","computedStepMultiplier","computedPrecision","computedMultiplier","valueAsFixed","computedRTL","defaultFormatter","useGrouping","computedFormatter","computedSpinAttrs","hasValue","_watch$a","clearRepeat","$_autoDelayTimer","$_autoRepeatTimer","$_keyIsDown","spinner","emitChange","stepValue","multiplier","onFocusBlur","stepUp","stepDown","metaKey","resetTimers","handleStepRepeat","onKeyup","stepper","count","onMouseup","setMouseup","makeButton","IconCmp","keyRef","slotName","touchstart","$increment","$decrement","$spin","keyup","FormSpinbuttonPlugin","BSpinbutton","noRemove","removeLabel","BFormTag","onRemove","tagId","tagLabelId","$remove","$tag","_makeModelMixin$8","DEFAULT_INPUT_FOCUS_SELECTOR","cleanTags","tags","processEventValue","addButtonText","addButtonVariant","addOnChange","duplicateTagText","ignoreInputFocusSelector","inputAttrs","inputId","inputType","invalidTagText","limit","limitTagsText","noAddOnEnter","noOuterFocus","noTagRemove","removeOnDelete","separator","tagClass","tagPills","tagRemoveLabel","tagRemovedLabel","tagValidator","tagVariant","BFormTags","newTag","removedTags","tagsState","valid","duplicate","focusState","computedInputId","computedInputType","computedInputAttrs","computedInputHandlers","onInputBlur","onInputChange","onInputFocus","onInputInput","onInputKeydown","computedSeparator","computedSeparatorRegExp","computedJoiner","joiner","computeIgnoreInputFocusSelector","disableAddButton","splitTags","validateTag","duplicateTags","hasDuplicateTags","invalidTags","hasInvalidTags","isLimitReached","_watch$9","addTag","parseTags","getInput","invalidAndDuplicates","removeTag","separatorRe","ignoreFocusSelector","onFocusout","_this7","defaultRender","inputHandlers","isDuplicate","isInvalid","$tags","duplicateFeedbackId","limitFeedbackId","outline","minWidth","invisible","tagListId","$field","$ul","$feedback","$invalid","$duplicate","$limit","$output","$removed","hasTags","FormTagsPlugin","BTags","BTag","maxRows","noAutoShrink","noResize","rows","BFormTextarea","heightInPx","resize","computedRows","computedMinRows","computedMaxRows","setHeight","visibleCallback","computeHeight","$isServer","lineHeight","border","borderBottomWidth","paddingTop","minHeight","oldHeight","contentRows","FormTextareaPlugin","BTextarea","_makeModelMixin$7","NUMERIC","padLeftZeros","parseHMS","hh","mm","ss","_value$split$map2","hours","minutes","seconds","ampm","BFormSpinbuttonProps","hour12","labelAm","labelAmpm","labelHours","labelMinutes","labelNoTimeSelected","labelPm","labelSeconds","minutesStep","secondsStep","showSeconds","BTime","modelHours","modelMinutes","modelSeconds","modelAmpm","computedHMS","requireSeconds","formatHMS","resolved","hourCycle","computedHourCycle","is12Hour","formatted","formattedTimeString","computedAriaLabelledby","timeFormatter","timeZone","numberFormatter","UTC","spinScopedSlots","increment","decrement","_watch$8","_parseHMS","newHours","oldHours","spinners","formatHours","formatMinutes","formatSeconds","formatAmpm","setHours","setMinutes","setSeconds","setAmpm","onSpinLeftRight","cmp","spinIds","makeSpinbutton","spinbuttonProps","makeColon","$spinners","$value","_makeModelMixin$6","timeProps","BTimeProps","labelNowButton","noCloseButton","nowButton","nowButtonVariant","BFormTimepicker","localHMS","_watch$7","hms","onNowButton","now","getHours","getMinutes","getSeconds","time","$time","FormTimepickerPlugin","BTimepicker","ImagePlugin","BInputGroupText","isText","BInputGroupAddon","BInputGroupAddonProps","BInputGroupAppend","BInputGroupPrepend","appendHtml","prepend","prependHtml","BInputGroup","$prepend","hasPrependSlot","$append","hasAppendSlot","InputGroupPlugin","BContainer","container","containerFluid","headerLevel","lead","leadHtml","leadTag","BJumbotron","$lead","hasLeadSlot","$children","JumbotronPlugin","COMMON_ALIGNMENT","computeRowColsClass","computeRowColsBreakpoint","rowColsPropList","BRow","rowColsProps","alignContent","alignH","alignV","noGutters","LayoutPlugin","LinkPlugin","flush","horizontal","BListGroup","actionTags","action","BListGroupItem","itemProps","ListGroupPlugin","verticalAlign","BMediaAside","BMediaBody","rightAlign","BMedia","$aside","MediaPlugin","listenOnDocumentMixin","listenOffDocument","registerDocumentListener","unregisterDocumentListener","listenDocument","listenOnDocument","listenOnWindowMixin","listenOffWindow","registerWindowListener","unregisterWindowListener","listenWindow","listenOnWindow","useParentMixin","bvParent","getScopeId","_scopeId","scopedStyleMixin","scopedStyleAttrs","scopeId","createNewChildComponent","Component","BVTransporterTarget","abstract","nodes","updatedNodes","destroyed","$nodes","BVTransporterVue2","immediate","unmountTarget","mountTarget","$_defaultFn","$_target","beforeMount","updateTarget","getContainer","$container","createElement","appendChild","propsData","defaultFn","$destroy","BVTransporter","Teleport","BvModalEvent","_assertThisInitialized","trigger","_get","_getPrototypeOf","modalManager","modals","baseZIndex","scrollbarWidth","isBodyOverflowing","modalCount","modalsAreOpen","newCount","oldCount","getScrollbarWidth","checkScrollbar","setScrollbar","resetScrollbar","updateModals","registerModal","modal","unregisterModal","splice","_isBeingDestroyed","_isDestroyed","resetModal","getBaseZIndex","div","isTop","_getBCR","_paddingChangedForModal","_marginChangedForModal","actualPadding","actualMargin","_makeModelMixin$5","TRIGGER_FORCE","BUTTON_CANCEL","BUTTON_CLOSE","BUTTON_OK","BUTTONS","OBSERVER_CONFIG","characterData","autoFocusButton","busy","buttonSize","cancelDisabled","cancelTitle","cancelTitleHtml","cancelVariant","centered","contentClass","dialogClass","headerCloseContent","headerCloseLabel","headerCloseVariant","hideBackdrop","hideFooter","hideHeaderClose","ignoreEnforceFocusSelector","modalClass","noCloseOnBackdrop","noCloseOnEsc","noEnforceFocus","noStacking","okDisabled","okOnly","okTitle","okTitleHtml","okVariant","returnFocus","scrollable","static","titleClass","titleHtml","titleSrOnly","BModal","isHidden","isTransitioning","isShow","isOpening","isClosing","ignoreBackdropClick","isModalOverflowing","modalId","modalOuterId","modalHeaderId","modalBodyId","modalTitleId","modalContentId","modalFooterId","modalBackdropId","modalClasses","modalStyles","sbWidth","dialogClasses","titleClasses","bodyClasses","footerClasses","_ref4","modalOuterStyle","cancel","onCancel","onClose","ok","onOk","computeIgnoreEnforceFocusSelector","computedModalAttrs","$_returnFocus","showHandler","toggleHandler","modalListener","checkModalOverflow","updateModel","buildEvent","showEvent","hideEvent","triggerEl","onBeforeEnter","setResizeEvent","setEnforceFocus","onBeforeLeave","returnFocusTo","onDialogMousedown","onceModalMouseup","onClickOut","tabables","bottomTrap","topTrap","preventScroll","autoFocus","makeModal","$modalHeader","$closeButton","$body","$modalFooter","$cancelButton","$modalContent","$tabTrapTop","$tabTrapBottom","$modalDialog","$modal","beforeEnter","beforeLeave","$backdrop","ROOT_ACTION_EVENT_NAME_SHOW","PROPERTY","getTarget","_ref$modifiers","getTriggerElement","setRole","oldProp","VBModal","inserted","PROP_NAME","BASE_PROPS","modalProps","defaultResolver","propsToSlots","msgBoxContent","filterOptions","BVModalPlugin","BMsgBox","extends","handleDestroy","$route","$watch","asyncMsgBox","resolver","msgBox","reject","Error","bvModalEvent","$mount","makeMsgBox","BvModal","_vm","_root","_this$_root","_this$_root2","_len2","_key2","ModalPlugin","cardHeader","justified","pills","small","tabs","BNav","linkAttrs","linkClasses","BNavItem","BNavText","formProps","BFormProps","BNavForm","BDropdownProps","BNavItemDropdown","toggleId","menuId","NavPlugin","BNavItemDd","BNavDropdown","BNavDd","fixed","print","sticky","toggleable","BNavbar","breakpointClass","xs","BNavProps","BNavbarNav","BNavbarBrand","BNavbarToggle","toggleState","handleStateEvent","expanded","NavbarPlugin","BNavToggle","BSpinner","POSITION_COVER","bgColor","noCenter","opacity","overlayTag","spinnerSmall","spinnerType","spinnerVariant","wrapTag","BOverlay","defaultOverlayFn","$overlay","$background","backgroundColor","backdropFilter","OverlayPlugin","_makeModelMixin$4","sanitizeLimit","sanitizeCurrentPage","numberOfPages","page","onSpaceKey","ellipsisClass","ellipsisText","firstClass","firstNumber","firstText","hideEllipsis","hideGotoEndButtons","labelFirstPage","labelLastPage","labelNextPage","labelPage","labelPrevPage","lastClass","lastNumber","lastText","nextClass","nextText","pageClass","prevClass","prevText","paginationMixin","currentPage","localNumberOfPages","localLimit","btnSize","alignment","styleClass","computedCurrentPage","paginationParams","showFirstDots","showLastDots","numberOfLinks","startNumber","lastPageNumber","pageList","_this$paginationParam","pages","makePageArray","_watch$6","handleKeyNav","getButtons","btn","focusCurrent","_safeVueInstance","pageNumbers","_this$paginationParam2","$buttons","isActivePage","pageNumber","noCurrentPage","makeEndBtn","linkTo","btnSlot","btnText","btnClass","pageTest","$btnContent","makeEllipsis","isLast","makePageButton","btnContent","makePage","$firstPageBtn","$lastPageBtn","$pagination","sanitizePerPage","sanitizeTotalRows","paginationProps","perPage","totalRows","BPagination","pageSizeNumberOfPages","clickEvent","pageNum","PaginationPlugin","baseUrl","linkGen","noPageDetect","pageGen","useRouter","BPaginationNav","computedValue","setNumberOfPages","guessCurrentPage","getPageInfo","makeLink","resolveLink","_link2","pathname","resolveRoute","route","guess","currentRoute","loc","location","currentLink","PaginationNavPlugin","AttachmentMap","AUTO","TOP","RIGHT","BOTTOM","LEFT","TOPLEFT","TOPRIGHT","RIGHTTOP","RIGHTBOTTOM","BOTTOMLEFT","BOTTOMRIGHT","LEFTTOP","LEFTBOTTOM","OffsetMap","arrowPadding","boundaryPadding","fallbackPlacement","BVPopper","attachment","getAttachment","templateType","getOffset","popperPlacementChange","popperCreate","arrowOffset","renderTemplate","BVTooltipTemplate","customClass","interactive","templateClasses","noninteractive","templateAttributes","templateListeners","MODAL_SELECTOR","ROOT_EVENT_NAME_MODAL_HIDDEN","CONTAINER_SELECTOR","DATA_TITLE_ATTR","templateData","triggers","BVTooltip","activeTrigger","hover","computedId","computedTriggers","isWithActiveTrigger","computedTemplateData","newTriggers","oldTriggers","unListen","listen","handleTemplateUpdate","disable","enable","$_tip","$_hoverTimeout","$_hoverState","$_visibleInterval","$_enabled","$_noop","forceHide","setWhileOpenListeners","clearHoverTimeout","clearVisibilityInterval","destroyTemplate","getTemplate","updateData","titleUpdated","fixTitle","createTemplateAndShow","Template","$tip","getPlacementTarget","getBoundary","onTemplateShow","onTemplateShown","onTemplateHide","onTemplateHidden","handleEvent","hideTemplate","clearActiveTriggers","localPlacementTarget","removeAriaDescribedby","restoreTitle","getTemplateElement","dropdownOpen","addAriaDescribedby","tip","prevHoverState","getTargetId","isInModal","isDropdown","desc","setRootListener","doHide","doDisable","doEnable","setModalListener","setDropdownListener","visibleCheck","setOnTouchStartListener","_this8","_this9","currentElement","has","getInstanceFromElement","eventTarget","_this10","_this11","MODEL_PROP_NAME_ENABLED","MODEL_EVENT_NAME_ENABLED","_makePropsConfigurabl","BTooltip","localTitle","localContent","templateTitleContent","_watch$5","$_toolpop","updateContent","doOpen","doClose","getComponent","$toolpop","onHide","onDisabled","onEnabled","setTitle","setContent","BVPopoverTemplate","titleDomProps","contentDomProps","BVPopover","BTooltipProps","BPopover","BV_POPOVER","validTriggers","manual","htmlRE","noFadeRE","placementRE","boundaryRE","delayRE","delayShowRE","delayHideRE","offsetRE","variantRE","spacesRE","applyPopover","selectedTriggers","parseBindings","__bv_prev_data__","oldData","newData","VBPopoverPlugin","VBPopover","removePopover","PopoverPlugin","animated","labelHtml","showProgress","striped","BProgressBar","getBvProgress","bvProgress","progressBarClasses","computedAnimated","computedStriped","progressBarStyles","computedProgress","computedShowProgress","computedShowValue","progressBarProps","BProgressBarProps","ProgressPlugin","BProgress","progressHeight","$childNodes","_makeModelMixin$3","backdrop","backdropVariant","closeLabel","noCloseOnRouteChange","noHeader","noHeaderClose","noSlide","shadow","sidebarClass","renderHeader","renderHeaderTitle","$close","renderHeaderClose","renderBody","renderFooter","renderContent","renderBackdrop","onBackdropClick","BSidebar","transitionProps","hasTitle","titleId","_watch$4","fullPath","$_returnFocusEl","handleToggle","handleSync","onTopTrapFocus","enforceFocus","onBottomTrapFocus","$sidebar","SidebarPlugin","BSkeleton","BSkeletonIcon","cardImg","noAspect","BSkeletonImg","hasListenerMixin","$events","_events","LIGHT","DARK","BTr","getBvTableTr","getBvTableRowGroup","bvTableRowGroup","inTbody","isTbody","inThead","isThead","inTfoot","isTfoot","isDark","isStacked","isResponsive","isStickyHeader","hasStickyHeader","tableVariant","headVariant","footVariant","isRowDark","trClasses","trAttrs","bottomRowMixin","renderBottomRow","fields","computedFields","tbodyTrClass","tbodyTrAttr","parseSpan","spanValidator","colspan","rowspan","stackedHeading","stickyColumn","BTd","bvTableTr","isStackedCell","isStickyColumn","rowVariant","computedColspan","computedRowspan","cellClasses","cellAttrs","headOrFoot","MODEL_PROP_NAME_BUSY","busyMixin","localBusy","computedBusy","stopIfBusy","renderBusy","captionMixin","captionId","renderCaption","$caption","hasCaptionSlot","colgroupMixin","renderColgroup","$colgroup","emptyFilteredHtml","emptyFilteredText","emptyHtml","emptyText","showEmpty","emptyMixin","renderEmpty","computedItems","$empty","isFiltered","stringifyObjectValues","FIELD_KEY_CELL_VARIANT","FIELD_KEY_ROW_VARIANT","FIELD_KEY_SHOW_DETAILS","IGNORED_FIELD_KEYS","EVENT_FILTER","sanitizeRow","row","ignoreFields","includeFields","fieldsObj","formattedRow","field","filterByFormatted","allowedKeys","filterDebounce","filterFunction","filterIgnoredFields","filterIncludedFields","filteringMixin","localFilter","filterSanitize","computedFilterIgnored","computedFilterIncluded","computedFilterDebounce","ms","localFiltering","hasProvider","noProviderFiltering","filteredCheck","filteredItems","localItems","localFilterFn","criteria","filterFn","filterFnFactory","defaultFilterFnFactory","clearFilterTimer","deep","newCriteria","timeout","regExp","pattern","lastIndex","computedFieldsObj","normalizeFields","origFields","processField","sample","_makeModelMixin$2","primaryKey","itemsMixin","paginatedItems","sortedItems","_safeVueInstance2","sortBy","localSortBy","sortDesc","localSortDesc","apiUrl","getFieldFormatter","localPaging","noProviderPaging","ROOT_EVENT_NAME_REFRESHED","ROOT_ACTION_EVENT_NAME_REFRESH","noProviderSorting","providerMixin","providerTriggerContext","_providerUpdate","refresh","clearSelected","_providerSetLocal","catch","SELECT_MODES","ROLE_GRID","noSelectOnClick","selectMode","selectable","selectableMixin","selectedRows","selectedLastRow","isSelectable","hasSelectableRowClick","supportsSelectableRows","selectableHasSelection","selectableIsMultiSelect","selectableTableClasses","selectableTableAttrs","setSelectionHandlers","selectRow","isRowSelected","selectedLastClicked","unselectRow","selectAllRows","selectableRowClasses","selectableRowAttrs","selectionHandler","stableSort","compareFn","normalizeValue","MODEL_PROP_NAME_SORT_BY","MODEL_PROP_NAME_SORT_DESC","SORT_DIRECTION_ASC","SORT_DIRECTION_DESC","SORT_DIRECTIONS","_props","labelSortAsc","labelSortClear","labelSortDesc","noFooterSorting","noLocalSorting","noSortReset","numeric","sortingMixin","localSorting","isSortable","sortable","sortCompareLocale","nullLast","sortNullLast","sortCompare","localeOptions","sortCompareOptions","usage","sortByFormatted","_ref$sortBy","_ref$formatter","_ref$locale","_ref$localeOptions","_ref$nullLast","aa","bb","localeCompare","defaultSortCompare","_watch$3","handleSort","isFoot","sortChanged","toggleLocalSortDesc","sortDirection","sortKey","sortTheadThClasses","sortIconLeft","sortTheadThAttrs","_field$sortKey","sortTheadThLabel","labelSorting","stackedMixin","isStackedAlways","stackedTableClasses","bordered","borderless","captionTop","noBorderCollapse","outlined","responsive","stickyHeader","tableClass","tableRendererMixin","getBvTable","isTableSimple","wrapperClasses","wrapperStyles","maxHeight","tableClasses","tableAttrs","ariaAttrs","_safeVueInstance3","renderThead","renderTbody","renderTfoot","$table","tbodyTransitionHandlers","tbodyTransitionProps","BTbody","bvTable","isTransitionGroup","tbodyAttrs","tbodyProps","nativeOn","TABLE_TAG_NAMES","filterEvent","textSelectionActive","containsNode","BTdProps","BTh","detailsTdClass","tbodyRowMixin","getTdValues","tdValue","getThValues","thValue","getFormattedValue","toggleDetailsFactory","hasDetailsSlot","rowHovered","tbodyRowEventStopped","emitTbodyRowEvent","rowUnhovered","renderTbodyRowCell","colIndex","rowIndex","isRowHeader","cellTag","cellVariant","tdClass","thAttr","tdAttr","unformatted","toggleDetails","detailsShowing","rowSelected","$_bodyFieldSlotNameCache","renderTbodyRow","rowShowDetails","hasRowClickHandler","$rows","detailsId","$tds","ariaRowIndex","primaryKeyValue","rowKey","rowId","selectableClasses","selectableAttrs","userTrClasses","userTrAttrs","detailsScope","$details","userDetailsTrClasses","userDetailsTrAttrs","getCellSlotName","BTbodyProps","tbodyRowProps","tbodyClass","tbodyMixin","getTbodyTrs","tbody","trs","tr","getTbodyTrIndex","onTbodyRowKeydown","onTBodyRowClicked","onTbodyRowMiddleMouseRowClicked","which","onTbodyRowContextmenu","onTbodyRowDblClicked","renderTopRow","$busy","defaultSlotName","lowercaseSlotName","handlers","auxclick","contextmenu","dblclick","BTfoot","tfootClasses","tfootAttrs","footClone","footRowVariant","tfootClass","tfootTrClass","tfootMixin","renderTFootCustom","BThead","theadClasses","theadAttrs","getHeadSlotName","getFootSlotName","headRowVariant","theadClass","theadTrClass","theadMixin","fieldClasses","thClass","headClicked","hasHeadClickListener","makeCell","headerTitle","sortAttrs","sortClass","sortLabel","thStyle","abbr","headerAbbr","slotNames","column","$srLabel","$trs","topRowMixin","bottomRowProps","busyProps","captionProps","colgroupProps","emptyProps","filteringProps","itemsProps","providerProps","selectableProps","sortingProps","stackedProps","tableRendererProps","tfootProps","theadProps","BTable","BTableLite","BTableSimple","TablePlugin","TableLitePlugin","TableSimplePlugin","isPositiveNumber","showFooter","tableProps","BSkeletonTable","$th","$thTr","$td","$tdTr","$tbody","$thead","$tfoot","loading","BSkeletonWrapper","SkeletonPlugin","SpinnerPlugin","_makeModelMixin$1","notDisabled","tab","BVTabButton","getBvTabs","posInSet","setSize","bvTabs","_this$tab","localActive","titleItemClass","titleLinkClass","titleLinkAttributes","$link","activeNavItemClass","activeTabClass","card","navClass","navWrapperClass","noNavStyle","BTabs","currentTab","registeredTabs","localNavClass","_watch$2","$tab","activateTab","previousTab","nextTab","updateTabs","registerTab","unregisterTab","$t","getTabs","$tabs","getButtonForTab","updateButton","$forceUpdate","tabEvent","deactivateTab","focusButton","emitTabClick","clickTab","firstTab","currentIndex","lastTab","$activeTab","$fallbackTab","_on","controlledBy","MODEL_PROP_NAME_ACTIVE","MODEL_EVENT_NAME_ACTIVE","_objectSpread2","TabsPlugin","BTab","_isTab","tabClasses","buttonId","computedNoFade","computedLazy","_watch$1","activate","deactivate","TimePlugin","Symbol","iterator","_toConsumableArray","arr2","_arrayWithoutHoles","iter","_iterableToArray","_nonIterableSpread","inBrowser","acc","transports","sources","Wormhole","trackInstances","open","transport","passengers","_transport$order","Infinity","newTransport","freeze","$_getTransportIndex","newTransports","registerTarget","unregisterTarget","registerSource","unregisterSource","hasTarget","hasSource","hasContentFor","wormhole","_id","Portal","slim","slotProps","random","sendUpdate","clear","closer","normalizeSlots","normalizeOwnChildren","slotContent","Tag","PortalTarget","firstRender","ownTransports","newVal","oldVal","temp","newPassengers","combinePassengers","noWrapper","_id$1","portalProps","targetProps","bail","mountTo","targetSlim","targetSlotProps","targetTag","portalTarget","mountEl","VuePlugin","DefaultTransition","ariaAtomic","BToaster","doRender","dead","staticName","$toaster","$target","_makeModelMixin","appendToast","autoHideDelay","isStatus","noAutoHide","solid","toastClass","toaster","BToast","isMounted","isHiding","dismissStarted","resumeDismiss","toastClasses","computedDuration","computedToaster","transitionHandlers","_watch","ensureToaster","$_dismissTimer","clearDismissTimer","setHoverHandler","startDismissTimer","onPause","onUnPause","passed","onLinkClick","hiddenEvent","makeToast","$headerContent","isStatic","$toast","toastProps","toastContent","BVToastPlugin","BVToastPop","toast","BvToast","ToastPlugin","BV_TOOLTIP","noninteractiveRE","applyTooltip","VBTooltipPlugin","VBTooltip","removeTooltip","componentsPlugin","TooltipPlugin","VBHoverPlugin","VBModalPlugin","CLASS_NAME_ACTIVE","SELECTOR_NAV_LINKS","SELECTOR_NAV_ITEMS","SELECTOR_LIST_ITEMS","SELECTOR_DROPDOWN_ITEMS","ROOT_EVENT_NAME_ACTIVATE","METHOD_POSITION","Default","throttle","DefaultType","objectToString","BVScrollspy","$scroller","$selector","$offsets","$targets","$activeTarget","$scrollHeight","$resizeTimeout","$scrollerObserver","$targetsObserver","$config","updateConfig","unlisten","cfg","componentName","configTypes","expectedTypes","valueType","_isVue","typeCheckConfig","Name","self","scroller","getScroller","setObservers","autoMethod","methodFn","offsetBase","getScrollTop","getScrollHeight","maxScroll","getOffsetHeight","links","dropdown","setActiveState","sibling","previousElementSibling","BV_SCROLLSPY","onlyDigitsRE","applyScrollspy","BootstrapVue","directivesPlugin","VBScrollspyPlugin","VBScrollspy","dispose","removeScrollspy","VBVisiblePlugin"],"sources":["../node_modules/vue-functional-data-merge/dist/lib.esm.js","../src/vue.js","../src/constants/env.js","../src/utils/plugins.js","../src/constants/config.js","../src/constants/regex.js","../src/constants/safe-types.js","../src/utils/inspect.js","../src/utils/object.js","../src/utils/clone-deep.js","../src/utils/identity.js","../src/utils/get.js","../src/utils/env.js","../src/utils/warn.js","../src/utils/config-set.js","../src/constants/components.js","../src/constants/events.js","../src/constants/props.js","../src/constants/slots.js","../src/utils/array.js","../src/utils/normalize-slot.js","../src/mixins/normalize-slot.js","../src/utils/number.js","../src/utils/string.js","../src/utils/dom.js","../src/utils/memoize.js","../src/utils/config.js","../src/utils/props.js","../src/utils/model.js","../src/utils/events.js","../src/components/button/button-close.js","../src/components/transition/bv-transition.js","../src/components/alert/alert.js","../src/components/alert/index.js","../src/utils/math.js","../src/components/aspect/aspect.js","../src/components/aspect/index.js","../src/utils/safe-vue-instance.js","../src/utils/router.js","../src/icons/helpers/icon-base.js","../src/icons/helpers/make-icon.js","../src/icons/icons.js","../src/icons/icon.js","../src/constants/key-codes.js","../src/utils/loose-equal.js","../src/utils/cache.js","../src/mixins/attrs.js","../src/utils/get-event-root.js","../src/mixins/listen-on-root.js","../src/mixins/listeners.js","../src/components/link/link.js","../src/components/button/button.js","../src/components/avatar/avatar.js","../src/components/avatar/avatar-group.js","../src/components/avatar/index.js","../src/components/badge/badge.js","../src/components/badge/index.js","../src/utils/html.js","../src/components/breadcrumb/breadcrumb-link.js","../src/components/breadcrumb/breadcrumb-item.js","../src/components/breadcrumb/breadcrumb.js","../src/components/breadcrumb/index.js","../src/components/button/index.js","../src/components/button-group/button-group.js","../src/components/button-group/index.js","../src/components/button-toolbar/button-toolbar.js","../src/components/button-toolbar/index.js","../src/constants/date.js","../src/utils/date.js","../src/utils/locale.js","../src/mixins/id.js","../src/components/calendar/calendar.js","../src/components/calendar/index.js","../src/mixins/card.js","../src/components/card/card-title.js","../src/components/card/card-sub-title.js","../src/components/card/card-body.js","../src/components/card/card-header.js","../src/components/card/card-footer.js","../src/components/image/img.js","../src/components/card/card-img.js","../src/components/card/card.js","../src/directives/visible/visible.js","../src/components/image/img-lazy.js","../src/components/card/card-img-lazy.js","../src/components/card/card-text.js","../src/components/card/card-group.js","../src/components/card/index.js","../src/utils/noop.js","../src/utils/observe-dom.js","../src/components/carousel/carousel.js","../src/components/carousel/carousel-slide.js","../src/components/carousel/index.js","../src/constants/classes.js","../src/components/collapse/helpers/bv-collapse.js","../src/components/collapse/collapse.js","../src/utils/get-instance-from-directive.js","../src/directives/toggle/toggle.js","../src/directives/toggle/index.js","../src/components/collapse/index.js","../node_modules/popper.js/dist/esm/popper.js","../src/constants/popper.js","../src/utils/bv-event.class.js","../src/mixins/click-out.js","../src/mixins/focus-in.js","../src/utils/element-to-vue-instance-registry.js","../src/mixins/dropdown.js","../src/components/dropdown/dropdown.js","../src/components/dropdown/dropdown-item.js","../src/components/dropdown/dropdown-item-button.js","../src/components/dropdown/dropdown-header.js","../src/components/dropdown/dropdown-divider.js","../src/components/form/form.js","../src/components/dropdown/dropdown-form.js","../src/components/dropdown/dropdown-text.js","../src/components/dropdown/dropdown-group.js","../src/components/dropdown/index.js","../src/components/embed/embed.js","../src/components/embed/index.js","../src/mixins/form-options.js","../src/components/form/form-datalist.js","../src/components/form/form-text.js","../src/components/form/form-invalid-feedback.js","../src/components/form/form-valid-feedback.js","../src/components/layout/form-row.js","../src/components/form/index.js","../src/utils/loose-index-of.js","../src/mixins/form-control.js","../src/mixins/form-custom.js","../src/mixins/form-size.js","../src/mixins/form-state.js","../src/mixins/form-radio-check.js","../src/components/form-checkbox/form-checkbox.js","../src/components/form-radio/form-radio.js","../src/mixins/form-radio-check-group.js","../src/components/form-checkbox/form-checkbox-group.js","../src/components/form-checkbox/index.js","../src/directives/hover/hover.js","../src/components/form-btn-label-control/bv-form-btn-label-control.js","../src/components/form-datepicker/form-datepicker.js","../src/components/form-datepicker/index.js","../src/components/form-file/form-file.js","../src/components/form-file/index.js","../src/utils/css-escape.js","../src/components/layout/col.js","../src/components/form-group/form-group.js","../src/components/form-group/index.js","../src/mixins/form-selection.js","../src/mixins/form-text.js","../src/mixins/form-validity.js","../src/components/form-input/form-input.js","../src/components/form-input/index.js","../src/components/form-radio/form-radio-group.js","../src/components/form-radio/index.js","../src/components/form-rating/form-rating.js","../src/components/form-rating/index.js","../src/mixins/model.js","../src/components/form-select/helpers/mixin-options.js","../src/components/form-select/form-select-option.js","../src/components/form-select/form-select-option-group.js","../src/components/form-select/form-select.js","../src/components/form-select/index.js","../src/components/form-spinbutton/form-spinbutton.js","../src/components/form-spinbutton/index.js","../src/components/form-tags/form-tag.js","../src/components/form-tags/form-tags.js","../src/components/form-tags/index.js","../src/components/form-textarea/form-textarea.js","../src/components/form-textarea/index.js","../src/components/time/time.js","../src/components/form-timepicker/form-timepicker.js","../src/components/form-timepicker/index.js","../src/components/image/index.js","../src/components/input-group/input-group-text.js","../src/components/input-group/input-group-addon.js","../src/components/input-group/input-group-append.js","../src/components/input-group/input-group-prepend.js","../src/components/input-group/input-group.js","../src/components/input-group/index.js","../src/components/layout/container.js","../src/components/jumbotron/jumbotron.js","../src/components/jumbotron/index.js","../src/components/layout/row.js","../src/components/layout/index.js","../src/components/link/index.js","../src/components/list-group/list-group.js","../src/components/list-group/list-group-item.js","../src/components/list-group/index.js","../src/components/media/media-aside.js","../src/components/media/media-body.js","../src/components/media/media.js","../src/components/media/index.js","../src/mixins/listen-on-document.js","../src/mixins/listen-on-window.js","../src/mixins/use-parent.js","../src/utils/get-scope-id.js","../src/mixins/scoped-style.js","../src/utils/create-new-child-component.js","../src/components/transporter/transporter.js","../src/components/modal/helpers/bv-modal-event.class.js","../src/components/modal/helpers/modal-manager.js","../src/components/modal/modal.js","../src/directives/modal/modal.js","../src/components/modal/helpers/bv-modal.js","../src/components/modal/index.js","../src/components/nav/nav.js","../src/components/nav/nav-item.js","../src/components/nav/nav-text.js","../src/components/nav/nav-form.js","../src/components/nav/nav-item-dropdown.js","../src/components/nav/index.js","../src/components/navbar/navbar.js","../src/components/navbar/navbar-nav.js","../src/components/navbar/navbar-brand.js","../src/components/navbar/navbar-toggle.js","../src/components/navbar/index.js","../src/components/spinner/spinner.js","../src/components/overlay/overlay.js","../src/components/overlay/index.js","../src/mixins/pagination.js","../src/components/pagination/pagination.js","../src/components/pagination/index.js","../src/components/pagination-nav/pagination-nav.js","../src/components/pagination-nav/index.js","../src/components/tooltip/helpers/bv-popper.js","../src/components/tooltip/helpers/bv-tooltip-template.js","../src/components/tooltip/helpers/bv-tooltip.js","../src/components/tooltip/tooltip.js","../src/components/popover/helpers/bv-popover-template.js","../src/components/popover/helpers/bv-popover.js","../src/components/popover/popover.js","../src/directives/popover/popover.js","../src/directives/popover/index.js","../src/components/popover/index.js","../src/components/progress/progress-bar.js","../src/components/progress/progress.js","../src/components/progress/index.js","../src/components/sidebar/sidebar.js","../src/components/sidebar/index.js","../src/components/skeleton/skeleton.js","../src/icons/iconstack.js","../src/components/skeleton/skeleton-icon.js","../src/components/skeleton/skeleton-img.js","../src/mixins/has-listener.js","../src/components/table/tr.js","../src/components/table/helpers/mixin-bottom-row.js","../src/components/table/td.js","../src/components/table/helpers/mixin-busy.js","../src/components/table/helpers/mixin-caption.js","../src/components/table/helpers/mixin-colgroup.js","../src/components/table/helpers/mixin-empty.js","../src/utils/stringify-object-values.js","../src/components/table/helpers/constants.js","../src/components/table/helpers/sanitize-row.js","../src/components/table/helpers/mixin-filtering.js","../src/components/table/helpers/stringify-record-values.js","../src/components/table/helpers/normalize-fields.js","../src/components/table/helpers/mixin-items.js","../src/components/table/helpers/mixin-pagination.js","../src/components/table/helpers/mixin-provider.js","../src/components/table/helpers/mixin-selectable.js","../src/utils/stable-sort.js","../src/components/table/helpers/default-sort-compare.js","../src/components/table/helpers/mixin-sorting.js","../src/components/table/helpers/mixin-stacked.js","../src/components/table/helpers/mixin-table-renderer.js","../src/components/table/tbody.js","../src/components/table/helpers/filter-event.js","../src/components/table/helpers/text-selection-active.js","../src/components/table/th.js","../src/components/table/helpers/mixin-tbody-row.js","../src/components/table/helpers/mixin-tbody.js","../src/components/table/tfoot.js","../src/components/table/helpers/mixin-tfoot.js","../src/components/table/thead.js","../src/components/table/helpers/mixin-thead.js","../src/components/table/helpers/mixin-top-row.js","../src/components/table/table.js","../src/components/table/table-lite.js","../src/components/table/table-simple.js","../src/components/table/index.js","../src/components/skeleton/skeleton-table.js","../src/components/skeleton/skeleton-wrapper.js","../src/components/skeleton/index.js","../src/components/spinner/index.js","../src/components/tabs/tabs.js","../src/components/tabs/tab.js","../src/components/tabs/index.js","../src/components/time/index.js","../node_modules/portal-vue/dist/portal-vue.esm.js","../src/components/toast/toaster.js","../src/components/toast/toast.js","../src/components/toast/helpers/bv-toast.js","../src/components/toast/index.js","../src/directives/tooltip/tooltip.js","../src/directives/tooltip/index.js","../src/components/index.js","../src/components/tooltip/index.js","../src/directives/hover/index.js","../src/directives/modal/index.js","../src/directives/scrollspy/helpers/bv-scrollspy.class.js","../src/directives/scrollspy/scrollspy.js","../src/index.js","../src/directives/index.js","../src/directives/scrollspy/index.js","../src/directives/visible/index.js","../src/browser.js"],"sourcesContent":["var e=function(){return(e=Object.assign||function(e){for(var t,r=1,s=arguments.length;r {}\n }\n }\n Vue.vModelDynamic.beforeUpdate = function(el, binding, vnode) {\n originalVModelDynamicBeforeUpdate.call(this, el, binding, vnode)\n if (!el._assign) {\n el._assign = () => {}\n }\n }\n extend = function patchedBootstrapVueExtend(definition) {\n if (typeof definition === 'object' && definition.render && !definition.__alreadyPatched) {\n const originalRender = definition.render\n definition.__alreadyPatched = true\n definition.render = function(h) {\n const patchedH = function(tag, dataObjOrChildren, rawSlots) {\n const slots =\n rawSlots === undefined\n ? []\n : [Array.isArray(rawSlots) ? rawSlots.filter(Boolean) : rawSlots]\n\n const isTag = typeof tag === 'string' && !KNOWN_COMPONENTS.includes(tag)\n const isSecondArgumentDataObject =\n dataObjOrChildren &&\n typeof dataObjOrChildren === 'object' &&\n !Array.isArray(dataObjOrChildren)\n\n if (!isSecondArgumentDataObject) {\n return h(tag, dataObjOrChildren, ...slots)\n }\n\n const { attrs, props, ...restData } = dataObjOrChildren\n const normalizedData = {\n ...restData,\n attrs,\n props: isTag ? {} : props\n }\n if (tag === 'router-link' && !normalizedData.slots && !normalizedData.scopedSlots) {\n // terrible workaround to fix router-link rendering with compat vue-router\n normalizedData.scopedSlots = { $hasNormal: () => {} }\n }\n return h(tag, normalizedData, ...slots)\n }\n\n if (definition.functional) {\n const ctx = arguments[1]\n const patchedCtx = { ...ctx }\n patchedCtx.data = {\n attrs: { ...(ctx.data.attrs || {}) },\n props: { ...(ctx.data.props || {}) }\n }\n Object.keys(ctx.data || {}).forEach(key => {\n if (ALLOWED_FIELDS_IN_DATA.includes(key)) {\n patchedCtx.data[key] = ctx.data[key]\n } else if (key in ctx.props) {\n patchedCtx.data.props[key] = ctx.data[key]\n } else if (!key.startsWith('on')) {\n patchedCtx.data.attrs[key] = ctx.data[key]\n }\n })\n\n const IGNORED_CHILDREN_KEYS = ['_ctx']\n const children = ctx.children?.default?.() || ctx.children\n\n if (\n children &&\n Object.keys(patchedCtx.children).filter(k => !IGNORED_CHILDREN_KEYS.includes(k))\n .length === 0\n ) {\n delete patchedCtx.children\n } else {\n patchedCtx.children = children\n }\n\n patchedCtx.data.on = ctx.listeners\n return originalRender.call(this, patchedH, patchedCtx)\n }\n\n return originalRender.call(this, patchedH)\n }\n }\n return originalExtend.call(this, definition)\n }.bind(Vue)\n}\n\nconst nextTick = Vue.nextTick\n\nexport { COMPONENT_UID_KEY, Vue, mergeData, isVue3, nextTick, extend }\n","export const HAS_WINDOW_SUPPORT = typeof window !== 'undefined'\nexport const HAS_DOCUMENT_SUPPORT = typeof document !== 'undefined'\nexport const HAS_NAVIGATOR_SUPPORT = typeof navigator !== 'undefined'\nexport const HAS_PROMISE_SUPPORT = typeof Promise !== 'undefined'\n/* istanbul ignore next: JSDOM always returns false */\nexport const HAS_MUTATION_OBSERVER_SUPPORT =\n typeof MutationObserver !== 'undefined' ||\n typeof WebKitMutationObserver !== 'undefined' ||\n typeof MozMutationObserver !== 'undefined'\n\nexport const IS_BROWSER = HAS_WINDOW_SUPPORT && HAS_DOCUMENT_SUPPORT && HAS_NAVIGATOR_SUPPORT\n\nexport const WINDOW = HAS_WINDOW_SUPPORT ? window : {}\nexport const DOCUMENT = HAS_DOCUMENT_SUPPORT ? document : {}\nexport const NAVIGATOR = HAS_NAVIGATOR_SUPPORT ? navigator : {}\nexport const USER_AGENT = (NAVIGATOR.userAgent || '').toLowerCase()\n\nexport const IS_JSDOM = USER_AGENT.indexOf('jsdom') > 0\nexport const IS_IE = /msie|trident/.test(USER_AGENT)\n\n// Determine if the browser supports the option passive for events\nexport const HAS_PASSIVE_EVENT_SUPPORT = (() => {\n let passiveEventSupported = false\n if (IS_BROWSER) {\n try {\n const options = {\n // This function will be called when the browser\n // attempts to access the passive property\n get passive() {\n /* istanbul ignore next: will never be called in JSDOM */\n passiveEventSupported = true\n }\n }\n WINDOW.addEventListener('test', options, options)\n WINDOW.removeEventListener('test', options, options)\n } catch {\n /* istanbul ignore next: will never be called in JSDOM */\n passiveEventSupported = false\n }\n }\n return passiveEventSupported\n})()\n\nexport const HAS_TOUCH_SUPPORT =\n IS_BROWSER && ('ontouchstart' in DOCUMENT.documentElement || NAVIGATOR.maxTouchPoints > 0)\n\nexport const HAS_POINTER_EVENT_SUPPORT =\n IS_BROWSER && Boolean(WINDOW.PointerEvent || WINDOW.MSPointerEvent)\n\n/* istanbul ignore next: JSDOM only checks for 'IntersectionObserver' */\nexport const HAS_INTERACTION_OBSERVER_SUPPORT =\n IS_BROWSER &&\n 'IntersectionObserver' in WINDOW &&\n 'IntersectionObserverEntry' in WINDOW &&\n // Edge 15 and UC Browser lack support for `isIntersecting`\n // but we an use `intersectionRatio > 0` instead\n // 'isIntersecting' in window.IntersectionObserverEntry.prototype &&\n 'intersectionRatio' in WINDOW.IntersectionObserverEntry.prototype\n","import { Vue as OurVue } from '../vue'\nimport { HAS_WINDOW_SUPPORT, IS_JSDOM } from '../constants/env'\nimport { setConfig } from './config-set'\nimport { warn } from './warn'\n\n/**\n * Checks if there are multiple instances of Vue, and warns (once) about possible issues.\n * @param {object} Vue\n */\nexport const checkMultipleVue = (() => {\n let checkMultipleVueWarned = false\n\n const MULTIPLE_VUE_WARNING = [\n 'Multiple instances of Vue detected!',\n 'You may need to set up an alias for Vue in your bundler config.',\n 'See: https://bootstrap-vue.org/docs#using-module-bundlers'\n ].join('\\n')\n\n return Vue => {\n /* istanbul ignore next */\n if (!checkMultipleVueWarned && OurVue !== Vue && !IS_JSDOM) {\n warn(MULTIPLE_VUE_WARNING)\n }\n checkMultipleVueWarned = true\n }\n})()\n\n/**\n * Plugin install factory function.\n * @param {object} { components, directives }\n * @returns {function} plugin install function\n */\nexport const installFactory = ({ components, directives, plugins } = {}) => {\n const install = (Vue, config = {}) => {\n if (install.installed) {\n /* istanbul ignore next */\n return\n }\n install.installed = true\n checkMultipleVue(Vue)\n setConfig(config, Vue)\n registerComponents(Vue, components)\n registerDirectives(Vue, directives)\n registerPlugins(Vue, plugins)\n }\n\n install.installed = false\n\n return install\n}\n\n/**\n * Plugin install factory function (no plugin config option).\n * @param {object} { components, directives }\n * @returns {function} plugin install function\n */\nexport const installFactoryNoConfig = ({ components, directives, plugins } = {}) => {\n const install = Vue => {\n if (install.installed) {\n /* istanbul ignore next */\n return\n }\n install.installed = true\n checkMultipleVue(Vue)\n registerComponents(Vue, components)\n registerDirectives(Vue, directives)\n registerPlugins(Vue, plugins)\n }\n\n install.installed = false\n\n return install\n}\n\n/**\n * Plugin object factory function.\n * @param {object} { components, directives, plugins }\n * @returns {object} plugin install object\n */\nexport const pluginFactory = (options = {}, extend = {}) => ({\n ...extend,\n install: installFactory(options)\n})\n\n/**\n * Plugin object factory function (no config option).\n * @param {object} { components, directives, plugins }\n * @returns {object} plugin install object\n */\nexport const pluginFactoryNoConfig = (options = {}, extend = {}) => ({\n ...extend,\n install: installFactoryNoConfig(options)\n})\n\n/**\n * Load a group of plugins.\n * @param {object} Vue\n * @param {object} Plugin definitions\n */\nexport const registerPlugins = (Vue, plugins = {}) => {\n for (const plugin in plugins) {\n if (plugin && plugins[plugin]) {\n Vue.use(plugins[plugin])\n }\n }\n}\n\n/**\n * Load a component.\n * @param {object} Vue\n * @param {string} Component name\n * @param {object} Component definition\n */\nexport const registerComponent = (Vue, name, def) => {\n if (Vue && name && def) {\n Vue.component(name, def)\n }\n}\n\n/**\n * Load a group of components.\n * @param {object} Vue\n * @param {object} Object of component definitions\n */\nexport const registerComponents = (Vue, components = {}) => {\n for (const component in components) {\n registerComponent(Vue, component, components[component])\n }\n}\n\n/**\n * Load a directive.\n * @param {object} Vue\n * @param {string} Directive name\n * @param {object} Directive definition\n */\nexport const registerDirective = (Vue, name, def) => {\n if (Vue && name && def) {\n // Ensure that any leading V is removed from the\n // name, as Vue adds it automatically\n Vue.directive(name.replace(/^VB/, 'B'), def)\n }\n}\n\n/**\n * Load a group of directives.\n * @param {object} Vue\n * @param {object} Object of directive definitions\n */\nexport const registerDirectives = (Vue, directives = {}) => {\n for (const directive in directives) {\n registerDirective(Vue, directive, directives[directive])\n }\n}\n\n/**\n * Install plugin if window.Vue available\n * @param {object} Plugin definition\n */\nexport const vueUse = VuePlugin => {\n /* istanbul ignore next */\n if (HAS_WINDOW_SUPPORT && window.Vue) {\n window.Vue.use(VuePlugin)\n }\n /* istanbul ignore next */\n if (HAS_WINDOW_SUPPORT && VuePlugin.NAME) {\n window[VuePlugin.NAME] = VuePlugin\n }\n}\n","export const NAME = 'BvConfig'\nexport const PROP_NAME = '$bvConfig'\n\nexport const DEFAULT_BREAKPOINT = ['xs', 'sm', 'md', 'lg', 'xl']\n","// --- General ---\n\nexport const RX_ARRAY_NOTATION = /\\[(\\d+)]/g\nexport const RX_BV_PREFIX = /^(BV?)/\nexport const RX_DIGITS = /^\\d+$/\nexport const RX_EXTENSION = /^\\..+/\nexport const RX_HASH = /^#/\nexport const RX_HASH_ID = /^#[A-Za-z]+[\\w\\-:.]*$/\nexport const RX_HTML_TAGS = /(<([^>]+)>)/gi\nexport const RX_HYPHENATE = /\\B([A-Z])/g\nexport const RX_LOWER_UPPER = /([a-z])([A-Z])/g\nexport const RX_NUMBER = /^[0-9]*\\.?[0-9]+$/\nexport const RX_PLUS = /\\+/g\nexport const RX_REGEXP_REPLACE = /[-/\\\\^$*+?.()|[\\]{}]/g\nexport const RX_SPACES = /[\\s\\uFEFF\\xA0]+/g\nexport const RX_SPACE_SPLIT = /\\s+/\nexport const RX_STAR = /\\/\\*$/\nexport const RX_START_SPACE_WORD = /(\\s|^)(\\w)/g\nexport const RX_TRIM_LEFT = /^\\s+/\nexport const RX_TRIM_RIGHT = /\\s+$/\nexport const RX_UNDERSCORE = /_/g\nexport const RX_UN_KEBAB = /-(\\w)/g\n\n// --- Date ---\n\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'\nexport const RX_DATE = /^\\d+-\\d\\d?-\\d\\d?(?:\\s|T|$)/\n\n// Used to split off the date parts of the YYYY-MM-DD string\nexport const RX_DATE_SPLIT = /-|\\s|T/\n\n// Time string RegEx (optional seconds)\nexport const RX_TIME = /^([0-1]?[0-9]|2[0-3]):[0-5]?[0-9](:[0-5]?[0-9])?$/\n\n// --- URL ---\n\n// HREFs must end with a hash followed by at least one non-hash character\nexport const RX_HREF = /^.*(#[^#]+)$/\n\nexport const RX_ENCODED_COMMA = /%2C/g\nexport const RX_ENCODE_REVERSE = /[!'()*]/g\nexport const RX_QUERY_START = /^(\\?|#|&)/\n\n// --- Aspect ---\n\nexport const RX_ASPECT = /^\\d+(\\.\\d*)?[/:]\\d+(\\.\\d*)?$/\nexport const RX_ASPECT_SEPARATOR = /[/:]/\n\n// --- Grid ---\n\nexport const RX_COL_CLASS = /^col-/\n\n// --- Icon ---\n\nexport const RX_ICON_PREFIX = /^BIcon/\n\n// --- Locale ---\n\nexport const RX_STRIP_LOCALE_MODS = /-u-.+/\n","import { HAS_WINDOW_SUPPORT, WINDOW } from './env'\n\n/* istanbul ignore next */\nexport const Element = HAS_WINDOW_SUPPORT ? WINDOW.Element : class Element extends Object {}\n\n/* istanbul ignore next */\nexport const HTMLElement = HAS_WINDOW_SUPPORT\n ? WINDOW.HTMLElement\n : class HTMLElement extends Element {}\n\n/* istanbul ignore next */\nexport const SVGElement = HAS_WINDOW_SUPPORT\n ? WINDOW.SVGElement\n : class SVGElement extends Element {}\n\n/* istanbul ignore next */\nexport const File = HAS_WINDOW_SUPPORT ? WINDOW.File : class File extends Object {}\n","import { RX_NUMBER } from '../constants/regex'\nimport { File } from '../constants/safe-types'\n\n// --- Convenience inspection utilities ---\n\nexport const toType = value => typeof value\n\nexport const toRawType = value => Object.prototype.toString.call(value).slice(8, -1)\n\nexport const toRawTypeLC = value => toRawType(value).toLowerCase()\n\nexport const isUndefined = value => value === undefined\n\nexport const isNull = value => value === null\n\nexport const isEmptyString = value => value === ''\n\nexport const isUndefinedOrNull = value => isUndefined(value) || isNull(value)\n\nexport const isUndefinedOrNullOrEmpty = value => isUndefinedOrNull(value) || isEmptyString(value)\n\nexport const isFunction = value => toType(value) === 'function'\n\nexport const isBoolean = value => toType(value) === 'boolean'\n\nexport const isString = value => toType(value) === 'string'\n\nexport const isNumber = value => toType(value) === 'number'\n\nexport const isNumeric = value => RX_NUMBER.test(String(value))\n\nexport const isPrimitive = value => isBoolean(value) || isString(value) || isNumber(value)\n\nexport const isArray = value => Array.isArray(value)\n\n// Quick object check\n// This is primarily used to tell Objects from primitive values\n// when we know the value is a JSON-compliant type\n// Note object could be a complex type like array, Date, etc.\nexport const isObject = obj => obj !== null && typeof obj === 'object'\n\n// Strict object type check\n// Only returns true for plain JavaScript objects\nexport const isPlainObject = obj => Object.prototype.toString.call(obj) === '[object Object]'\n\nexport const isDate = value => value instanceof Date\n\nexport const isEvent = value => value instanceof Event\n\nexport const isFile = value => value instanceof File\n\nexport const isRegExp = value => toRawType(value) === 'RegExp'\n\nexport const isPromise = value =>\n !isUndefinedOrNull(value) && isFunction(value.then) && isFunction(value.catch)\n","import { isObject } from './inspect'\n\n// --- Static ---\n\nexport const assign = (...args) => Object.assign(...args)\nexport const create = (proto, optionalProps) => Object.create(proto, optionalProps)\nexport const defineProperties = (obj, props) => Object.defineProperties(obj, props)\nexport const defineProperty = (obj, prop, descriptor) =>\n Object.defineProperty(obj, prop, descriptor)\nexport const freeze = obj => Object.freeze(obj)\nexport const getOwnPropertyNames = obj => Object.getOwnPropertyNames(obj)\nexport const getOwnPropertyDescriptor = (obj, prop) => Object.getOwnPropertyDescriptor(obj, prop)\nexport const getOwnPropertySymbols = obj => Object.getOwnPropertySymbols(obj)\nexport const getPrototypeOf = obj => Object.getPrototypeOf(obj)\nexport const is = (value1, value2) => Object.is(value1, value2)\nexport const isFrozen = obj => Object.isFrozen(obj)\nexport const keys = obj => Object.keys(obj)\n\n// --- \"Instance\" ---\n\nexport const hasOwnProperty = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop)\nexport const toString = obj => Object.prototype.toString.call(obj)\n\n// --- Utilities ---\n\n// Shallow copy an object\nexport const clone = obj => ({ ...obj })\n\n// Return a shallow copy of object with the specified properties only\n// See: https://gist.github.com/bisubus/2da8af7e801ffd813fab7ac221aa7afc\nexport const pick = (obj, props) =>\n keys(obj)\n .filter(key => props.indexOf(key) !== -1)\n .reduce((result, key) => ({ ...result, [key]: obj[key] }), {})\n\n// Return a shallow copy of object with the specified properties omitted\n// See: https://gist.github.com/bisubus/2da8af7e801ffd813fab7ac221aa7afc\nexport const omit = (obj, props) =>\n keys(obj)\n .filter(key => props.indexOf(key) === -1)\n .reduce((result, key) => ({ ...result, [key]: obj[key] }), {})\n\n// Merges two object deeply together\n// See: https://gist.github.com/Salakar/1d7137de9cb8b704e48a\nexport const mergeDeep = (target, source) => {\n if (isObject(target) && isObject(source)) {\n keys(source).forEach(key => {\n if (isObject(source[key])) {\n if (!target[key] || !isObject(target[key])) {\n target[key] = source[key]\n }\n mergeDeep(target[key], source[key])\n } else {\n assign(target, { [key]: source[key] })\n }\n })\n }\n return target\n}\n\n// Returns a shallow copy of the object with keys in sorted order\nexport const sortKeys = obj =>\n keys(obj)\n .sort()\n .reduce((result, key) => ({ ...result, [key]: obj[key] }), {})\n\n// Convenience method to create a read-only descriptor\nexport const readonlyDescriptor = () => ({ enumerable: true, configurable: false, writable: false })\n","import { isArray, isPlainObject } from './inspect'\nimport { keys } from './object'\n\nexport const cloneDeep = (obj, defaultValue = obj) => {\n if (isArray(obj)) {\n return obj.reduce((result, val) => [...result, cloneDeep(val, val)], [])\n }\n if (isPlainObject(obj)) {\n return keys(obj).reduce(\n (result, key) => ({ ...result, [key]: cloneDeep(obj[key], obj[key]) }),\n {}\n )\n }\n return defaultValue\n}\n","export const identity = x => x\n","import { RX_ARRAY_NOTATION } from '../constants/regex'\nimport { identity } from './identity'\nimport { isArray, isNull, isObject, isUndefinedOrNull } from './inspect'\n\n/**\n * Get property defined by dot/array notation in string, returns undefined if not found\n *\n * @link https://gist.github.com/jeneg/9767afdcca45601ea44930ea03e0febf#gistcomment-1935901\n *\n * @param {Object} obj\n * @param {string|Array} path\n * @return {*}\n */\nexport const getRaw = (obj, path, defaultValue = undefined) => {\n // Handle array of path values\n path = isArray(path) ? path.join('.') : path\n\n // If no path or no object passed\n if (!path || !isObject(obj)) {\n return defaultValue\n }\n\n // Handle edge case where user has dot(s) in top-level item field key\n // See https://github.com/bootstrap-vue/bootstrap-vue/issues/2762\n // Switched to `in` operator vs `hasOwnProperty` to handle obj.prototype getters\n // https://github.com/bootstrap-vue/bootstrap-vue/issues/3463\n if (path in obj) {\n return obj[path]\n }\n\n // Handle string array notation (numeric indices only)\n path = String(path).replace(RX_ARRAY_NOTATION, '.$1')\n\n const steps = path.split('.').filter(identity)\n\n // Handle case where someone passes a string of only dots\n if (steps.length === 0) {\n return defaultValue\n }\n\n // Traverse path in object to find result\n // Switched to `in` operator vs `hasOwnProperty` to handle obj.prototype getters\n // https://github.com/bootstrap-vue/bootstrap-vue/issues/3463\n return steps.every(step => isObject(obj) && step in obj && !isUndefinedOrNull((obj = obj[step])))\n ? obj\n : isNull(obj)\n ? null\n : defaultValue\n}\n\n/**\n * Get property defined by dot/array notation in string.\n *\n * @link https://gist.github.com/jeneg/9767afdcca45601ea44930ea03e0febf#gistcomment-1935901\n *\n * @param {Object} obj\n * @param {string|Array} path\n * @param {*} defaultValue (optional)\n * @return {*}\n */\nexport const get = (obj, path, defaultValue = null) => {\n const value = getRaw(obj, path)\n return isUndefinedOrNull(value) ? defaultValue : value\n}\n","/**\n * Utilities to get information about the current environment\n */\n\nexport const getEnv = (key, fallback = null) => {\n const env = typeof process !== 'undefined' && process ? process.env || {} : {}\n if (!key) {\n /* istanbul ignore next */\n return env\n }\n return env[key] || fallback\n}\n\nexport const getNoWarn = () =>\n getEnv('BOOTSTRAP_VUE_NO_WARN') || getEnv('NODE_ENV') === 'production'\n","import { IS_BROWSER, HAS_PROMISE_SUPPORT, HAS_MUTATION_OBSERVER_SUPPORT } from '../constants/env'\nimport { getNoWarn } from './env'\n\n/**\n * Log a warning message to the console with BootstrapVue formatting\n * @param {string} message\n */\nexport const warn = (message, source = null) => /* istanbul ignore next */ {\n if (!getNoWarn()) {\n console.warn(`[BootstrapVue warn]: ${source ? `${source} - ` : ''}${message}`)\n }\n}\n\n/**\n * Warn when no Promise support is given\n * @param {string} source\n * @returns {boolean} warned\n */\nexport const warnNotClient = source => {\n /* istanbul ignore else */\n if (IS_BROWSER) {\n return false\n } else {\n warn(`${source}: Can not be called during SSR.`)\n return true\n }\n}\n\n/**\n * Warn when no Promise support is given\n * @param {string} source\n * @returns {boolean} warned\n */\nexport const warnNoPromiseSupport = source => {\n /* istanbul ignore else */\n if (HAS_PROMISE_SUPPORT) {\n return false\n } else {\n warn(`${source}: Requires Promise support.`)\n return true\n }\n}\n\n/**\n * Warn when no MutationObserver support is given\n * @param {string} source\n * @returns {boolean} warned\n */\nexport const warnNoMutationObserverSupport = source => {\n /* istanbul ignore else */\n if (HAS_MUTATION_OBSERVER_SUPPORT) {\n return false\n } else {\n warn(`${source}: Requires MutationObserver support.`)\n return true\n }\n}\n","import { Vue as OurVue } from '../vue'\nimport { NAME, PROP_NAME } from '../constants/config'\nimport { cloneDeep } from './clone-deep'\nimport { getRaw } from './get'\nimport { isArray, isPlainObject, isString, isUndefined } from './inspect'\nimport { getOwnPropertyNames } from './object'\nimport { warn } from './warn'\n\n// Config manager class\nclass BvConfig {\n constructor() {\n this.$_config = {}\n }\n\n // Method to merge in user config parameters\n setConfig(config = {}) {\n /* istanbul ignore next */\n if (!isPlainObject(config)) {\n return\n }\n const configKeys = getOwnPropertyNames(config)\n configKeys.forEach(key => {\n /* istanbul ignore next */\n const subConfig = config[key]\n if (key === 'breakpoints') {\n /* istanbul ignore if */\n if (\n !isArray(subConfig) ||\n subConfig.length < 2 ||\n subConfig.some(b => !isString(b) || b.length === 0)\n ) {\n warn('\"breakpoints\" must be an array of at least 2 breakpoint names', NAME)\n } else {\n this.$_config[key] = cloneDeep(subConfig)\n }\n } else if (isPlainObject(subConfig)) {\n // Component prop defaults\n this.$_config[key] = getOwnPropertyNames(subConfig).reduce((config, prop) => {\n if (!isUndefined(subConfig[prop])) {\n config[prop] = cloneDeep(subConfig[prop])\n }\n return config\n }, this.$_config[key] || {})\n }\n })\n }\n\n // Clear the config\n resetConfig() {\n this.$_config = {}\n }\n\n // Returns a deep copy of the user config\n getConfig() {\n return cloneDeep(this.$_config)\n }\n\n // Returns a deep copy of the config value\n getConfigValue(key, defaultValue = undefined) {\n return cloneDeep(getRaw(this.$_config, key, defaultValue))\n }\n}\n\n// Method for applying a global config\nexport const setConfig = (config = {}, Vue = OurVue) => {\n // Ensure we have a `$bvConfig` Object on the Vue prototype\n // We set on Vue and OurVue just in case consumer has not set an alias of `vue`\n Vue.prototype[PROP_NAME] = OurVue.prototype[PROP_NAME] =\n Vue.prototype[PROP_NAME] || OurVue.prototype[PROP_NAME] || new BvConfig()\n // Apply the config values\n Vue.prototype[PROP_NAME].setConfig(config)\n}\n\n// Method for resetting the user config\n// Exported for testing purposes only\nexport const resetConfig = () => {\n if (OurVue.prototype[PROP_NAME] && OurVue.prototype[PROP_NAME].resetConfig) {\n OurVue.prototype[PROP_NAME].resetConfig()\n }\n}\n","// Component names\nexport const NAME_ALERT = 'BAlert'\nexport const NAME_ASPECT = 'BAspect'\nexport const NAME_AVATAR = 'BAvatar'\nexport const NAME_AVATAR_GROUP = 'BAvatarGroup'\nexport const NAME_BADGE = 'BBadge'\nexport const NAME_BREADCRUMB = 'BBreadcrumb'\nexport const NAME_BREADCRUMB_ITEM = 'BBreadcrumbItem'\nexport const NAME_BREADCRUMB_LINK = 'BBreadcrumbLink'\nexport const NAME_BUTTON = 'BButton'\nexport const NAME_BUTTON_CLOSE = 'BButtonClose'\nexport const NAME_BUTTON_GROUP = 'BButtonGroup'\nexport const NAME_BUTTON_TOOLBAR = 'BButtonToolbar'\nexport const NAME_CALENDAR = 'BCalendar'\nexport const NAME_CARD = 'BCard'\nexport const NAME_CARD_BODY = 'BCardBody'\nexport const NAME_CARD_FOOTER = 'BCardFooter'\nexport const NAME_CARD_GROUP = 'BCardGroup'\nexport const NAME_CARD_HEADER = 'BCardHeader'\nexport const NAME_CARD_IMG = 'BCardImg'\nexport const NAME_CARD_IMG_LAZY = 'BCardImgLazy'\nexport const NAME_CARD_SUB_TITLE = 'BCardSubTitle'\nexport const NAME_CARD_TEXT = 'BCardText'\nexport const NAME_CARD_TITLE = 'BCardTitle'\nexport const NAME_CAROUSEL = 'BCarousel'\nexport const NAME_CAROUSEL_SLIDE = 'BCarouselSlide'\nexport const NAME_COL = 'BCol'\nexport const NAME_COLLAPSE = 'BCollapse'\nexport const NAME_CONTAINER = 'BContainer'\nexport const NAME_DROPDOWN = 'BDropdown'\nexport const NAME_DROPDOWN_DIVIDER = 'BDropdownDivider'\nexport const NAME_DROPDOWN_FORM = 'BDropdownForm'\nexport const NAME_DROPDOWN_GROUP = 'BDropdownGroup'\nexport const NAME_DROPDOWN_HEADER = 'BDropdownHeader'\nexport const NAME_DROPDOWN_ITEM = 'BDropdownItem'\nexport const NAME_DROPDOWN_ITEM_BUTTON = 'BDropdownItemButton'\nexport const NAME_DROPDOWN_TEXT = 'BDropdownText'\nexport const NAME_EMBED = 'BEmbed'\nexport const NAME_FORM = 'BForm'\nexport const NAME_FORM_CHECKBOX = 'BFormCheckbox'\nexport const NAME_FORM_CHECKBOX_GROUP = 'BFormCheckboxGroup'\nexport const NAME_FORM_DATALIST = 'BFormDatalist'\nexport const NAME_FORM_DATEPICKER = 'BFormDatepicker'\nexport const NAME_FORM_FILE = 'BFormFile'\nexport const NAME_FORM_GROUP = 'BFormGroup'\nexport const NAME_FORM_INPUT = 'BFormInput'\nexport const NAME_FORM_INVALID_FEEDBACK = 'BFormInvalidFeedback'\nexport const NAME_FORM_RADIO = 'BFormRadio'\nexport const NAME_FORM_RADIO_GROUP = 'BFormRadioGroup'\nexport const NAME_FORM_RATING = 'BFormRating'\nexport const NAME_FORM_ROW = 'BFormRow'\nexport const NAME_FORM_SELECT = 'BFormSelect'\nexport const NAME_FORM_SELECT_OPTION = 'BFormSelectOption'\nexport const NAME_FORM_SELECT_OPTION_GROUP = 'BFormSelectOptionGroup'\nexport const NAME_FORM_SPINBUTTON = 'BFormSpinbutton'\nexport const NAME_FORM_TAG = 'BFormTag'\nexport const NAME_FORM_TAGS = 'BFormTags'\nexport const NAME_FORM_TEXT = 'BFormText'\nexport const NAME_FORM_TEXTAREA = 'BFormTextarea'\nexport const NAME_FORM_TIMEPICKER = 'BFormTimepicker'\nexport const NAME_FORM_VALID_FEEDBACK = 'BFormValidFeedback'\nexport const NAME_ICON = 'BIcon'\nexport const NAME_ICONSTACK = 'BIconstack'\nexport const NAME_ICON_BASE = 'BIconBase'\nexport const NAME_IMG = 'BImg'\nexport const NAME_IMG_LAZY = 'BImgLazy'\nexport const NAME_INPUT_GROUP = 'BInputGroup'\nexport const NAME_INPUT_GROUP_ADDON = 'BInputGroupAddon'\nexport const NAME_INPUT_GROUP_APPEND = 'BInputGroupAppend'\nexport const NAME_INPUT_GROUP_PREPEND = 'BInputGroupPrepend'\nexport const NAME_INPUT_GROUP_TEXT = 'BInputGroupText'\nexport const NAME_JUMBOTRON = 'BJumbotron'\nexport const NAME_LINK = 'BLink'\nexport const NAME_LIST_GROUP = 'BListGroup'\nexport const NAME_LIST_GROUP_ITEM = 'BListGroupItem'\nexport const NAME_MEDIA = 'BMedia'\nexport const NAME_MEDIA_ASIDE = 'BMediaAside'\nexport const NAME_MEDIA_BODY = 'BMediaBody'\nexport const NAME_MODAL = 'BModal'\nexport const NAME_MSG_BOX = 'BMsgBox'\nexport const NAME_NAV = 'BNav'\nexport const NAME_NAVBAR = 'BNavbar'\nexport const NAME_NAVBAR_BRAND = 'BNavbarBrand'\nexport const NAME_NAVBAR_NAV = 'BNavbarNav'\nexport const NAME_NAVBAR_TOGGLE = 'BNavbarToggle'\nexport const NAME_NAV_FORM = 'BNavForm'\nexport const NAME_NAV_ITEM = 'BNavItem'\nexport const NAME_NAV_ITEM_DROPDOWN = 'BNavItemDropdown'\nexport const NAME_NAV_TEXT = 'BNavText'\nexport const NAME_OVERLAY = 'BOverlay'\nexport const NAME_PAGINATION = 'BPagination'\nexport const NAME_PAGINATION_NAV = 'BPaginationNav'\nexport const NAME_POPOVER = 'BPopover'\nexport const NAME_PROGRESS = 'BProgress'\nexport const NAME_PROGRESS_BAR = 'BProgressBar'\nexport const NAME_ROW = 'BRow'\nexport const NAME_SIDEBAR = 'BSidebar'\nexport const NAME_SKELETON = 'BSkeleton'\nexport const NAME_SKELETON_ICON = 'BSkeletonIcon'\nexport const NAME_SKELETON_IMG = 'BSkeletonImg'\nexport const NAME_SKELETON_TABLE = 'BSkeletonTable'\nexport const NAME_SKELETON_WRAPPER = 'BSkeletonWrapper'\nexport const NAME_SPINNER = 'BSpinner'\nexport const NAME_TAB = 'BTab'\nexport const NAME_TABLE = 'BTable'\nexport const NAME_TABLE_CELL = 'BTableCell'\nexport const NAME_TABLE_LITE = 'BTableLite'\nexport const NAME_TABLE_SIMPLE = 'BTableSimple'\nexport const NAME_TABS = 'BTabs'\nexport const NAME_TBODY = 'BTbody'\nexport const NAME_TFOOT = 'BTfoot'\nexport const NAME_TH = 'BTh'\nexport const NAME_THEAD = 'BThead'\nexport const NAME_TIME = 'BTime'\nexport const NAME_TOAST = 'BToast'\nexport const NAME_TOASTER = 'BToaster'\nexport const NAME_TOOLTIP = 'BTooltip'\nexport const NAME_TR = 'BTr'\n\n// Helper component names\nexport const NAME_COLLAPSE_HELPER = 'BVCollapse'\nexport const NAME_FORM_BUTTON_LABEL_CONTROL = 'BVFormBtnLabelControl'\nexport const NAME_FORM_RATING_STAR = 'BVFormRatingStar'\nexport const NAME_POPOVER_HELPER = 'BVPopover'\nexport const NAME_POPOVER_TEMPLATE = 'BVPopoverTemplate'\nexport const NAME_POPPER = 'BVPopper'\nexport const NAME_TAB_BUTTON_HELPER = 'BVTabButton'\nexport const NAME_TOAST_POP = 'BVToastPop'\nexport const NAME_TOOLTIP_HELPER = 'BVTooltip'\nexport const NAME_TOOLTIP_TEMPLATE = 'BVTooltipTemplate'\nexport const NAME_TRANSITION = 'BVTransition'\nexport const NAME_TRANSPORTER = 'BVTransporter'\nexport const NAME_TRANSPORTER_TARGET = 'BVTransporterTarget'\n","import { isVue3 } from '../vue'\n\nexport const EVENT_NAME_ACTIVATE_TAB = 'activate-tab'\nexport const EVENT_NAME_BLUR = 'blur'\nexport const EVENT_NAME_CANCEL = 'cancel'\nexport const EVENT_NAME_CHANGE = 'change'\nexport const EVENT_NAME_CHANGED = 'changed'\nexport const EVENT_NAME_CLICK = 'click'\nexport const EVENT_NAME_CLOSE = 'close'\nexport const EVENT_NAME_CONTEXT = 'context'\nexport const EVENT_NAME_CONTEXT_CHANGED = 'context-changed'\nexport const EVENT_NAME_DESTROYED = 'destroyed'\nexport const EVENT_NAME_DISABLE = 'disable'\nexport const EVENT_NAME_DISABLED = 'disabled'\nexport const EVENT_NAME_DISMISSED = 'dismissed'\nexport const EVENT_NAME_DISMISS_COUNT_DOWN = 'dismiss-count-down'\nexport const EVENT_NAME_ENABLE = 'enable'\nexport const EVENT_NAME_ENABLED = 'enabled'\nexport const EVENT_NAME_FILTERED = 'filtered'\nexport const EVENT_NAME_FIRST = 'first'\nexport const EVENT_NAME_FOCUS = 'focus'\nexport const EVENT_NAME_FOCUSIN = 'focusin'\nexport const EVENT_NAME_FOCUSOUT = 'focusout'\nexport const EVENT_NAME_HEAD_CLICKED = 'head-clicked'\nexport const EVENT_NAME_HIDDEN = 'hidden'\nexport const EVENT_NAME_HIDE = 'hide'\nexport const EVENT_NAME_IMG_ERROR = 'img-error'\nexport const EVENT_NAME_INPUT = 'input'\nexport const EVENT_NAME_LAST = 'last'\nexport const EVENT_NAME_MOUSEENTER = 'mouseenter'\nexport const EVENT_NAME_MOUSELEAVE = 'mouseleave'\nexport const EVENT_NAME_NEXT = 'next'\nexport const EVENT_NAME_OK = 'ok'\nexport const EVENT_NAME_OPEN = 'open'\nexport const EVENT_NAME_PAGE_CLICK = 'page-click'\nexport const EVENT_NAME_PAUSED = 'paused'\nexport const EVENT_NAME_PREV = 'prev'\nexport const EVENT_NAME_REFRESH = 'refresh'\nexport const EVENT_NAME_REFRESHED = 'refreshed'\nexport const EVENT_NAME_REMOVE = 'remove'\nexport const EVENT_NAME_ROW_CLICKED = 'row-clicked'\nexport const EVENT_NAME_ROW_CONTEXTMENU = 'row-contextmenu'\nexport const EVENT_NAME_ROW_DBLCLICKED = 'row-dblclicked'\nexport const EVENT_NAME_ROW_HOVERED = 'row-hovered'\nexport const EVENT_NAME_ROW_MIDDLE_CLICKED = 'row-middle-clicked'\nexport const EVENT_NAME_ROW_SELECTED = 'row-selected'\nexport const EVENT_NAME_ROW_UNHOVERED = 'row-unhovered'\nexport const EVENT_NAME_SELECTED = 'selected'\nexport const EVENT_NAME_SHOW = 'show'\nexport const EVENT_NAME_SHOWN = 'shown'\nexport const EVENT_NAME_SLIDING_END = 'sliding-end'\nexport const EVENT_NAME_SLIDING_START = 'sliding-start'\nexport const EVENT_NAME_SORT_CHANGED = 'sort-changed'\nexport const EVENT_NAME_TAG_STATE = 'tag-state'\nexport const EVENT_NAME_TOGGLE = 'toggle'\nexport const EVENT_NAME_UNPAUSED = 'unpaused'\nexport const EVENT_NAME_UPDATE = 'update'\n\nexport const HOOK_EVENT_NAME_BEFORE_DESTROY = isVue3 ? 'vnodeBeforeUnmount' : 'hook:beforeDestroy'\nexport const HOOK_EVENT_NAME_DESTROYED = isVue3 ? 'vNodeUnmounted' : 'hook:destroyed'\n\nexport const MODEL_EVENT_NAME_PREFIX = 'update:'\n\nexport const ROOT_EVENT_NAME_PREFIX = 'bv'\nexport const ROOT_EVENT_NAME_SEPARATOR = '::'\n\nexport const EVENT_OPTIONS_PASSIVE = { passive: true }\nexport const EVENT_OPTIONS_NO_CAPTURE = { passive: true, capture: false }\n","// General types\nexport const PROP_TYPE_ANY = undefined\nexport const PROP_TYPE_ARRAY = Array\nexport const PROP_TYPE_BOOLEAN = Boolean\nexport const PROP_TYPE_DATE = Date\nexport const PROP_TYPE_FUNCTION = Function\nexport const PROP_TYPE_NUMBER = Number\nexport const PROP_TYPE_OBJECT = Object\nexport const PROP_TYPE_REG_EXP = RegExp\nexport const PROP_TYPE_STRING = String\n\n// Multiple types\nexport const PROP_TYPE_ARRAY_FUNCTION = [PROP_TYPE_ARRAY, PROP_TYPE_FUNCTION]\nexport const PROP_TYPE_ARRAY_OBJECT = [PROP_TYPE_ARRAY, PROP_TYPE_OBJECT]\nexport const PROP_TYPE_ARRAY_OBJECT_STRING = [PROP_TYPE_ARRAY, PROP_TYPE_OBJECT, PROP_TYPE_STRING]\nexport const PROP_TYPE_ARRAY_STRING = [PROP_TYPE_ARRAY, PROP_TYPE_STRING]\nexport const PROP_TYPE_BOOLEAN_NUMBER = [PROP_TYPE_BOOLEAN, PROP_TYPE_NUMBER]\nexport const PROP_TYPE_BOOLEAN_NUMBER_STRING = [\n PROP_TYPE_BOOLEAN,\n PROP_TYPE_NUMBER,\n PROP_TYPE_STRING\n]\nexport const PROP_TYPE_BOOLEAN_STRING = [PROP_TYPE_BOOLEAN, PROP_TYPE_STRING]\nexport const PROP_TYPE_DATE_STRING = [PROP_TYPE_DATE, PROP_TYPE_STRING]\nexport const PROP_TYPE_FUNCTION_STRING = [PROP_TYPE_FUNCTION, PROP_TYPE_STRING]\nexport const PROP_TYPE_NUMBER_STRING = [PROP_TYPE_NUMBER, PROP_TYPE_STRING]\nexport const PROP_TYPE_NUMBER_OBJECT_STRING = [PROP_TYPE_NUMBER, PROP_TYPE_OBJECT, PROP_TYPE_STRING]\nexport const PROP_TYPE_OBJECT_FUNCTION = [PROP_TYPE_OBJECT, PROP_TYPE_FUNCTION]\nexport const PROP_TYPE_OBJECT_STRING = [PROP_TYPE_OBJECT, PROP_TYPE_STRING]\n","export const SLOT_NAME_ADD_BUTTON_TEXT = 'add-button-text'\nexport const SLOT_NAME_APPEND = 'append'\nexport const SLOT_NAME_ASIDE = 'aside'\nexport const SLOT_NAME_BADGE = 'badge'\nexport const SLOT_NAME_BOTTOM_ROW = 'bottom-row'\nexport const SLOT_NAME_BUTTON_CONTENT = 'button-content'\nexport const SLOT_NAME_CUSTOM_FOOT = 'custom-foot'\nexport const SLOT_NAME_DECREMENT = 'decrement'\nexport const SLOT_NAME_DEFAULT = 'default'\nexport const SLOT_NAME_DESCRIPTION = 'description'\nexport const SLOT_NAME_DISMISS = 'dismiss'\nexport const SLOT_NAME_DROP_PLACEHOLDER = 'drop-placeholder'\nexport const SLOT_NAME_ELLIPSIS_TEXT = 'ellipsis-text'\nexport const SLOT_NAME_EMPTY = 'empty'\nexport const SLOT_NAME_EMPTYFILTERED = 'emptyfiltered'\nexport const SLOT_NAME_FILE_NAME = 'file-name'\nexport const SLOT_NAME_FIRST = 'first'\nexport const SLOT_NAME_FIRST_TEXT = 'first-text'\nexport const SLOT_NAME_FOOTER = 'footer'\nexport const SLOT_NAME_HEADER = 'header'\nexport const SLOT_NAME_HEADER_CLOSE = 'header-close'\nexport const SLOT_NAME_ICON_CLEAR = 'icon-clear'\nexport const SLOT_NAME_ICON_EMPTY = 'icon-empty'\nexport const SLOT_NAME_ICON_FULL = 'icon-full'\nexport const SLOT_NAME_ICON_HALF = 'icon-half'\nexport const SLOT_NAME_IMG = 'img'\nexport const SLOT_NAME_INCREMENT = 'increment'\nexport const SLOT_NAME_INVALID_FEEDBACK = 'invalid-feedback'\nexport const SLOT_NAME_LABEL = 'label'\nexport const SLOT_NAME_LAST_TEXT = 'last-text'\nexport const SLOT_NAME_LEAD = 'lead'\nexport const SLOT_NAME_LOADING = 'loading'\nexport const SLOT_NAME_MODAL_BACKDROP = 'modal-backdrop'\nexport const SLOT_NAME_MODAL_CANCEL = 'modal-cancel'\nexport const SLOT_NAME_MODAL_FOOTER = 'modal-footer'\nexport const SLOT_NAME_MODAL_HEADER = 'modal-header'\nexport const SLOT_NAME_MODAL_HEADER_CLOSE = 'modal-header-close'\nexport const SLOT_NAME_MODAL_OK = 'modal-ok'\nexport const SLOT_NAME_MODAL_TITLE = 'modal-title'\nexport const SLOT_NAME_NAV_NEXT_DECADE = 'nav-next-decade'\nexport const SLOT_NAME_NAV_NEXT_MONTH = 'nav-next-month'\nexport const SLOT_NAME_NAV_NEXT_YEAR = 'nav-next-year'\nexport const SLOT_NAME_NAV_PEV_DECADE = 'nav-prev-decade'\nexport const SLOT_NAME_NAV_PEV_MONTH = 'nav-prev-month'\nexport const SLOT_NAME_NAV_PEV_YEAR = 'nav-prev-year'\nexport const SLOT_NAME_NAV_THIS_MONTH = 'nav-this-month'\nexport const SLOT_NAME_NEXT_TEXT = 'next-text'\nexport const SLOT_NAME_OVERLAY = 'overlay'\nexport const SLOT_NAME_PAGE = 'page'\nexport const SLOT_NAME_PLACEHOLDER = 'placeholder'\nexport const SLOT_NAME_PREPEND = 'prepend'\nexport const SLOT_NAME_PREV_TEXT = 'prev-text'\nexport const SLOT_NAME_ROW_DETAILS = 'row-details'\nexport const SLOT_NAME_TABLE_BUSY = 'table-busy'\nexport const SLOT_NAME_TABLE_CAPTION = 'table-caption'\nexport const SLOT_NAME_TABLE_COLGROUP = 'table-colgroup'\nexport const SLOT_NAME_TABS_END = 'tabs-end'\nexport const SLOT_NAME_TABS_START = 'tabs-start'\nexport const SLOT_NAME_TEXT = 'text'\nexport const SLOT_NAME_THEAD_TOP = 'thead-top'\nexport const SLOT_NAME_TITLE = 'title'\nexport const SLOT_NAME_TOAST_TITLE = 'toast-title'\nexport const SLOT_NAME_TOP_ROW = 'top-row'\nexport const SLOT_NAME_VALID_FEEDBACK = 'valid-feedback'\n","import { isFunction } from './inspect'\n\n// --- Static ---\n\nexport const from = (...args) => Array.from(...args)\n\n// --- Instance ---\n\nexport const arrayIncludes = (array, value) => array.indexOf(value) !== -1\nexport const concat = (...args) => Array.prototype.concat.apply([], args)\n\n// --- Utilities ---\n\nexport const createArray = (length, fillFn) => {\n const mapFn = isFunction(fillFn) ? fillFn : () => fillFn\n return Array.apply(null, { length }).map(mapFn)\n}\n\nexport const flatten = array => array.reduce((result, item) => concat(result, item), [])\n\nexport const flattenDeep = array =>\n array.reduce((result, item) => concat(result, Array.isArray(item) ? flattenDeep(item) : item), [])\n","import { concat } from './array'\nimport { identity } from './identity'\nimport { isFunction } from './inspect'\n\n// Note for functional components:\n// In functional components, `slots` is a function so it must be called\n// first before passing to the below methods. `scopedSlots` is always an\n// object and may be undefined (for Vue < 2.6.x)\n\n/**\n * Returns true if either scoped or unscoped named slot exists\n *\n * @param {String, Array} name or name[]\n * @param {Object} scopedSlots\n * @param {Object} slots\n * @returns {Array|undefined} VNodes\n */\nexport const hasNormalizedSlot = (names, $scopedSlots = {}, $slots = {}) => {\n // Ensure names is an array\n names = concat(names).filter(identity)\n // Returns true if the either a $scopedSlot or $slot exists with the specified name\n return names.some(name => $scopedSlots[name] || $slots[name])\n}\n\n/**\n * Returns VNodes for named slot either scoped or unscoped\n *\n * @param {String, Array} name or name[]\n * @param {String} scope\n * @param {Object} scopedSlots\n * @param {Object} slots\n * @returns {Array|undefined} VNodes\n */\nexport const normalizeSlot = (names, scope = {}, $scopedSlots = {}, $slots = {}) => {\n // Ensure names is an array\n names = concat(names).filter(identity)\n let slot\n for (let i = 0; i < names.length && !slot; i++) {\n const name = names[i]\n slot = $scopedSlots[name] || $slots[name]\n }\n // Note: in Vue 2.6.x, all named slots are also scoped slots\n return isFunction(slot) ? slot(scope) : slot\n}\n","import { extend } from '../vue'\nimport { SLOT_NAME_DEFAULT } from '../constants/slots'\nimport { hasNormalizedSlot, normalizeSlot } from '../utils/normalize-slot'\nimport { concat } from '../utils/array'\n\n// @vue/component\nexport const normalizeSlotMixin = extend({\n methods: {\n // Returns `true` if the either a `$scopedSlot` or `$slot` exists with the specified name\n // `name` can be a string name or an array of names\n hasNormalizedSlot(\n name = SLOT_NAME_DEFAULT,\n scopedSlots = this.$scopedSlots,\n slots = this.$slots\n ) {\n return hasNormalizedSlot(name, scopedSlots, slots)\n },\n // Returns an array of rendered VNodes if slot found, otherwise `undefined`\n // `name` can be a string name or an array of names\n normalizeSlot(\n name = SLOT_NAME_DEFAULT,\n scope = {},\n scopedSlots = this.$scopedSlots,\n slots = this.$slots\n ) {\n const vNodes = normalizeSlot(name, scope, scopedSlots, slots)\n return vNodes ? concat(vNodes) : vNodes\n }\n }\n})\n","// Number utilities\n\n// Converts a value (string, number, etc.) to an integer number\n// Assumes radix base 10\nexport const toInteger = (value, defaultValue = NaN) => {\n const integer = parseInt(value, 10)\n return isNaN(integer) ? defaultValue : integer\n}\n\n// Converts a value (string, number, etc.) to a number\nexport const toFloat = (value, defaultValue = NaN) => {\n const float = parseFloat(value)\n return isNaN(float) ? defaultValue : float\n}\n\n// Converts a value (string, number, etc.) to a string\n// representation with `precision` digits after the decimal\n// Returns the string 'NaN' if the value cannot be converted\nexport const toFixed = (val, precision) => toFloat(val).toFixed(toInteger(precision, 0))\n","// String utilities\nimport {\n RX_HYPHENATE,\n RX_LOWER_UPPER,\n RX_REGEXP_REPLACE,\n RX_START_SPACE_WORD,\n RX_TRIM_LEFT,\n RX_TRIM_RIGHT,\n RX_UNDERSCORE,\n RX_UN_KEBAB\n} from '../constants/regex'\nimport { isArray, isPlainObject, isString, isUndefinedOrNull } from './inspect'\n\n// --- Utilities ---\n\n// Converts PascalCase or camelCase to kebab-case\nexport const kebabCase = str => {\n return str.replace(RX_HYPHENATE, '-$1').toLowerCase()\n}\n\n// Converts a kebab-case or camelCase string to PascalCase\nexport const pascalCase = str => {\n str = kebabCase(str).replace(RX_UN_KEBAB, (_, c) => (c ? c.toUpperCase() : ''))\n return str.charAt(0).toUpperCase() + str.slice(1)\n}\n\n// Converts a string, including strings in camelCase or snake_case, into Start Case\n// It keeps original single quote and hyphen in the word\n// https://github.com/UrbanCompass/to-start-case\nexport const startCase = str =>\n str\n .replace(RX_UNDERSCORE, ' ')\n .replace(RX_LOWER_UPPER, (str, $1, $2) => $1 + ' ' + $2)\n .replace(RX_START_SPACE_WORD, (str, $1, $2) => $1 + $2.toUpperCase())\n\n// Lowercases the first letter of a string and returns a new string\nexport const lowerFirst = str => {\n str = isString(str) ? str.trim() : String(str)\n return str.charAt(0).toLowerCase() + str.slice(1)\n}\n\n// Uppercases the first letter of a string and returns a new string\nexport const upperFirst = str => {\n str = isString(str) ? str.trim() : String(str)\n return str.charAt(0).toUpperCase() + str.slice(1)\n}\n\n// Escape characters to be used in building a regular expression\nexport const escapeRegExp = str => str.replace(RX_REGEXP_REPLACE, '\\\\$&')\n\n// Convert a value to a string that can be rendered\n// `undefined`/`null` will be converted to `''`\n// Plain objects and arrays will be JSON stringified\nexport const toString = (val, spaces = 2) => {\n return isUndefinedOrNull(val)\n ? ''\n : isArray(val) || (isPlainObject(val) && val.toString === Object.prototype.toString)\n ? JSON.stringify(val, null, spaces)\n : String(val)\n}\n\n// Remove leading white space from a string\nexport const trimLeft = str => toString(str).replace(RX_TRIM_LEFT, '')\n\n// Remove Trailing white space from a string\nexport const trimRight = str => toString(str).replace(RX_TRIM_RIGHT, '')\n\n// Remove leading and trailing white space from a string\nexport const trim = str => toString(str).trim()\n\n// Lower case a string\nexport const lowerCase = str => toString(str).toLowerCase()\n\n// Upper case a string\nexport const upperCase = str => toString(str).toUpperCase()\n","import { DOCUMENT, WINDOW } from '../constants/env'\nimport { Element } from '../constants/safe-types'\nimport { from as arrayFrom } from './array'\nimport { isFunction, isNull } from './inspect'\nimport { toFloat } from './number'\nimport { toString } from './string'\n\n// --- Constants ---\n\nconst ELEMENT_PROTO = Element.prototype\n\nconst TABABLE_SELECTOR = [\n 'button',\n '[href]:not(.disabled)',\n 'input',\n 'select',\n 'textarea',\n '[tabindex]',\n '[contenteditable]'\n]\n .map(s => `${s}:not(:disabled):not([disabled])`)\n .join(', ')\n\n// --- Normalization utils ---\n\n// See: https://developer.mozilla.org/en-US/docs/Web/API/Element/matches#Polyfill\n/* istanbul ignore next */\nexport const matchesEl =\n ELEMENT_PROTO.matches || ELEMENT_PROTO.msMatchesSelector || ELEMENT_PROTO.webkitMatchesSelector\n\n// See: https://developer.mozilla.org/en-US/docs/Web/API/Element/closest\n/* istanbul ignore next */\nexport const closestEl =\n ELEMENT_PROTO.closest ||\n function(sel) {\n let el = this\n do {\n // Use our \"patched\" matches function\n if (matches(el, sel)) {\n return el\n }\n el = el.parentElement || el.parentNode\n } while (!isNull(el) && el.nodeType === Node.ELEMENT_NODE)\n return null\n }\n\n// `requestAnimationFrame()` convenience method\n/* istanbul ignore next: JSDOM always returns the first option */\nexport const requestAF = (\n WINDOW.requestAnimationFrame ||\n WINDOW.webkitRequestAnimationFrame ||\n WINDOW.mozRequestAnimationFrame ||\n WINDOW.msRequestAnimationFrame ||\n WINDOW.oRequestAnimationFrame ||\n // Fallback, but not a true polyfill\n // Only needed for Opera Mini\n /* istanbul ignore next */\n (cb => setTimeout(cb, 16))\n).bind(WINDOW)\n\nexport const MutationObs =\n WINDOW.MutationObserver || WINDOW.WebKitMutationObserver || WINDOW.MozMutationObserver || null\n\n// --- Utils ---\n\n// Remove a node from DOM\nexport const removeNode = el => el && el.parentNode && el.parentNode.removeChild(el)\n\n// Determine if an element is an HTML element\nexport const isElement = el => !!(el && el.nodeType === Node.ELEMENT_NODE)\n\n// Get the currently active HTML element\nexport const getActiveElement = (excludes = []) => {\n const { activeElement } = DOCUMENT\n return activeElement && !excludes.some(el => el === activeElement) ? activeElement : null\n}\n\n// Returns `true` if a tag's name equals `name`\nexport const isTag = (tag, name) => toString(tag).toLowerCase() === toString(name).toLowerCase()\n\n// Determine if an HTML element is the currently active element\nexport const isActiveElement = el => isElement(el) && el === getActiveElement()\n\n// Determine if an HTML element is visible - Faster than CSS check\nexport const isVisible = el => {\n if (!isElement(el) || !el.parentNode || !contains(DOCUMENT.body, el)) {\n // Note this can fail for shadow dom elements since they\n // are not a direct descendant of document.body\n return false\n }\n if (getStyle(el, 'display') === 'none') {\n // We do this check to help with vue-test-utils when using v-show\n /* istanbul ignore next */\n return false\n }\n // All browsers support getBoundingClientRect(), except JSDOM as it returns all 0's for values :(\n // So any tests that need isVisible will fail in JSDOM\n // Except when we override the getBCR prototype in some tests\n const bcr = getBCR(el)\n return !!(bcr && bcr.height > 0 && bcr.width > 0)\n}\n\n// Determine if an element is disabled\nexport const isDisabled = el =>\n !isElement(el) || el.disabled || hasAttr(el, 'disabled') || hasClass(el, 'disabled')\n\n// Cause/wait-for an element to reflow its content (adjusting its height/width)\nexport const reflow = el => {\n // Requesting an elements offsetHight will trigger a reflow of the element content\n /* istanbul ignore next: reflow doesn't happen in JSDOM */\n return isElement(el) && el.offsetHeight\n}\n\n// Select all elements matching selector. Returns `[]` if none found\nexport const selectAll = (selector, root) =>\n arrayFrom((isElement(root) ? root : DOCUMENT).querySelectorAll(selector))\n\n// Select a single element, returns `null` if not found\nexport const select = (selector, root) =>\n (isElement(root) ? root : DOCUMENT).querySelector(selector) || null\n\n// Determine if an element matches a selector\nexport const matches = (el, selector) => (isElement(el) ? matchesEl.call(el, selector) : false)\n\n// Finds closest element matching selector. Returns `null` if not found\nexport const closest = (selector, root, includeRoot = false) => {\n if (!isElement(root)) {\n return null\n }\n const el = closestEl.call(root, selector)\n\n // Native closest behaviour when `includeRoot` is truthy,\n // else emulate jQuery closest and return `null` if match is\n // the passed in root element when `includeRoot` is falsey\n return includeRoot ? el : el === root ? null : el\n}\n\n// Returns true if the parent element contains the child element\nexport const contains = (parent, child) =>\n parent && isFunction(parent.contains) ? parent.contains(child) : false\n\n// Get an element given an ID\nexport const getById = id => DOCUMENT.getElementById(/^#/.test(id) ? id.slice(1) : id) || null\n\n// Add a class to an element\nexport const addClass = (el, className) => {\n // We are checking for `el.classList` existence here since IE 11\n // returns `undefined` for some elements (e.g. SVG elements)\n // See https://github.com/bootstrap-vue/bootstrap-vue/issues/2713\n if (className && isElement(el) && el.classList) {\n el.classList.add(className)\n }\n}\n\n// Remove a class from an element\nexport const removeClass = (el, className) => {\n // We are checking for `el.classList` existence here since IE 11\n // returns `undefined` for some elements (e.g. SVG elements)\n // See https://github.com/bootstrap-vue/bootstrap-vue/issues/2713\n if (className && isElement(el) && el.classList) {\n el.classList.remove(className)\n }\n}\n\n// Test if an element has a class\nexport const hasClass = (el, className) => {\n // We are checking for `el.classList` existence here since IE 11\n // returns `undefined` for some elements (e.g. SVG elements)\n // See https://github.com/bootstrap-vue/bootstrap-vue/issues/2713\n if (className && isElement(el) && el.classList) {\n return el.classList.contains(className)\n }\n return false\n}\n\n// Set an attribute on an element\nexport const setAttr = (el, attr, value) => {\n if (attr && isElement(el)) {\n el.setAttribute(attr, value)\n }\n}\n\n// Remove an attribute from an element\nexport const removeAttr = (el, attr) => {\n if (attr && isElement(el)) {\n el.removeAttribute(attr)\n }\n}\n\n// Get an attribute value from an element\n// Returns `null` if not found\nexport const getAttr = (el, attr) => (attr && isElement(el) ? el.getAttribute(attr) : null)\n\n// Determine if an attribute exists on an element\n// Returns `true` or `false`, or `null` if element not found\nexport const hasAttr = (el, attr) => (attr && isElement(el) ? el.hasAttribute(attr) : null)\n\n// Set an style property on an element\nexport const setStyle = (el, prop, value) => {\n if (prop && isElement(el)) {\n el.style[prop] = value\n }\n}\n\n// Remove an style property from an element\nexport const removeStyle = (el, prop) => {\n if (prop && isElement(el)) {\n el.style[prop] = ''\n }\n}\n\n// Get an style property value from an element\n// Returns `null` if not found\nexport const getStyle = (el, prop) => (prop && isElement(el) ? el.style[prop] || null : null)\n\n// Return the Bounding Client Rect of an element\n// Returns `null` if not an element\n/* istanbul ignore next: getBoundingClientRect() doesn't work in JSDOM */\nexport const getBCR = el => (isElement(el) ? el.getBoundingClientRect() : null)\n\n// Get computed style object for an element\n/* istanbul ignore next: getComputedStyle() doesn't work in JSDOM */\nexport const getCS = el => {\n const { getComputedStyle } = WINDOW\n return getComputedStyle && isElement(el) ? getComputedStyle(el) : {}\n}\n\n// Returns a `Selection` object representing the range of text selected\n// Returns `null` if no window support is given\n/* istanbul ignore next: getSelection() doesn't work in JSDOM */\nexport const getSel = () => {\n const { getSelection } = WINDOW\n return getSelection ? WINDOW.getSelection() : null\n}\n\n// Return an element's offset with respect to document element\n// https://j11y.io/jquery/#v=git&fn=jQuery.fn.offset\nexport const offset = el => /* istanbul ignore next: getBoundingClientRect(), getClientRects() doesn't work in JSDOM */ {\n const _offset = { top: 0, left: 0 }\n if (!isElement(el) || el.getClientRects().length === 0) {\n return _offset\n }\n const bcr = getBCR(el)\n if (bcr) {\n const win = el.ownerDocument.defaultView\n _offset.top = bcr.top + win.pageYOffset\n _offset.left = bcr.left + win.pageXOffset\n }\n return _offset\n}\n\n// Return an element's offset with respect to to its offsetParent\n// https://j11y.io/jquery/#v=git&fn=jQuery.fn.position\nexport const position = el => /* istanbul ignore next: getBoundingClientRect() doesn't work in JSDOM */ {\n let _offset = { top: 0, left: 0 }\n if (!isElement(el)) {\n return _offset\n }\n let parentOffset = { top: 0, left: 0 }\n const elStyles = getCS(el)\n if (elStyles.position === 'fixed') {\n _offset = getBCR(el) || _offset\n } else {\n _offset = offset(el)\n const doc = el.ownerDocument\n let offsetParent = el.offsetParent || doc.documentElement\n while (\n offsetParent &&\n (offsetParent === doc.body || offsetParent === doc.documentElement) &&\n getCS(offsetParent).position === 'static'\n ) {\n offsetParent = offsetParent.parentNode\n }\n if (offsetParent && offsetParent !== el && offsetParent.nodeType === Node.ELEMENT_NODE) {\n parentOffset = offset(offsetParent)\n const offsetParentStyles = getCS(offsetParent)\n parentOffset.top += toFloat(offsetParentStyles.borderTopWidth, 0)\n parentOffset.left += toFloat(offsetParentStyles.borderLeftWidth, 0)\n }\n }\n return {\n top: _offset.top - parentOffset.top - toFloat(elStyles.marginTop, 0),\n left: _offset.left - parentOffset.left - toFloat(elStyles.marginLeft, 0)\n }\n}\n\n// Find all tabable elements in the given element\n// Assumes users have not used `tabindex` > `0` on elements\nexport const getTabables = (rootEl = document) =>\n selectAll(TABABLE_SELECTOR, rootEl)\n .filter(isVisible)\n .filter(el => el.tabIndex > -1 && !el.disabled)\n\n// Attempt to focus an element, and return `true` if successful\nexport const attemptFocus = (el, options = {}) => {\n try {\n el.focus(options)\n } catch {}\n return isActiveElement(el)\n}\n\n// Attempt to blur an element, and return `true` if successful\nexport const attemptBlur = el => {\n try {\n el.blur()\n } catch {}\n return !isActiveElement(el)\n}\n","import { create } from './object'\n\nexport const memoize = fn => {\n const cache = create(null)\n\n return (...args) => {\n const argsKey = JSON.stringify(args)\n return (cache[argsKey] = cache[argsKey] || fn.apply(null, args))\n }\n}\n","import { Vue } from '../vue'\nimport { DEFAULT_BREAKPOINT, PROP_NAME } from '../constants/config'\nimport { cloneDeep } from './clone-deep'\nimport { memoize } from './memoize'\n\n// --- Constants ---\n\nconst VueProto = Vue.prototype\n\n// --- Getter methods ---\n// All methods return a deep clone (immutable) copy of the config value,\n// to prevent mutation of the user config object\n\n// Get the current config\nexport const getConfig = () => {\n const bvConfig = VueProto[PROP_NAME]\n return bvConfig ? bvConfig.getConfig() : {}\n}\n\n// Method to grab a config value based on a dotted/array notation key\nexport const getConfigValue = (key, defaultValue = undefined) => {\n const bvConfig = VueProto[PROP_NAME]\n return bvConfig ? bvConfig.getConfigValue(key, defaultValue) : cloneDeep(defaultValue)\n}\n\n// Method to grab a config value for a particular component\nexport const getComponentConfig = (key, propKey = null, defaultValue = undefined) => {\n // Return the particular config value for key if specified,\n // otherwise we return the full config (or an empty object if not found)\n return propKey ? getConfigValue(`${key}.${propKey}`, defaultValue) : getConfigValue(key, {})\n}\n\n// Get all breakpoint names\nexport const getBreakpoints = () => getConfigValue('breakpoints', DEFAULT_BREAKPOINT)\n\n// Private method for caching breakpoint names\nconst _getBreakpointsCached = memoize(() => getBreakpoints())\n\n// Get all breakpoint names (cached)\nexport const getBreakpointsCached = () => cloneDeep(_getBreakpointsCached())\n\n// Get breakpoints with the smallest breakpoint set as ''\n// Useful for components that create breakpoint specific props\nexport const getBreakpointsUp = () => {\n const breakpoints = getBreakpoints()\n breakpoints[0] = ''\n return breakpoints\n}\n\n// Get breakpoints with the smallest breakpoint set as '' (cached)\n// Useful for components that create breakpoint specific props\nexport const getBreakpointsUpCached = memoize(() => {\n const breakpoints = getBreakpointsCached()\n breakpoints[0] = ''\n return breakpoints\n})\n\n// Get breakpoints with the largest breakpoint set as ''\nexport const getBreakpointsDown = () => {\n const breakpoints = getBreakpoints()\n breakpoints[breakpoints.length - 1] = ''\n return breakpoints\n}\n\n// Get breakpoints with the largest breakpoint set as '' (cached)\n// Useful for components that create breakpoint specific props\n/* istanbul ignore next: we don't use this method anywhere, yet */\nexport const getBreakpointsDownCached = () => {\n const breakpoints = getBreakpointsCached()\n breakpoints[breakpoints.length - 1] = ''\n return breakpoints\n}\n","import { PROP_TYPE_ANY } from '../constants/props'\nimport { cloneDeep } from './clone-deep'\nimport { getComponentConfig } from './config'\nimport { identity } from './identity'\nimport { isArray, isFunction, isObject, isUndefined } from './inspect'\nimport { clone, hasOwnProperty, keys } from './object'\nimport { lowerFirst, upperFirst } from './string'\n\n// Prefix a property\nexport const prefixPropName = (prefix, value) => prefix + upperFirst(value)\n\n// Remove a prefix from a property\nexport const unprefixPropName = (prefix, value) => lowerFirst(value.replace(prefix, ''))\n\n// Suffix can be a falsey value so nothing is appended to string\n// (helps when looping over props & some shouldn't change)\n// Use data last parameters to allow for currying\nexport const suffixPropName = (suffix, value) => value + (suffix ? upperFirst(suffix) : '')\n\n// Generates a prop object\nexport const makeProp = (\n type = PROP_TYPE_ANY,\n value = undefined,\n requiredOrValidator = undefined,\n validator = undefined\n) => {\n const required = requiredOrValidator === true\n validator = required ? validator : requiredOrValidator\n\n return {\n ...(type ? { type } : {}),\n ...(required\n ? { required }\n : isUndefined(value)\n ? {}\n : { default: isObject(value) ? () => value : value }),\n ...(isUndefined(validator) ? {} : { validator })\n }\n}\n\n// Copies props from one array/object to a new array/object\n// Prop values are also cloned as new references to prevent possible\n// mutation of original prop object values\n// Optionally accepts a function to transform the prop name\nexport const copyProps = (props, transformFn = identity) => {\n if (isArray(props)) {\n return props.map(transformFn)\n }\n const copied = {}\n for (const prop in props) {\n /* istanbul ignore else */\n if (hasOwnProperty(props, prop)) {\n // If the prop value is an object, do a shallow clone\n // to prevent potential mutations to the original object\n copied[transformFn(prop)] = isObject(props[prop]) ? clone(props[prop]) : props[prop]\n }\n }\n return copied\n}\n\n// Given an array of properties or an object of property keys,\n// plucks all the values off the target object, returning a new object\n// that has props that reference the original prop values\nexport const pluckProps = (keysToPluck, objToPluck, transformFn = identity) =>\n (isArray(keysToPluck) ? keysToPluck.slice() : keys(keysToPluck)).reduce((memo, prop) => {\n memo[transformFn(prop)] = objToPluck[prop]\n return memo\n }, {})\n\n// Make a prop object configurable by global configuration\n// Replaces the current `default` key of each prop with a `getComponentConfig()`\n// call that falls back to the current default value of the prop\nexport const makePropConfigurable = (prop, key, componentKey) => ({\n ...cloneDeep(prop),\n default: function bvConfigurablePropDefault() {\n const value = getComponentConfig(componentKey, key, prop.default)\n return isFunction(value) ? value() : value\n }\n})\n\n// Make a props object configurable by global configuration\n// Replaces the current `default` key of each prop with a `getComponentConfig()`\n// call that falls back to the current default value of the prop\nexport const makePropsConfigurable = (props, componentKey) =>\n keys(props).reduce(\n (result, key) => ({ ...result, [key]: makePropConfigurable(props[key], key, componentKey) }),\n {}\n )\n\n// Get function name we use in `makePropConfigurable()`\n// for the prop default value override to compare\n// against in `hasPropFunction()`\nconst configurablePropDefaultFnName = makePropConfigurable({}, '', '').default.name\n\n// Detect wether the given value is currently a function\n// and isn't the props default function\nexport const hasPropFunction = fn =>\n isFunction(fn) && fn.name && fn.name !== configurablePropDefaultFnName\n","import { extend } from '../vue'\nimport { EVENT_NAME_INPUT } from '../constants/events'\nimport { PROP_TYPE_ANY } from '../constants/props'\nimport { makeProp } from './props'\n\nexport const makeModelMixin = (\n prop,\n {\n type = PROP_TYPE_ANY,\n defaultValue = undefined,\n validator = undefined,\n event = EVENT_NAME_INPUT\n } = {}\n) => {\n const props = {\n [prop]: makeProp(type, defaultValue, validator)\n }\n\n // @vue/component\n const mixin = extend({\n model: {\n prop,\n event\n },\n props\n })\n\n return { mixin, props, prop, event }\n}\n","import { HAS_PASSIVE_EVENT_SUPPORT } from '../constants/env'\nimport { ROOT_EVENT_NAME_PREFIX, ROOT_EVENT_NAME_SEPARATOR } from '../constants/events'\nimport { RX_BV_PREFIX } from '../constants/regex'\nimport { isObject } from './inspect'\nimport { kebabCase } from './string'\n\n// --- Utils ---\n\n// Normalize event options based on support of passive option\n// Exported only for testing purposes\nexport const parseEventOptions = options => {\n /* istanbul ignore else: can't test in JSDOM, as it supports passive */\n if (HAS_PASSIVE_EVENT_SUPPORT) {\n return isObject(options) ? options : { capture: !!options || false }\n } else {\n // Need to translate to actual Boolean value\n return !!(isObject(options) ? options.capture : options)\n }\n}\n\n// Attach an event listener to an element\nexport const eventOn = (el, eventName, handler, options) => {\n if (el && el.addEventListener) {\n el.addEventListener(eventName, handler, parseEventOptions(options))\n }\n}\n\n// Remove an event listener from an element\nexport const eventOff = (el, eventName, handler, options) => {\n if (el && el.removeEventListener) {\n el.removeEventListener(eventName, handler, parseEventOptions(options))\n }\n}\n\n// Utility method to add/remove a event listener based on first argument (boolean)\n// It passes all other arguments to the `eventOn()` or `eventOff` method\nexport const eventOnOff = (on, ...args) => {\n const method = on ? eventOn : eventOff\n method(...args)\n}\n\n// Utility method to prevent the default event handling and propagation\nexport const stopEvent = (\n event,\n { preventDefault = true, propagation = true, immediatePropagation = false } = {}\n) => {\n if (preventDefault) {\n event.preventDefault()\n }\n if (propagation) {\n event.stopPropagation()\n }\n if (immediatePropagation) {\n event.stopImmediatePropagation()\n }\n}\n\n// Helper method to convert a component/directive name to a base event name\n// `getBaseEventName('BNavigationItem')` => 'navigation-item'\n// `getBaseEventName('BVToggle')` => 'toggle'\nconst getBaseEventName = value => kebabCase(value.replace(RX_BV_PREFIX, ''))\n\n// Get a root event name by component/directive and event name\n// `getBaseEventName('BModal', 'show')` => 'bv::modal::show'\nexport const getRootEventName = (name, eventName) =>\n [ROOT_EVENT_NAME_PREFIX, getBaseEventName(name), eventName].join(ROOT_EVENT_NAME_SEPARATOR)\n\n// Get a root action event name by component/directive and action name\n// `getRootActionEventName('BModal', 'show')` => 'bv::show::modal'\nexport const getRootActionEventName = (name, actionName) =>\n [ROOT_EVENT_NAME_PREFIX, actionName, getBaseEventName(name)].join(ROOT_EVENT_NAME_SEPARATOR)\n","import { extend, mergeData } from '../../vue'\nimport { NAME_BUTTON_CLOSE } from '../../constants/components'\nimport { PROP_TYPE_BOOLEAN, PROP_TYPE_STRING } from '../../constants/props'\nimport { SLOT_NAME_DEFAULT } from '../../constants/slots'\nimport { stopEvent } from '../../utils/events'\nimport { isEvent } from '../../utils/inspect'\nimport { makeProp, makePropsConfigurable } from '../../utils/props'\nimport { hasNormalizedSlot, normalizeSlot } from '../../utils/normalize-slot'\n\n// --- Props ---\n\nexport const props = makePropsConfigurable(\n {\n ariaLabel: makeProp(PROP_TYPE_STRING, 'Close'),\n content: makeProp(PROP_TYPE_STRING, '×'),\n disabled: makeProp(PROP_TYPE_BOOLEAN, false),\n textVariant: makeProp(PROP_TYPE_STRING)\n },\n NAME_BUTTON_CLOSE\n)\n\n// --- Main component ---\n\n// @vue/component\nexport const BButtonClose = /*#__PURE__*/ extend({\n name: NAME_BUTTON_CLOSE,\n functional: true,\n props,\n render(h, { props, data, slots, scopedSlots }) {\n const $slots = slots()\n const $scopedSlots = scopedSlots || {}\n\n const componentData = {\n staticClass: 'close',\n class: {\n [`text-${props.textVariant}`]: props.textVariant\n },\n attrs: {\n type: 'button',\n disabled: props.disabled,\n 'aria-label': props.ariaLabel ? String(props.ariaLabel) : null\n },\n on: {\n click(event) {\n // Ensure click on button HTML content is also disabled\n /* istanbul ignore if: bug in JSDOM still emits click on inner element */\n if (props.disabled && isEvent(event)) {\n stopEvent(event)\n }\n }\n }\n }\n\n // Careful not to override the default slot with innerHTML\n if (!hasNormalizedSlot(SLOT_NAME_DEFAULT, $scopedSlots, $slots)) {\n componentData.domProps = { innerHTML: props.content }\n }\n\n return h(\n 'button',\n mergeData(data, componentData),\n normalizeSlot(SLOT_NAME_DEFAULT, {}, $scopedSlots, $slots)\n )\n }\n})\n","// Generic Bootstrap v4 fade (no-fade) transition component\n//\n// Assumes that `show` class is not required when\n// the transition has finished the enter transition\n// (show and fade classes are only applied during transition)\n\nimport { extend, mergeData } from '../../vue'\nimport { NAME_TRANSITION } from '../../constants/components'\nimport { PROP_TYPE_BOOLEAN, PROP_TYPE_OBJECT, PROP_TYPE_STRING } from '../../constants/props'\nimport { isPlainObject } from '../../utils/inspect'\nimport { makeProp } from '../../utils/props'\n\n// --- Constants ---\n\nconst NO_FADE_PROPS = {\n name: '',\n enterClass: '',\n enterActiveClass: '',\n enterToClass: 'show',\n leaveClass: 'show',\n leaveActiveClass: '',\n leaveToClass: ''\n}\n\nconst FADE_PROPS = {\n ...NO_FADE_PROPS,\n enterActiveClass: 'fade',\n leaveActiveClass: 'fade'\n}\n\n// --- Props ---\n\nexport const props = {\n // Has no effect if `trans-props` provided\n appear: makeProp(PROP_TYPE_BOOLEAN, false),\n // Can be overridden by user supplied `trans-props`\n mode: makeProp(PROP_TYPE_STRING),\n // Only applicable to the built in transition\n // Has no effect if `trans-props` provided\n noFade: makeProp(PROP_TYPE_BOOLEAN, false),\n // For user supplied transitions (if needed)\n transProps: makeProp(PROP_TYPE_OBJECT)\n}\n\n// --- Main component ---\n\n// @vue/component\nexport const BVTransition = /*#__PURE__*/ extend({\n name: NAME_TRANSITION,\n functional: true,\n props,\n render(h, { children, data, props }) {\n let transProps = props.transProps\n if (!isPlainObject(transProps)) {\n transProps = props.noFade ? NO_FADE_PROPS : FADE_PROPS\n if (props.appear) {\n // Default the appear classes to equal the enter classes\n transProps = {\n ...transProps,\n appear: true,\n appearClass: transProps.enterClass,\n appearActiveClass: transProps.enterActiveClass,\n appearToClass: transProps.enterToClass\n }\n }\n }\n transProps = {\n mode: props.mode,\n ...transProps,\n // We always need `css` true\n css: true\n }\n\n const dataCopy = { ...data }\n delete dataCopy.props\n return h(\n 'transition',\n // Any transition event listeners will get merged here\n mergeData(dataCopy, { props: transProps }),\n children\n )\n }\n})\n","import { NAME_ALERT } from '../../constants/components'\nimport { EVENT_NAME_DISMISSED, EVENT_NAME_DISMISS_COUNT_DOWN } from '../../constants/events'\nimport {\n PROP_TYPE_BOOLEAN,\n PROP_TYPE_BOOLEAN_NUMBER_STRING,\n PROP_TYPE_STRING\n} from '../../constants/props'\nimport { SLOT_NAME_DISMISS } from '../../constants/slots'\nimport { normalizeSlotMixin } from '../../mixins/normalize-slot'\nimport { requestAF } from '../../utils/dom'\nimport { isBoolean, isNumeric } from '../../utils/inspect'\nimport { makeModelMixin } from '../../utils/model'\nimport { toInteger } from '../../utils/number'\nimport { sortKeys } from '../../utils/object'\nimport { makeProp, makePropsConfigurable } from '../../utils/props'\nimport { COMPONENT_UID_KEY, extend } from '../../vue'\nimport { BButtonClose } from '../button/button-close'\nimport { BVTransition } from '../transition/bv-transition'\n\n// --- Constants ---\n\nconst {\n mixin: modelMixin,\n props: modelProps,\n prop: MODEL_PROP_NAME,\n event: MODEL_EVENT_NAME\n} = makeModelMixin('show', {\n type: PROP_TYPE_BOOLEAN_NUMBER_STRING,\n defaultValue: false\n})\n\n// --- Helper methods ---\n\n// Convert `show` value to a number\nconst parseCountDown = show => {\n if (show === '' || isBoolean(show)) {\n return 0\n }\n show = toInteger(show, 0)\n return show > 0 ? show : 0\n}\n\n// Convert `show` value to a boolean\nconst parseShow = show => {\n if (show === '' || show === true) {\n return true\n }\n if (toInteger(show, 0) < 1) {\n // Boolean will always return false for the above comparison\n return false\n }\n return !!show\n}\n\n// --- Props ---\n\nexport const props = makePropsConfigurable(\n sortKeys({\n ...modelProps,\n dismissLabel: makeProp(PROP_TYPE_STRING, 'Close'),\n dismissible: makeProp(PROP_TYPE_BOOLEAN, false),\n fade: makeProp(PROP_TYPE_BOOLEAN, false),\n variant: makeProp(PROP_TYPE_STRING, 'info')\n }),\n NAME_ALERT\n)\n\n// --- Main component ---\n\n// @vue/component\nexport const BAlert = /*#__PURE__*/ extend({\n name: NAME_ALERT,\n mixins: [modelMixin, normalizeSlotMixin],\n props,\n data() {\n return {\n countDown: 0,\n // If initially shown, we need to set these for SSR\n localShow: parseShow(this[MODEL_PROP_NAME])\n }\n },\n watch: {\n [MODEL_PROP_NAME](newValue) {\n this.countDown = parseCountDown(newValue)\n this.localShow = parseShow(newValue)\n },\n countDown(newValue) {\n this.clearCountDownInterval()\n const show = this[MODEL_PROP_NAME]\n // Ignore if `show` transitions to a boolean value\n if (isNumeric(show)) {\n this.$emit(EVENT_NAME_DISMISS_COUNT_DOWN, newValue)\n // Update the v-model if needed\n if (show !== newValue) {\n this.$emit(MODEL_EVENT_NAME, newValue)\n }\n if (newValue > 0) {\n this.localShow = true\n this.$_countDownTimeout = setTimeout(() => {\n this.countDown--\n }, 1000)\n } else {\n // Slightly delay the hide to allow any UI updates\n this.$nextTick(() => {\n requestAF(() => {\n this.localShow = false\n })\n })\n }\n }\n },\n localShow(newValue) {\n const show = this[MODEL_PROP_NAME]\n // Only emit dismissed events for dismissible or auto-dismissing alerts\n if (!newValue && (this.dismissible || isNumeric(show))) {\n this.$emit(EVENT_NAME_DISMISSED)\n }\n // Only emit booleans if we weren't passed a number via v-model\n if (!isNumeric(show) && show !== newValue) {\n this.$emit(MODEL_EVENT_NAME, newValue)\n }\n }\n },\n created() {\n // Create private non-reactive props\n this.$_filterTimer = null\n\n const show = this[MODEL_PROP_NAME]\n this.countDown = parseCountDown(show)\n this.localShow = parseShow(show)\n },\n beforeDestroy() {\n this.clearCountDownInterval()\n },\n methods: {\n dismiss() {\n this.clearCountDownInterval()\n this.countDown = 0\n this.localShow = false\n },\n clearCountDownInterval() {\n clearTimeout(this.$_countDownTimeout)\n this.$_countDownTimeout = null\n }\n },\n render(h) {\n let $alert = h()\n if (this.localShow) {\n const { dismissible, variant } = this\n\n let $dismissButton = h()\n if (dismissible) {\n // Add dismiss button\n $dismissButton = h(\n BButtonClose,\n {\n attrs: { 'aria-label': this.dismissLabel },\n on: { click: this.dismiss }\n },\n [this.normalizeSlot(SLOT_NAME_DISMISS)]\n )\n }\n\n $alert = h(\n 'div',\n {\n staticClass: 'alert',\n class: {\n 'alert-dismissible': dismissible,\n [`alert-${variant}`]: variant\n },\n attrs: {\n role: 'alert',\n 'aria-live': 'polite',\n 'aria-atomic': true\n },\n key: this[COMPONENT_UID_KEY]\n },\n [$dismissButton, this.normalizeSlot()]\n )\n }\n\n return h(BVTransition, { props: { noFade: !this.fade } }, [$alert])\n }\n})\n","import { BAlert } from './alert'\nimport { pluginFactory } from '../../utils/plugins'\n\nconst AlertPlugin = /*#__PURE__*/ pluginFactory({\n components: { BAlert }\n})\n\nexport { AlertPlugin, BAlert }\n","// Math utilty functions\n\nexport const mathMin = Math.min\n\nexport const mathMax = Math.max\n\nexport const mathAbs = Math.abs\n\nexport const mathCeil = Math.ceil\n\nexport const mathFloor = Math.floor\n\nexport const mathPow = Math.pow\n\nexport const mathRound = Math.round\n","import { extend } from '../../vue'\nimport { NAME_ASPECT } from '../../constants/components'\nimport { PROP_TYPE_NUMBER_STRING, PROP_TYPE_STRING } from '../../constants/props'\nimport { RX_ASPECT, RX_ASPECT_SEPARATOR } from '../../constants/regex'\nimport { mathAbs } from '../../utils/math'\nimport { toFloat } from '../../utils/number'\nimport { makeProp, makePropsConfigurable } from '../../utils/props'\nimport { normalizeSlotMixin } from '../../mixins/normalize-slot'\n\n// --- Constants ---\n\nconst CLASS_NAME = 'b-aspect'\n\n// --- Props ---\n\nexport const props = makePropsConfigurable(\n {\n // Accepts a number (i.e. `16 / 9`, `1`, `4 / 3`)\n // Or a string (i.e. '16/9', '16:9', '4:3' '1:1')\n aspect: makeProp(PROP_TYPE_NUMBER_STRING, '1:1'),\n tag: makeProp(PROP_TYPE_STRING, 'div')\n },\n NAME_ASPECT\n)\n\n// --- Main component ---\n\n// @vue/component\nexport const BAspect = /*#__PURE__*/ extend({\n name: NAME_ASPECT,\n mixins: [normalizeSlotMixin],\n props,\n computed: {\n padding() {\n const { aspect } = this\n let ratio = 1\n if (RX_ASPECT.test(aspect)) {\n // Width and/or Height can be a decimal value below `1`, so\n // we only fallback to `1` if the value is `0` or `NaN`\n const [width, height] = aspect.split(RX_ASPECT_SEPARATOR).map(v => toFloat(v) || 1)\n ratio = width / height\n } else {\n ratio = toFloat(aspect) || 1\n }\n return `${100 / mathAbs(ratio)}%`\n }\n },\n render(h) {\n const $sizer = h('div', {\n staticClass: `${CLASS_NAME}-sizer flex-grow-1`,\n style: { paddingBottom: this.padding, height: 0 }\n })\n\n const $content = h(\n 'div',\n {\n staticClass: `${CLASS_NAME}-content flex-grow-1 w-100 mw-100`,\n style: { marginLeft: '-100%' }\n },\n this.normalizeSlot()\n )\n\n return h(this.tag, { staticClass: `${CLASS_NAME} d-flex` }, [$sizer, $content])\n }\n})\n","import { BAspect } from './aspect'\nimport { pluginFactory } from '../../utils/plugins'\n\nconst AspectPlugin = /*#__PURE__*/ pluginFactory({\n components: { BAspect }\n})\n\nexport { AspectPlugin, BAspect }\n","import { isVue3 } from '../vue'\n\nexport function safeVueInstance(target) {\n if (!isVue3) {\n return target\n }\n\n return new Proxy(target, {\n get(target, prop) {\n return prop in target ? target[prop] : undefined\n }\n })\n}\n","import { RX_ENCODED_COMMA, RX_ENCODE_REVERSE, RX_PLUS, RX_QUERY_START } from '../constants/regex'\nimport { isTag } from './dom'\nimport { isArray, isNull, isPlainObject, isString, isUndefined } from './inspect'\nimport { keys } from './object'\nimport { safeVueInstance } from './safe-vue-instance'\nimport { toString } from './string'\n\nconst ANCHOR_TAG = 'a'\n\n// Method to replace reserved chars\nconst encodeReserveReplacer = c => '%' + c.charCodeAt(0).toString(16)\n\n// Fixed encodeURIComponent which is more conformant to RFC3986:\n// - escapes [!'()*]\n// - preserve commas\nconst encode = str =>\n encodeURIComponent(toString(str))\n .replace(RX_ENCODE_REVERSE, encodeReserveReplacer)\n .replace(RX_ENCODED_COMMA, ',')\n\nconst decode = decodeURIComponent\n\n// Stringifies an object of query parameters\n// See: https://github.com/vuejs/vue-router/blob/dev/src/util/query.js\nexport const stringifyQueryObj = obj => {\n if (!isPlainObject(obj)) {\n return ''\n }\n\n const query = keys(obj)\n .map(key => {\n const value = obj[key]\n if (isUndefined(value)) {\n return ''\n } else if (isNull(value)) {\n return encode(key)\n } else if (isArray(value)) {\n return value\n .reduce((results, value2) => {\n if (isNull(value2)) {\n results.push(encode(key))\n } else if (!isUndefined(value2)) {\n // Faster than string interpolation\n results.push(encode(key) + '=' + encode(value2))\n }\n return results\n }, [])\n .join('&')\n }\n // Faster than string interpolation\n return encode(key) + '=' + encode(value)\n })\n /* must check for length, as we only want to filter empty strings, not things that look falsey! */\n .filter(x => x.length > 0)\n .join('&')\n\n return query ? `?${query}` : ''\n}\n\nexport const parseQuery = query => {\n const parsed = {}\n query = toString(query)\n .trim()\n .replace(RX_QUERY_START, '')\n\n if (!query) {\n return parsed\n }\n\n query.split('&').forEach(param => {\n const parts = param.replace(RX_PLUS, ' ').split('=')\n const key = decode(parts.shift())\n const value = parts.length > 0 ? decode(parts.join('=')) : null\n\n if (isUndefined(parsed[key])) {\n parsed[key] = value\n } else if (isArray(parsed[key])) {\n parsed[key].push(value)\n } else {\n parsed[key] = [parsed[key], value]\n }\n })\n\n return parsed\n}\n\nexport const isLink = props => !!(props.href || props.to)\n\nexport const isRouterLink = tag => !!(tag && !isTag(tag, 'a'))\n\nexport const computeTag = ({ to, disabled, routerComponentName }, thisOrParent) => {\n const hasRouter = !!safeVueInstance(thisOrParent).$router\n const hasNuxt = !!safeVueInstance(thisOrParent).$nuxt\n if (!hasRouter || (hasRouter && (disabled || !to))) {\n return ANCHOR_TAG\n }\n\n // TODO:\n // Check registered components for existence of user supplied router link component name\n // We would need to check PascalCase, kebab-case, and camelCase versions of name:\n // const name = routerComponentName\n // const names = [name, PascalCase(name), KebabCase(name), CamelCase(name)]\n // exists = names.some(name => !!thisOrParent.$options.components[name])\n // And may want to cache the result for performance or we just let the render fail\n // if the component is not registered\n return routerComponentName || (hasNuxt ? 'nuxt-link' : 'router-link')\n}\n\nexport const computeRel = ({ target, rel } = {}) =>\n target === '_blank' && isNull(rel) ? 'noopener' : rel || null\n\nexport const computeHref = (\n { href, to } = {},\n tag = ANCHOR_TAG,\n fallback = '#',\n toFallback = '/'\n) => {\n // Return `href` when explicitly provided\n if (href) {\n return href\n }\n\n // We've checked for `$router` in `computeTag()`, so `isRouterLink()` indicates a live router\n // When deferring to Vue Router's ``, don't use the `href` attribute at all\n // We return `null`, and then remove `href` from the attributes passed to ``\n if (isRouterLink(tag)) {\n return null\n }\n\n // Fallback to `to` prop (if `to` is a string)\n if (isString(to)) {\n return to || toFallback\n }\n // Fallback to `to.path' + `to.query` + `to.hash` prop (if `to` is an object)\n if (isPlainObject(to) && (to.path || to.query || to.hash)) {\n const path = toString(to.path)\n const query = stringifyQueryObj(to.query)\n let hash = toString(to.hash)\n hash = !hash || hash.charAt(0) === '#' ? hash : `#${hash}`\n return `${path}${query}${hash}` || toFallback\n }\n\n // If nothing is provided return the fallback\n return fallback\n}\n","import { extend, mergeData } from '../../vue'\nimport { NAME_ICON_BASE } from '../../constants/components'\nimport { PROP_TYPE_BOOLEAN, PROP_TYPE_NUMBER_STRING, PROP_TYPE_STRING } from '../../constants/props'\nimport { identity } from '../../utils/identity'\nimport { isUndefinedOrNull } from '../../utils/inspect'\nimport { mathMax } from '../../utils/math'\nimport { toFloat } from '../../utils/number'\nimport { makeProp } from '../../utils/props'\n\n// --- Constants ---\n\n// Base attributes needed on all icons\nconst BASE_ATTRS = {\n viewBox: '0 0 16 16',\n width: '1em',\n height: '1em',\n focusable: 'false',\n role: 'img',\n 'aria-label': 'icon'\n}\n\n// Attributes that are nulled out when stacked\nconst STACKED_ATTRS = {\n width: null,\n height: null,\n focusable: null,\n role: null,\n 'aria-label': null\n}\n\n// --- Props ---\n\nexport const props = {\n animation: makeProp(PROP_TYPE_STRING),\n content: makeProp(PROP_TYPE_STRING),\n flipH: makeProp(PROP_TYPE_BOOLEAN, false),\n flipV: makeProp(PROP_TYPE_BOOLEAN, false),\n fontScale: makeProp(PROP_TYPE_NUMBER_STRING, 1),\n rotate: makeProp(PROP_TYPE_NUMBER_STRING, 0),\n scale: makeProp(PROP_TYPE_NUMBER_STRING, 1),\n shiftH: makeProp(PROP_TYPE_NUMBER_STRING, 0),\n shiftV: makeProp(PROP_TYPE_NUMBER_STRING, 0),\n stacked: makeProp(PROP_TYPE_BOOLEAN, false),\n title: makeProp(PROP_TYPE_STRING),\n variant: makeProp(PROP_TYPE_STRING)\n}\n\n// --- Main component ---\n\n// Shared private base component to reduce bundle/runtime size\n// @vue/component\nexport const BVIconBase = /*#__PURE__*/ extend({\n name: NAME_ICON_BASE,\n functional: true,\n props,\n render(h, { data, props, children }) {\n const { animation, content, flipH, flipV, stacked, title, variant } = props\n const fontScale = mathMax(toFloat(props.fontScale, 1), 0) || 1\n const scale = mathMax(toFloat(props.scale, 1), 0) || 1\n const rotate = toFloat(props.rotate, 0)\n const shiftH = toFloat(props.shiftH, 0)\n const shiftV = toFloat(props.shiftV, 0)\n // 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 const hasScale = flipH || flipV || scale !== 1\n const hasTransforms = hasScale || rotate\n const hasShift = shiftH || shiftV\n const hasContent = !isUndefinedOrNull(content)\n const transforms = [\n hasTransforms ? 'translate(8 8)' : null,\n hasScale ? `scale(${(flipH ? -1 : 1) * scale} ${(flipV ? -1 : 1) * scale})` : null,\n rotate ? `rotate(${rotate})` : null,\n hasTransforms ? 'translate(-8 -8)' : null\n ].filter(identity)\n\n // We wrap the content in a `` for handling the transforms (except shift)\n let $inner = h(\n 'g',\n {\n attrs: { transform: transforms.join(' ') || null },\n domProps: hasContent ? { innerHTML: content || '' } : {}\n },\n children\n )\n\n // If needed, we wrap in an additional `` in order to handle the shifting\n if (hasShift) {\n $inner = h(\n 'g',\n { attrs: { transform: `translate(${(16 * shiftH) / 16} ${(-16 * shiftV) / 16})` } },\n [$inner]\n )\n }\n\n // Wrap in an additional `` for proper animation handling if stacked\n if (stacked) {\n $inner = h('g', [$inner])\n }\n\n const $title = title ? h('title', title) : null\n\n const $content = [$title, $inner].filter(identity)\n\n return h(\n 'svg',\n mergeData(\n {\n staticClass: 'b-icon bi',\n class: {\n [`text-${variant}`]: variant,\n [`b-icon-animation-${animation}`]: animation\n },\n attrs: BASE_ATTRS,\n style: stacked ? {} : { fontSize: fontScale === 1 ? null : `${fontScale * 100}%` }\n },\n // Merge in user supplied data\n data,\n // If icon is stacked, null-out some attrs\n stacked ? { attrs: STACKED_ATTRS } : {},\n // These cannot be overridden by users\n {\n attrs: {\n xmlns: stacked ? null : 'http://www.w3.org/2000/svg',\n fill: 'currentColor'\n }\n }\n ),\n $content\n )\n }\n})\n","import { extend, mergeData } from '../../vue'\nimport { omit } from '../../utils/object'\nimport { kebabCase, pascalCase, trim } from '../../utils/string'\nimport { BVIconBase, props as BVIconBaseProps } from './icon-base'\n\nconst iconProps = omit(BVIconBaseProps, ['content'])\n\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 */\nexport const 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 const kebabName = kebabCase(name)\n const iconName = `BIcon${pascalCase(name)}`\n const iconNameClass = `bi-${kebabName}`\n const iconTitle = kebabName.replace(/-/g, ' ')\n const svgContent = trim(content || '')\n\n return /*#__PURE__*/ extend({\n name: iconName,\n functional: true,\n props: iconProps,\n render(h, { data, props }) {\n return h(\n BVIconBase,\n mergeData(\n // Defaults\n {\n props: { title: iconTitle },\n attrs: { 'aria-label': iconTitle }\n },\n // User data\n data,\n // Required data\n {\n staticClass: iconNameClass,\n props: { ...props, content: svgContent }\n }\n )\n )\n }\n })\n}\n","// --- BEGIN AUTO-GENERATED FILE ---\n//\n// @IconsVersion: 1.5.0\n// @Generated: 2022-10-26T01:10:52.933Z\n//\n// This file is generated on each build. Do not edit this file!\n\n/*!\n * BootstrapVue Icons, generated from Bootstrap Icons 1.5.0\n *\n * @link https://icons.getbootstrap.com/\n * @license MIT\n * https://github.com/twbs/icons/blob/master/LICENSE.md\n */\n\nimport { makeIcon } from './helpers/make-icon'\n\n// --- BootstrapVue custom icons ---\n\nexport const BIconBlank = /*#__PURE__*/ makeIcon('Blank', '')\n\n// --- Bootstrap Icons ---\n\n// eslint-disable-next-line\nexport const BIconAlarm = /*#__PURE__*/ makeIcon(\n 'Alarm',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconAlarmFill = /*#__PURE__*/ makeIcon(\n 'AlarmFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconAlignBottom = /*#__PURE__*/ makeIcon(\n 'AlignBottom',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconAlignCenter = /*#__PURE__*/ makeIcon(\n 'AlignCenter',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconAlignEnd = /*#__PURE__*/ makeIcon(\n 'AlignEnd',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconAlignMiddle = /*#__PURE__*/ makeIcon(\n 'AlignMiddle',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconAlignStart = /*#__PURE__*/ makeIcon(\n 'AlignStart',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconAlignTop = /*#__PURE__*/ makeIcon(\n 'AlignTop',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconAlt = /*#__PURE__*/ makeIcon(\n 'Alt',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconApp = /*#__PURE__*/ makeIcon(\n 'App',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconAppIndicator = /*#__PURE__*/ makeIcon(\n 'AppIndicator',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconArchive = /*#__PURE__*/ makeIcon(\n 'Archive',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconArchiveFill = /*#__PURE__*/ makeIcon(\n 'ArchiveFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconArrow90degDown = /*#__PURE__*/ makeIcon(\n 'Arrow90degDown',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconArrow90degLeft = /*#__PURE__*/ makeIcon(\n 'Arrow90degLeft',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconArrow90degRight = /*#__PURE__*/ makeIcon(\n 'Arrow90degRight',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconArrow90degUp = /*#__PURE__*/ makeIcon(\n 'Arrow90degUp',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconArrowBarDown = /*#__PURE__*/ makeIcon(\n 'ArrowBarDown',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconArrowBarLeft = /*#__PURE__*/ makeIcon(\n 'ArrowBarLeft',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconArrowBarRight = /*#__PURE__*/ makeIcon(\n 'ArrowBarRight',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconArrowBarUp = /*#__PURE__*/ makeIcon(\n 'ArrowBarUp',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconArrowClockwise = /*#__PURE__*/ makeIcon(\n 'ArrowClockwise',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconArrowCounterclockwise = /*#__PURE__*/ makeIcon(\n 'ArrowCounterclockwise',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconArrowDown = /*#__PURE__*/ makeIcon(\n 'ArrowDown',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconArrowDownCircle = /*#__PURE__*/ makeIcon(\n 'ArrowDownCircle',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconArrowDownCircleFill = /*#__PURE__*/ makeIcon(\n 'ArrowDownCircleFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconArrowDownLeft = /*#__PURE__*/ makeIcon(\n 'ArrowDownLeft',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconArrowDownLeftCircle = /*#__PURE__*/ makeIcon(\n 'ArrowDownLeftCircle',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconArrowDownLeftCircleFill = /*#__PURE__*/ makeIcon(\n 'ArrowDownLeftCircleFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconArrowDownLeftSquare = /*#__PURE__*/ makeIcon(\n 'ArrowDownLeftSquare',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconArrowDownLeftSquareFill = /*#__PURE__*/ makeIcon(\n 'ArrowDownLeftSquareFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconArrowDownRight = /*#__PURE__*/ makeIcon(\n 'ArrowDownRight',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconArrowDownRightCircle = /*#__PURE__*/ makeIcon(\n 'ArrowDownRightCircle',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconArrowDownRightCircleFill = /*#__PURE__*/ makeIcon(\n 'ArrowDownRightCircleFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconArrowDownRightSquare = /*#__PURE__*/ makeIcon(\n 'ArrowDownRightSquare',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconArrowDownRightSquareFill = /*#__PURE__*/ makeIcon(\n 'ArrowDownRightSquareFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconArrowDownShort = /*#__PURE__*/ makeIcon(\n 'ArrowDownShort',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconArrowDownSquare = /*#__PURE__*/ makeIcon(\n 'ArrowDownSquare',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconArrowDownSquareFill = /*#__PURE__*/ makeIcon(\n 'ArrowDownSquareFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconArrowDownUp = /*#__PURE__*/ makeIcon(\n 'ArrowDownUp',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconArrowLeft = /*#__PURE__*/ makeIcon(\n 'ArrowLeft',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconArrowLeftCircle = /*#__PURE__*/ makeIcon(\n 'ArrowLeftCircle',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconArrowLeftCircleFill = /*#__PURE__*/ makeIcon(\n 'ArrowLeftCircleFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconArrowLeftRight = /*#__PURE__*/ makeIcon(\n 'ArrowLeftRight',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconArrowLeftShort = /*#__PURE__*/ makeIcon(\n 'ArrowLeftShort',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconArrowLeftSquare = /*#__PURE__*/ makeIcon(\n 'ArrowLeftSquare',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconArrowLeftSquareFill = /*#__PURE__*/ makeIcon(\n 'ArrowLeftSquareFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconArrowRepeat = /*#__PURE__*/ makeIcon(\n 'ArrowRepeat',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconArrowReturnLeft = /*#__PURE__*/ makeIcon(\n 'ArrowReturnLeft',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconArrowReturnRight = /*#__PURE__*/ makeIcon(\n 'ArrowReturnRight',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconArrowRight = /*#__PURE__*/ makeIcon(\n 'ArrowRight',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconArrowRightCircle = /*#__PURE__*/ makeIcon(\n 'ArrowRightCircle',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconArrowRightCircleFill = /*#__PURE__*/ makeIcon(\n 'ArrowRightCircleFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconArrowRightShort = /*#__PURE__*/ makeIcon(\n 'ArrowRightShort',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconArrowRightSquare = /*#__PURE__*/ makeIcon(\n 'ArrowRightSquare',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconArrowRightSquareFill = /*#__PURE__*/ makeIcon(\n 'ArrowRightSquareFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconArrowUp = /*#__PURE__*/ makeIcon(\n 'ArrowUp',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconArrowUpCircle = /*#__PURE__*/ makeIcon(\n 'ArrowUpCircle',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconArrowUpCircleFill = /*#__PURE__*/ makeIcon(\n 'ArrowUpCircleFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconArrowUpLeft = /*#__PURE__*/ makeIcon(\n 'ArrowUpLeft',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconArrowUpLeftCircle = /*#__PURE__*/ makeIcon(\n 'ArrowUpLeftCircle',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconArrowUpLeftCircleFill = /*#__PURE__*/ makeIcon(\n 'ArrowUpLeftCircleFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconArrowUpLeftSquare = /*#__PURE__*/ makeIcon(\n 'ArrowUpLeftSquare',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconArrowUpLeftSquareFill = /*#__PURE__*/ makeIcon(\n 'ArrowUpLeftSquareFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconArrowUpRight = /*#__PURE__*/ makeIcon(\n 'ArrowUpRight',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconArrowUpRightCircle = /*#__PURE__*/ makeIcon(\n 'ArrowUpRightCircle',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconArrowUpRightCircleFill = /*#__PURE__*/ makeIcon(\n 'ArrowUpRightCircleFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconArrowUpRightSquare = /*#__PURE__*/ makeIcon(\n 'ArrowUpRightSquare',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconArrowUpRightSquareFill = /*#__PURE__*/ makeIcon(\n 'ArrowUpRightSquareFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconArrowUpShort = /*#__PURE__*/ makeIcon(\n 'ArrowUpShort',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconArrowUpSquare = /*#__PURE__*/ makeIcon(\n 'ArrowUpSquare',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconArrowUpSquareFill = /*#__PURE__*/ makeIcon(\n 'ArrowUpSquareFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconArrowsAngleContract = /*#__PURE__*/ makeIcon(\n 'ArrowsAngleContract',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconArrowsAngleExpand = /*#__PURE__*/ makeIcon(\n 'ArrowsAngleExpand',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconArrowsCollapse = /*#__PURE__*/ makeIcon(\n 'ArrowsCollapse',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconArrowsExpand = /*#__PURE__*/ makeIcon(\n 'ArrowsExpand',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconArrowsFullscreen = /*#__PURE__*/ makeIcon(\n 'ArrowsFullscreen',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconArrowsMove = /*#__PURE__*/ makeIcon(\n 'ArrowsMove',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconAspectRatio = /*#__PURE__*/ makeIcon(\n 'AspectRatio',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconAspectRatioFill = /*#__PURE__*/ makeIcon(\n 'AspectRatioFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconAsterisk = /*#__PURE__*/ makeIcon(\n 'Asterisk',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconAt = /*#__PURE__*/ makeIcon(\n 'At',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconAward = /*#__PURE__*/ makeIcon(\n 'Award',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconAwardFill = /*#__PURE__*/ makeIcon(\n 'AwardFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBack = /*#__PURE__*/ makeIcon(\n 'Back',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBackspace = /*#__PURE__*/ makeIcon(\n 'Backspace',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBackspaceFill = /*#__PURE__*/ makeIcon(\n 'BackspaceFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBackspaceReverse = /*#__PURE__*/ makeIcon(\n 'BackspaceReverse',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBackspaceReverseFill = /*#__PURE__*/ makeIcon(\n 'BackspaceReverseFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBadge3d = /*#__PURE__*/ makeIcon(\n 'Badge3d',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBadge3dFill = /*#__PURE__*/ makeIcon(\n 'Badge3dFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBadge4k = /*#__PURE__*/ makeIcon(\n 'Badge4k',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBadge4kFill = /*#__PURE__*/ makeIcon(\n 'Badge4kFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBadge8k = /*#__PURE__*/ makeIcon(\n 'Badge8k',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBadge8kFill = /*#__PURE__*/ makeIcon(\n 'Badge8kFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBadgeAd = /*#__PURE__*/ makeIcon(\n 'BadgeAd',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBadgeAdFill = /*#__PURE__*/ makeIcon(\n 'BadgeAdFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBadgeAr = /*#__PURE__*/ makeIcon(\n 'BadgeAr',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBadgeArFill = /*#__PURE__*/ makeIcon(\n 'BadgeArFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBadgeCc = /*#__PURE__*/ makeIcon(\n 'BadgeCc',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBadgeCcFill = /*#__PURE__*/ makeIcon(\n 'BadgeCcFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBadgeHd = /*#__PURE__*/ makeIcon(\n 'BadgeHd',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBadgeHdFill = /*#__PURE__*/ makeIcon(\n 'BadgeHdFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBadgeTm = /*#__PURE__*/ makeIcon(\n 'BadgeTm',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBadgeTmFill = /*#__PURE__*/ makeIcon(\n 'BadgeTmFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBadgeVo = /*#__PURE__*/ makeIcon(\n 'BadgeVo',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBadgeVoFill = /*#__PURE__*/ makeIcon(\n 'BadgeVoFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBadgeVr = /*#__PURE__*/ makeIcon(\n 'BadgeVr',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBadgeVrFill = /*#__PURE__*/ makeIcon(\n 'BadgeVrFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBadgeWc = /*#__PURE__*/ makeIcon(\n 'BadgeWc',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBadgeWcFill = /*#__PURE__*/ makeIcon(\n 'BadgeWcFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBag = /*#__PURE__*/ makeIcon(\n 'Bag',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBagCheck = /*#__PURE__*/ makeIcon(\n 'BagCheck',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBagCheckFill = /*#__PURE__*/ makeIcon(\n 'BagCheckFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBagDash = /*#__PURE__*/ makeIcon(\n 'BagDash',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBagDashFill = /*#__PURE__*/ makeIcon(\n 'BagDashFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBagFill = /*#__PURE__*/ makeIcon(\n 'BagFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBagPlus = /*#__PURE__*/ makeIcon(\n 'BagPlus',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBagPlusFill = /*#__PURE__*/ makeIcon(\n 'BagPlusFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBagX = /*#__PURE__*/ makeIcon(\n 'BagX',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBagXFill = /*#__PURE__*/ makeIcon(\n 'BagXFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBank = /*#__PURE__*/ makeIcon(\n 'Bank',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBank2 = /*#__PURE__*/ makeIcon(\n 'Bank2',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBarChart = /*#__PURE__*/ makeIcon(\n 'BarChart',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBarChartFill = /*#__PURE__*/ makeIcon(\n 'BarChartFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBarChartLine = /*#__PURE__*/ makeIcon(\n 'BarChartLine',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBarChartLineFill = /*#__PURE__*/ makeIcon(\n 'BarChartLineFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBarChartSteps = /*#__PURE__*/ makeIcon(\n 'BarChartSteps',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBasket = /*#__PURE__*/ makeIcon(\n 'Basket',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBasket2 = /*#__PURE__*/ makeIcon(\n 'Basket2',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBasket2Fill = /*#__PURE__*/ makeIcon(\n 'Basket2Fill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBasket3 = /*#__PURE__*/ makeIcon(\n 'Basket3',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBasket3Fill = /*#__PURE__*/ makeIcon(\n 'Basket3Fill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBasketFill = /*#__PURE__*/ makeIcon(\n 'BasketFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBattery = /*#__PURE__*/ makeIcon(\n 'Battery',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBatteryCharging = /*#__PURE__*/ makeIcon(\n 'BatteryCharging',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBatteryFull = /*#__PURE__*/ makeIcon(\n 'BatteryFull',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBatteryHalf = /*#__PURE__*/ makeIcon(\n 'BatteryHalf',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBell = /*#__PURE__*/ makeIcon(\n 'Bell',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBellFill = /*#__PURE__*/ makeIcon(\n 'BellFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBellSlash = /*#__PURE__*/ makeIcon(\n 'BellSlash',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBellSlashFill = /*#__PURE__*/ makeIcon(\n 'BellSlashFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBezier = /*#__PURE__*/ makeIcon(\n 'Bezier',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBezier2 = /*#__PURE__*/ makeIcon(\n 'Bezier2',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBicycle = /*#__PURE__*/ makeIcon(\n 'Bicycle',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBinoculars = /*#__PURE__*/ makeIcon(\n 'Binoculars',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBinocularsFill = /*#__PURE__*/ makeIcon(\n 'BinocularsFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBlockquoteLeft = /*#__PURE__*/ makeIcon(\n 'BlockquoteLeft',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBlockquoteRight = /*#__PURE__*/ makeIcon(\n 'BlockquoteRight',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBook = /*#__PURE__*/ makeIcon(\n 'Book',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBookFill = /*#__PURE__*/ makeIcon(\n 'BookFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBookHalf = /*#__PURE__*/ makeIcon(\n 'BookHalf',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBookmark = /*#__PURE__*/ makeIcon(\n 'Bookmark',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBookmarkCheck = /*#__PURE__*/ makeIcon(\n 'BookmarkCheck',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBookmarkCheckFill = /*#__PURE__*/ makeIcon(\n 'BookmarkCheckFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBookmarkDash = /*#__PURE__*/ makeIcon(\n 'BookmarkDash',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBookmarkDashFill = /*#__PURE__*/ makeIcon(\n 'BookmarkDashFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBookmarkFill = /*#__PURE__*/ makeIcon(\n 'BookmarkFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBookmarkHeart = /*#__PURE__*/ makeIcon(\n 'BookmarkHeart',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBookmarkHeartFill = /*#__PURE__*/ makeIcon(\n 'BookmarkHeartFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBookmarkPlus = /*#__PURE__*/ makeIcon(\n 'BookmarkPlus',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBookmarkPlusFill = /*#__PURE__*/ makeIcon(\n 'BookmarkPlusFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBookmarkStar = /*#__PURE__*/ makeIcon(\n 'BookmarkStar',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBookmarkStarFill = /*#__PURE__*/ makeIcon(\n 'BookmarkStarFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBookmarkX = /*#__PURE__*/ makeIcon(\n 'BookmarkX',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBookmarkXFill = /*#__PURE__*/ makeIcon(\n 'BookmarkXFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBookmarks = /*#__PURE__*/ makeIcon(\n 'Bookmarks',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBookmarksFill = /*#__PURE__*/ makeIcon(\n 'BookmarksFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBookshelf = /*#__PURE__*/ makeIcon(\n 'Bookshelf',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBootstrap = /*#__PURE__*/ makeIcon(\n 'Bootstrap',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBootstrapFill = /*#__PURE__*/ makeIcon(\n 'BootstrapFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBootstrapReboot = /*#__PURE__*/ makeIcon(\n 'BootstrapReboot',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBorder = /*#__PURE__*/ makeIcon(\n 'Border',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBorderAll = /*#__PURE__*/ makeIcon(\n 'BorderAll',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBorderBottom = /*#__PURE__*/ makeIcon(\n 'BorderBottom',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBorderCenter = /*#__PURE__*/ makeIcon(\n 'BorderCenter',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBorderInner = /*#__PURE__*/ makeIcon(\n 'BorderInner',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBorderLeft = /*#__PURE__*/ makeIcon(\n 'BorderLeft',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBorderMiddle = /*#__PURE__*/ makeIcon(\n 'BorderMiddle',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBorderOuter = /*#__PURE__*/ makeIcon(\n 'BorderOuter',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBorderRight = /*#__PURE__*/ makeIcon(\n 'BorderRight',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBorderStyle = /*#__PURE__*/ makeIcon(\n 'BorderStyle',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBorderTop = /*#__PURE__*/ makeIcon(\n 'BorderTop',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBorderWidth = /*#__PURE__*/ makeIcon(\n 'BorderWidth',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBoundingBox = /*#__PURE__*/ makeIcon(\n 'BoundingBox',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBoundingBoxCircles = /*#__PURE__*/ makeIcon(\n 'BoundingBoxCircles',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBox = /*#__PURE__*/ makeIcon(\n 'Box',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBoxArrowDown = /*#__PURE__*/ makeIcon(\n 'BoxArrowDown',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBoxArrowDownLeft = /*#__PURE__*/ makeIcon(\n 'BoxArrowDownLeft',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBoxArrowDownRight = /*#__PURE__*/ makeIcon(\n 'BoxArrowDownRight',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBoxArrowInDown = /*#__PURE__*/ makeIcon(\n 'BoxArrowInDown',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBoxArrowInDownLeft = /*#__PURE__*/ makeIcon(\n 'BoxArrowInDownLeft',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBoxArrowInDownRight = /*#__PURE__*/ makeIcon(\n 'BoxArrowInDownRight',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBoxArrowInLeft = /*#__PURE__*/ makeIcon(\n 'BoxArrowInLeft',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBoxArrowInRight = /*#__PURE__*/ makeIcon(\n 'BoxArrowInRight',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBoxArrowInUp = /*#__PURE__*/ makeIcon(\n 'BoxArrowInUp',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBoxArrowInUpLeft = /*#__PURE__*/ makeIcon(\n 'BoxArrowInUpLeft',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBoxArrowInUpRight = /*#__PURE__*/ makeIcon(\n 'BoxArrowInUpRight',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBoxArrowLeft = /*#__PURE__*/ makeIcon(\n 'BoxArrowLeft',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBoxArrowRight = /*#__PURE__*/ makeIcon(\n 'BoxArrowRight',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBoxArrowUp = /*#__PURE__*/ makeIcon(\n 'BoxArrowUp',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBoxArrowUpLeft = /*#__PURE__*/ makeIcon(\n 'BoxArrowUpLeft',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBoxArrowUpRight = /*#__PURE__*/ makeIcon(\n 'BoxArrowUpRight',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBoxSeam = /*#__PURE__*/ makeIcon(\n 'BoxSeam',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBraces = /*#__PURE__*/ makeIcon(\n 'Braces',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBricks = /*#__PURE__*/ makeIcon(\n 'Bricks',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBriefcase = /*#__PURE__*/ makeIcon(\n 'Briefcase',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBriefcaseFill = /*#__PURE__*/ makeIcon(\n 'BriefcaseFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBrightnessAltHigh = /*#__PURE__*/ makeIcon(\n 'BrightnessAltHigh',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBrightnessAltHighFill = /*#__PURE__*/ makeIcon(\n 'BrightnessAltHighFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBrightnessAltLow = /*#__PURE__*/ makeIcon(\n 'BrightnessAltLow',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBrightnessAltLowFill = /*#__PURE__*/ makeIcon(\n 'BrightnessAltLowFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBrightnessHigh = /*#__PURE__*/ makeIcon(\n 'BrightnessHigh',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBrightnessHighFill = /*#__PURE__*/ makeIcon(\n 'BrightnessHighFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBrightnessLow = /*#__PURE__*/ makeIcon(\n 'BrightnessLow',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBrightnessLowFill = /*#__PURE__*/ makeIcon(\n 'BrightnessLowFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBroadcast = /*#__PURE__*/ makeIcon(\n 'Broadcast',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBroadcastPin = /*#__PURE__*/ makeIcon(\n 'BroadcastPin',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBrush = /*#__PURE__*/ makeIcon(\n 'Brush',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBrushFill = /*#__PURE__*/ makeIcon(\n 'BrushFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBucket = /*#__PURE__*/ makeIcon(\n 'Bucket',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBucketFill = /*#__PURE__*/ makeIcon(\n 'BucketFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBug = /*#__PURE__*/ makeIcon(\n 'Bug',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBugFill = /*#__PURE__*/ makeIcon(\n 'BugFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBuilding = /*#__PURE__*/ makeIcon(\n 'Building',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconBullseye = /*#__PURE__*/ makeIcon(\n 'Bullseye',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCalculator = /*#__PURE__*/ makeIcon(\n 'Calculator',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCalculatorFill = /*#__PURE__*/ makeIcon(\n 'CalculatorFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCalendar = /*#__PURE__*/ makeIcon(\n 'Calendar',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCalendar2 = /*#__PURE__*/ makeIcon(\n 'Calendar2',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCalendar2Check = /*#__PURE__*/ makeIcon(\n 'Calendar2Check',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCalendar2CheckFill = /*#__PURE__*/ makeIcon(\n 'Calendar2CheckFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCalendar2Date = /*#__PURE__*/ makeIcon(\n 'Calendar2Date',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCalendar2DateFill = /*#__PURE__*/ makeIcon(\n 'Calendar2DateFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCalendar2Day = /*#__PURE__*/ makeIcon(\n 'Calendar2Day',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCalendar2DayFill = /*#__PURE__*/ makeIcon(\n 'Calendar2DayFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCalendar2Event = /*#__PURE__*/ makeIcon(\n 'Calendar2Event',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCalendar2EventFill = /*#__PURE__*/ makeIcon(\n 'Calendar2EventFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCalendar2Fill = /*#__PURE__*/ makeIcon(\n 'Calendar2Fill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCalendar2Minus = /*#__PURE__*/ makeIcon(\n 'Calendar2Minus',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCalendar2MinusFill = /*#__PURE__*/ makeIcon(\n 'Calendar2MinusFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCalendar2Month = /*#__PURE__*/ makeIcon(\n 'Calendar2Month',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCalendar2MonthFill = /*#__PURE__*/ makeIcon(\n 'Calendar2MonthFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCalendar2Plus = /*#__PURE__*/ makeIcon(\n 'Calendar2Plus',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCalendar2PlusFill = /*#__PURE__*/ makeIcon(\n 'Calendar2PlusFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCalendar2Range = /*#__PURE__*/ makeIcon(\n 'Calendar2Range',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCalendar2RangeFill = /*#__PURE__*/ makeIcon(\n 'Calendar2RangeFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCalendar2Week = /*#__PURE__*/ makeIcon(\n 'Calendar2Week',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCalendar2WeekFill = /*#__PURE__*/ makeIcon(\n 'Calendar2WeekFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCalendar2X = /*#__PURE__*/ makeIcon(\n 'Calendar2X',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCalendar2XFill = /*#__PURE__*/ makeIcon(\n 'Calendar2XFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCalendar3 = /*#__PURE__*/ makeIcon(\n 'Calendar3',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCalendar3Event = /*#__PURE__*/ makeIcon(\n 'Calendar3Event',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCalendar3EventFill = /*#__PURE__*/ makeIcon(\n 'Calendar3EventFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCalendar3Fill = /*#__PURE__*/ makeIcon(\n 'Calendar3Fill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCalendar3Range = /*#__PURE__*/ makeIcon(\n 'Calendar3Range',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCalendar3RangeFill = /*#__PURE__*/ makeIcon(\n 'Calendar3RangeFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCalendar3Week = /*#__PURE__*/ makeIcon(\n 'Calendar3Week',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCalendar3WeekFill = /*#__PURE__*/ makeIcon(\n 'Calendar3WeekFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCalendar4 = /*#__PURE__*/ makeIcon(\n 'Calendar4',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCalendar4Event = /*#__PURE__*/ makeIcon(\n 'Calendar4Event',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCalendar4Range = /*#__PURE__*/ makeIcon(\n 'Calendar4Range',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCalendar4Week = /*#__PURE__*/ makeIcon(\n 'Calendar4Week',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCalendarCheck = /*#__PURE__*/ makeIcon(\n 'CalendarCheck',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCalendarCheckFill = /*#__PURE__*/ makeIcon(\n 'CalendarCheckFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCalendarDate = /*#__PURE__*/ makeIcon(\n 'CalendarDate',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCalendarDateFill = /*#__PURE__*/ makeIcon(\n 'CalendarDateFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCalendarDay = /*#__PURE__*/ makeIcon(\n 'CalendarDay',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCalendarDayFill = /*#__PURE__*/ makeIcon(\n 'CalendarDayFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCalendarEvent = /*#__PURE__*/ makeIcon(\n 'CalendarEvent',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCalendarEventFill = /*#__PURE__*/ makeIcon(\n 'CalendarEventFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCalendarFill = /*#__PURE__*/ makeIcon(\n 'CalendarFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCalendarMinus = /*#__PURE__*/ makeIcon(\n 'CalendarMinus',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCalendarMinusFill = /*#__PURE__*/ makeIcon(\n 'CalendarMinusFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCalendarMonth = /*#__PURE__*/ makeIcon(\n 'CalendarMonth',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCalendarMonthFill = /*#__PURE__*/ makeIcon(\n 'CalendarMonthFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCalendarPlus = /*#__PURE__*/ makeIcon(\n 'CalendarPlus',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCalendarPlusFill = /*#__PURE__*/ makeIcon(\n 'CalendarPlusFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCalendarRange = /*#__PURE__*/ makeIcon(\n 'CalendarRange',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCalendarRangeFill = /*#__PURE__*/ makeIcon(\n 'CalendarRangeFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCalendarWeek = /*#__PURE__*/ makeIcon(\n 'CalendarWeek',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCalendarWeekFill = /*#__PURE__*/ makeIcon(\n 'CalendarWeekFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCalendarX = /*#__PURE__*/ makeIcon(\n 'CalendarX',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCalendarXFill = /*#__PURE__*/ makeIcon(\n 'CalendarXFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCamera = /*#__PURE__*/ makeIcon(\n 'Camera',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCamera2 = /*#__PURE__*/ makeIcon(\n 'Camera2',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCameraFill = /*#__PURE__*/ makeIcon(\n 'CameraFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCameraReels = /*#__PURE__*/ makeIcon(\n 'CameraReels',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCameraReelsFill = /*#__PURE__*/ makeIcon(\n 'CameraReelsFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCameraVideo = /*#__PURE__*/ makeIcon(\n 'CameraVideo',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCameraVideoFill = /*#__PURE__*/ makeIcon(\n 'CameraVideoFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCameraVideoOff = /*#__PURE__*/ makeIcon(\n 'CameraVideoOff',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCameraVideoOffFill = /*#__PURE__*/ makeIcon(\n 'CameraVideoOffFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCapslock = /*#__PURE__*/ makeIcon(\n 'Capslock',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCapslockFill = /*#__PURE__*/ makeIcon(\n 'CapslockFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCardChecklist = /*#__PURE__*/ makeIcon(\n 'CardChecklist',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCardHeading = /*#__PURE__*/ makeIcon(\n 'CardHeading',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCardImage = /*#__PURE__*/ makeIcon(\n 'CardImage',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCardList = /*#__PURE__*/ makeIcon(\n 'CardList',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCardText = /*#__PURE__*/ makeIcon(\n 'CardText',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCaretDown = /*#__PURE__*/ makeIcon(\n 'CaretDown',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCaretDownFill = /*#__PURE__*/ makeIcon(\n 'CaretDownFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCaretDownSquare = /*#__PURE__*/ makeIcon(\n 'CaretDownSquare',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCaretDownSquareFill = /*#__PURE__*/ makeIcon(\n 'CaretDownSquareFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCaretLeft = /*#__PURE__*/ makeIcon(\n 'CaretLeft',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCaretLeftFill = /*#__PURE__*/ makeIcon(\n 'CaretLeftFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCaretLeftSquare = /*#__PURE__*/ makeIcon(\n 'CaretLeftSquare',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCaretLeftSquareFill = /*#__PURE__*/ makeIcon(\n 'CaretLeftSquareFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCaretRight = /*#__PURE__*/ makeIcon(\n 'CaretRight',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCaretRightFill = /*#__PURE__*/ makeIcon(\n 'CaretRightFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCaretRightSquare = /*#__PURE__*/ makeIcon(\n 'CaretRightSquare',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCaretRightSquareFill = /*#__PURE__*/ makeIcon(\n 'CaretRightSquareFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCaretUp = /*#__PURE__*/ makeIcon(\n 'CaretUp',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCaretUpFill = /*#__PURE__*/ makeIcon(\n 'CaretUpFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCaretUpSquare = /*#__PURE__*/ makeIcon(\n 'CaretUpSquare',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCaretUpSquareFill = /*#__PURE__*/ makeIcon(\n 'CaretUpSquareFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCart = /*#__PURE__*/ makeIcon(\n 'Cart',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCart2 = /*#__PURE__*/ makeIcon(\n 'Cart2',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCart3 = /*#__PURE__*/ makeIcon(\n 'Cart3',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCart4 = /*#__PURE__*/ makeIcon(\n 'Cart4',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCartCheck = /*#__PURE__*/ makeIcon(\n 'CartCheck',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCartCheckFill = /*#__PURE__*/ makeIcon(\n 'CartCheckFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCartDash = /*#__PURE__*/ makeIcon(\n 'CartDash',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCartDashFill = /*#__PURE__*/ makeIcon(\n 'CartDashFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCartFill = /*#__PURE__*/ makeIcon(\n 'CartFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCartPlus = /*#__PURE__*/ makeIcon(\n 'CartPlus',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCartPlusFill = /*#__PURE__*/ makeIcon(\n 'CartPlusFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCartX = /*#__PURE__*/ makeIcon(\n 'CartX',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCartXFill = /*#__PURE__*/ makeIcon(\n 'CartXFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCash = /*#__PURE__*/ makeIcon(\n 'Cash',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCashCoin = /*#__PURE__*/ makeIcon(\n 'CashCoin',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCashStack = /*#__PURE__*/ makeIcon(\n 'CashStack',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCast = /*#__PURE__*/ makeIcon(\n 'Cast',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconChat = /*#__PURE__*/ makeIcon(\n 'Chat',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconChatDots = /*#__PURE__*/ makeIcon(\n 'ChatDots',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconChatDotsFill = /*#__PURE__*/ makeIcon(\n 'ChatDotsFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconChatFill = /*#__PURE__*/ makeIcon(\n 'ChatFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconChatLeft = /*#__PURE__*/ makeIcon(\n 'ChatLeft',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconChatLeftDots = /*#__PURE__*/ makeIcon(\n 'ChatLeftDots',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconChatLeftDotsFill = /*#__PURE__*/ makeIcon(\n 'ChatLeftDotsFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconChatLeftFill = /*#__PURE__*/ makeIcon(\n 'ChatLeftFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconChatLeftQuote = /*#__PURE__*/ makeIcon(\n 'ChatLeftQuote',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconChatLeftQuoteFill = /*#__PURE__*/ makeIcon(\n 'ChatLeftQuoteFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconChatLeftText = /*#__PURE__*/ makeIcon(\n 'ChatLeftText',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconChatLeftTextFill = /*#__PURE__*/ makeIcon(\n 'ChatLeftTextFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconChatQuote = /*#__PURE__*/ makeIcon(\n 'ChatQuote',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconChatQuoteFill = /*#__PURE__*/ makeIcon(\n 'ChatQuoteFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconChatRight = /*#__PURE__*/ makeIcon(\n 'ChatRight',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconChatRightDots = /*#__PURE__*/ makeIcon(\n 'ChatRightDots',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconChatRightDotsFill = /*#__PURE__*/ makeIcon(\n 'ChatRightDotsFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconChatRightFill = /*#__PURE__*/ makeIcon(\n 'ChatRightFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconChatRightQuote = /*#__PURE__*/ makeIcon(\n 'ChatRightQuote',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconChatRightQuoteFill = /*#__PURE__*/ makeIcon(\n 'ChatRightQuoteFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconChatRightText = /*#__PURE__*/ makeIcon(\n 'ChatRightText',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconChatRightTextFill = /*#__PURE__*/ makeIcon(\n 'ChatRightTextFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconChatSquare = /*#__PURE__*/ makeIcon(\n 'ChatSquare',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconChatSquareDots = /*#__PURE__*/ makeIcon(\n 'ChatSquareDots',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconChatSquareDotsFill = /*#__PURE__*/ makeIcon(\n 'ChatSquareDotsFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconChatSquareFill = /*#__PURE__*/ makeIcon(\n 'ChatSquareFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconChatSquareQuote = /*#__PURE__*/ makeIcon(\n 'ChatSquareQuote',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconChatSquareQuoteFill = /*#__PURE__*/ makeIcon(\n 'ChatSquareQuoteFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconChatSquareText = /*#__PURE__*/ makeIcon(\n 'ChatSquareText',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconChatSquareTextFill = /*#__PURE__*/ makeIcon(\n 'ChatSquareTextFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconChatText = /*#__PURE__*/ makeIcon(\n 'ChatText',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconChatTextFill = /*#__PURE__*/ makeIcon(\n 'ChatTextFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCheck = /*#__PURE__*/ makeIcon(\n 'Check',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCheck2 = /*#__PURE__*/ makeIcon(\n 'Check2',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCheck2All = /*#__PURE__*/ makeIcon(\n 'Check2All',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCheck2Circle = /*#__PURE__*/ makeIcon(\n 'Check2Circle',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCheck2Square = /*#__PURE__*/ makeIcon(\n 'Check2Square',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCheckAll = /*#__PURE__*/ makeIcon(\n 'CheckAll',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCheckCircle = /*#__PURE__*/ makeIcon(\n 'CheckCircle',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCheckCircleFill = /*#__PURE__*/ makeIcon(\n 'CheckCircleFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCheckLg = /*#__PURE__*/ makeIcon(\n 'CheckLg',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCheckSquare = /*#__PURE__*/ makeIcon(\n 'CheckSquare',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCheckSquareFill = /*#__PURE__*/ makeIcon(\n 'CheckSquareFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconChevronBarContract = /*#__PURE__*/ makeIcon(\n 'ChevronBarContract',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconChevronBarDown = /*#__PURE__*/ makeIcon(\n 'ChevronBarDown',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconChevronBarExpand = /*#__PURE__*/ makeIcon(\n 'ChevronBarExpand',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconChevronBarLeft = /*#__PURE__*/ makeIcon(\n 'ChevronBarLeft',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconChevronBarRight = /*#__PURE__*/ makeIcon(\n 'ChevronBarRight',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconChevronBarUp = /*#__PURE__*/ makeIcon(\n 'ChevronBarUp',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconChevronCompactDown = /*#__PURE__*/ makeIcon(\n 'ChevronCompactDown',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconChevronCompactLeft = /*#__PURE__*/ makeIcon(\n 'ChevronCompactLeft',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconChevronCompactRight = /*#__PURE__*/ makeIcon(\n 'ChevronCompactRight',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconChevronCompactUp = /*#__PURE__*/ makeIcon(\n 'ChevronCompactUp',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconChevronContract = /*#__PURE__*/ makeIcon(\n 'ChevronContract',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconChevronDoubleDown = /*#__PURE__*/ makeIcon(\n 'ChevronDoubleDown',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconChevronDoubleLeft = /*#__PURE__*/ makeIcon(\n 'ChevronDoubleLeft',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconChevronDoubleRight = /*#__PURE__*/ makeIcon(\n 'ChevronDoubleRight',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconChevronDoubleUp = /*#__PURE__*/ makeIcon(\n 'ChevronDoubleUp',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconChevronDown = /*#__PURE__*/ makeIcon(\n 'ChevronDown',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconChevronExpand = /*#__PURE__*/ makeIcon(\n 'ChevronExpand',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconChevronLeft = /*#__PURE__*/ makeIcon(\n 'ChevronLeft',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconChevronRight = /*#__PURE__*/ makeIcon(\n 'ChevronRight',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconChevronUp = /*#__PURE__*/ makeIcon(\n 'ChevronUp',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCircle = /*#__PURE__*/ makeIcon(\n 'Circle',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCircleFill = /*#__PURE__*/ makeIcon(\n 'CircleFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCircleHalf = /*#__PURE__*/ makeIcon(\n 'CircleHalf',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCircleSquare = /*#__PURE__*/ makeIcon(\n 'CircleSquare',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconClipboard = /*#__PURE__*/ makeIcon(\n 'Clipboard',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconClipboardCheck = /*#__PURE__*/ makeIcon(\n 'ClipboardCheck',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconClipboardData = /*#__PURE__*/ makeIcon(\n 'ClipboardData',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconClipboardMinus = /*#__PURE__*/ makeIcon(\n 'ClipboardMinus',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconClipboardPlus = /*#__PURE__*/ makeIcon(\n 'ClipboardPlus',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconClipboardX = /*#__PURE__*/ makeIcon(\n 'ClipboardX',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconClock = /*#__PURE__*/ makeIcon(\n 'Clock',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconClockFill = /*#__PURE__*/ makeIcon(\n 'ClockFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconClockHistory = /*#__PURE__*/ makeIcon(\n 'ClockHistory',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCloud = /*#__PURE__*/ makeIcon(\n 'Cloud',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCloudArrowDown = /*#__PURE__*/ makeIcon(\n 'CloudArrowDown',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCloudArrowDownFill = /*#__PURE__*/ makeIcon(\n 'CloudArrowDownFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCloudArrowUp = /*#__PURE__*/ makeIcon(\n 'CloudArrowUp',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCloudArrowUpFill = /*#__PURE__*/ makeIcon(\n 'CloudArrowUpFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCloudCheck = /*#__PURE__*/ makeIcon(\n 'CloudCheck',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCloudCheckFill = /*#__PURE__*/ makeIcon(\n 'CloudCheckFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCloudDownload = /*#__PURE__*/ makeIcon(\n 'CloudDownload',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCloudDownloadFill = /*#__PURE__*/ makeIcon(\n 'CloudDownloadFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCloudDrizzle = /*#__PURE__*/ makeIcon(\n 'CloudDrizzle',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCloudDrizzleFill = /*#__PURE__*/ makeIcon(\n 'CloudDrizzleFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCloudFill = /*#__PURE__*/ makeIcon(\n 'CloudFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCloudFog = /*#__PURE__*/ makeIcon(\n 'CloudFog',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCloudFog2 = /*#__PURE__*/ makeIcon(\n 'CloudFog2',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCloudFog2Fill = /*#__PURE__*/ makeIcon(\n 'CloudFog2Fill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCloudFogFill = /*#__PURE__*/ makeIcon(\n 'CloudFogFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCloudHail = /*#__PURE__*/ makeIcon(\n 'CloudHail',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCloudHailFill = /*#__PURE__*/ makeIcon(\n 'CloudHailFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCloudHaze = /*#__PURE__*/ makeIcon(\n 'CloudHaze',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCloudHaze1 = /*#__PURE__*/ makeIcon(\n 'CloudHaze1',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCloudHaze2Fill = /*#__PURE__*/ makeIcon(\n 'CloudHaze2Fill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCloudHazeFill = /*#__PURE__*/ makeIcon(\n 'CloudHazeFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCloudLightning = /*#__PURE__*/ makeIcon(\n 'CloudLightning',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCloudLightningFill = /*#__PURE__*/ makeIcon(\n 'CloudLightningFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCloudLightningRain = /*#__PURE__*/ makeIcon(\n 'CloudLightningRain',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCloudLightningRainFill = /*#__PURE__*/ makeIcon(\n 'CloudLightningRainFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCloudMinus = /*#__PURE__*/ makeIcon(\n 'CloudMinus',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCloudMinusFill = /*#__PURE__*/ makeIcon(\n 'CloudMinusFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCloudMoon = /*#__PURE__*/ makeIcon(\n 'CloudMoon',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCloudMoonFill = /*#__PURE__*/ makeIcon(\n 'CloudMoonFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCloudPlus = /*#__PURE__*/ makeIcon(\n 'CloudPlus',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCloudPlusFill = /*#__PURE__*/ makeIcon(\n 'CloudPlusFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCloudRain = /*#__PURE__*/ makeIcon(\n 'CloudRain',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCloudRainFill = /*#__PURE__*/ makeIcon(\n 'CloudRainFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCloudRainHeavy = /*#__PURE__*/ makeIcon(\n 'CloudRainHeavy',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCloudRainHeavyFill = /*#__PURE__*/ makeIcon(\n 'CloudRainHeavyFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCloudSlash = /*#__PURE__*/ makeIcon(\n 'CloudSlash',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCloudSlashFill = /*#__PURE__*/ makeIcon(\n 'CloudSlashFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCloudSleet = /*#__PURE__*/ makeIcon(\n 'CloudSleet',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCloudSleetFill = /*#__PURE__*/ makeIcon(\n 'CloudSleetFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCloudSnow = /*#__PURE__*/ makeIcon(\n 'CloudSnow',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCloudSnowFill = /*#__PURE__*/ makeIcon(\n 'CloudSnowFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCloudSun = /*#__PURE__*/ makeIcon(\n 'CloudSun',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCloudSunFill = /*#__PURE__*/ makeIcon(\n 'CloudSunFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCloudUpload = /*#__PURE__*/ makeIcon(\n 'CloudUpload',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCloudUploadFill = /*#__PURE__*/ makeIcon(\n 'CloudUploadFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconClouds = /*#__PURE__*/ makeIcon(\n 'Clouds',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCloudsFill = /*#__PURE__*/ makeIcon(\n 'CloudsFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCloudy = /*#__PURE__*/ makeIcon(\n 'Cloudy',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCloudyFill = /*#__PURE__*/ makeIcon(\n 'CloudyFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCode = /*#__PURE__*/ makeIcon(\n 'Code',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCodeSlash = /*#__PURE__*/ makeIcon(\n 'CodeSlash',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCodeSquare = /*#__PURE__*/ makeIcon(\n 'CodeSquare',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCoin = /*#__PURE__*/ makeIcon(\n 'Coin',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCollection = /*#__PURE__*/ makeIcon(\n 'Collection',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCollectionFill = /*#__PURE__*/ makeIcon(\n 'CollectionFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCollectionPlay = /*#__PURE__*/ makeIcon(\n 'CollectionPlay',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCollectionPlayFill = /*#__PURE__*/ makeIcon(\n 'CollectionPlayFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconColumns = /*#__PURE__*/ makeIcon(\n 'Columns',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconColumnsGap = /*#__PURE__*/ makeIcon(\n 'ColumnsGap',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCommand = /*#__PURE__*/ makeIcon(\n 'Command',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCompass = /*#__PURE__*/ makeIcon(\n 'Compass',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCompassFill = /*#__PURE__*/ makeIcon(\n 'CompassFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCone = /*#__PURE__*/ makeIcon(\n 'Cone',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconConeStriped = /*#__PURE__*/ makeIcon(\n 'ConeStriped',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconController = /*#__PURE__*/ makeIcon(\n 'Controller',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCpu = /*#__PURE__*/ makeIcon(\n 'Cpu',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCpuFill = /*#__PURE__*/ makeIcon(\n 'CpuFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCreditCard = /*#__PURE__*/ makeIcon(\n 'CreditCard',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCreditCard2Back = /*#__PURE__*/ makeIcon(\n 'CreditCard2Back',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCreditCard2BackFill = /*#__PURE__*/ makeIcon(\n 'CreditCard2BackFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCreditCard2Front = /*#__PURE__*/ makeIcon(\n 'CreditCard2Front',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCreditCard2FrontFill = /*#__PURE__*/ makeIcon(\n 'CreditCard2FrontFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCreditCardFill = /*#__PURE__*/ makeIcon(\n 'CreditCardFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCrop = /*#__PURE__*/ makeIcon(\n 'Crop',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCup = /*#__PURE__*/ makeIcon(\n 'Cup',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCupFill = /*#__PURE__*/ makeIcon(\n 'CupFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCupStraw = /*#__PURE__*/ makeIcon(\n 'CupStraw',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCurrencyBitcoin = /*#__PURE__*/ makeIcon(\n 'CurrencyBitcoin',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCurrencyDollar = /*#__PURE__*/ makeIcon(\n 'CurrencyDollar',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCurrencyEuro = /*#__PURE__*/ makeIcon(\n 'CurrencyEuro',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCurrencyExchange = /*#__PURE__*/ makeIcon(\n 'CurrencyExchange',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCurrencyPound = /*#__PURE__*/ makeIcon(\n 'CurrencyPound',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCurrencyYen = /*#__PURE__*/ makeIcon(\n 'CurrencyYen',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCursor = /*#__PURE__*/ makeIcon(\n 'Cursor',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCursorFill = /*#__PURE__*/ makeIcon(\n 'CursorFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconCursorText = /*#__PURE__*/ makeIcon(\n 'CursorText',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconDash = /*#__PURE__*/ makeIcon(\n 'Dash',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconDashCircle = /*#__PURE__*/ makeIcon(\n 'DashCircle',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconDashCircleDotted = /*#__PURE__*/ makeIcon(\n 'DashCircleDotted',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconDashCircleFill = /*#__PURE__*/ makeIcon(\n 'DashCircleFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconDashLg = /*#__PURE__*/ makeIcon(\n 'DashLg',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconDashSquare = /*#__PURE__*/ makeIcon(\n 'DashSquare',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconDashSquareDotted = /*#__PURE__*/ makeIcon(\n 'DashSquareDotted',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconDashSquareFill = /*#__PURE__*/ makeIcon(\n 'DashSquareFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconDiagram2 = /*#__PURE__*/ makeIcon(\n 'Diagram2',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconDiagram2Fill = /*#__PURE__*/ makeIcon(\n 'Diagram2Fill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconDiagram3 = /*#__PURE__*/ makeIcon(\n 'Diagram3',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconDiagram3Fill = /*#__PURE__*/ makeIcon(\n 'Diagram3Fill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconDiamond = /*#__PURE__*/ makeIcon(\n 'Diamond',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconDiamondFill = /*#__PURE__*/ makeIcon(\n 'DiamondFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconDiamondHalf = /*#__PURE__*/ makeIcon(\n 'DiamondHalf',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconDice1 = /*#__PURE__*/ makeIcon(\n 'Dice1',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconDice1Fill = /*#__PURE__*/ makeIcon(\n 'Dice1Fill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconDice2 = /*#__PURE__*/ makeIcon(\n 'Dice2',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconDice2Fill = /*#__PURE__*/ makeIcon(\n 'Dice2Fill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconDice3 = /*#__PURE__*/ makeIcon(\n 'Dice3',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconDice3Fill = /*#__PURE__*/ makeIcon(\n 'Dice3Fill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconDice4 = /*#__PURE__*/ makeIcon(\n 'Dice4',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconDice4Fill = /*#__PURE__*/ makeIcon(\n 'Dice4Fill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconDice5 = /*#__PURE__*/ makeIcon(\n 'Dice5',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconDice5Fill = /*#__PURE__*/ makeIcon(\n 'Dice5Fill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconDice6 = /*#__PURE__*/ makeIcon(\n 'Dice6',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconDice6Fill = /*#__PURE__*/ makeIcon(\n 'Dice6Fill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconDisc = /*#__PURE__*/ makeIcon(\n 'Disc',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconDiscFill = /*#__PURE__*/ makeIcon(\n 'DiscFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconDiscord = /*#__PURE__*/ makeIcon(\n 'Discord',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconDisplay = /*#__PURE__*/ makeIcon(\n 'Display',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconDisplayFill = /*#__PURE__*/ makeIcon(\n 'DisplayFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconDistributeHorizontal = /*#__PURE__*/ makeIcon(\n 'DistributeHorizontal',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconDistributeVertical = /*#__PURE__*/ makeIcon(\n 'DistributeVertical',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconDoorClosed = /*#__PURE__*/ makeIcon(\n 'DoorClosed',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconDoorClosedFill = /*#__PURE__*/ makeIcon(\n 'DoorClosedFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconDoorOpen = /*#__PURE__*/ makeIcon(\n 'DoorOpen',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconDoorOpenFill = /*#__PURE__*/ makeIcon(\n 'DoorOpenFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconDot = /*#__PURE__*/ makeIcon(\n 'Dot',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconDownload = /*#__PURE__*/ makeIcon(\n 'Download',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconDroplet = /*#__PURE__*/ makeIcon(\n 'Droplet',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconDropletFill = /*#__PURE__*/ makeIcon(\n 'DropletFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconDropletHalf = /*#__PURE__*/ makeIcon(\n 'DropletHalf',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconEarbuds = /*#__PURE__*/ makeIcon(\n 'Earbuds',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconEasel = /*#__PURE__*/ makeIcon(\n 'Easel',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconEaselFill = /*#__PURE__*/ makeIcon(\n 'EaselFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconEgg = /*#__PURE__*/ makeIcon(\n 'Egg',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconEggFill = /*#__PURE__*/ makeIcon(\n 'EggFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconEggFried = /*#__PURE__*/ makeIcon(\n 'EggFried',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconEject = /*#__PURE__*/ makeIcon(\n 'Eject',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconEjectFill = /*#__PURE__*/ makeIcon(\n 'EjectFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconEmojiAngry = /*#__PURE__*/ makeIcon(\n 'EmojiAngry',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconEmojiAngryFill = /*#__PURE__*/ makeIcon(\n 'EmojiAngryFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconEmojiDizzy = /*#__PURE__*/ makeIcon(\n 'EmojiDizzy',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconEmojiDizzyFill = /*#__PURE__*/ makeIcon(\n 'EmojiDizzyFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconEmojiExpressionless = /*#__PURE__*/ makeIcon(\n 'EmojiExpressionless',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconEmojiExpressionlessFill = /*#__PURE__*/ makeIcon(\n 'EmojiExpressionlessFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconEmojiFrown = /*#__PURE__*/ makeIcon(\n 'EmojiFrown',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconEmojiFrownFill = /*#__PURE__*/ makeIcon(\n 'EmojiFrownFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconEmojiHeartEyes = /*#__PURE__*/ makeIcon(\n 'EmojiHeartEyes',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconEmojiHeartEyesFill = /*#__PURE__*/ makeIcon(\n 'EmojiHeartEyesFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconEmojiLaughing = /*#__PURE__*/ makeIcon(\n 'EmojiLaughing',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconEmojiLaughingFill = /*#__PURE__*/ makeIcon(\n 'EmojiLaughingFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconEmojiNeutral = /*#__PURE__*/ makeIcon(\n 'EmojiNeutral',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconEmojiNeutralFill = /*#__PURE__*/ makeIcon(\n 'EmojiNeutralFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconEmojiSmile = /*#__PURE__*/ makeIcon(\n 'EmojiSmile',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconEmojiSmileFill = /*#__PURE__*/ makeIcon(\n 'EmojiSmileFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconEmojiSmileUpsideDown = /*#__PURE__*/ makeIcon(\n 'EmojiSmileUpsideDown',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconEmojiSmileUpsideDownFill = /*#__PURE__*/ makeIcon(\n 'EmojiSmileUpsideDownFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconEmojiSunglasses = /*#__PURE__*/ makeIcon(\n 'EmojiSunglasses',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconEmojiSunglassesFill = /*#__PURE__*/ makeIcon(\n 'EmojiSunglassesFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconEmojiWink = /*#__PURE__*/ makeIcon(\n 'EmojiWink',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconEmojiWinkFill = /*#__PURE__*/ makeIcon(\n 'EmojiWinkFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconEnvelope = /*#__PURE__*/ makeIcon(\n 'Envelope',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconEnvelopeFill = /*#__PURE__*/ makeIcon(\n 'EnvelopeFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconEnvelopeOpen = /*#__PURE__*/ makeIcon(\n 'EnvelopeOpen',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconEnvelopeOpenFill = /*#__PURE__*/ makeIcon(\n 'EnvelopeOpenFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconEraser = /*#__PURE__*/ makeIcon(\n 'Eraser',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconEraserFill = /*#__PURE__*/ makeIcon(\n 'EraserFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconExclamation = /*#__PURE__*/ makeIcon(\n 'Exclamation',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconExclamationCircle = /*#__PURE__*/ makeIcon(\n 'ExclamationCircle',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconExclamationCircleFill = /*#__PURE__*/ makeIcon(\n 'ExclamationCircleFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconExclamationDiamond = /*#__PURE__*/ makeIcon(\n 'ExclamationDiamond',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconExclamationDiamondFill = /*#__PURE__*/ makeIcon(\n 'ExclamationDiamondFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconExclamationLg = /*#__PURE__*/ makeIcon(\n 'ExclamationLg',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconExclamationOctagon = /*#__PURE__*/ makeIcon(\n 'ExclamationOctagon',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconExclamationOctagonFill = /*#__PURE__*/ makeIcon(\n 'ExclamationOctagonFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconExclamationSquare = /*#__PURE__*/ makeIcon(\n 'ExclamationSquare',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconExclamationSquareFill = /*#__PURE__*/ makeIcon(\n 'ExclamationSquareFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconExclamationTriangle = /*#__PURE__*/ makeIcon(\n 'ExclamationTriangle',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconExclamationTriangleFill = /*#__PURE__*/ makeIcon(\n 'ExclamationTriangleFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconExclude = /*#__PURE__*/ makeIcon(\n 'Exclude',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconEye = /*#__PURE__*/ makeIcon(\n 'Eye',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconEyeFill = /*#__PURE__*/ makeIcon(\n 'EyeFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconEyeSlash = /*#__PURE__*/ makeIcon(\n 'EyeSlash',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconEyeSlashFill = /*#__PURE__*/ makeIcon(\n 'EyeSlashFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconEyedropper = /*#__PURE__*/ makeIcon(\n 'Eyedropper',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconEyeglasses = /*#__PURE__*/ makeIcon(\n 'Eyeglasses',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFacebook = /*#__PURE__*/ makeIcon(\n 'Facebook',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFile = /*#__PURE__*/ makeIcon(\n 'File',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileArrowDown = /*#__PURE__*/ makeIcon(\n 'FileArrowDown',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileArrowDownFill = /*#__PURE__*/ makeIcon(\n 'FileArrowDownFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileArrowUp = /*#__PURE__*/ makeIcon(\n 'FileArrowUp',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileArrowUpFill = /*#__PURE__*/ makeIcon(\n 'FileArrowUpFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileBarGraph = /*#__PURE__*/ makeIcon(\n 'FileBarGraph',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileBarGraphFill = /*#__PURE__*/ makeIcon(\n 'FileBarGraphFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileBinary = /*#__PURE__*/ makeIcon(\n 'FileBinary',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileBinaryFill = /*#__PURE__*/ makeIcon(\n 'FileBinaryFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileBreak = /*#__PURE__*/ makeIcon(\n 'FileBreak',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileBreakFill = /*#__PURE__*/ makeIcon(\n 'FileBreakFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileCheck = /*#__PURE__*/ makeIcon(\n 'FileCheck',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileCheckFill = /*#__PURE__*/ makeIcon(\n 'FileCheckFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileCode = /*#__PURE__*/ makeIcon(\n 'FileCode',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileCodeFill = /*#__PURE__*/ makeIcon(\n 'FileCodeFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileDiff = /*#__PURE__*/ makeIcon(\n 'FileDiff',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileDiffFill = /*#__PURE__*/ makeIcon(\n 'FileDiffFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileEarmark = /*#__PURE__*/ makeIcon(\n 'FileEarmark',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileEarmarkArrowDown = /*#__PURE__*/ makeIcon(\n 'FileEarmarkArrowDown',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileEarmarkArrowDownFill = /*#__PURE__*/ makeIcon(\n 'FileEarmarkArrowDownFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileEarmarkArrowUp = /*#__PURE__*/ makeIcon(\n 'FileEarmarkArrowUp',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileEarmarkArrowUpFill = /*#__PURE__*/ makeIcon(\n 'FileEarmarkArrowUpFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileEarmarkBarGraph = /*#__PURE__*/ makeIcon(\n 'FileEarmarkBarGraph',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileEarmarkBarGraphFill = /*#__PURE__*/ makeIcon(\n 'FileEarmarkBarGraphFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileEarmarkBinary = /*#__PURE__*/ makeIcon(\n 'FileEarmarkBinary',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileEarmarkBinaryFill = /*#__PURE__*/ makeIcon(\n 'FileEarmarkBinaryFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileEarmarkBreak = /*#__PURE__*/ makeIcon(\n 'FileEarmarkBreak',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileEarmarkBreakFill = /*#__PURE__*/ makeIcon(\n 'FileEarmarkBreakFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileEarmarkCheck = /*#__PURE__*/ makeIcon(\n 'FileEarmarkCheck',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileEarmarkCheckFill = /*#__PURE__*/ makeIcon(\n 'FileEarmarkCheckFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileEarmarkCode = /*#__PURE__*/ makeIcon(\n 'FileEarmarkCode',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileEarmarkCodeFill = /*#__PURE__*/ makeIcon(\n 'FileEarmarkCodeFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileEarmarkDiff = /*#__PURE__*/ makeIcon(\n 'FileEarmarkDiff',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileEarmarkDiffFill = /*#__PURE__*/ makeIcon(\n 'FileEarmarkDiffFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileEarmarkEasel = /*#__PURE__*/ makeIcon(\n 'FileEarmarkEasel',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileEarmarkEaselFill = /*#__PURE__*/ makeIcon(\n 'FileEarmarkEaselFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileEarmarkExcel = /*#__PURE__*/ makeIcon(\n 'FileEarmarkExcel',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileEarmarkExcelFill = /*#__PURE__*/ makeIcon(\n 'FileEarmarkExcelFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileEarmarkFill = /*#__PURE__*/ makeIcon(\n 'FileEarmarkFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileEarmarkFont = /*#__PURE__*/ makeIcon(\n 'FileEarmarkFont',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileEarmarkFontFill = /*#__PURE__*/ makeIcon(\n 'FileEarmarkFontFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileEarmarkImage = /*#__PURE__*/ makeIcon(\n 'FileEarmarkImage',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileEarmarkImageFill = /*#__PURE__*/ makeIcon(\n 'FileEarmarkImageFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileEarmarkLock = /*#__PURE__*/ makeIcon(\n 'FileEarmarkLock',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileEarmarkLock2 = /*#__PURE__*/ makeIcon(\n 'FileEarmarkLock2',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileEarmarkLock2Fill = /*#__PURE__*/ makeIcon(\n 'FileEarmarkLock2Fill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileEarmarkLockFill = /*#__PURE__*/ makeIcon(\n 'FileEarmarkLockFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileEarmarkMedical = /*#__PURE__*/ makeIcon(\n 'FileEarmarkMedical',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileEarmarkMedicalFill = /*#__PURE__*/ makeIcon(\n 'FileEarmarkMedicalFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileEarmarkMinus = /*#__PURE__*/ makeIcon(\n 'FileEarmarkMinus',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileEarmarkMinusFill = /*#__PURE__*/ makeIcon(\n 'FileEarmarkMinusFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileEarmarkMusic = /*#__PURE__*/ makeIcon(\n 'FileEarmarkMusic',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileEarmarkMusicFill = /*#__PURE__*/ makeIcon(\n 'FileEarmarkMusicFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileEarmarkPdf = /*#__PURE__*/ makeIcon(\n 'FileEarmarkPdf',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileEarmarkPdfFill = /*#__PURE__*/ makeIcon(\n 'FileEarmarkPdfFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileEarmarkPerson = /*#__PURE__*/ makeIcon(\n 'FileEarmarkPerson',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileEarmarkPersonFill = /*#__PURE__*/ makeIcon(\n 'FileEarmarkPersonFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileEarmarkPlay = /*#__PURE__*/ makeIcon(\n 'FileEarmarkPlay',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileEarmarkPlayFill = /*#__PURE__*/ makeIcon(\n 'FileEarmarkPlayFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileEarmarkPlus = /*#__PURE__*/ makeIcon(\n 'FileEarmarkPlus',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileEarmarkPlusFill = /*#__PURE__*/ makeIcon(\n 'FileEarmarkPlusFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileEarmarkPost = /*#__PURE__*/ makeIcon(\n 'FileEarmarkPost',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileEarmarkPostFill = /*#__PURE__*/ makeIcon(\n 'FileEarmarkPostFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileEarmarkPpt = /*#__PURE__*/ makeIcon(\n 'FileEarmarkPpt',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileEarmarkPptFill = /*#__PURE__*/ makeIcon(\n 'FileEarmarkPptFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileEarmarkRichtext = /*#__PURE__*/ makeIcon(\n 'FileEarmarkRichtext',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileEarmarkRichtextFill = /*#__PURE__*/ makeIcon(\n 'FileEarmarkRichtextFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileEarmarkRuled = /*#__PURE__*/ makeIcon(\n 'FileEarmarkRuled',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileEarmarkRuledFill = /*#__PURE__*/ makeIcon(\n 'FileEarmarkRuledFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileEarmarkSlides = /*#__PURE__*/ makeIcon(\n 'FileEarmarkSlides',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileEarmarkSlidesFill = /*#__PURE__*/ makeIcon(\n 'FileEarmarkSlidesFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileEarmarkSpreadsheet = /*#__PURE__*/ makeIcon(\n 'FileEarmarkSpreadsheet',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileEarmarkSpreadsheetFill = /*#__PURE__*/ makeIcon(\n 'FileEarmarkSpreadsheetFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileEarmarkText = /*#__PURE__*/ makeIcon(\n 'FileEarmarkText',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileEarmarkTextFill = /*#__PURE__*/ makeIcon(\n 'FileEarmarkTextFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileEarmarkWord = /*#__PURE__*/ makeIcon(\n 'FileEarmarkWord',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileEarmarkWordFill = /*#__PURE__*/ makeIcon(\n 'FileEarmarkWordFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileEarmarkX = /*#__PURE__*/ makeIcon(\n 'FileEarmarkX',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileEarmarkXFill = /*#__PURE__*/ makeIcon(\n 'FileEarmarkXFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileEarmarkZip = /*#__PURE__*/ makeIcon(\n 'FileEarmarkZip',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileEarmarkZipFill = /*#__PURE__*/ makeIcon(\n 'FileEarmarkZipFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileEasel = /*#__PURE__*/ makeIcon(\n 'FileEasel',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileEaselFill = /*#__PURE__*/ makeIcon(\n 'FileEaselFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileExcel = /*#__PURE__*/ makeIcon(\n 'FileExcel',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileExcelFill = /*#__PURE__*/ makeIcon(\n 'FileExcelFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileFill = /*#__PURE__*/ makeIcon(\n 'FileFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileFont = /*#__PURE__*/ makeIcon(\n 'FileFont',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileFontFill = /*#__PURE__*/ makeIcon(\n 'FileFontFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileImage = /*#__PURE__*/ makeIcon(\n 'FileImage',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileImageFill = /*#__PURE__*/ makeIcon(\n 'FileImageFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileLock = /*#__PURE__*/ makeIcon(\n 'FileLock',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileLock2 = /*#__PURE__*/ makeIcon(\n 'FileLock2',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileLock2Fill = /*#__PURE__*/ makeIcon(\n 'FileLock2Fill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileLockFill = /*#__PURE__*/ makeIcon(\n 'FileLockFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileMedical = /*#__PURE__*/ makeIcon(\n 'FileMedical',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileMedicalFill = /*#__PURE__*/ makeIcon(\n 'FileMedicalFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileMinus = /*#__PURE__*/ makeIcon(\n 'FileMinus',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileMinusFill = /*#__PURE__*/ makeIcon(\n 'FileMinusFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileMusic = /*#__PURE__*/ makeIcon(\n 'FileMusic',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileMusicFill = /*#__PURE__*/ makeIcon(\n 'FileMusicFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFilePdf = /*#__PURE__*/ makeIcon(\n 'FilePdf',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFilePdfFill = /*#__PURE__*/ makeIcon(\n 'FilePdfFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFilePerson = /*#__PURE__*/ makeIcon(\n 'FilePerson',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFilePersonFill = /*#__PURE__*/ makeIcon(\n 'FilePersonFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFilePlay = /*#__PURE__*/ makeIcon(\n 'FilePlay',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFilePlayFill = /*#__PURE__*/ makeIcon(\n 'FilePlayFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFilePlus = /*#__PURE__*/ makeIcon(\n 'FilePlus',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFilePlusFill = /*#__PURE__*/ makeIcon(\n 'FilePlusFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFilePost = /*#__PURE__*/ makeIcon(\n 'FilePost',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFilePostFill = /*#__PURE__*/ makeIcon(\n 'FilePostFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFilePpt = /*#__PURE__*/ makeIcon(\n 'FilePpt',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFilePptFill = /*#__PURE__*/ makeIcon(\n 'FilePptFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileRichtext = /*#__PURE__*/ makeIcon(\n 'FileRichtext',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileRichtextFill = /*#__PURE__*/ makeIcon(\n 'FileRichtextFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileRuled = /*#__PURE__*/ makeIcon(\n 'FileRuled',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileRuledFill = /*#__PURE__*/ makeIcon(\n 'FileRuledFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileSlides = /*#__PURE__*/ makeIcon(\n 'FileSlides',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileSlidesFill = /*#__PURE__*/ makeIcon(\n 'FileSlidesFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileSpreadsheet = /*#__PURE__*/ makeIcon(\n 'FileSpreadsheet',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileSpreadsheetFill = /*#__PURE__*/ makeIcon(\n 'FileSpreadsheetFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileText = /*#__PURE__*/ makeIcon(\n 'FileText',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileTextFill = /*#__PURE__*/ makeIcon(\n 'FileTextFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileWord = /*#__PURE__*/ makeIcon(\n 'FileWord',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileWordFill = /*#__PURE__*/ makeIcon(\n 'FileWordFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileX = /*#__PURE__*/ makeIcon(\n 'FileX',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileXFill = /*#__PURE__*/ makeIcon(\n 'FileXFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileZip = /*#__PURE__*/ makeIcon(\n 'FileZip',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFileZipFill = /*#__PURE__*/ makeIcon(\n 'FileZipFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFiles = /*#__PURE__*/ makeIcon(\n 'Files',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFilesAlt = /*#__PURE__*/ makeIcon(\n 'FilesAlt',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFilm = /*#__PURE__*/ makeIcon(\n 'Film',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFilter = /*#__PURE__*/ makeIcon(\n 'Filter',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFilterCircle = /*#__PURE__*/ makeIcon(\n 'FilterCircle',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFilterCircleFill = /*#__PURE__*/ makeIcon(\n 'FilterCircleFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFilterLeft = /*#__PURE__*/ makeIcon(\n 'FilterLeft',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFilterRight = /*#__PURE__*/ makeIcon(\n 'FilterRight',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFilterSquare = /*#__PURE__*/ makeIcon(\n 'FilterSquare',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFilterSquareFill = /*#__PURE__*/ makeIcon(\n 'FilterSquareFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFlag = /*#__PURE__*/ makeIcon(\n 'Flag',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFlagFill = /*#__PURE__*/ makeIcon(\n 'FlagFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFlower1 = /*#__PURE__*/ makeIcon(\n 'Flower1',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFlower2 = /*#__PURE__*/ makeIcon(\n 'Flower2',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFlower3 = /*#__PURE__*/ makeIcon(\n 'Flower3',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFolder = /*#__PURE__*/ makeIcon(\n 'Folder',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFolder2 = /*#__PURE__*/ makeIcon(\n 'Folder2',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFolder2Open = /*#__PURE__*/ makeIcon(\n 'Folder2Open',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFolderCheck = /*#__PURE__*/ makeIcon(\n 'FolderCheck',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFolderFill = /*#__PURE__*/ makeIcon(\n 'FolderFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFolderMinus = /*#__PURE__*/ makeIcon(\n 'FolderMinus',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFolderPlus = /*#__PURE__*/ makeIcon(\n 'FolderPlus',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFolderSymlink = /*#__PURE__*/ makeIcon(\n 'FolderSymlink',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFolderSymlinkFill = /*#__PURE__*/ makeIcon(\n 'FolderSymlinkFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFolderX = /*#__PURE__*/ makeIcon(\n 'FolderX',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFonts = /*#__PURE__*/ makeIcon(\n 'Fonts',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconForward = /*#__PURE__*/ makeIcon(\n 'Forward',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconForwardFill = /*#__PURE__*/ makeIcon(\n 'ForwardFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFront = /*#__PURE__*/ makeIcon(\n 'Front',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFullscreen = /*#__PURE__*/ makeIcon(\n 'Fullscreen',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFullscreenExit = /*#__PURE__*/ makeIcon(\n 'FullscreenExit',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFunnel = /*#__PURE__*/ makeIcon(\n 'Funnel',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconFunnelFill = /*#__PURE__*/ makeIcon(\n 'FunnelFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconGear = /*#__PURE__*/ makeIcon(\n 'Gear',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconGearFill = /*#__PURE__*/ makeIcon(\n 'GearFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconGearWide = /*#__PURE__*/ makeIcon(\n 'GearWide',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconGearWideConnected = /*#__PURE__*/ makeIcon(\n 'GearWideConnected',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconGem = /*#__PURE__*/ makeIcon(\n 'Gem',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconGenderAmbiguous = /*#__PURE__*/ makeIcon(\n 'GenderAmbiguous',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconGenderFemale = /*#__PURE__*/ makeIcon(\n 'GenderFemale',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconGenderMale = /*#__PURE__*/ makeIcon(\n 'GenderMale',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconGenderTrans = /*#__PURE__*/ makeIcon(\n 'GenderTrans',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconGeo = /*#__PURE__*/ makeIcon(\n 'Geo',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconGeoAlt = /*#__PURE__*/ makeIcon(\n 'GeoAlt',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconGeoAltFill = /*#__PURE__*/ makeIcon(\n 'GeoAltFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconGeoFill = /*#__PURE__*/ makeIcon(\n 'GeoFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconGift = /*#__PURE__*/ makeIcon(\n 'Gift',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconGiftFill = /*#__PURE__*/ makeIcon(\n 'GiftFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconGithub = /*#__PURE__*/ makeIcon(\n 'Github',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconGlobe = /*#__PURE__*/ makeIcon(\n 'Globe',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconGlobe2 = /*#__PURE__*/ makeIcon(\n 'Globe2',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconGoogle = /*#__PURE__*/ makeIcon(\n 'Google',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconGraphDown = /*#__PURE__*/ makeIcon(\n 'GraphDown',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconGraphUp = /*#__PURE__*/ makeIcon(\n 'GraphUp',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconGrid = /*#__PURE__*/ makeIcon(\n 'Grid',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconGrid1x2 = /*#__PURE__*/ makeIcon(\n 'Grid1x2',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconGrid1x2Fill = /*#__PURE__*/ makeIcon(\n 'Grid1x2Fill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconGrid3x2 = /*#__PURE__*/ makeIcon(\n 'Grid3x2',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconGrid3x2Gap = /*#__PURE__*/ makeIcon(\n 'Grid3x2Gap',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconGrid3x2GapFill = /*#__PURE__*/ makeIcon(\n 'Grid3x2GapFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconGrid3x3 = /*#__PURE__*/ makeIcon(\n 'Grid3x3',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconGrid3x3Gap = /*#__PURE__*/ makeIcon(\n 'Grid3x3Gap',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconGrid3x3GapFill = /*#__PURE__*/ makeIcon(\n 'Grid3x3GapFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconGridFill = /*#__PURE__*/ makeIcon(\n 'GridFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconGripHorizontal = /*#__PURE__*/ makeIcon(\n 'GripHorizontal',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconGripVertical = /*#__PURE__*/ makeIcon(\n 'GripVertical',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconHammer = /*#__PURE__*/ makeIcon(\n 'Hammer',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconHandIndex = /*#__PURE__*/ makeIcon(\n 'HandIndex',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconHandIndexFill = /*#__PURE__*/ makeIcon(\n 'HandIndexFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconHandIndexThumb = /*#__PURE__*/ makeIcon(\n 'HandIndexThumb',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconHandIndexThumbFill = /*#__PURE__*/ makeIcon(\n 'HandIndexThumbFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconHandThumbsDown = /*#__PURE__*/ makeIcon(\n 'HandThumbsDown',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconHandThumbsDownFill = /*#__PURE__*/ makeIcon(\n 'HandThumbsDownFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconHandThumbsUp = /*#__PURE__*/ makeIcon(\n 'HandThumbsUp',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconHandThumbsUpFill = /*#__PURE__*/ makeIcon(\n 'HandThumbsUpFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconHandbag = /*#__PURE__*/ makeIcon(\n 'Handbag',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconHandbagFill = /*#__PURE__*/ makeIcon(\n 'HandbagFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconHash = /*#__PURE__*/ makeIcon(\n 'Hash',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconHdd = /*#__PURE__*/ makeIcon(\n 'Hdd',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconHddFill = /*#__PURE__*/ makeIcon(\n 'HddFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconHddNetwork = /*#__PURE__*/ makeIcon(\n 'HddNetwork',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconHddNetworkFill = /*#__PURE__*/ makeIcon(\n 'HddNetworkFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconHddRack = /*#__PURE__*/ makeIcon(\n 'HddRack',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconHddRackFill = /*#__PURE__*/ makeIcon(\n 'HddRackFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconHddStack = /*#__PURE__*/ makeIcon(\n 'HddStack',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconHddStackFill = /*#__PURE__*/ makeIcon(\n 'HddStackFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconHeadphones = /*#__PURE__*/ makeIcon(\n 'Headphones',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconHeadset = /*#__PURE__*/ makeIcon(\n 'Headset',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconHeadsetVr = /*#__PURE__*/ makeIcon(\n 'HeadsetVr',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconHeart = /*#__PURE__*/ makeIcon(\n 'Heart',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconHeartFill = /*#__PURE__*/ makeIcon(\n 'HeartFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconHeartHalf = /*#__PURE__*/ makeIcon(\n 'HeartHalf',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconHeptagon = /*#__PURE__*/ makeIcon(\n 'Heptagon',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconHeptagonFill = /*#__PURE__*/ makeIcon(\n 'HeptagonFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconHeptagonHalf = /*#__PURE__*/ makeIcon(\n 'HeptagonHalf',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconHexagon = /*#__PURE__*/ makeIcon(\n 'Hexagon',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconHexagonFill = /*#__PURE__*/ makeIcon(\n 'HexagonFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconHexagonHalf = /*#__PURE__*/ makeIcon(\n 'HexagonHalf',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconHourglass = /*#__PURE__*/ makeIcon(\n 'Hourglass',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconHourglassBottom = /*#__PURE__*/ makeIcon(\n 'HourglassBottom',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconHourglassSplit = /*#__PURE__*/ makeIcon(\n 'HourglassSplit',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconHourglassTop = /*#__PURE__*/ makeIcon(\n 'HourglassTop',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconHouse = /*#__PURE__*/ makeIcon(\n 'House',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconHouseDoor = /*#__PURE__*/ makeIcon(\n 'HouseDoor',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconHouseDoorFill = /*#__PURE__*/ makeIcon(\n 'HouseDoorFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconHouseFill = /*#__PURE__*/ makeIcon(\n 'HouseFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconHr = /*#__PURE__*/ makeIcon(\n 'Hr',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconHurricane = /*#__PURE__*/ makeIcon(\n 'Hurricane',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconImage = /*#__PURE__*/ makeIcon(\n 'Image',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconImageAlt = /*#__PURE__*/ makeIcon(\n 'ImageAlt',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconImageFill = /*#__PURE__*/ makeIcon(\n 'ImageFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconImages = /*#__PURE__*/ makeIcon(\n 'Images',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconInbox = /*#__PURE__*/ makeIcon(\n 'Inbox',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconInboxFill = /*#__PURE__*/ makeIcon(\n 'InboxFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconInboxes = /*#__PURE__*/ makeIcon(\n 'Inboxes',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconInboxesFill = /*#__PURE__*/ makeIcon(\n 'InboxesFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconInfo = /*#__PURE__*/ makeIcon(\n 'Info',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconInfoCircle = /*#__PURE__*/ makeIcon(\n 'InfoCircle',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconInfoCircleFill = /*#__PURE__*/ makeIcon(\n 'InfoCircleFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconInfoLg = /*#__PURE__*/ makeIcon(\n 'InfoLg',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconInfoSquare = /*#__PURE__*/ makeIcon(\n 'InfoSquare',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconInfoSquareFill = /*#__PURE__*/ makeIcon(\n 'InfoSquareFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconInputCursor = /*#__PURE__*/ makeIcon(\n 'InputCursor',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconInputCursorText = /*#__PURE__*/ makeIcon(\n 'InputCursorText',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconInstagram = /*#__PURE__*/ makeIcon(\n 'Instagram',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconIntersect = /*#__PURE__*/ makeIcon(\n 'Intersect',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconJournal = /*#__PURE__*/ makeIcon(\n 'Journal',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconJournalAlbum = /*#__PURE__*/ makeIcon(\n 'JournalAlbum',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconJournalArrowDown = /*#__PURE__*/ makeIcon(\n 'JournalArrowDown',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconJournalArrowUp = /*#__PURE__*/ makeIcon(\n 'JournalArrowUp',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconJournalBookmark = /*#__PURE__*/ makeIcon(\n 'JournalBookmark',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconJournalBookmarkFill = /*#__PURE__*/ makeIcon(\n 'JournalBookmarkFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconJournalCheck = /*#__PURE__*/ makeIcon(\n 'JournalCheck',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconJournalCode = /*#__PURE__*/ makeIcon(\n 'JournalCode',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconJournalMedical = /*#__PURE__*/ makeIcon(\n 'JournalMedical',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconJournalMinus = /*#__PURE__*/ makeIcon(\n 'JournalMinus',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconJournalPlus = /*#__PURE__*/ makeIcon(\n 'JournalPlus',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconJournalRichtext = /*#__PURE__*/ makeIcon(\n 'JournalRichtext',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconJournalText = /*#__PURE__*/ makeIcon(\n 'JournalText',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconJournalX = /*#__PURE__*/ makeIcon(\n 'JournalX',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconJournals = /*#__PURE__*/ makeIcon(\n 'Journals',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconJoystick = /*#__PURE__*/ makeIcon(\n 'Joystick',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconJustify = /*#__PURE__*/ makeIcon(\n 'Justify',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconJustifyLeft = /*#__PURE__*/ makeIcon(\n 'JustifyLeft',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconJustifyRight = /*#__PURE__*/ makeIcon(\n 'JustifyRight',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconKanban = /*#__PURE__*/ makeIcon(\n 'Kanban',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconKanbanFill = /*#__PURE__*/ makeIcon(\n 'KanbanFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconKey = /*#__PURE__*/ makeIcon(\n 'Key',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconKeyFill = /*#__PURE__*/ makeIcon(\n 'KeyFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconKeyboard = /*#__PURE__*/ makeIcon(\n 'Keyboard',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconKeyboardFill = /*#__PURE__*/ makeIcon(\n 'KeyboardFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconLadder = /*#__PURE__*/ makeIcon(\n 'Ladder',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconLamp = /*#__PURE__*/ makeIcon(\n 'Lamp',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconLampFill = /*#__PURE__*/ makeIcon(\n 'LampFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconLaptop = /*#__PURE__*/ makeIcon(\n 'Laptop',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconLaptopFill = /*#__PURE__*/ makeIcon(\n 'LaptopFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconLayerBackward = /*#__PURE__*/ makeIcon(\n 'LayerBackward',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconLayerForward = /*#__PURE__*/ makeIcon(\n 'LayerForward',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconLayers = /*#__PURE__*/ makeIcon(\n 'Layers',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconLayersFill = /*#__PURE__*/ makeIcon(\n 'LayersFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconLayersHalf = /*#__PURE__*/ makeIcon(\n 'LayersHalf',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconLayoutSidebar = /*#__PURE__*/ makeIcon(\n 'LayoutSidebar',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconLayoutSidebarInset = /*#__PURE__*/ makeIcon(\n 'LayoutSidebarInset',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconLayoutSidebarInsetReverse = /*#__PURE__*/ makeIcon(\n 'LayoutSidebarInsetReverse',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconLayoutSidebarReverse = /*#__PURE__*/ makeIcon(\n 'LayoutSidebarReverse',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconLayoutSplit = /*#__PURE__*/ makeIcon(\n 'LayoutSplit',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconLayoutTextSidebar = /*#__PURE__*/ makeIcon(\n 'LayoutTextSidebar',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconLayoutTextSidebarReverse = /*#__PURE__*/ makeIcon(\n 'LayoutTextSidebarReverse',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconLayoutTextWindow = /*#__PURE__*/ makeIcon(\n 'LayoutTextWindow',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconLayoutTextWindowReverse = /*#__PURE__*/ makeIcon(\n 'LayoutTextWindowReverse',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconLayoutThreeColumns = /*#__PURE__*/ makeIcon(\n 'LayoutThreeColumns',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconLayoutWtf = /*#__PURE__*/ makeIcon(\n 'LayoutWtf',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconLifePreserver = /*#__PURE__*/ makeIcon(\n 'LifePreserver',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconLightbulb = /*#__PURE__*/ makeIcon(\n 'Lightbulb',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconLightbulbFill = /*#__PURE__*/ makeIcon(\n 'LightbulbFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconLightbulbOff = /*#__PURE__*/ makeIcon(\n 'LightbulbOff',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconLightbulbOffFill = /*#__PURE__*/ makeIcon(\n 'LightbulbOffFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconLightning = /*#__PURE__*/ makeIcon(\n 'Lightning',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconLightningCharge = /*#__PURE__*/ makeIcon(\n 'LightningCharge',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconLightningChargeFill = /*#__PURE__*/ makeIcon(\n 'LightningChargeFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconLightningFill = /*#__PURE__*/ makeIcon(\n 'LightningFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconLink = /*#__PURE__*/ makeIcon(\n 'Link',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconLink45deg = /*#__PURE__*/ makeIcon(\n 'Link45deg',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconLinkedin = /*#__PURE__*/ makeIcon(\n 'Linkedin',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconList = /*#__PURE__*/ makeIcon(\n 'List',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconListCheck = /*#__PURE__*/ makeIcon(\n 'ListCheck',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconListNested = /*#__PURE__*/ makeIcon(\n 'ListNested',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconListOl = /*#__PURE__*/ makeIcon(\n 'ListOl',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconListStars = /*#__PURE__*/ makeIcon(\n 'ListStars',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconListTask = /*#__PURE__*/ makeIcon(\n 'ListTask',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconListUl = /*#__PURE__*/ makeIcon(\n 'ListUl',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconLock = /*#__PURE__*/ makeIcon(\n 'Lock',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconLockFill = /*#__PURE__*/ makeIcon(\n 'LockFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconMailbox = /*#__PURE__*/ makeIcon(\n 'Mailbox',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconMailbox2 = /*#__PURE__*/ makeIcon(\n 'Mailbox2',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconMap = /*#__PURE__*/ makeIcon(\n 'Map',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconMapFill = /*#__PURE__*/ makeIcon(\n 'MapFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconMarkdown = /*#__PURE__*/ makeIcon(\n 'Markdown',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconMarkdownFill = /*#__PURE__*/ makeIcon(\n 'MarkdownFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconMask = /*#__PURE__*/ makeIcon(\n 'Mask',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconMastodon = /*#__PURE__*/ makeIcon(\n 'Mastodon',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconMegaphone = /*#__PURE__*/ makeIcon(\n 'Megaphone',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconMegaphoneFill = /*#__PURE__*/ makeIcon(\n 'MegaphoneFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconMenuApp = /*#__PURE__*/ makeIcon(\n 'MenuApp',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconMenuAppFill = /*#__PURE__*/ makeIcon(\n 'MenuAppFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconMenuButton = /*#__PURE__*/ makeIcon(\n 'MenuButton',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconMenuButtonFill = /*#__PURE__*/ makeIcon(\n 'MenuButtonFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconMenuButtonWide = /*#__PURE__*/ makeIcon(\n 'MenuButtonWide',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconMenuButtonWideFill = /*#__PURE__*/ makeIcon(\n 'MenuButtonWideFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconMenuDown = /*#__PURE__*/ makeIcon(\n 'MenuDown',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconMenuUp = /*#__PURE__*/ makeIcon(\n 'MenuUp',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconMessenger = /*#__PURE__*/ makeIcon(\n 'Messenger',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconMic = /*#__PURE__*/ makeIcon(\n 'Mic',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconMicFill = /*#__PURE__*/ makeIcon(\n 'MicFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconMicMute = /*#__PURE__*/ makeIcon(\n 'MicMute',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconMicMuteFill = /*#__PURE__*/ makeIcon(\n 'MicMuteFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconMinecart = /*#__PURE__*/ makeIcon(\n 'Minecart',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconMinecartLoaded = /*#__PURE__*/ makeIcon(\n 'MinecartLoaded',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconMoisture = /*#__PURE__*/ makeIcon(\n 'Moisture',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconMoon = /*#__PURE__*/ makeIcon(\n 'Moon',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconMoonFill = /*#__PURE__*/ makeIcon(\n 'MoonFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconMoonStars = /*#__PURE__*/ makeIcon(\n 'MoonStars',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconMoonStarsFill = /*#__PURE__*/ makeIcon(\n 'MoonStarsFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconMouse = /*#__PURE__*/ makeIcon(\n 'Mouse',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconMouse2 = /*#__PURE__*/ makeIcon(\n 'Mouse2',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconMouse2Fill = /*#__PURE__*/ makeIcon(\n 'Mouse2Fill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconMouse3 = /*#__PURE__*/ makeIcon(\n 'Mouse3',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconMouse3Fill = /*#__PURE__*/ makeIcon(\n 'Mouse3Fill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconMouseFill = /*#__PURE__*/ makeIcon(\n 'MouseFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconMusicNote = /*#__PURE__*/ makeIcon(\n 'MusicNote',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconMusicNoteBeamed = /*#__PURE__*/ makeIcon(\n 'MusicNoteBeamed',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconMusicNoteList = /*#__PURE__*/ makeIcon(\n 'MusicNoteList',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconMusicPlayer = /*#__PURE__*/ makeIcon(\n 'MusicPlayer',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconMusicPlayerFill = /*#__PURE__*/ makeIcon(\n 'MusicPlayerFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconNewspaper = /*#__PURE__*/ makeIcon(\n 'Newspaper',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconNodeMinus = /*#__PURE__*/ makeIcon(\n 'NodeMinus',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconNodeMinusFill = /*#__PURE__*/ makeIcon(\n 'NodeMinusFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconNodePlus = /*#__PURE__*/ makeIcon(\n 'NodePlus',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconNodePlusFill = /*#__PURE__*/ makeIcon(\n 'NodePlusFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconNut = /*#__PURE__*/ makeIcon(\n 'Nut',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconNutFill = /*#__PURE__*/ makeIcon(\n 'NutFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconOctagon = /*#__PURE__*/ makeIcon(\n 'Octagon',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconOctagonFill = /*#__PURE__*/ makeIcon(\n 'OctagonFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconOctagonHalf = /*#__PURE__*/ makeIcon(\n 'OctagonHalf',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconOption = /*#__PURE__*/ makeIcon(\n 'Option',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconOutlet = /*#__PURE__*/ makeIcon(\n 'Outlet',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPaintBucket = /*#__PURE__*/ makeIcon(\n 'PaintBucket',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPalette = /*#__PURE__*/ makeIcon(\n 'Palette',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPalette2 = /*#__PURE__*/ makeIcon(\n 'Palette2',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPaletteFill = /*#__PURE__*/ makeIcon(\n 'PaletteFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPaperclip = /*#__PURE__*/ makeIcon(\n 'Paperclip',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconParagraph = /*#__PURE__*/ makeIcon(\n 'Paragraph',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPatchCheck = /*#__PURE__*/ makeIcon(\n 'PatchCheck',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPatchCheckFill = /*#__PURE__*/ makeIcon(\n 'PatchCheckFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPatchExclamation = /*#__PURE__*/ makeIcon(\n 'PatchExclamation',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPatchExclamationFill = /*#__PURE__*/ makeIcon(\n 'PatchExclamationFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPatchMinus = /*#__PURE__*/ makeIcon(\n 'PatchMinus',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPatchMinusFill = /*#__PURE__*/ makeIcon(\n 'PatchMinusFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPatchPlus = /*#__PURE__*/ makeIcon(\n 'PatchPlus',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPatchPlusFill = /*#__PURE__*/ makeIcon(\n 'PatchPlusFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPatchQuestion = /*#__PURE__*/ makeIcon(\n 'PatchQuestion',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPatchQuestionFill = /*#__PURE__*/ makeIcon(\n 'PatchQuestionFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPause = /*#__PURE__*/ makeIcon(\n 'Pause',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPauseBtn = /*#__PURE__*/ makeIcon(\n 'PauseBtn',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPauseBtnFill = /*#__PURE__*/ makeIcon(\n 'PauseBtnFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPauseCircle = /*#__PURE__*/ makeIcon(\n 'PauseCircle',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPauseCircleFill = /*#__PURE__*/ makeIcon(\n 'PauseCircleFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPauseFill = /*#__PURE__*/ makeIcon(\n 'PauseFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPeace = /*#__PURE__*/ makeIcon(\n 'Peace',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPeaceFill = /*#__PURE__*/ makeIcon(\n 'PeaceFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPen = /*#__PURE__*/ makeIcon(\n 'Pen',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPenFill = /*#__PURE__*/ makeIcon(\n 'PenFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPencil = /*#__PURE__*/ makeIcon(\n 'Pencil',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPencilFill = /*#__PURE__*/ makeIcon(\n 'PencilFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPencilSquare = /*#__PURE__*/ makeIcon(\n 'PencilSquare',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPentagon = /*#__PURE__*/ makeIcon(\n 'Pentagon',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPentagonFill = /*#__PURE__*/ makeIcon(\n 'PentagonFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPentagonHalf = /*#__PURE__*/ makeIcon(\n 'PentagonHalf',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPeople = /*#__PURE__*/ makeIcon(\n 'People',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPeopleFill = /*#__PURE__*/ makeIcon(\n 'PeopleFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPercent = /*#__PURE__*/ makeIcon(\n 'Percent',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPerson = /*#__PURE__*/ makeIcon(\n 'Person',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPersonBadge = /*#__PURE__*/ makeIcon(\n 'PersonBadge',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPersonBadgeFill = /*#__PURE__*/ makeIcon(\n 'PersonBadgeFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPersonBoundingBox = /*#__PURE__*/ makeIcon(\n 'PersonBoundingBox',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPersonCheck = /*#__PURE__*/ makeIcon(\n 'PersonCheck',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPersonCheckFill = /*#__PURE__*/ makeIcon(\n 'PersonCheckFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPersonCircle = /*#__PURE__*/ makeIcon(\n 'PersonCircle',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPersonDash = /*#__PURE__*/ makeIcon(\n 'PersonDash',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPersonDashFill = /*#__PURE__*/ makeIcon(\n 'PersonDashFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPersonFill = /*#__PURE__*/ makeIcon(\n 'PersonFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPersonLinesFill = /*#__PURE__*/ makeIcon(\n 'PersonLinesFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPersonPlus = /*#__PURE__*/ makeIcon(\n 'PersonPlus',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPersonPlusFill = /*#__PURE__*/ makeIcon(\n 'PersonPlusFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPersonSquare = /*#__PURE__*/ makeIcon(\n 'PersonSquare',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPersonX = /*#__PURE__*/ makeIcon(\n 'PersonX',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPersonXFill = /*#__PURE__*/ makeIcon(\n 'PersonXFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPhone = /*#__PURE__*/ makeIcon(\n 'Phone',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPhoneFill = /*#__PURE__*/ makeIcon(\n 'PhoneFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPhoneLandscape = /*#__PURE__*/ makeIcon(\n 'PhoneLandscape',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPhoneLandscapeFill = /*#__PURE__*/ makeIcon(\n 'PhoneLandscapeFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPhoneVibrate = /*#__PURE__*/ makeIcon(\n 'PhoneVibrate',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPhoneVibrateFill = /*#__PURE__*/ makeIcon(\n 'PhoneVibrateFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPieChart = /*#__PURE__*/ makeIcon(\n 'PieChart',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPieChartFill = /*#__PURE__*/ makeIcon(\n 'PieChartFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPiggyBank = /*#__PURE__*/ makeIcon(\n 'PiggyBank',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPiggyBankFill = /*#__PURE__*/ makeIcon(\n 'PiggyBankFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPin = /*#__PURE__*/ makeIcon(\n 'Pin',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPinAngle = /*#__PURE__*/ makeIcon(\n 'PinAngle',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPinAngleFill = /*#__PURE__*/ makeIcon(\n 'PinAngleFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPinFill = /*#__PURE__*/ makeIcon(\n 'PinFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPinMap = /*#__PURE__*/ makeIcon(\n 'PinMap',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPinMapFill = /*#__PURE__*/ makeIcon(\n 'PinMapFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPip = /*#__PURE__*/ makeIcon(\n 'Pip',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPipFill = /*#__PURE__*/ makeIcon(\n 'PipFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPlay = /*#__PURE__*/ makeIcon(\n 'Play',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPlayBtn = /*#__PURE__*/ makeIcon(\n 'PlayBtn',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPlayBtnFill = /*#__PURE__*/ makeIcon(\n 'PlayBtnFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPlayCircle = /*#__PURE__*/ makeIcon(\n 'PlayCircle',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPlayCircleFill = /*#__PURE__*/ makeIcon(\n 'PlayCircleFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPlayFill = /*#__PURE__*/ makeIcon(\n 'PlayFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPlug = /*#__PURE__*/ makeIcon(\n 'Plug',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPlugFill = /*#__PURE__*/ makeIcon(\n 'PlugFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPlus = /*#__PURE__*/ makeIcon(\n 'Plus',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPlusCircle = /*#__PURE__*/ makeIcon(\n 'PlusCircle',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPlusCircleDotted = /*#__PURE__*/ makeIcon(\n 'PlusCircleDotted',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPlusCircleFill = /*#__PURE__*/ makeIcon(\n 'PlusCircleFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPlusLg = /*#__PURE__*/ makeIcon(\n 'PlusLg',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPlusSquare = /*#__PURE__*/ makeIcon(\n 'PlusSquare',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPlusSquareDotted = /*#__PURE__*/ makeIcon(\n 'PlusSquareDotted',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPlusSquareFill = /*#__PURE__*/ makeIcon(\n 'PlusSquareFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPower = /*#__PURE__*/ makeIcon(\n 'Power',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPrinter = /*#__PURE__*/ makeIcon(\n 'Printer',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPrinterFill = /*#__PURE__*/ makeIcon(\n 'PrinterFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPuzzle = /*#__PURE__*/ makeIcon(\n 'Puzzle',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconPuzzleFill = /*#__PURE__*/ makeIcon(\n 'PuzzleFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconQuestion = /*#__PURE__*/ makeIcon(\n 'Question',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconQuestionCircle = /*#__PURE__*/ makeIcon(\n 'QuestionCircle',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconQuestionCircleFill = /*#__PURE__*/ makeIcon(\n 'QuestionCircleFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconQuestionDiamond = /*#__PURE__*/ makeIcon(\n 'QuestionDiamond',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconQuestionDiamondFill = /*#__PURE__*/ makeIcon(\n 'QuestionDiamondFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconQuestionLg = /*#__PURE__*/ makeIcon(\n 'QuestionLg',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconQuestionOctagon = /*#__PURE__*/ makeIcon(\n 'QuestionOctagon',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconQuestionOctagonFill = /*#__PURE__*/ makeIcon(\n 'QuestionOctagonFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconQuestionSquare = /*#__PURE__*/ makeIcon(\n 'QuestionSquare',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconQuestionSquareFill = /*#__PURE__*/ makeIcon(\n 'QuestionSquareFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconRainbow = /*#__PURE__*/ makeIcon(\n 'Rainbow',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconReceipt = /*#__PURE__*/ makeIcon(\n 'Receipt',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconReceiptCutoff = /*#__PURE__*/ makeIcon(\n 'ReceiptCutoff',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconReception0 = /*#__PURE__*/ makeIcon(\n 'Reception0',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconReception1 = /*#__PURE__*/ makeIcon(\n 'Reception1',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconReception2 = /*#__PURE__*/ makeIcon(\n 'Reception2',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconReception3 = /*#__PURE__*/ makeIcon(\n 'Reception3',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconReception4 = /*#__PURE__*/ makeIcon(\n 'Reception4',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconRecord = /*#__PURE__*/ makeIcon(\n 'Record',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconRecord2 = /*#__PURE__*/ makeIcon(\n 'Record2',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconRecord2Fill = /*#__PURE__*/ makeIcon(\n 'Record2Fill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconRecordBtn = /*#__PURE__*/ makeIcon(\n 'RecordBtn',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconRecordBtnFill = /*#__PURE__*/ makeIcon(\n 'RecordBtnFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconRecordCircle = /*#__PURE__*/ makeIcon(\n 'RecordCircle',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconRecordCircleFill = /*#__PURE__*/ makeIcon(\n 'RecordCircleFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconRecordFill = /*#__PURE__*/ makeIcon(\n 'RecordFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconRecycle = /*#__PURE__*/ makeIcon(\n 'Recycle',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconReddit = /*#__PURE__*/ makeIcon(\n 'Reddit',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconReply = /*#__PURE__*/ makeIcon(\n 'Reply',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconReplyAll = /*#__PURE__*/ makeIcon(\n 'ReplyAll',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconReplyAllFill = /*#__PURE__*/ makeIcon(\n 'ReplyAllFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconReplyFill = /*#__PURE__*/ makeIcon(\n 'ReplyFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconRss = /*#__PURE__*/ makeIcon(\n 'Rss',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconRssFill = /*#__PURE__*/ makeIcon(\n 'RssFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconRulers = /*#__PURE__*/ makeIcon(\n 'Rulers',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSafe = /*#__PURE__*/ makeIcon(\n 'Safe',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSafe2 = /*#__PURE__*/ makeIcon(\n 'Safe2',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSafe2Fill = /*#__PURE__*/ makeIcon(\n 'Safe2Fill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSafeFill = /*#__PURE__*/ makeIcon(\n 'SafeFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSave = /*#__PURE__*/ makeIcon(\n 'Save',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSave2 = /*#__PURE__*/ makeIcon(\n 'Save2',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSave2Fill = /*#__PURE__*/ makeIcon(\n 'Save2Fill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSaveFill = /*#__PURE__*/ makeIcon(\n 'SaveFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconScissors = /*#__PURE__*/ makeIcon(\n 'Scissors',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconScrewdriver = /*#__PURE__*/ makeIcon(\n 'Screwdriver',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSdCard = /*#__PURE__*/ makeIcon(\n 'SdCard',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSdCardFill = /*#__PURE__*/ makeIcon(\n 'SdCardFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSearch = /*#__PURE__*/ makeIcon(\n 'Search',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSegmentedNav = /*#__PURE__*/ makeIcon(\n 'SegmentedNav',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconServer = /*#__PURE__*/ makeIcon(\n 'Server',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconShare = /*#__PURE__*/ makeIcon(\n 'Share',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconShareFill = /*#__PURE__*/ makeIcon(\n 'ShareFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconShield = /*#__PURE__*/ makeIcon(\n 'Shield',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconShieldCheck = /*#__PURE__*/ makeIcon(\n 'ShieldCheck',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconShieldExclamation = /*#__PURE__*/ makeIcon(\n 'ShieldExclamation',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconShieldFill = /*#__PURE__*/ makeIcon(\n 'ShieldFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconShieldFillCheck = /*#__PURE__*/ makeIcon(\n 'ShieldFillCheck',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconShieldFillExclamation = /*#__PURE__*/ makeIcon(\n 'ShieldFillExclamation',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconShieldFillMinus = /*#__PURE__*/ makeIcon(\n 'ShieldFillMinus',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconShieldFillPlus = /*#__PURE__*/ makeIcon(\n 'ShieldFillPlus',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconShieldFillX = /*#__PURE__*/ makeIcon(\n 'ShieldFillX',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconShieldLock = /*#__PURE__*/ makeIcon(\n 'ShieldLock',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconShieldLockFill = /*#__PURE__*/ makeIcon(\n 'ShieldLockFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconShieldMinus = /*#__PURE__*/ makeIcon(\n 'ShieldMinus',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconShieldPlus = /*#__PURE__*/ makeIcon(\n 'ShieldPlus',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconShieldShaded = /*#__PURE__*/ makeIcon(\n 'ShieldShaded',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconShieldSlash = /*#__PURE__*/ makeIcon(\n 'ShieldSlash',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconShieldSlashFill = /*#__PURE__*/ makeIcon(\n 'ShieldSlashFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconShieldX = /*#__PURE__*/ makeIcon(\n 'ShieldX',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconShift = /*#__PURE__*/ makeIcon(\n 'Shift',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconShiftFill = /*#__PURE__*/ makeIcon(\n 'ShiftFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconShop = /*#__PURE__*/ makeIcon(\n 'Shop',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconShopWindow = /*#__PURE__*/ makeIcon(\n 'ShopWindow',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconShuffle = /*#__PURE__*/ makeIcon(\n 'Shuffle',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSignpost = /*#__PURE__*/ makeIcon(\n 'Signpost',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSignpost2 = /*#__PURE__*/ makeIcon(\n 'Signpost2',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSignpost2Fill = /*#__PURE__*/ makeIcon(\n 'Signpost2Fill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSignpostFill = /*#__PURE__*/ makeIcon(\n 'SignpostFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSignpostSplit = /*#__PURE__*/ makeIcon(\n 'SignpostSplit',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSignpostSplitFill = /*#__PURE__*/ makeIcon(\n 'SignpostSplitFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSim = /*#__PURE__*/ makeIcon(\n 'Sim',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSimFill = /*#__PURE__*/ makeIcon(\n 'SimFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSkipBackward = /*#__PURE__*/ makeIcon(\n 'SkipBackward',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSkipBackwardBtn = /*#__PURE__*/ makeIcon(\n 'SkipBackwardBtn',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSkipBackwardBtnFill = /*#__PURE__*/ makeIcon(\n 'SkipBackwardBtnFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSkipBackwardCircle = /*#__PURE__*/ makeIcon(\n 'SkipBackwardCircle',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSkipBackwardCircleFill = /*#__PURE__*/ makeIcon(\n 'SkipBackwardCircleFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSkipBackwardFill = /*#__PURE__*/ makeIcon(\n 'SkipBackwardFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSkipEnd = /*#__PURE__*/ makeIcon(\n 'SkipEnd',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSkipEndBtn = /*#__PURE__*/ makeIcon(\n 'SkipEndBtn',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSkipEndBtnFill = /*#__PURE__*/ makeIcon(\n 'SkipEndBtnFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSkipEndCircle = /*#__PURE__*/ makeIcon(\n 'SkipEndCircle',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSkipEndCircleFill = /*#__PURE__*/ makeIcon(\n 'SkipEndCircleFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSkipEndFill = /*#__PURE__*/ makeIcon(\n 'SkipEndFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSkipForward = /*#__PURE__*/ makeIcon(\n 'SkipForward',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSkipForwardBtn = /*#__PURE__*/ makeIcon(\n 'SkipForwardBtn',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSkipForwardBtnFill = /*#__PURE__*/ makeIcon(\n 'SkipForwardBtnFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSkipForwardCircle = /*#__PURE__*/ makeIcon(\n 'SkipForwardCircle',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSkipForwardCircleFill = /*#__PURE__*/ makeIcon(\n 'SkipForwardCircleFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSkipForwardFill = /*#__PURE__*/ makeIcon(\n 'SkipForwardFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSkipStart = /*#__PURE__*/ makeIcon(\n 'SkipStart',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSkipStartBtn = /*#__PURE__*/ makeIcon(\n 'SkipStartBtn',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSkipStartBtnFill = /*#__PURE__*/ makeIcon(\n 'SkipStartBtnFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSkipStartCircle = /*#__PURE__*/ makeIcon(\n 'SkipStartCircle',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSkipStartCircleFill = /*#__PURE__*/ makeIcon(\n 'SkipStartCircleFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSkipStartFill = /*#__PURE__*/ makeIcon(\n 'SkipStartFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSkype = /*#__PURE__*/ makeIcon(\n 'Skype',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSlack = /*#__PURE__*/ makeIcon(\n 'Slack',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSlash = /*#__PURE__*/ makeIcon(\n 'Slash',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSlashCircle = /*#__PURE__*/ makeIcon(\n 'SlashCircle',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSlashCircleFill = /*#__PURE__*/ makeIcon(\n 'SlashCircleFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSlashLg = /*#__PURE__*/ makeIcon(\n 'SlashLg',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSlashSquare = /*#__PURE__*/ makeIcon(\n 'SlashSquare',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSlashSquareFill = /*#__PURE__*/ makeIcon(\n 'SlashSquareFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSliders = /*#__PURE__*/ makeIcon(\n 'Sliders',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSmartwatch = /*#__PURE__*/ makeIcon(\n 'Smartwatch',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSnow = /*#__PURE__*/ makeIcon(\n 'Snow',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSnow2 = /*#__PURE__*/ makeIcon(\n 'Snow2',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSnow3 = /*#__PURE__*/ makeIcon(\n 'Snow3',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSortAlphaDown = /*#__PURE__*/ makeIcon(\n 'SortAlphaDown',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSortAlphaDownAlt = /*#__PURE__*/ makeIcon(\n 'SortAlphaDownAlt',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSortAlphaUp = /*#__PURE__*/ makeIcon(\n 'SortAlphaUp',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSortAlphaUpAlt = /*#__PURE__*/ makeIcon(\n 'SortAlphaUpAlt',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSortDown = /*#__PURE__*/ makeIcon(\n 'SortDown',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSortDownAlt = /*#__PURE__*/ makeIcon(\n 'SortDownAlt',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSortNumericDown = /*#__PURE__*/ makeIcon(\n 'SortNumericDown',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSortNumericDownAlt = /*#__PURE__*/ makeIcon(\n 'SortNumericDownAlt',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSortNumericUp = /*#__PURE__*/ makeIcon(\n 'SortNumericUp',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSortNumericUpAlt = /*#__PURE__*/ makeIcon(\n 'SortNumericUpAlt',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSortUp = /*#__PURE__*/ makeIcon(\n 'SortUp',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSortUpAlt = /*#__PURE__*/ makeIcon(\n 'SortUpAlt',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSoundwave = /*#__PURE__*/ makeIcon(\n 'Soundwave',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSpeaker = /*#__PURE__*/ makeIcon(\n 'Speaker',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSpeakerFill = /*#__PURE__*/ makeIcon(\n 'SpeakerFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSpeedometer = /*#__PURE__*/ makeIcon(\n 'Speedometer',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSpeedometer2 = /*#__PURE__*/ makeIcon(\n 'Speedometer2',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSpellcheck = /*#__PURE__*/ makeIcon(\n 'Spellcheck',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSquare = /*#__PURE__*/ makeIcon(\n 'Square',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSquareFill = /*#__PURE__*/ makeIcon(\n 'SquareFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSquareHalf = /*#__PURE__*/ makeIcon(\n 'SquareHalf',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconStack = /*#__PURE__*/ makeIcon(\n 'Stack',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconStar = /*#__PURE__*/ makeIcon(\n 'Star',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconStarFill = /*#__PURE__*/ makeIcon(\n 'StarFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconStarHalf = /*#__PURE__*/ makeIcon(\n 'StarHalf',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconStars = /*#__PURE__*/ makeIcon(\n 'Stars',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconStickies = /*#__PURE__*/ makeIcon(\n 'Stickies',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconStickiesFill = /*#__PURE__*/ makeIcon(\n 'StickiesFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSticky = /*#__PURE__*/ makeIcon(\n 'Sticky',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconStickyFill = /*#__PURE__*/ makeIcon(\n 'StickyFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconStop = /*#__PURE__*/ makeIcon(\n 'Stop',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconStopBtn = /*#__PURE__*/ makeIcon(\n 'StopBtn',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconStopBtnFill = /*#__PURE__*/ makeIcon(\n 'StopBtnFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconStopCircle = /*#__PURE__*/ makeIcon(\n 'StopCircle',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconStopCircleFill = /*#__PURE__*/ makeIcon(\n 'StopCircleFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconStopFill = /*#__PURE__*/ makeIcon(\n 'StopFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconStoplights = /*#__PURE__*/ makeIcon(\n 'Stoplights',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconStoplightsFill = /*#__PURE__*/ makeIcon(\n 'StoplightsFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconStopwatch = /*#__PURE__*/ makeIcon(\n 'Stopwatch',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconStopwatchFill = /*#__PURE__*/ makeIcon(\n 'StopwatchFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSubtract = /*#__PURE__*/ makeIcon(\n 'Subtract',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSuitClub = /*#__PURE__*/ makeIcon(\n 'SuitClub',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSuitClubFill = /*#__PURE__*/ makeIcon(\n 'SuitClubFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSuitDiamond = /*#__PURE__*/ makeIcon(\n 'SuitDiamond',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSuitDiamondFill = /*#__PURE__*/ makeIcon(\n 'SuitDiamondFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSuitHeart = /*#__PURE__*/ makeIcon(\n 'SuitHeart',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSuitHeartFill = /*#__PURE__*/ makeIcon(\n 'SuitHeartFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSuitSpade = /*#__PURE__*/ makeIcon(\n 'SuitSpade',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSuitSpadeFill = /*#__PURE__*/ makeIcon(\n 'SuitSpadeFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSun = /*#__PURE__*/ makeIcon(\n 'Sun',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSunFill = /*#__PURE__*/ makeIcon(\n 'SunFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSunglasses = /*#__PURE__*/ makeIcon(\n 'Sunglasses',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSunrise = /*#__PURE__*/ makeIcon(\n 'Sunrise',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSunriseFill = /*#__PURE__*/ makeIcon(\n 'SunriseFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSunset = /*#__PURE__*/ makeIcon(\n 'Sunset',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSunsetFill = /*#__PURE__*/ makeIcon(\n 'SunsetFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSymmetryHorizontal = /*#__PURE__*/ makeIcon(\n 'SymmetryHorizontal',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconSymmetryVertical = /*#__PURE__*/ makeIcon(\n 'SymmetryVertical',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconTable = /*#__PURE__*/ makeIcon(\n 'Table',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconTablet = /*#__PURE__*/ makeIcon(\n 'Tablet',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconTabletFill = /*#__PURE__*/ makeIcon(\n 'TabletFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconTabletLandscape = /*#__PURE__*/ makeIcon(\n 'TabletLandscape',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconTabletLandscapeFill = /*#__PURE__*/ makeIcon(\n 'TabletLandscapeFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconTag = /*#__PURE__*/ makeIcon(\n 'Tag',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconTagFill = /*#__PURE__*/ makeIcon(\n 'TagFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconTags = /*#__PURE__*/ makeIcon(\n 'Tags',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconTagsFill = /*#__PURE__*/ makeIcon(\n 'TagsFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconTelegram = /*#__PURE__*/ makeIcon(\n 'Telegram',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconTelephone = /*#__PURE__*/ makeIcon(\n 'Telephone',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconTelephoneFill = /*#__PURE__*/ makeIcon(\n 'TelephoneFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconTelephoneForward = /*#__PURE__*/ makeIcon(\n 'TelephoneForward',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconTelephoneForwardFill = /*#__PURE__*/ makeIcon(\n 'TelephoneForwardFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconTelephoneInbound = /*#__PURE__*/ makeIcon(\n 'TelephoneInbound',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconTelephoneInboundFill = /*#__PURE__*/ makeIcon(\n 'TelephoneInboundFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconTelephoneMinus = /*#__PURE__*/ makeIcon(\n 'TelephoneMinus',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconTelephoneMinusFill = /*#__PURE__*/ makeIcon(\n 'TelephoneMinusFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconTelephoneOutbound = /*#__PURE__*/ makeIcon(\n 'TelephoneOutbound',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconTelephoneOutboundFill = /*#__PURE__*/ makeIcon(\n 'TelephoneOutboundFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconTelephonePlus = /*#__PURE__*/ makeIcon(\n 'TelephonePlus',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconTelephonePlusFill = /*#__PURE__*/ makeIcon(\n 'TelephonePlusFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconTelephoneX = /*#__PURE__*/ makeIcon(\n 'TelephoneX',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconTelephoneXFill = /*#__PURE__*/ makeIcon(\n 'TelephoneXFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconTerminal = /*#__PURE__*/ makeIcon(\n 'Terminal',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconTerminalFill = /*#__PURE__*/ makeIcon(\n 'TerminalFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconTextCenter = /*#__PURE__*/ makeIcon(\n 'TextCenter',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconTextIndentLeft = /*#__PURE__*/ makeIcon(\n 'TextIndentLeft',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconTextIndentRight = /*#__PURE__*/ makeIcon(\n 'TextIndentRight',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconTextLeft = /*#__PURE__*/ makeIcon(\n 'TextLeft',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconTextParagraph = /*#__PURE__*/ makeIcon(\n 'TextParagraph',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconTextRight = /*#__PURE__*/ makeIcon(\n 'TextRight',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconTextarea = /*#__PURE__*/ makeIcon(\n 'Textarea',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconTextareaResize = /*#__PURE__*/ makeIcon(\n 'TextareaResize',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconTextareaT = /*#__PURE__*/ makeIcon(\n 'TextareaT',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconThermometer = /*#__PURE__*/ makeIcon(\n 'Thermometer',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconThermometerHalf = /*#__PURE__*/ makeIcon(\n 'ThermometerHalf',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconThermometerHigh = /*#__PURE__*/ makeIcon(\n 'ThermometerHigh',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconThermometerLow = /*#__PURE__*/ makeIcon(\n 'ThermometerLow',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconThermometerSnow = /*#__PURE__*/ makeIcon(\n 'ThermometerSnow',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconThermometerSun = /*#__PURE__*/ makeIcon(\n 'ThermometerSun',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconThreeDots = /*#__PURE__*/ makeIcon(\n 'ThreeDots',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconThreeDotsVertical = /*#__PURE__*/ makeIcon(\n 'ThreeDotsVertical',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconToggle2Off = /*#__PURE__*/ makeIcon(\n 'Toggle2Off',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconToggle2On = /*#__PURE__*/ makeIcon(\n 'Toggle2On',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconToggleOff = /*#__PURE__*/ makeIcon(\n 'ToggleOff',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconToggleOn = /*#__PURE__*/ makeIcon(\n 'ToggleOn',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconToggles = /*#__PURE__*/ makeIcon(\n 'Toggles',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconToggles2 = /*#__PURE__*/ makeIcon(\n 'Toggles2',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconTools = /*#__PURE__*/ makeIcon(\n 'Tools',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconTornado = /*#__PURE__*/ makeIcon(\n 'Tornado',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconTranslate = /*#__PURE__*/ makeIcon(\n 'Translate',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconTrash = /*#__PURE__*/ makeIcon(\n 'Trash',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconTrash2 = /*#__PURE__*/ makeIcon(\n 'Trash2',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconTrash2Fill = /*#__PURE__*/ makeIcon(\n 'Trash2Fill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconTrashFill = /*#__PURE__*/ makeIcon(\n 'TrashFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconTree = /*#__PURE__*/ makeIcon(\n 'Tree',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconTreeFill = /*#__PURE__*/ makeIcon(\n 'TreeFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconTriangle = /*#__PURE__*/ makeIcon(\n 'Triangle',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconTriangleFill = /*#__PURE__*/ makeIcon(\n 'TriangleFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconTriangleHalf = /*#__PURE__*/ makeIcon(\n 'TriangleHalf',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconTrophy = /*#__PURE__*/ makeIcon(\n 'Trophy',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconTrophyFill = /*#__PURE__*/ makeIcon(\n 'TrophyFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconTropicalStorm = /*#__PURE__*/ makeIcon(\n 'TropicalStorm',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconTruck = /*#__PURE__*/ makeIcon(\n 'Truck',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconTruckFlatbed = /*#__PURE__*/ makeIcon(\n 'TruckFlatbed',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconTsunami = /*#__PURE__*/ makeIcon(\n 'Tsunami',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconTv = /*#__PURE__*/ makeIcon(\n 'Tv',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconTvFill = /*#__PURE__*/ makeIcon(\n 'TvFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconTwitch = /*#__PURE__*/ makeIcon(\n 'Twitch',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconTwitter = /*#__PURE__*/ makeIcon(\n 'Twitter',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconType = /*#__PURE__*/ makeIcon(\n 'Type',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconTypeBold = /*#__PURE__*/ makeIcon(\n 'TypeBold',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconTypeH1 = /*#__PURE__*/ makeIcon(\n 'TypeH1',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconTypeH2 = /*#__PURE__*/ makeIcon(\n 'TypeH2',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconTypeH3 = /*#__PURE__*/ makeIcon(\n 'TypeH3',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconTypeItalic = /*#__PURE__*/ makeIcon(\n 'TypeItalic',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconTypeStrikethrough = /*#__PURE__*/ makeIcon(\n 'TypeStrikethrough',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconTypeUnderline = /*#__PURE__*/ makeIcon(\n 'TypeUnderline',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconUiChecks = /*#__PURE__*/ makeIcon(\n 'UiChecks',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconUiChecksGrid = /*#__PURE__*/ makeIcon(\n 'UiChecksGrid',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconUiRadios = /*#__PURE__*/ makeIcon(\n 'UiRadios',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconUiRadiosGrid = /*#__PURE__*/ makeIcon(\n 'UiRadiosGrid',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconUmbrella = /*#__PURE__*/ makeIcon(\n 'Umbrella',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconUmbrellaFill = /*#__PURE__*/ makeIcon(\n 'UmbrellaFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconUnion = /*#__PURE__*/ makeIcon(\n 'Union',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconUnlock = /*#__PURE__*/ makeIcon(\n 'Unlock',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconUnlockFill = /*#__PURE__*/ makeIcon(\n 'UnlockFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconUpc = /*#__PURE__*/ makeIcon(\n 'Upc',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconUpcScan = /*#__PURE__*/ makeIcon(\n 'UpcScan',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconUpload = /*#__PURE__*/ makeIcon(\n 'Upload',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconVectorPen = /*#__PURE__*/ makeIcon(\n 'VectorPen',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconViewList = /*#__PURE__*/ makeIcon(\n 'ViewList',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconViewStacked = /*#__PURE__*/ makeIcon(\n 'ViewStacked',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconVinyl = /*#__PURE__*/ makeIcon(\n 'Vinyl',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconVinylFill = /*#__PURE__*/ makeIcon(\n 'VinylFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconVoicemail = /*#__PURE__*/ makeIcon(\n 'Voicemail',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconVolumeDown = /*#__PURE__*/ makeIcon(\n 'VolumeDown',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconVolumeDownFill = /*#__PURE__*/ makeIcon(\n 'VolumeDownFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconVolumeMute = /*#__PURE__*/ makeIcon(\n 'VolumeMute',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconVolumeMuteFill = /*#__PURE__*/ makeIcon(\n 'VolumeMuteFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconVolumeOff = /*#__PURE__*/ makeIcon(\n 'VolumeOff',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconVolumeOffFill = /*#__PURE__*/ makeIcon(\n 'VolumeOffFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconVolumeUp = /*#__PURE__*/ makeIcon(\n 'VolumeUp',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconVolumeUpFill = /*#__PURE__*/ makeIcon(\n 'VolumeUpFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconVr = /*#__PURE__*/ makeIcon(\n 'Vr',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconWallet = /*#__PURE__*/ makeIcon(\n 'Wallet',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconWallet2 = /*#__PURE__*/ makeIcon(\n 'Wallet2',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconWalletFill = /*#__PURE__*/ makeIcon(\n 'WalletFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconWatch = /*#__PURE__*/ makeIcon(\n 'Watch',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconWater = /*#__PURE__*/ makeIcon(\n 'Water',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconWhatsapp = /*#__PURE__*/ makeIcon(\n 'Whatsapp',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconWifi = /*#__PURE__*/ makeIcon(\n 'Wifi',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconWifi1 = /*#__PURE__*/ makeIcon(\n 'Wifi1',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconWifi2 = /*#__PURE__*/ makeIcon(\n 'Wifi2',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconWifiOff = /*#__PURE__*/ makeIcon(\n 'WifiOff',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconWind = /*#__PURE__*/ makeIcon(\n 'Wind',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconWindow = /*#__PURE__*/ makeIcon(\n 'Window',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconWindowDock = /*#__PURE__*/ makeIcon(\n 'WindowDock',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconWindowSidebar = /*#__PURE__*/ makeIcon(\n 'WindowSidebar',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconWrench = /*#__PURE__*/ makeIcon(\n 'Wrench',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconX = /*#__PURE__*/ makeIcon(\n 'X',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconXCircle = /*#__PURE__*/ makeIcon(\n 'XCircle',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconXCircleFill = /*#__PURE__*/ makeIcon(\n 'XCircleFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconXDiamond = /*#__PURE__*/ makeIcon(\n 'XDiamond',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconXDiamondFill = /*#__PURE__*/ makeIcon(\n 'XDiamondFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconXLg = /*#__PURE__*/ makeIcon(\n 'XLg',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconXOctagon = /*#__PURE__*/ makeIcon(\n 'XOctagon',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconXOctagonFill = /*#__PURE__*/ makeIcon(\n 'XOctagonFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconXSquare = /*#__PURE__*/ makeIcon(\n 'XSquare',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconXSquareFill = /*#__PURE__*/ makeIcon(\n 'XSquareFill',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconYoutube = /*#__PURE__*/ makeIcon(\n 'Youtube',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconZoomIn = /*#__PURE__*/ makeIcon(\n 'ZoomIn',\n ''\n)\n\n// eslint-disable-next-line\nexport const BIconZoomOut = /*#__PURE__*/ makeIcon(\n 'ZoomOut',\n ''\n)\n\n// --- END AUTO-GENERATED FILE ---\n","import { Vue, extend, mergeData } from '../vue'\nimport { NAME_ICON } from '../constants/components'\nimport { PROP_TYPE_STRING } from '../constants/props'\nimport { RX_ICON_PREFIX } from '../constants/regex'\nimport { omit, sortKeys } from '../utils/object'\nimport { makeProp, makePropsConfigurable, pluckProps } from '../utils/props'\nimport { pascalCase, trim } from '../utils/string'\nimport { BIconBlank } from './icons'\nimport { props as BVIconBaseProps } from './helpers/icon-base'\n\n// --- Helper methods ---\n\nconst findIconComponent = (ctx, iconName) => {\n if (!ctx) {\n return Vue.component(iconName)\n }\n const components = (ctx.$options || {}).components\n const iconComponent = components && components[iconName]\n return iconComponent || findIconComponent(ctx.$parent, iconName)\n}\n\n// --- Props ---\n\nconst iconProps = omit(BVIconBaseProps, ['content'])\n\nexport const props = makePropsConfigurable(\n sortKeys({\n ...iconProps,\n icon: makeProp(PROP_TYPE_STRING)\n }),\n NAME_ICON\n)\n\n// --- Main component ---\n\n// Helper BIcon component\n// Requires the requested icon component to be installed\n// @vue/component\nexport const BIcon = /*#__PURE__*/ extend({\n name: NAME_ICON,\n functional: true,\n props,\n render(h, { data, props, parent }) {\n const icon = pascalCase(trim(props.icon || '')).replace(RX_ICON_PREFIX, '')\n\n // If parent context exists, we check to see if the icon has been registered\n // either locally in the parent component, or globally at the `$root` level\n // If not registered, we render a blank icon\n return h(\n icon ? findIconComponent(parent, `BIcon${icon}`) || BIconBlank : BIconBlank,\n mergeData(data, { props: pluckProps(iconProps, props) })\n )\n }\n})\n","export const CODE_BACKSPACE = 8\nexport const CODE_BREAK = 19\nexport const CODE_DELETE = 46\nexport const CODE_DOWN = 40\nexport const CODE_END = 35\nexport const CODE_ENTER = 13\nexport const CODE_ESC = 27\nexport const CODE_HOME = 36\nexport const CODE_LEFT = 37\nexport const CODE_PAGEDOWN = 34\nexport const CODE_PAGEUP = 33\nexport const CODE_RIGHT = 39\nexport const CODE_SPACE = 32\nexport const CODE_UP = 38\n","import { hasOwnProperty, keys } from './object'\nimport { isArray, isDate, isObject } from './inspect'\n\n// Assumes both a and b are arrays!\n// Handles when arrays are \"sparse\" (array.every(...) doesn't handle sparse)\nconst compareArrays = (a, b) => {\n if (a.length !== b.length) {\n return false\n }\n let equal = true\n for (let i = 0; equal && i < a.length; i++) {\n equal = looseEqual(a[i], b[i])\n }\n return equal\n}\n\n/**\n * Check if two values are loosely equal - that is,\n * if they are plain objects, do they have the same shape?\n * Returns boolean true or false\n */\nexport const looseEqual = (a, b) => {\n if (a === b) {\n return true\n }\n let aValidType = isDate(a)\n let bValidType = isDate(b)\n if (aValidType || bValidType) {\n return aValidType && bValidType ? a.getTime() === b.getTime() : false\n }\n aValidType = isArray(a)\n bValidType = isArray(b)\n if (aValidType || bValidType) {\n return aValidType && bValidType ? compareArrays(a, b) : false\n }\n aValidType = isObject(a)\n bValidType = isObject(b)\n if (aValidType || bValidType) {\n /* istanbul ignore if: this if will probably never be called */\n if (!aValidType || !bValidType) {\n return false\n }\n const aKeysCount = keys(a).length\n const bKeysCount = keys(b).length\n if (aKeysCount !== bKeysCount) {\n return false\n }\n for (const key in a) {\n const aHasKey = hasOwnProperty(a, key)\n const bHasKey = hasOwnProperty(b, key)\n if ((aHasKey && !bHasKey) || (!aHasKey && bHasKey) || !looseEqual(a[key], b[key])) {\n return false\n }\n }\n }\n return String(a) === String(b)\n}\n","import { extend } from '../vue'\nimport { cloneDeep } from './clone-deep'\nimport { looseEqual } from './loose-equal'\nimport { hasOwnProperty, keys } from './object'\n\nconst isEmpty = value => !value || keys(value).length === 0\n\nexport const makePropWatcher = propName => ({\n handler(newValue, oldValue) {\n if (looseEqual(newValue, oldValue)) {\n return\n }\n if (isEmpty(newValue) || isEmpty(oldValue)) {\n this[propName] = cloneDeep(newValue)\n return\n }\n for (const key in oldValue) {\n if (!hasOwnProperty(newValue, key)) {\n this.$delete(this.$data[propName], key)\n }\n }\n for (const key in newValue) {\n this.$set(this.$data[propName], key, newValue[key])\n }\n }\n})\n\nexport const makePropCacheMixin = (propName, proxyPropName) =>\n extend({\n data() {\n return { [proxyPropName]: cloneDeep(this[propName]) }\n },\n watch: {\n // Work around unwanted re-renders: https://github.com/vuejs/vue/issues/10115\n [propName]: makePropWatcher(proxyPropName)\n }\n })\n","import { makePropCacheMixin } from '../utils/cache'\nimport { extend, isVue3 } from '../vue'\n\nconst attrsMixinVue2 = makePropCacheMixin('$attrs', 'bvAttrs')\nconst attrsMixinVue3 = extend({\n computed: {\n bvAttrs() {\n const bvAttrs = { ...this.$attrs }\n Object.keys(bvAttrs).forEach(key => {\n if (bvAttrs[key] === undefined) {\n delete bvAttrs[key]\n }\n })\n return bvAttrs\n }\n }\n})\n\nexport const attrsMixin = isVue3 ? attrsMixinVue3 : attrsMixinVue2\n","export const getEventRoot = vm => {\n return vm.$root.$options.bvEventRoot || vm.$root\n}\n","import { extend } from '../vue'\nimport { arrayIncludes } from '../utils/array'\nimport { keys } from '../utils/object'\nimport { getEventRoot } from '../utils/get-event-root'\n// --- Constants ---\n\nconst PROP = '$_rootListeners'\n\n// --- Mixin ---\n\n// @vue/component\nexport const listenOnRootMixin = extend({\n computed: {\n bvEventRoot() {\n return getEventRoot(this)\n }\n },\n created() {\n // Define non-reactive property\n // Object of arrays, keyed by event name,\n // where value is an array of callbacks\n this[PROP] = {}\n },\n beforeDestroy() {\n // Unregister all registered listeners\n keys(this[PROP] || {}).forEach(event => {\n this[PROP][event].forEach(callback => {\n this.listenOffRoot(event, callback)\n })\n })\n\n this[PROP] = null\n },\n methods: {\n registerRootListener(event, callback) {\n if (this[PROP]) {\n this[PROP][event] = this[PROP][event] || []\n if (!arrayIncludes(this[PROP][event], callback)) {\n this[PROP][event].push(callback)\n }\n }\n },\n unregisterRootListener(event, callback) {\n if (this[PROP] && this[PROP][event]) {\n this[PROP][event] = this[PROP][event].filter(cb => cb !== callback)\n }\n },\n\n /**\n * Safely register event listeners on the root Vue node\n * While Vue automatically removes listeners for individual components,\n * when a component registers a listener on `$root` and is destroyed,\n * this orphans a callback because the node is gone, but the `$root`\n * does not clear the callback\n *\n * When registering a `$root` listener, it also registers the listener\n * to be removed in the component's `beforeDestroy()` hook\n *\n * @param {string} event\n * @param {function} callback\n */\n listenOnRoot(event, callback) {\n if (this.bvEventRoot) {\n this.bvEventRoot.$on(event, callback)\n this.registerRootListener(event, callback)\n }\n },\n\n /**\n * Safely register a `$once()` event listener on the root Vue node\n * While Vue automatically removes listeners for individual components,\n * when a component registers a listener on `$root` and is destroyed,\n * this orphans a callback because the node is gone, but the `$root`\n * does not clear the callback\n *\n * When registering a `$root` listener, it also registers the listener\n * to be removed in the component's `beforeDestroy()` hook\n *\n * @param {string} event\n * @param {function} callback\n */\n listenOnRootOnce(event, callback) {\n if (this.bvEventRoot) {\n const _callback = (...args) => {\n this.unregisterRootListener(_callback)\n // eslint-disable-next-line node/no-callback-literal\n callback(...args)\n }\n\n this.bvEventRoot.$once(event, _callback)\n this.registerRootListener(event, _callback)\n }\n },\n\n /**\n * Safely unregister event listeners from the root Vue node\n *\n * @param {string} event\n * @param {function} callback\n */\n listenOffRoot(event, callback) {\n this.unregisterRootListener(event, callback)\n\n if (this.bvEventRoot) {\n this.bvEventRoot.$off(event, callback)\n }\n },\n\n /**\n * Convenience method for calling `vm.$emit()` on `$root`\n *\n * @param {string} event\n * @param {*} args\n */\n emitOnRoot(event, ...args) {\n if (this.bvEventRoot) {\n this.bvEventRoot.$emit(event, ...args)\n }\n }\n }\n})\n","import { makePropCacheMixin } from '../utils/cache'\nimport { extend, isVue3 } from '../vue'\n\nconst listenersMixinVue2 = makePropCacheMixin('$listeners', 'bvListeners')\n\nconst listenersMixinVue3 = extend({\n data() {\n return {\n bvListeners: {}\n }\n },\n created() {\n this.bvListeners = {\n ...this.$listeners\n }\n },\n beforeUpdate() {\n this.bvListeners = {\n ...this.$listeners\n }\n }\n})\n\nexport const listenersMixin = isVue3 ? listenersMixinVue3 : listenersMixinVue2\n","import { extend } from '../../vue'\nimport { NAME_LINK } from '../../constants/components'\nimport { EVENT_NAME_CLICK } from '../../constants/events'\nimport {\n PROP_TYPE_ARRAY_STRING,\n PROP_TYPE_BOOLEAN,\n PROP_TYPE_OBJECT_STRING,\n PROP_TYPE_STRING\n} from '../../constants/props'\nimport { concat } from '../../utils/array'\nimport { attemptBlur, attemptFocus, isTag } from '../../utils/dom'\nimport { getRootEventName, stopEvent } from '../../utils/events'\nimport { isBoolean, isEvent, isFunction, isUndefined } from '../../utils/inspect'\nimport { omit, sortKeys } from '../../utils/object'\nimport { makeProp, makePropsConfigurable, pluckProps } from '../../utils/props'\nimport { computeHref, computeRel, computeTag, isRouterLink } from '../../utils/router'\nimport { attrsMixin } from '../../mixins/attrs'\nimport { listenOnRootMixin } from '../../mixins/listen-on-root'\nimport { listenersMixin } from '../../mixins/listeners'\nimport { normalizeSlotMixin } from '../../mixins/normalize-slot'\n\n// --- Constants ---\n\nconst ROOT_EVENT_NAME_CLICKED = getRootEventName(NAME_LINK, 'clicked')\n\n// --- Props ---\n\n// `` specific props\nexport const routerLinkProps = {\n activeClass: makeProp(PROP_TYPE_STRING),\n append: makeProp(PROP_TYPE_BOOLEAN, false),\n event: makeProp(PROP_TYPE_ARRAY_STRING),\n exact: makeProp(PROP_TYPE_BOOLEAN, false),\n exactActiveClass: makeProp(PROP_TYPE_STRING),\n exactPath: makeProp(PROP_TYPE_BOOLEAN, false),\n exactPathActiveClass: makeProp(PROP_TYPE_STRING),\n replace: makeProp(PROP_TYPE_BOOLEAN, false),\n routerTag: makeProp(PROP_TYPE_STRING),\n to: makeProp(PROP_TYPE_OBJECT_STRING)\n}\n\n// `` specific props\nexport const nuxtLinkProps = {\n noPrefetch: makeProp(PROP_TYPE_BOOLEAN, false),\n // Must be `null` to fall back to the value defined in the\n // `nuxt.config.js` configuration file for `router.prefetchLinks`\n // We convert `null` to `undefined`, so that Nuxt.js will use the\n // compiled default\n // Vue treats `undefined` as default of `false` for Boolean props,\n // so we must set it as `null` here to be a true tri-state prop\n prefetch: makeProp(PROP_TYPE_BOOLEAN, null)\n}\n\n// All `` props\nexport const props = makePropsConfigurable(\n sortKeys({\n ...nuxtLinkProps,\n ...routerLinkProps,\n active: makeProp(PROP_TYPE_BOOLEAN, false),\n disabled: makeProp(PROP_TYPE_BOOLEAN, false),\n href: makeProp(PROP_TYPE_STRING),\n // Must be `null` if no value provided\n rel: makeProp(PROP_TYPE_STRING, null),\n // To support 3rd party router links based on `` (i.e. `g-link` for Gridsome)\n // Default is to auto choose between `` and ``\n // Gridsome doesn't provide a mechanism to auto detect and has caveats\n // such as not supporting FQDN URLs or hash only URLs\n routerComponentName: makeProp(PROP_TYPE_STRING),\n target: makeProp(PROP_TYPE_STRING, '_self')\n }),\n NAME_LINK\n)\n\n// --- Main component ---\n\n// @vue/component\nexport const BLink = /*#__PURE__*/ extend({\n name: NAME_LINK,\n // Mixin order is important!\n mixins: [attrsMixin, listenersMixin, listenOnRootMixin, normalizeSlotMixin],\n inheritAttrs: false,\n props,\n computed: {\n computedTag() {\n // We don't pass `this` as the first arg as we need reactivity of the props\n const { to, disabled, routerComponentName } = this\n return computeTag({ to, disabled, routerComponentName }, this)\n },\n isRouterLink() {\n return isRouterLink(this.computedTag)\n },\n computedRel() {\n // We don't pass `this` as the first arg as we need reactivity of the props\n const { target, rel } = this\n return computeRel({ target, rel })\n },\n computedHref() {\n // We don't pass `this` as the first arg as we need reactivity of the props\n const { to, href } = this\n return computeHref({ to, href }, this.computedTag)\n },\n computedProps() {\n const { event, prefetch, routerTag } = this\n return this.isRouterLink\n ? {\n ...pluckProps(\n omit(\n { ...routerLinkProps, ...(this.computedTag === 'nuxt-link' ? nuxtLinkProps : {}) },\n ['event', 'prefetch', 'routerTag']\n ),\n this\n ),\n // Only add these props, when actually defined\n ...(event ? { event } : {}),\n ...(isBoolean(prefetch) ? { prefetch } : {}),\n // Pass `router-tag` as `tag` prop\n ...(routerTag ? { tag: routerTag } : {})\n }\n : {}\n },\n computedAttrs() {\n const {\n bvAttrs,\n computedHref: href,\n computedRel: rel,\n disabled,\n target,\n routerTag,\n isRouterLink\n } = this\n\n return {\n ...bvAttrs,\n // If `href` attribute exists on `` (even `undefined` or `null`)\n // it fails working on SSR, so we explicitly add it here if needed\n // (i.e. if `computedHref` is truthy)\n ...(href ? { href } : {}),\n // We don't render `rel` or `target` on non link tags when using `vue-router`\n ...(isRouterLink && routerTag && !isTag(routerTag, 'a') ? {} : { rel, target }),\n tabindex: disabled ? '-1' : isUndefined(bvAttrs.tabindex) ? null : bvAttrs.tabindex,\n 'aria-disabled': disabled ? 'true' : null\n }\n },\n computedListeners() {\n return {\n // Transfer all listeners (native) to the root element\n ...this.bvListeners,\n // We want to overwrite any click handler since our callback\n // will invoke the user supplied handler(s) if `!this.disabled`\n click: this.onClick\n }\n }\n },\n methods: {\n onClick(event) {\n const eventIsEvent = isEvent(event)\n const isRouterLink = this.isRouterLink\n const suppliedHandler = this.bvListeners.click\n if (eventIsEvent && this.disabled) {\n // Stop event from bubbling up\n // Kill the event loop attached to this specific `EventTarget`\n // Needed to prevent `vue-router` for doing its thing\n stopEvent(event, { immediatePropagation: true })\n } else {\n // Router links do not emit instance `click` events, so we\n // add in an `$emit('click', event)` on its Vue instance\n //\n // seems not to be required for Vue3 compat build\n /* istanbul ignore next: difficult to test, but we know it works */\n if (isRouterLink) {\n event.currentTarget.__vue__?.$emit(EVENT_NAME_CLICK, event)\n }\n // Call the suppliedHandler(s), if any provided\n concat(suppliedHandler)\n .filter(h => isFunction(h))\n .forEach(handler => {\n handler(...arguments)\n })\n // Emit the global `$root` click event\n this.emitOnRoot(ROOT_EVENT_NAME_CLICKED, event)\n // TODO: Remove deprecated 'clicked::link' event with next major release\n this.emitOnRoot('clicked::link', event)\n }\n // Stop scroll-to-top behavior or navigation on\n // regular links when href is just '#'\n if (eventIsEvent && !isRouterLink && this.computedHref === '#') {\n stopEvent(event, { propagation: false })\n }\n },\n focus() {\n attemptFocus(this.$el)\n },\n blur() {\n attemptBlur(this.$el)\n }\n },\n render(h) {\n const { active, disabled } = this\n\n return h(\n this.computedTag,\n {\n class: { active, disabled },\n attrs: this.computedAttrs,\n props: this.computedProps,\n // We must use `nativeOn` for ``/`` instead of `on`\n [this.isRouterLink ? 'nativeOn' : 'on']: this.computedListeners\n },\n this.normalizeSlot()\n )\n }\n})\n","import { extend, mergeData } from '../../vue'\nimport { NAME_BUTTON } from '../../constants/components'\nimport { CODE_ENTER, CODE_SPACE } from '../../constants/key-codes'\nimport { PROP_TYPE_BOOLEAN, PROP_TYPE_STRING } from '../../constants/props'\nimport { concat } from '../../utils/array'\nimport { addClass, isTag, removeClass } from '../../utils/dom'\nimport { stopEvent } from '../../utils/events'\nimport { isBoolean, isEvent, isFunction } from '../../utils/inspect'\nimport { omit, sortKeys } from '../../utils/object'\nimport { makeProp, makePropsConfigurable, pluckProps } from '../../utils/props'\nimport { isLink as isLinkStrict } from '../../utils/router'\nimport { BLink, props as BLinkProps } from '../link/link'\n\n// --- Props ---\n\nconst linkProps = omit(BLinkProps, ['event', 'routerTag'])\ndelete linkProps.href.default\ndelete linkProps.to.default\n\nexport const props = makePropsConfigurable(\n sortKeys({\n ...linkProps,\n block: makeProp(PROP_TYPE_BOOLEAN, false),\n disabled: makeProp(PROP_TYPE_BOOLEAN, false),\n pill: makeProp(PROP_TYPE_BOOLEAN, false),\n // Tri-state: `true`, `false` or `null`\n // => On, off, not a toggle\n pressed: makeProp(PROP_TYPE_BOOLEAN, null),\n size: makeProp(PROP_TYPE_STRING),\n squared: makeProp(PROP_TYPE_BOOLEAN, false),\n tag: makeProp(PROP_TYPE_STRING, 'button'),\n type: makeProp(PROP_TYPE_STRING, 'button'),\n variant: makeProp(PROP_TYPE_STRING, 'secondary')\n }),\n NAME_BUTTON\n)\n\n// --- Helper methods ---\n\n// Focus handler for toggle buttons\n// Needs class of 'focus' when focused\nconst handleFocus = event => {\n if (event.type === 'focusin') {\n addClass(event.target, 'focus')\n } else if (event.type === 'focusout') {\n removeClass(event.target, 'focus')\n }\n}\n\n// Is the requested button a link?\n// If tag prop is set to `a`, we use a to get proper disabled handling\nconst isLink = props => isLinkStrict(props) || isTag(props.tag, 'a')\n\n// Is the button to be a toggle button?\nconst isToggle = props => isBoolean(props.pressed)\n\n// Is the button \"really\" a button?\nconst isButton = props => !(isLink(props) || (props.tag && !isTag(props.tag, 'button')))\n\n// Is the requested tag not a button or link?\nconst isNonStandardTag = props => !isLink(props) && !isButton(props)\n\n// Compute required classes (non static classes)\nconst computeClass = props => [\n `btn-${props.variant || 'secondary'}`,\n {\n [`btn-${props.size}`]: props.size,\n 'btn-block': props.block,\n 'rounded-pill': props.pill,\n 'rounded-0': props.squared && !props.pill,\n disabled: props.disabled,\n active: props.pressed\n }\n]\n\n// Compute the link props to pass to b-link (if required)\nconst computeLinkProps = props => (isLink(props) ? pluckProps(linkProps, props) : {})\n\n// Compute the attributes for a button\nconst computeAttrs = (props, data) => {\n const button = isButton(props)\n const link = isLink(props)\n const toggle = isToggle(props)\n const nonStandardTag = isNonStandardTag(props)\n const hashLink = link && props.href === '#'\n const role = data.attrs && data.attrs.role ? data.attrs.role : null\n let tabindex = data.attrs ? data.attrs.tabindex : null\n if (nonStandardTag || hashLink) {\n tabindex = '0'\n }\n return {\n // Type only used for \"real\" buttons\n type: button && !link ? props.type : null,\n // Disabled only set on \"real\" buttons\n disabled: button ? props.disabled : null,\n // We add a role of button when the tag is not a link or button for ARIA\n // Don't bork any role provided in `data.attrs` when `isLink` or `isButton`\n // Except when link has `href` of `#`\n role: nonStandardTag || hashLink ? 'button' : role,\n // We set the `aria-disabled` state for non-standard tags\n 'aria-disabled': nonStandardTag ? String(props.disabled) : null,\n // For toggles, we need to set the pressed state for ARIA\n 'aria-pressed': toggle ? String(props.pressed) : null,\n // `autocomplete=\"off\"` is needed in toggle mode to prevent some browsers\n // from remembering the previous setting when using the back button\n autocomplete: toggle ? 'off' : null,\n // `tabindex` is used when the component is not a button\n // Links are tabbable, but don't allow disabled, while non buttons or links\n // are not tabbable, so we mimic that functionality by disabling tabbing\n // when disabled, and adding a `tabindex=\"0\"` to non buttons or non links\n tabindex: props.disabled && !button ? '-1' : tabindex\n }\n}\n\n// --- Main component ---\n\n// @vue/component\nexport const BButton = /*#__PURE__*/ extend({\n name: NAME_BUTTON,\n functional: true,\n props,\n render(h, { props, data, listeners, children }) {\n const toggle = isToggle(props)\n const link = isLink(props)\n const nonStandardTag = isNonStandardTag(props)\n const hashLink = link && props.href === '#'\n const on = {\n keydown(event) {\n // When the link is a `href=\"#\"` or a non-standard tag (has `role=\"button\"`),\n // we add a keydown handlers for CODE_SPACE/CODE_ENTER\n /* istanbul ignore next */\n if (props.disabled || !(nonStandardTag || hashLink)) {\n return\n }\n const { keyCode } = event\n // Add CODE_SPACE handler for `href=\"#\"` and CODE_ENTER handler for non-standard tags\n if (keyCode === CODE_SPACE || (keyCode === CODE_ENTER && nonStandardTag)) {\n const target = event.currentTarget || event.target\n stopEvent(event, { propagation: false })\n target.click()\n }\n },\n click(event) {\n /* istanbul ignore if: blink/button disabled should handle this */\n if (props.disabled && isEvent(event)) {\n stopEvent(event)\n } else if (toggle && listeners && listeners['update:pressed']) {\n // Send `.sync` updates to any \"pressed\" prop (if `.sync` listeners)\n // `concat()` will normalize the value to an array without\n // double wrapping an array value in an array\n concat(listeners['update:pressed']).forEach(fn => {\n if (isFunction(fn)) {\n fn(!props.pressed)\n }\n })\n }\n }\n }\n\n if (toggle) {\n on.focusin = handleFocus\n on.focusout = handleFocus\n }\n\n const componentData = {\n staticClass: 'btn',\n class: computeClass(props),\n props: computeLinkProps(props),\n attrs: computeAttrs(props, data),\n on\n }\n\n return h(\n link ? BLink : props.tag,\n mergeData({ ...data, props: undefined }, componentData),\n children\n )\n }\n})\n","import { extend } from '../../vue'\nimport { NAME_AVATAR } from '../../constants/components'\nimport { EVENT_NAME_CLICK, EVENT_NAME_IMG_ERROR } from '../../constants/events'\nimport {\n PROP_TYPE_BOOLEAN,\n PROP_TYPE_BOOLEAN_STRING,\n PROP_TYPE_NUMBER_STRING,\n PROP_TYPE_STRING\n} from '../../constants/props'\nimport { SLOT_NAME_BADGE } from '../../constants/slots'\nimport { isNumber, isNumeric, isString } from '../../utils/inspect'\nimport { toFloat } from '../../utils/number'\nimport { omit, sortKeys } from '../../utils/object'\nimport { makeProp, makePropsConfigurable, pluckProps } from '../../utils/props'\nimport { isLink } from '../../utils/router'\nimport { normalizeSlotMixin } from '../../mixins/normalize-slot'\nimport { BIcon } from '../../icons/icon'\nimport { BIconPersonFill } from '../../icons/icons'\nimport { BButton } from '../button/button'\nimport { BLink, props as BLinkProps } from '../link/link'\n\n// --- Constants ---\n\nconst CLASS_NAME = 'b-avatar'\n\nconst SIZES = ['sm', null, 'lg']\n\nconst FONT_SIZE_SCALE = 0.4\nconst BADGE_FONT_SIZE_SCALE = FONT_SIZE_SCALE * 0.7\n\n// --- Helper methods ---\n\nexport const computeSize = value => {\n // Parse to number when value is a float-like string\n value = isString(value) && isNumeric(value) ? toFloat(value, 0) : value\n // Convert all numbers to pixel values\n return isNumber(value) ? `${value}px` : value || null\n}\n\n// --- Props ---\n\nconst linkProps = omit(BLinkProps, ['active', 'event', 'routerTag'])\n\nexport const props = makePropsConfigurable(\n sortKeys({\n ...linkProps,\n alt: makeProp(PROP_TYPE_STRING, 'avatar'),\n ariaLabel: makeProp(PROP_TYPE_STRING),\n badge: makeProp(PROP_TYPE_BOOLEAN_STRING, false),\n badgeLeft: makeProp(PROP_TYPE_BOOLEAN, false),\n badgeOffset: makeProp(PROP_TYPE_STRING),\n badgeTop: makeProp(PROP_TYPE_BOOLEAN, false),\n badgeVariant: makeProp(PROP_TYPE_STRING, 'primary'),\n button: makeProp(PROP_TYPE_BOOLEAN, false),\n buttonType: makeProp(PROP_TYPE_STRING, 'button'),\n icon: makeProp(PROP_TYPE_STRING),\n rounded: makeProp(PROP_TYPE_BOOLEAN_STRING, false),\n size: makeProp(PROP_TYPE_NUMBER_STRING),\n square: makeProp(PROP_TYPE_BOOLEAN, false),\n src: makeProp(PROP_TYPE_STRING),\n text: makeProp(PROP_TYPE_STRING),\n variant: makeProp(PROP_TYPE_STRING, 'secondary')\n }),\n NAME_AVATAR\n)\n\n// --- Main component ---\n\n// @vue/component\nexport const BAvatar = /*#__PURE__*/ extend({\n name: NAME_AVATAR,\n mixins: [normalizeSlotMixin],\n inject: {\n getBvAvatarGroup: { default: () => () => null }\n },\n props,\n data() {\n return {\n localSrc: this.src || null\n }\n },\n computed: {\n bvAvatarGroup() {\n return this.getBvAvatarGroup()\n },\n computedSize() {\n // Always use the avatar group size\n const { bvAvatarGroup } = this\n return computeSize(bvAvatarGroup ? bvAvatarGroup.size : this.size)\n },\n computedVariant() {\n const { bvAvatarGroup } = this\n return bvAvatarGroup && bvAvatarGroup.variant ? bvAvatarGroup.variant : this.variant\n },\n computedRounded() {\n const { bvAvatarGroup } = this\n const square = bvAvatarGroup && bvAvatarGroup.square ? true : this.square\n const rounded = bvAvatarGroup && bvAvatarGroup.rounded ? bvAvatarGroup.rounded : this.rounded\n return square ? '0' : rounded === '' ? true : rounded || 'circle'\n },\n fontStyle() {\n const { computedSize: size } = this\n const fontSize = SIZES.indexOf(size) === -1 ? `calc(${size} * ${FONT_SIZE_SCALE})` : null\n return fontSize ? { fontSize } : {}\n },\n marginStyle() {\n const { computedSize: size, bvAvatarGroup } = this\n const overlapScale = bvAvatarGroup ? bvAvatarGroup.overlapScale : 0\n const value = size && overlapScale ? `calc(${size} * -${overlapScale})` : null\n return value ? { marginLeft: value, marginRight: value } : {}\n },\n badgeStyle() {\n const { computedSize: size, badgeTop, badgeLeft, badgeOffset } = this\n const offset = badgeOffset || '0px'\n return {\n fontSize: SIZES.indexOf(size) === -1 ? `calc(${size} * ${BADGE_FONT_SIZE_SCALE} )` : null,\n top: badgeTop ? offset : null,\n bottom: badgeTop ? null : offset,\n left: badgeLeft ? offset : null,\n right: badgeLeft ? null : offset\n }\n }\n },\n watch: {\n src(newValue, oldValue) {\n if (newValue !== oldValue) {\n this.localSrc = newValue || null\n }\n }\n },\n methods: {\n onImgError(event) {\n this.localSrc = null\n this.$emit(EVENT_NAME_IMG_ERROR, event)\n },\n onClick(event) {\n this.$emit(EVENT_NAME_CLICK, event)\n }\n },\n render(h) {\n const {\n computedVariant: variant,\n disabled,\n computedRounded: rounded,\n icon,\n localSrc: src,\n text,\n fontStyle,\n marginStyle,\n computedSize: size,\n button,\n buttonType: type,\n badge,\n badgeVariant,\n badgeStyle\n } = this\n const link = !button && isLink(this)\n const tag = button ? BButton : link ? BLink : 'span'\n const alt = this.alt\n const ariaLabel = this.ariaLabel || null\n\n let $content = null\n if (this.hasNormalizedSlot()) {\n // Default slot overrides props\n $content = h('span', { staticClass: 'b-avatar-custom' }, [this.normalizeSlot()])\n } else if (src) {\n $content = h('img', {\n style: variant ? {} : { width: '100%', height: '100%' },\n attrs: { src, alt },\n on: { error: this.onImgError }\n })\n $content = h('span', { staticClass: 'b-avatar-img' }, [$content])\n } else if (icon) {\n $content = h(BIcon, {\n props: { icon },\n attrs: { 'aria-hidden': 'true', alt }\n })\n } else if (text) {\n $content = h(\n 'span',\n {\n staticClass: 'b-avatar-text',\n style: fontStyle\n },\n [h('span', text)]\n )\n } else {\n // Fallback default avatar content\n $content = h(BIconPersonFill, { attrs: { 'aria-hidden': 'true', alt } })\n }\n\n let $badge = h()\n const hasBadgeSlot = this.hasNormalizedSlot(SLOT_NAME_BADGE)\n if (badge || badge === '' || hasBadgeSlot) {\n const badgeText = badge === true ? '' : badge\n $badge = h(\n 'span',\n {\n staticClass: 'b-avatar-badge',\n class: { [`badge-${badgeVariant}`]: badgeVariant },\n style: badgeStyle\n },\n [hasBadgeSlot ? this.normalizeSlot(SLOT_NAME_BADGE) : badgeText]\n )\n }\n\n const componentData = {\n staticClass: CLASS_NAME,\n class: {\n // Apply size class\n [`${CLASS_NAME}-${size}`]: size && SIZES.indexOf(size) !== -1,\n // We use badge styles for theme variants when not rendering `BButton`\n [`badge-${variant}`]: !button && variant,\n // Rounding/Square\n rounded: rounded === true,\n [`rounded-${rounded}`]: rounded && rounded !== true,\n // Other classes\n disabled\n },\n style: { ...marginStyle, width: size, height: size },\n attrs: { 'aria-label': ariaLabel || null },\n props: button ? { variant, disabled, type } : link ? pluckProps(linkProps, this) : {},\n on: button || link ? { click: this.onClick } : {}\n }\n\n return h(tag, componentData, [$content, $badge])\n }\n})\n","import { NAME_AVATAR_GROUP } from '../../constants/components'\nimport {\n PROP_TYPE_BOOLEAN,\n PROP_TYPE_BOOLEAN_STRING,\n PROP_TYPE_NUMBER_STRING,\n PROP_TYPE_STRING\n} from '../../constants/props'\nimport { normalizeSlotMixin } from '../../mixins/normalize-slot'\nimport { mathMax, mathMin } from '../../utils/math'\nimport { toFloat } from '../../utils/number'\nimport { makeProp, makePropsConfigurable } from '../../utils/props'\nimport { extend } from '../../vue'\nimport { computeSize } from './avatar'\n\n// --- Props ---\n\nexport const props = makePropsConfigurable(\n {\n overlap: makeProp(PROP_TYPE_NUMBER_STRING, 0.3),\n // Child avatars will prefer this prop (if set) over their own\n rounded: makeProp(PROP_TYPE_BOOLEAN_STRING, false),\n // Child avatars will always use this over their own size\n size: makeProp(PROP_TYPE_STRING),\n // Child avatars will prefer this prop (if set) over their own\n square: makeProp(PROP_TYPE_BOOLEAN, false),\n tag: makeProp(PROP_TYPE_STRING, 'div'),\n // Child avatars will prefer this variant over their own\n variant: makeProp(PROP_TYPE_STRING)\n },\n NAME_AVATAR_GROUP\n)\n\n// --- Main component ---\n\n// @vue/component\nexport const BAvatarGroup = /*#__PURE__*/ extend({\n name: NAME_AVATAR_GROUP,\n mixins: [normalizeSlotMixin],\n provide() {\n return { getBvAvatarGroup: () => this }\n },\n props,\n computed: {\n computedSize() {\n return computeSize(this.size)\n },\n overlapScale() {\n return mathMin(mathMax(toFloat(this.overlap, 0), 0), 1) / 2\n },\n paddingStyle() {\n let value = this.computedSize\n value = value ? `calc(${value} * ${this.overlapScale})` : null\n return value ? { paddingLeft: value, paddingRight: value } : {}\n }\n },\n render(h) {\n const $inner = h(\n 'div',\n {\n staticClass: 'b-avatar-group-inner',\n style: this.paddingStyle\n },\n this.normalizeSlot()\n )\n\n return h(\n this.tag,\n {\n staticClass: 'b-avatar-group',\n attrs: { role: 'group' }\n },\n [$inner]\n )\n }\n})\n","import { BAvatar } from './avatar'\nimport { BAvatarGroup } from './avatar-group'\nimport { pluginFactory } from '../../utils/plugins'\n\nconst AvatarPlugin = /*#__PURE__*/ pluginFactory({\n components: { BAvatar, BAvatarGroup }\n})\n\nexport { AvatarPlugin, BAvatar, BAvatarGroup }\n","import { extend, mergeData } from '../../vue'\nimport { NAME_BADGE } from '../../constants/components'\nimport { PROP_TYPE_BOOLEAN, PROP_TYPE_STRING } from '../../constants/props'\nimport { omit, sortKeys } from '../../utils/object'\nimport { makeProp, makePropsConfigurable, pluckProps } from '../../utils/props'\nimport { isLink } from '../../utils/router'\nimport { BLink, props as BLinkProps } from '../link/link'\n\n// --- Props ---\n\nconst linkProps = omit(BLinkProps, ['event', 'routerTag'])\ndelete linkProps.href.default\ndelete linkProps.to.default\n\nexport const props = makePropsConfigurable(\n sortKeys({\n ...linkProps,\n pill: makeProp(PROP_TYPE_BOOLEAN, false),\n tag: makeProp(PROP_TYPE_STRING, 'span'),\n variant: makeProp(PROP_TYPE_STRING, 'secondary')\n }),\n NAME_BADGE\n)\n\n// --- Main component ---\n\n// @vue/component\nexport const BBadge = /*#__PURE__*/ extend({\n name: NAME_BADGE,\n functional: true,\n props,\n render(h, { props, data, children }) {\n const { active, disabled } = props\n const link = isLink(props)\n const tag = link ? BLink : props.tag\n const variant = props.variant || 'secondary'\n\n return h(\n tag,\n mergeData(data, {\n staticClass: 'badge',\n class: [\n `badge-${variant}`,\n {\n 'badge-pill': props.pill,\n active,\n disabled\n }\n ],\n props: link ? pluckProps(linkProps, props) : {}\n }),\n children\n )\n }\n})\n","import { BBadge } from './badge'\nimport { pluginFactory } from '../../utils/plugins'\n\nconst BadgePlugin = /*#__PURE__*/ pluginFactory({\n components: { BBadge }\n})\n\nexport { BadgePlugin, BBadge }\n","import { RX_HTML_TAGS } from '../constants/regex'\n\n// Removes anything that looks like an HTML tag from the supplied string\nexport const stripTags = (text = '') => String(text).replace(RX_HTML_TAGS, '')\n\n// Generate a `domProps` object for either `innerHTML`, `textContent` or an empty object\nexport const htmlOrText = (innerHTML, textContent) =>\n innerHTML ? { innerHTML } : textContent ? { textContent } : {}\n","import { extend, mergeData } from '../../vue'\nimport { NAME_BREADCRUMB_LINK } from '../../constants/components'\nimport { PROP_TYPE_STRING } from '../../constants/props'\nimport { htmlOrText } from '../../utils/html'\nimport { omit, sortKeys } from '../../utils/object'\nimport { makeProp, makePropsConfigurable, pluckProps } from '../../utils/props'\nimport { BLink, props as BLinkProps } from '../link/link'\n\n// --- Props ---\n\nexport const props = makePropsConfigurable(\n sortKeys({\n ...omit(BLinkProps, ['event', 'routerTag']),\n ariaCurrent: makeProp(PROP_TYPE_STRING, 'location'),\n html: makeProp(PROP_TYPE_STRING),\n text: makeProp(PROP_TYPE_STRING)\n }),\n NAME_BREADCRUMB_LINK\n)\n\n// --- Main component ---\n\n// @vue/component\nexport const BBreadcrumbLink = /*#__PURE__*/ extend({\n name: NAME_BREADCRUMB_LINK,\n functional: true,\n props,\n render(h, { props: suppliedProps, data, children }) {\n const { active } = suppliedProps\n const tag = active ? 'span' : BLink\n\n const componentData = {\n attrs: { 'aria-current': active ? suppliedProps.ariaCurrent : null },\n props: pluckProps(props, suppliedProps)\n }\n\n if (!children) {\n componentData.domProps = htmlOrText(suppliedProps.html, suppliedProps.text)\n }\n\n return h(tag, mergeData(data, componentData), children)\n }\n})\n","import { extend, mergeData } from '../../vue'\nimport { NAME_BREADCRUMB_ITEM } from '../../constants/components'\nimport { makePropsConfigurable } from '../../utils/props'\nimport { BBreadcrumbLink, props as BBreadcrumbLinkProps } from './breadcrumb-link'\n\n// --- Props ---\n\nexport const props = makePropsConfigurable(BBreadcrumbLinkProps, NAME_BREADCRUMB_ITEM)\n\n// --- Main component ---\n\n// @vue/component\nexport const BBreadcrumbItem = /*#__PURE__*/ extend({\n name: NAME_BREADCRUMB_ITEM,\n functional: true,\n props,\n render(h, { props, data, children }) {\n return h(\n 'li',\n mergeData(data, {\n staticClass: 'breadcrumb-item',\n class: { active: props.active }\n }),\n [h(BBreadcrumbLink, { props }, children)]\n )\n }\n})\n","import { extend, mergeData } from '../../vue'\nimport { NAME_BREADCRUMB } from '../../constants/components'\nimport { PROP_TYPE_ARRAY } from '../../constants/props'\nimport { isArray, isObject } from '../../utils/inspect'\nimport { makeProp, makePropsConfigurable } from '../../utils/props'\nimport { toString } from '../../utils/string'\nimport { BBreadcrumbItem } from './breadcrumb-item'\n\n// --- Props ---\n\nexport const props = makePropsConfigurable(\n {\n items: makeProp(PROP_TYPE_ARRAY)\n },\n NAME_BREADCRUMB\n)\n\n// --- Main component ---\n\n// @vue/component\nexport const BBreadcrumb = /*#__PURE__*/ extend({\n name: NAME_BREADCRUMB,\n functional: true,\n props,\n render(h, { props, data, children }) {\n const { items } = props\n\n // Build child nodes from items, if given\n let childNodes = children\n if (isArray(items)) {\n let activeDefined = false\n childNodes = items.map((item, idx) => {\n if (!isObject(item)) {\n item = { text: toString(item) }\n }\n // Copy the value here so we can normalize it\n let { active } = item\n if (active) {\n activeDefined = true\n }\n // Auto-detect active by position in list\n if (!active && !activeDefined) {\n active = idx + 1 === items.length\n }\n\n return h(BBreadcrumbItem, { props: { ...item, active } })\n })\n }\n\n return h('ol', mergeData(data, { staticClass: 'breadcrumb' }), childNodes)\n }\n})\n","import { BBreadcrumb } from './breadcrumb'\nimport { BBreadcrumbItem } from './breadcrumb-item'\nimport { BBreadcrumbLink } from './breadcrumb-link'\nimport { pluginFactory } from '../../utils/plugins'\n\nconst BreadcrumbPlugin = /*#__PURE__*/ pluginFactory({\n components: { BBreadcrumb, BBreadcrumbItem, BBreadcrumbLink }\n})\n\nexport { BreadcrumbPlugin, BBreadcrumb, BBreadcrumbItem, BBreadcrumbLink }\n","import { BButton } from './button'\nimport { BButtonClose } from './button-close'\nimport { pluginFactory } from '../../utils/plugins'\n\nconst ButtonPlugin = /*#__PURE__*/ pluginFactory({\n components: {\n BButton,\n BBtn: BButton,\n BButtonClose,\n BBtnClose: BButtonClose\n }\n})\n\nexport { ButtonPlugin, BButton, BButtonClose }\n","import { extend, mergeData } from '../../vue'\nimport { NAME_BUTTON_GROUP } from '../../constants/components'\nimport { PROP_TYPE_BOOLEAN, PROP_TYPE_STRING } from '../../constants/props'\nimport { pick, sortKeys } from '../../utils/object'\nimport { makeProp, makePropsConfigurable } from '../../utils/props'\nimport { props as buttonProps } from '../button/button'\n\n// --- Props ---\n\nexport const props = makePropsConfigurable(\n sortKeys({\n ...pick(buttonProps, ['size']),\n ariaRole: makeProp(PROP_TYPE_STRING, 'group'),\n size: makeProp(PROP_TYPE_STRING),\n tag: makeProp(PROP_TYPE_STRING, 'div'),\n vertical: makeProp(PROP_TYPE_BOOLEAN, false)\n }),\n NAME_BUTTON_GROUP\n)\n\n// --- Main component ---\n\n// @vue/component\nexport const BButtonGroup = /*#__PURE__*/ extend({\n name: NAME_BUTTON_GROUP,\n functional: true,\n props,\n render(h, { props, data, children }) {\n return h(\n props.tag,\n mergeData(data, {\n class: {\n 'btn-group': !props.vertical,\n 'btn-group-vertical': props.vertical,\n [`btn-group-${props.size}`]: props.size\n },\n attrs: { role: props.ariaRole }\n }),\n children\n )\n }\n})\n","import { BButtonGroup } from './button-group'\nimport { pluginFactory } from '../../utils/plugins'\n\nconst ButtonGroupPlugin = /*#__PURE__*/ pluginFactory({\n components: {\n BButtonGroup,\n BBtnGroup: BButtonGroup\n }\n})\n\nexport { ButtonGroupPlugin, BButtonGroup }\n","import { extend } from '../../vue'\nimport { NAME_BUTTON_TOOLBAR } from '../../constants/components'\nimport { PROP_TYPE_BOOLEAN } from '../../constants/props'\nimport { CODE_DOWN, CODE_LEFT, CODE_RIGHT, CODE_UP } from '../../constants/key-codes'\nimport { attemptFocus, contains, isVisible, selectAll } from '../../utils/dom'\nimport { stopEvent } from '../../utils/events'\nimport { makeProp, makePropsConfigurable } from '../../utils/props'\nimport { normalizeSlotMixin } from '../../mixins/normalize-slot'\n\n// --- Constants ---\n\nconst ITEM_SELECTOR = [\n '.btn:not(.disabled):not([disabled]):not(.dropdown-item)',\n '.form-control:not(.disabled):not([disabled])',\n 'select:not(.disabled):not([disabled])',\n 'input[type=\"checkbox\"]:not(.disabled)',\n 'input[type=\"radio\"]:not(.disabled)'\n].join(',')\n\n// --- Props ---\n\nexport const props = makePropsConfigurable(\n {\n justify: makeProp(PROP_TYPE_BOOLEAN, false),\n keyNav: makeProp(PROP_TYPE_BOOLEAN, false)\n },\n NAME_BUTTON_TOOLBAR\n)\n\n// --- Main component ---\n\n// @vue/component\nexport const BButtonToolbar = /*#__PURE__*/ extend({\n name: NAME_BUTTON_TOOLBAR,\n mixins: [normalizeSlotMixin],\n props,\n mounted() {\n // Pre-set the tabindexes if the markup does not include\n // `tabindex=\"-1\"` on the toolbar items\n if (this.keyNav) {\n this.getItems()\n }\n },\n methods: {\n getItems() {\n const items = selectAll(ITEM_SELECTOR, this.$el)\n // Ensure `tabindex=\"-1\"` is set on every item\n items.forEach(item => {\n item.tabIndex = -1\n })\n return items.filter(el => isVisible(el))\n },\n focusFirst() {\n const items = this.getItems()\n attemptFocus(items[0])\n },\n focusPrev(event) {\n let items = this.getItems()\n const index = items.indexOf(event.target)\n if (index > -1) {\n items = items.slice(0, index).reverse()\n attemptFocus(items[0])\n }\n },\n focusNext(event) {\n let items = this.getItems()\n const index = items.indexOf(event.target)\n if (index > -1) {\n items = items.slice(index + 1)\n attemptFocus(items[0])\n }\n },\n focusLast() {\n const items = this.getItems().reverse()\n attemptFocus(items[0])\n },\n onFocusin(event) {\n const { $el } = this\n if (event.target === $el && !contains($el, event.relatedTarget)) {\n stopEvent(event)\n this.focusFirst(event)\n }\n },\n onKeydown(event) {\n const { keyCode, shiftKey } = event\n if (keyCode === CODE_UP || keyCode === CODE_LEFT) {\n stopEvent(event)\n shiftKey ? this.focusFirst(event) : this.focusPrev(event)\n } else if (keyCode === CODE_DOWN || keyCode === CODE_RIGHT) {\n stopEvent(event)\n shiftKey ? this.focusLast(event) : this.focusNext(event)\n }\n }\n },\n render(h) {\n const { keyNav } = this\n\n return h(\n 'div',\n {\n staticClass: 'btn-toolbar',\n class: { 'justify-content-between': this.justify },\n attrs: {\n role: 'toolbar',\n tabindex: keyNav ? '0' : null\n },\n on: keyNav\n ? {\n focusin: this.onFocusin,\n keydown: this.onKeydown\n }\n : {}\n },\n [this.normalizeSlot()]\n )\n }\n})\n","import { BButtonToolbar } from './button-toolbar'\nimport { pluginFactory } from '../../utils/plugins'\n\nconst ButtonToolbarPlugin = /*#__PURE__*/ pluginFactory({\n components: {\n BButtonToolbar,\n BBtnToolbar: BButtonToolbar\n }\n})\n\nexport { ButtonToolbarPlugin, BButtonToolbar }\n","export const CALENDAR_GREGORY = 'gregory'\nexport const CALENDAR_LONG = 'long'\nexport const CALENDAR_NARROW = 'narrow'\nexport const CALENDAR_SHORT = 'short'\n\nexport const DATE_FORMAT_2_DIGIT = '2-digit'\nexport const DATE_FORMAT_NUMERIC = 'numeric'\n","// Date utility functions\nimport { CALENDAR_GREGORY } from '../constants/date'\nimport { RX_DATE, RX_DATE_SPLIT } from '../constants/regex'\nimport { concat } from './array'\nimport { identity } from './identity'\nimport { isDate, isString } from './inspect'\nimport { toInteger } from './number'\n\n// --- Date utility methods ---\n\n// Create or clone a date (`new Date(...)` shortcut)\nexport const createDate = (...args) => new Date(...args)\n\n// Parse a date sting, or Date object, into a Date object (with no time information)\nexport const parseYMD = date => {\n if (isString(date) && RX_DATE.test(date.trim())) {\n const [year, month, day] = date.split(RX_DATE_SPLIT).map(v => toInteger(v, 1))\n return createDate(year, month - 1, day)\n } else if (isDate(date)) {\n return createDate(date.getFullYear(), date.getMonth(), date.getDate())\n }\n return null\n}\n\n// Format a date object as `YYYY-MM-DD` format\nexport const formatYMD = date => {\n date = parseYMD(date)\n if (!date) {\n return null\n }\n const year = date.getFullYear()\n const month = `0${date.getMonth() + 1}`.slice(-2)\n const day = `0${date.getDate()}`.slice(-2)\n return `${year}-${month}-${day}`\n}\n\n// Given a locale (or locales), resolve the browser available locale\nexport const resolveLocale = (locales, calendar = CALENDAR_GREGORY) => /* istanbul ignore next */ {\n locales = concat(locales).filter(identity)\n const fmt = new Intl.DateTimeFormat(locales, { calendar })\n return fmt.resolvedOptions().locale\n}\n\n// Create a `Intl.DateTimeFormat` formatter function\nexport const createDateFormatter = (locale, options) => /* istanbul ignore next */ {\n const dtf = new Intl.DateTimeFormat(locale, options)\n return dtf.format\n}\n\n// Determine if two dates are the same date (ignoring time portion)\nexport const 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}\n\n// --- Date \"math\" utility methods (for BCalendar component mainly) ---\n\nexport const firstDateOfMonth = date => {\n date = createDate(date)\n date.setDate(1)\n return date\n}\n\nexport const lastDateOfMonth = date => {\n date = createDate(date)\n date.setMonth(date.getMonth() + 1)\n date.setDate(0)\n return date\n}\n\nexport const addYears = (date, numberOfYears) => {\n date = createDate(date)\n const month = date.getMonth()\n date.setFullYear(date.getFullYear() + numberOfYears)\n // Handle Feb 29th for leap years\n if (date.getMonth() !== month) {\n date.setDate(0)\n }\n return date\n}\n\nexport const oneMonthAgo = date => {\n date = createDate(date)\n const month = date.getMonth()\n date.setMonth(month - 1)\n // Handle when days in month are different\n if (date.getMonth() === month) {\n date.setDate(0)\n }\n return date\n}\n\nexport const oneMonthAhead = date => {\n date = createDate(date)\n const month = date.getMonth()\n date.setMonth(month + 1)\n // Handle when days in month are different\n if (date.getMonth() === (month + 2) % 12) {\n date.setDate(0)\n }\n return date\n}\n\nexport const oneYearAgo = date => {\n return addYears(date, -1)\n}\n\nexport const oneYearAhead = date => {\n return addYears(date, 1)\n}\n\nexport const oneDecadeAgo = date => {\n return addYears(date, -10)\n}\n\nexport const oneDecadeAhead = date => {\n return addYears(date, 10)\n}\n\n// Helper function to constrain a date between two values\n// Always returns a `Date` object or `null` if no date passed\nexport const constrainDate = (date, min = null, max = null) => {\n // Ensure values are `Date` objects (or `null`)\n date = parseYMD(date)\n min = parseYMD(min) || date\n max = parseYMD(max) || date\n // Return a new `Date` object (or `null`)\n return date ? (date < min ? min : date > max ? max : date) : null\n}\n","// Localization utilities\nimport { RX_STRIP_LOCALE_MODS } from '../constants/regex'\nimport { arrayIncludes } from './array'\nimport { toString } from './string'\n\n// Languages that are RTL\nconst RTL_LANGS = [\n 'ar',\n 'az',\n 'ckb',\n 'fa',\n 'he',\n 'ks',\n 'lrc',\n 'mzn',\n 'ps',\n 'sd',\n 'te',\n 'ug',\n 'ur',\n 'yi'\n].map(locale => locale.toLowerCase())\n\n// Returns true if the locale is RTL\nexport const isLocaleRTL = locale => {\n // Determines if the locale is RTL (only single locale supported)\n const parts = toString(locale)\n .toLowerCase()\n .replace(RX_STRIP_LOCALE_MODS, '')\n .split('-')\n const locale1 = parts.slice(0, 2).join('-')\n const locale2 = parts[0]\n return arrayIncludes(RTL_LANGS, locale1) || arrayIncludes(RTL_LANGS, locale2)\n}\n","// SSR safe client-side ID attribute generation\n// ID's can only be generated client-side, after mount\n// `this._uid` is not synched between server and client\nimport { COMPONENT_UID_KEY, extend } from '../vue'\nimport { PROP_TYPE_STRING } from '../constants/props'\nimport { makeProp } from '../utils/props'\n\n// --- Props ---\n\nexport const props = {\n id: makeProp(PROP_TYPE_STRING)\n}\n\n// --- Mixin ---\n\n// @vue/component\nexport const idMixin = extend({\n props,\n data() {\n return {\n localId_: null\n }\n },\n computed: {\n safeId() {\n // Computed property that returns a dynamic function for creating the ID\n // Reacts to changes in both `.id` and `.localId_` and regenerates a new function\n const id = this.id || this.localId_\n\n // We return a function that accepts an optional suffix string\n // So this computed prop looks and works like a method\n // but benefits from Vue's computed prop caching\n const fn = suffix => {\n if (!id) {\n return null\n }\n suffix = String(suffix || '').replace(/\\s+/g, '_')\n return suffix ? id + '_' + suffix : id\n }\n return fn\n }\n },\n mounted() {\n // `mounted()` only occurs client-side\n this.$nextTick(() => {\n // Update DOM with auto-generated ID after mount\n // to prevent SSR hydration errors\n this.localId_ = `__BVID__${this[COMPONENT_UID_KEY]}`\n })\n }\n})\n","import { extend } from '../../vue'\nimport { NAME_CALENDAR } from '../../constants/components'\nimport {\n CALENDAR_GREGORY,\n CALENDAR_LONG,\n CALENDAR_NARROW,\n CALENDAR_SHORT,\n DATE_FORMAT_2_DIGIT,\n DATE_FORMAT_NUMERIC\n} from '../../constants/date'\nimport { EVENT_NAME_CONTEXT, EVENT_NAME_SELECTED } from '../../constants/events'\nimport {\n CODE_DOWN,\n CODE_END,\n CODE_ENTER,\n CODE_HOME,\n CODE_LEFT,\n CODE_PAGEDOWN,\n CODE_PAGEUP,\n CODE_RIGHT,\n CODE_SPACE,\n CODE_UP\n} from '../../constants/key-codes'\nimport {\n PROP_TYPE_ARRAY_STRING,\n PROP_TYPE_BOOLEAN,\n PROP_TYPE_DATE_STRING,\n PROP_TYPE_FUNCTION,\n PROP_TYPE_NUMBER_STRING,\n PROP_TYPE_OBJECT,\n PROP_TYPE_STRING\n} from '../../constants/props'\nimport {\n SLOT_NAME_NAV_NEXT_DECADE,\n SLOT_NAME_NAV_NEXT_MONTH,\n SLOT_NAME_NAV_NEXT_YEAR,\n SLOT_NAME_NAV_PEV_DECADE,\n SLOT_NAME_NAV_PEV_MONTH,\n SLOT_NAME_NAV_PEV_YEAR,\n SLOT_NAME_NAV_THIS_MONTH\n} from '../../constants/slots'\nimport { arrayIncludes, concat } from '../../utils/array'\nimport {\n createDate,\n createDateFormatter,\n constrainDate,\n datesEqual,\n firstDateOfMonth,\n formatYMD,\n lastDateOfMonth,\n oneMonthAgo,\n oneMonthAhead,\n oneYearAgo,\n oneYearAhead,\n oneDecadeAgo,\n oneDecadeAhead,\n parseYMD,\n resolveLocale\n} from '../../utils/date'\nimport { attemptBlur, attemptFocus, requestAF } from '../../utils/dom'\nimport { stopEvent } from '../../utils/events'\nimport { identity } from '../../utils/identity'\nimport { isArray, isPlainObject, isString } from '../../utils/inspect'\nimport { isLocaleRTL } from '../../utils/locale'\nimport { looseEqual } from '../../utils/loose-equal'\nimport { mathMax } from '../../utils/math'\nimport { makeModelMixin } from '../../utils/model'\nimport { toInteger } from '../../utils/number'\nimport { sortKeys } from '../../utils/object'\nimport { hasPropFunction, makeProp, makePropsConfigurable } from '../../utils/props'\nimport { toString } from '../../utils/string'\nimport { attrsMixin } from '../../mixins/attrs'\nimport { idMixin, props as idProps } from '../../mixins/id'\nimport { normalizeSlotMixin } from '../../mixins/normalize-slot'\nimport {\n BIconChevronLeft,\n BIconChevronDoubleLeft,\n BIconChevronBarLeft,\n BIconCircleFill\n} from '../../icons/icons'\n\n// --- Constants ---\n\nconst {\n mixin: modelMixin,\n props: modelProps,\n prop: MODEL_PROP_NAME,\n event: MODEL_EVENT_NAME\n} = makeModelMixin('value', { type: PROP_TYPE_DATE_STRING })\n\n// --- Props ---\n\nexport const props = makePropsConfigurable(\n sortKeys({\n ...idProps,\n ...modelProps,\n ariaControls: makeProp(PROP_TYPE_STRING),\n // Makes calendar the full width of its parent container\n block: makeProp(PROP_TYPE_BOOLEAN, false),\n dateDisabledFn: makeProp(PROP_TYPE_FUNCTION),\n // `Intl.DateTimeFormat` object\n dateFormatOptions: makeProp(PROP_TYPE_OBJECT, {\n year: DATE_FORMAT_NUMERIC,\n month: CALENDAR_LONG,\n day: DATE_FORMAT_NUMERIC,\n weekday: CALENDAR_LONG\n }),\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 dateInfoFn: makeProp(PROP_TYPE_FUNCTION),\n // 'ltr', 'rtl', or `null` (for auto detect)\n direction: makeProp(PROP_TYPE_STRING),\n disabled: makeProp(PROP_TYPE_BOOLEAN, false),\n headerTag: makeProp(PROP_TYPE_STRING, 'header'),\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 hidden: makeProp(PROP_TYPE_BOOLEAN, false),\n // When `true` makes the selected date header `sr-only`\n hideHeader: makeProp(PROP_TYPE_BOOLEAN, false),\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 initialDate: makeProp(PROP_TYPE_DATE_STRING),\n // Labels for buttons and keyboard shortcuts\n labelCalendar: makeProp(PROP_TYPE_STRING, 'Calendar'),\n labelCurrentMonth: makeProp(PROP_TYPE_STRING, 'Current month'),\n labelHelp: makeProp(PROP_TYPE_STRING, 'Use cursor keys to navigate calendar dates'),\n labelNav: makeProp(PROP_TYPE_STRING, 'Calendar navigation'),\n labelNextDecade: makeProp(PROP_TYPE_STRING, 'Next decade'),\n labelNextMonth: makeProp(PROP_TYPE_STRING, 'Next month'),\n labelNextYear: makeProp(PROP_TYPE_STRING, 'Next year'),\n labelNoDateSelected: makeProp(PROP_TYPE_STRING, 'No date selected'),\n labelPrevDecade: makeProp(PROP_TYPE_STRING, 'Previous decade'),\n labelPrevMonth: makeProp(PROP_TYPE_STRING, 'Previous month'),\n labelPrevYear: makeProp(PROP_TYPE_STRING, 'Previous year'),\n labelSelected: makeProp(PROP_TYPE_STRING, 'Selected date'),\n labelToday: makeProp(PROP_TYPE_STRING, 'Today'),\n // Locale(s) to use\n // Default is to use page/browser default setting\n locale: makeProp(PROP_TYPE_ARRAY_STRING),\n max: makeProp(PROP_TYPE_DATE_STRING),\n min: makeProp(PROP_TYPE_DATE_STRING),\n // Variant color to use for the navigation buttons\n navButtonVariant: makeProp(PROP_TYPE_STRING, 'secondary'),\n // Disable highlighting today's date\n noHighlightToday: makeProp(PROP_TYPE_BOOLEAN, false),\n noKeyNav: makeProp(PROP_TYPE_BOOLEAN, false),\n readonly: makeProp(PROP_TYPE_BOOLEAN, false),\n roleDescription: makeProp(PROP_TYPE_STRING),\n // Variant color to use for the selected date\n selectedVariant: makeProp(PROP_TYPE_STRING, 'primary'),\n // When `true` enables the decade navigation buttons\n showDecadeNav: makeProp(PROP_TYPE_BOOLEAN, false),\n // Day of week to start calendar on\n // `0` (Sunday), `1` (Monday), ... `6` (Saturday)\n startWeekday: makeProp(PROP_TYPE_NUMBER_STRING, 0),\n // Variant color to use for today's date (defaults to `selectedVariant`)\n todayVariant: makeProp(PROP_TYPE_STRING),\n // Always return the `v-model` value as a date object\n valueAsDate: makeProp(PROP_TYPE_BOOLEAN, false),\n // Format of the weekday names at the top of the calendar\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 weekdayHeaderFormat: makeProp(PROP_TYPE_STRING, CALENDAR_SHORT, value => {\n return arrayIncludes([CALENDAR_LONG, CALENDAR_SHORT, CALENDAR_NARROW], value)\n }),\n // Has no effect if prop `block` is set\n width: makeProp(PROP_TYPE_STRING, '270px')\n }),\n NAME_CALENDAR\n)\n\n// --- Main component ---\n\n// @vue/component\nexport const BCalendar = extend({\n name: NAME_CALENDAR,\n // Mixin order is important!\n mixins: [attrsMixin, idMixin, modelMixin, normalizeSlotMixin],\n props,\n data() {\n const selected = formatYMD(this[MODEL_PROP_NAME]) || ''\n return {\n // Selected date\n selectedYMD: selected,\n // Date in calendar grid that has `tabindex` of `0`\n activeYMD:\n selected ||\n 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() {\n return this.safeId()\n },\n widgetId() {\n return this.safeId('_calendar-wrapper_')\n },\n navId() {\n return this.safeId('_calendar-nav_')\n },\n gridId() {\n return this.safeId('_calendar-grid_')\n },\n gridCaptionId() {\n return this.safeId('_calendar-grid-caption_')\n },\n gridHelpId() {\n return this.safeId('_calendar-grid-help_')\n },\n activeId() {\n return this.activeYMD ? this.safeId(`_cell-${this.activeYMD}_`) : null\n },\n // TODO: Use computed props to convert `YYYY-MM-DD` to `Date` object\n selectedDate() {\n // Selected as a `Date` object\n return parseYMD(this.selectedYMD)\n },\n activeDate() {\n // Active as a `Date` object\n return parseYMD(this.activeYMD)\n },\n computedMin() {\n return parseYMD(this.min)\n },\n computedMax() {\n return parseYMD(this.max)\n },\n computedWeekStarts() {\n // `startWeekday` is a prop (constrained to `0` through `6`)\n return mathMax(toInteger(this.startWeekday, 0), 0) % 7\n },\n computedLocale() {\n // Returns the resolved locale used by the calendar\n return resolveLocale(concat(this.locale).filter(identity), CALENDAR_GREGORY)\n },\n computedDateDisabledFn() {\n const { dateDisabledFn } = this\n return hasPropFunction(dateDisabledFn) ? dateDisabledFn : () => false\n },\n // TODO: Change `dateInfoFn` to handle events and notes as well as classes\n computedDateInfoFn() {\n const { dateInfoFn } = this\n return hasPropFunction(dateInfoFn) ? dateInfoFn : () => ({})\n },\n 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 const fmt = new Intl.DateTimeFormat(this.computedLocale, { calendar: CALENDAR_GREGORY })\n const calendar = fmt.resolvedOptions().calendar\n let locale = fmt.resolvedOptions().locale\n /* istanbul ignore if: mainly for IE 11 and a few other browsers, hard to test in JSDOM */\n if (calendar !== CALENDAR_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 return locale\n },\n calendarYear() {\n return this.activeDate.getFullYear()\n },\n calendarMonth() {\n return this.activeDate.getMonth()\n },\n calendarFirstDay() {\n // We set the time for this date to 12pm to work around\n // date formatting issues in Firefox and Safari\n // See: https://github.com/bootstrap-vue/bootstrap-vue/issues/5818\n return createDate(this.calendarYear, this.calendarMonth, 1, 12)\n },\n calendarDaysInMonth() {\n // We create a new date as to not mutate the original\n const date = createDate(this.calendarFirstDay)\n date.setMonth(date.getMonth() + 1, 0)\n return date.getDate()\n },\n computedVariant() {\n return `btn-${this.selectedVariant || 'primary'}`\n },\n computedTodayVariant() {\n return `btn-outline-${this.todayVariant || this.selectedVariant || 'primary'}`\n },\n computedNavButtonVariant() {\n return `btn-outline-${this.navButtonVariant || 'primary'}`\n },\n isRTL() {\n // `true` if the language requested is RTL\n const dir = toString(this.direction).toLowerCase()\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 return isLocaleRTL(this.computedLocale)\n },\n context() {\n const { selectedYMD, activeYMD } = this\n const selectedDate = parseYMD(selectedYMD)\n const activeDate = parseYMD(activeYMD)\n return {\n // The current value of the `v-model`\n selectedYMD,\n selectedDate,\n selectedFormatted: selectedDate\n ? this.formatDateString(selectedDate)\n : this.labelNoDateSelected,\n // Which date cell is considered active due to navigation\n activeYMD,\n 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() {\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 const { computedMin: min, computedMax: max } = this\n return 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() {\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 const rangeFn = this.dateOutOfRange\n // Return the function ref\n return date => {\n // Handle both `YYYY-MM-DD` and `Date` objects\n date = parseYMD(date)\n const ymd = formatYMD(date)\n return !!(rangeFn(date) || this.computedDateDisabledFn(ymd, date))\n }\n },\n // Computed props that return date formatter functions\n formatDateString() {\n // Returns a date formatter function\n return createDateFormatter(this.calendarLocale, {\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: DATE_FORMAT_NUMERIC,\n month: DATE_FORMAT_2_DIGIT,\n day: DATE_FORMAT_2_DIGIT,\n // Merge in user supplied options\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: CALENDAR_GREGORY\n })\n },\n formatYearMonth() {\n // Returns a date formatter function\n return createDateFormatter(this.calendarLocale, {\n year: DATE_FORMAT_NUMERIC,\n month: CALENDAR_LONG,\n calendar: CALENDAR_GREGORY\n })\n },\n formatWeekdayName() {\n // Long weekday name for weekday header aria-label\n return createDateFormatter(this.calendarLocale, {\n weekday: CALENDAR_LONG,\n calendar: CALENDAR_GREGORY\n })\n },\n formatWeekdayNameShort() {\n // Weekday header cell format\n // defaults to 'short' 3 letter days, where possible\n return createDateFormatter(this.calendarLocale, {\n weekday: this.weekdayHeaderFormat || CALENDAR_SHORT,\n calendar: CALENDAR_GREGORY\n })\n },\n 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 const nf = new Intl.NumberFormat([this.computedLocale], {\n style: 'decimal',\n minimumIntegerDigits: 1,\n minimumFractionDigits: 0,\n maximumFractionDigits: 0,\n notation: 'standard'\n })\n // Return a formatter function instance\n return date => nf.format(date.getDate())\n },\n // Disabled states for the nav buttons\n prevDecadeDisabled() {\n const min = this.computedMin\n return this.disabled || (min && lastDateOfMonth(oneDecadeAgo(this.activeDate)) < min)\n },\n prevYearDisabled() {\n const min = this.computedMin\n return this.disabled || (min && lastDateOfMonth(oneYearAgo(this.activeDate)) < min)\n },\n prevMonthDisabled() {\n const min = this.computedMin\n return this.disabled || (min && lastDateOfMonth(oneMonthAgo(this.activeDate)) < min)\n },\n thisMonthDisabled() {\n // TODO: We could/should check if today is out of range\n return this.disabled\n },\n nextMonthDisabled() {\n const max = this.computedMax\n return this.disabled || (max && firstDateOfMonth(oneMonthAhead(this.activeDate)) > max)\n },\n nextYearDisabled() {\n const max = this.computedMax\n return this.disabled || (max && firstDateOfMonth(oneYearAhead(this.activeDate)) > max)\n },\n nextDecadeDisabled() {\n const max = this.computedMax\n return this.disabled || (max && firstDateOfMonth(oneDecadeAhead(this.activeDate)) > max)\n },\n // Calendar dates generation\n calendar() {\n const matrix = []\n const firstDay = this.calendarFirstDay\n const calendarYear = firstDay.getFullYear()\n const calendarMonth = firstDay.getMonth()\n const daysInMonth = this.calendarDaysInMonth\n const startIndex = firstDay.getDay() // `0`..`6`\n const weekOffset = (this.computedWeekStarts > startIndex ? 7 : 0) - this.computedWeekStarts\n // Build the calendar matrix\n let currentDay = 0 - weekOffset - startIndex\n for (let week = 0; week < 6 && currentDay < daysInMonth; week++) {\n // For each week\n matrix[week] = []\n // The following could be a map function\n for (let j = 0; j < 7; j++) {\n // For each day in week\n currentDay++\n const date = createDate(calendarYear, calendarMonth, currentDay)\n const month = date.getMonth()\n const dayYMD = formatYMD(date)\n const dayDisabled = this.dateDisabled(date)\n // TODO: This could be a normalizer method\n let dateInfo = this.computedDateInfoFn(dayYMD, parseYMD(dayYMD))\n dateInfo =\n isString(dateInfo) || isArray(dateInfo)\n ? /* istanbul ignore next */ { class: dateInfo }\n : isPlainObject(dateInfo)\n ? { class: '', ...dateInfo }\n : /* istanbul ignore next */ { class: '' }\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 return matrix\n },\n calendarHeadings() {\n return this.calendar[0].map(d => {\n return {\n text: this.formatWeekdayNameShort(parseYMD(d.ymd)),\n label: this.formatWeekdayName(parseYMD(d.ymd))\n }\n })\n }\n },\n watch: {\n [MODEL_PROP_NAME](newValue, oldValue) {\n const selected = formatYMD(newValue) || ''\n const old = formatYMD(oldValue) || ''\n if (!datesEqual(selected, old)) {\n this.activeYMD = selected || this.activeYMD\n this.selectedYMD = selected\n }\n },\n 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(MODEL_EVENT_NAME, this.valueAsDate ? parseYMD(newYMD) || null : newYMD || '')\n }\n },\n context(newValue, oldValue) {\n if (!looseEqual(newValue, oldValue)) {\n this.$emit(EVENT_NAME_CONTEXT, newValue)\n }\n },\n hidden(newValue) {\n // Reset the active focused day when hidden\n this.activeYMD =\n this.selectedYMD ||\n formatYMD(this[MODEL_PROP_NAME] || this.constrainDate(this.initialDate || this.getToday()))\n // Enable/disable the live regions\n this.setLive(!newValue)\n }\n },\n created() {\n this.$nextTick(() => {\n this.$emit(EVENT_NAME_CONTEXT, this.context)\n })\n },\n mounted() {\n this.setLive(true)\n },\n /* istanbul ignore next */\n activated() {\n this.setLive(true)\n },\n /* istanbul ignore next */\n deactivated() {\n this.setLive(false)\n },\n beforeDestroy() {\n this.setLive(false)\n },\n methods: {\n // Public method(s)\n focus() {\n if (!this.disabled) {\n attemptFocus(this.$refs.grid)\n }\n },\n blur() {\n if (!this.disabled) {\n attemptBlur(this.$refs.grid)\n }\n },\n // Private methods\n setLive(on) {\n if (on) {\n this.$nextTick(() => {\n requestAF(() => {\n this.isLive = true\n })\n })\n } else {\n this.isLive = false\n }\n },\n getToday() {\n return parseYMD(createDate())\n },\n 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(date) {\n // Performed in a `$nextTick()` to (probably) ensure\n // the input event has emitted first\n this.$nextTick(() => {\n this.$emit(EVENT_NAME_SELECTED, formatYMD(date) || '', parseYMD(date) || null)\n })\n },\n // Event handlers\n setGridFocusFlag(event) {\n // Sets the gridHasFocus flag to make date \"button\" look focused\n this.gridHasFocus = !this.disabled && event.type === 'focus'\n },\n onKeydownWrapper(event) {\n // Calendar keyboard navigation\n // Handles PAGEUP/PAGEDOWN/END/HOME/LEFT/UP/RIGHT/DOWN\n // Focuses grid after updating\n if (this.noKeyNav) {\n /* istanbul ignore next */\n return\n }\n const { altKey, ctrlKey, keyCode } = event\n if (\n !arrayIncludes(\n [\n CODE_PAGEUP,\n CODE_PAGEDOWN,\n CODE_END,\n CODE_HOME,\n CODE_LEFT,\n CODE_UP,\n CODE_RIGHT,\n CODE_DOWN\n ],\n keyCode\n )\n ) {\n /* istanbul ignore next */\n return\n }\n stopEvent(event)\n let activeDate = createDate(this.activeDate)\n let checkDate = createDate(this.activeDate)\n const day = activeDate.getDate()\n const constrainedToday = this.constrainDate(this.getToday())\n const isRTL = this.isRTL\n if (keyCode === CODE_PAGEUP) {\n // PAGEUP - Previous month/year\n activeDate = (altKey ? (ctrlKey ? oneDecadeAgo : oneYearAgo) : oneMonthAgo)(activeDate)\n // We check the first day of month to be in rage\n checkDate = createDate(activeDate)\n checkDate.setDate(1)\n } else if (keyCode === CODE_PAGEDOWN) {\n // PAGEDOWN - Next month/year\n activeDate = (altKey ? (ctrlKey ? oneDecadeAhead : oneYearAhead) : oneMonthAhead)(\n activeDate\n )\n // We check the last day of month to be in rage\n checkDate = createDate(activeDate)\n checkDate.setMonth(checkDate.getMonth() + 1)\n checkDate.setDate(0)\n } else if (keyCode === CODE_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 === CODE_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 === CODE_UP) {\n // UP - Previous week\n activeDate.setDate(day - 7)\n activeDate = this.constrainDate(activeDate)\n checkDate = activeDate\n } else if (keyCode === CODE_DOWN) {\n // DOWN - Next week\n activeDate.setDate(day + 7)\n activeDate = this.constrainDate(activeDate)\n checkDate = activeDate\n } else if (keyCode === CODE_HOME) {\n // HOME - Today\n activeDate = constrainedToday\n checkDate = activeDate\n } else if (keyCode === CODE_END) {\n // END - Selected date, or today if no selected date\n activeDate = parseYMD(this.selectedDate) || constrainedToday\n checkDate = activeDate\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 }\n // Ensure grid is focused\n this.focus()\n },\n onKeydownGrid(event) {\n // Pressing enter/space on grid to select active date\n const keyCode = event.keyCode\n const activeDate = this.activeDate\n if (keyCode === CODE_ENTER || keyCode === CODE_SPACE) {\n stopEvent(event)\n if (!this.disabled && !this.readonly && !this.dateDisabled(activeDate)) {\n this.selectedYMD = formatYMD(activeDate)\n this.emitSelected(activeDate)\n }\n // Ensure grid is focused\n this.focus()\n }\n },\n onClickDay(day) {\n // Clicking on a date \"button\" to select it\n const { selectedDate, activeDate } = this\n const clickedDate = parseYMD(day.ymd)\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(\n datesEqual(clickedDate, selectedDate) ? selectedDate : clickedDate\n )\n this.emitSelected(clickedDate)\n }\n this.activeYMD = formatYMD(\n datesEqual(clickedDate, activeDate) ? activeDate : createDate(clickedDate)\n )\n // Ensure grid is focused\n this.focus()\n }\n },\n gotoPrevDecade() {\n this.activeYMD = formatYMD(this.constrainDate(oneDecadeAgo(this.activeDate)))\n },\n gotoPrevYear() {\n this.activeYMD = formatYMD(this.constrainDate(oneYearAgo(this.activeDate)))\n },\n gotoPrevMonth() {\n this.activeYMD = formatYMD(this.constrainDate(oneMonthAgo(this.activeDate)))\n },\n gotoCurrentMonth() {\n // TODO: Maybe this goto date should be configurable?\n this.activeYMD = formatYMD(this.constrainDate(this.getToday()))\n },\n gotoNextMonth() {\n this.activeYMD = formatYMD(this.constrainDate(oneMonthAhead(this.activeDate)))\n },\n gotoNextYear() {\n this.activeYMD = formatYMD(this.constrainDate(oneYearAhead(this.activeDate)))\n },\n gotoNextDecade() {\n this.activeYMD = formatYMD(this.constrainDate(oneDecadeAhead(this.activeDate)))\n },\n onHeaderClick() {\n if (!this.disabled) {\n this.activeYMD = this.selectedYMD || formatYMD(this.getToday())\n this.focus()\n }\n }\n },\n render(h) {\n // If `hidden` prop is set, render just a placeholder node\n if (this.hidden) {\n return h()\n }\n\n const {\n valueId,\n widgetId,\n navId,\n gridId,\n gridCaptionId,\n gridHelpId,\n activeId,\n disabled,\n noKeyNav,\n isLive,\n isRTL,\n activeYMD,\n selectedYMD,\n safeId\n } = this\n const hideDecadeNav = !this.showDecadeNav\n const todayYMD = formatYMD(this.getToday())\n const highlightToday = !this.noHighlightToday\n\n // Header showing current selected date\n let $header = h(\n 'output',\n {\n staticClass: 'form-control form-control-sm text-center',\n class: { 'text-muted': disabled, readonly: this.readonly || disabled },\n attrs: {\n id: valueId,\n for: gridId,\n role: 'status',\n tabindex: 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 },\n this.selectedDate\n ? [\n // 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', { staticClass: 'sr-only' }, ` (${toString(this.labelSelected)}) `),\n h('bdi', this.formatDateString(this.selectedDate))\n ]\n : this.labelNoDateSelected || '\\u00a0' // ' '\n )\n $header = h(\n this.headerTag,\n {\n staticClass: 'b-calendar-header',\n class: { 'sr-only': this.hideHeader },\n attrs: { title: this.selectedDate ? this.labelSelected || null : null }\n },\n [$header]\n )\n\n // Content for the date navigation buttons\n const navScope = { isRTL }\n const navProps = { shiftV: 0.5 }\n const navPrevProps = { ...navProps, flipH: isRTL }\n const navNextProps = { ...navProps, flipH: !isRTL }\n const $prevDecadeIcon =\n this.normalizeSlot(SLOT_NAME_NAV_PEV_DECADE, navScope) ||\n h(BIconChevronBarLeft, { props: navPrevProps })\n const $prevYearIcon =\n this.normalizeSlot(SLOT_NAME_NAV_PEV_YEAR, navScope) ||\n h(BIconChevronDoubleLeft, { props: navPrevProps })\n const $prevMonthIcon =\n this.normalizeSlot(SLOT_NAME_NAV_PEV_MONTH, navScope) ||\n h(BIconChevronLeft, { props: navPrevProps })\n const $thisMonthIcon =\n this.normalizeSlot(SLOT_NAME_NAV_THIS_MONTH, navScope) ||\n h(BIconCircleFill, { props: navProps })\n const $nextMonthIcon =\n this.normalizeSlot(SLOT_NAME_NAV_NEXT_MONTH, navScope) ||\n h(BIconChevronLeft, { props: navNextProps })\n const $nextYearIcon =\n this.normalizeSlot(SLOT_NAME_NAV_NEXT_YEAR, navScope) ||\n h(BIconChevronDoubleLeft, { props: navNextProps })\n const $nextDecadeIcon =\n this.normalizeSlot(SLOT_NAME_NAV_NEXT_DECADE, navScope) ||\n h(BIconChevronBarLeft, { props: navNextProps })\n\n // Utility to create the date navigation buttons\n const makeNavBtn = (content, label, handler, btnDisabled, shortcut) => {\n return h(\n 'button',\n {\n staticClass: 'btn btn-sm border-0 flex-fill',\n class: [this.computedNavButtonVariant, { disabled: btnDisabled }],\n attrs: {\n title: label || null,\n type: 'button',\n tabindex: noKeyNav ? '-1' : null,\n 'aria-label': label || null,\n 'aria-disabled': btnDisabled ? 'true' : null,\n 'aria-keyshortcuts': shortcut || null\n },\n on: btnDisabled ? {} : { click: handler }\n },\n [h('div', { attrs: { 'aria-hidden': 'true' } }, [content])]\n )\n }\n\n // Generate the date navigation buttons\n const $nav = h(\n 'div',\n {\n staticClass: 'b-calendar-nav d-flex',\n attrs: {\n id: navId,\n role: 'group',\n tabindex: noKeyNav ? '-1' : null,\n 'aria-hidden': disabled ? 'true' : null,\n 'aria-label': this.labelNav || null,\n 'aria-controls': gridId\n }\n },\n [\n hideDecadeNav\n ? h()\n : makeNavBtn(\n $prevDecadeIcon,\n this.labelPrevDecade,\n this.gotoPrevDecade,\n this.prevDecadeDisabled,\n 'Ctrl+Alt+PageDown'\n ),\n makeNavBtn(\n $prevYearIcon,\n this.labelPrevYear,\n this.gotoPrevYear,\n this.prevYearDisabled,\n 'Alt+PageDown'\n ),\n makeNavBtn(\n $prevMonthIcon,\n this.labelPrevMonth,\n this.gotoPrevMonth,\n this.prevMonthDisabled,\n 'PageDown'\n ),\n makeNavBtn(\n $thisMonthIcon,\n this.labelCurrentMonth,\n this.gotoCurrentMonth,\n this.thisMonthDisabled,\n 'Home'\n ),\n makeNavBtn(\n $nextMonthIcon,\n this.labelNextMonth,\n this.gotoNextMonth,\n this.nextMonthDisabled,\n 'PageUp'\n ),\n makeNavBtn(\n $nextYearIcon,\n this.labelNextYear,\n this.gotoNextYear,\n this.nextYearDisabled,\n 'Alt+PageUp'\n ),\n hideDecadeNav\n ? h()\n : makeNavBtn(\n $nextDecadeIcon,\n this.labelNextDecade,\n this.gotoNextDecade,\n this.nextDecadeDisabled,\n 'Ctrl+Alt+PageUp'\n )\n ]\n )\n\n // Caption for calendar grid\n const $gridCaption = h(\n 'div',\n {\n staticClass: 'b-calendar-grid-caption text-center font-weight-bold',\n class: { 'text-muted': disabled },\n attrs: {\n id: gridCaptionId,\n 'aria-live': isLive ? 'polite' : null,\n 'aria-atomic': isLive ? 'true' : null\n },\n key: 'grid-caption'\n },\n this.formatYearMonth(this.calendarFirstDay)\n )\n\n // Calendar weekday headings\n const $gridWeekDays = h(\n 'div',\n {\n staticClass: 'b-calendar-grid-weekdays row no-gutters border-bottom',\n attrs: { 'aria-hidden': 'true' }\n },\n this.calendarHeadings.map((d, idx) => {\n return h(\n 'small',\n {\n staticClass: 'col text-truncate',\n class: { 'text-muted': disabled },\n attrs: {\n title: d.label === d.text ? null : d.label,\n 'aria-label': d.label\n },\n key: idx\n },\n d.text\n )\n })\n )\n\n // Calendar day grid\n let $gridBody = this.calendar.map(week => {\n const $cells = week.map((day, dIndex) => {\n const isSelected = day.ymd === selectedYMD\n const isActive = day.ymd === activeYMD\n const isToday = day.ymd === todayYMD\n const idCell = safeId(`_cell-${day.ymd}_`)\n // \"fake\" button\n const $btn = h(\n 'span',\n {\n staticClass: 'btn border-0 rounded-circle text-nowrap',\n // Should we add some classes to signify if today/selected/etc?\n class: {\n // Give the fake button a focus ring\n focus: isActive && this.gridHasFocus,\n // Styling\n disabled: day.isDisabled || disabled,\n active: isSelected, // makes the button look \"pressed\"\n // Selected date style (need to computed from variant)\n [this.computedVariant]: isSelected,\n // Today day style (if not selected), same variant color as selected date\n [this.computedTodayVariant]:\n isToday && highlightToday && !isSelected && day.isThisMonth,\n // Non selected/today styling\n 'btn-outline-light': !(isToday && highlightToday) && !isSelected && !isActive,\n 'btn-light': !(isToday && highlightToday) && !isSelected && isActive,\n // Text styling\n 'text-muted': !day.isThisMonth && !isSelected,\n 'text-dark':\n !(isToday && highlightToday) && !isSelected && !isActive && day.isThisMonth,\n 'font-weight-bold': (isSelected || day.isThisMonth) && !day.isDisabled\n },\n on: { click: () => this.onClickDay(day) }\n },\n day.day\n )\n return h(\n 'div', // Cell with button\n {\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, // 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 || disabled ? 'true' : null,\n 'aria-label': [\n day.label,\n isSelected ? `(${this.labelSelected})` : null,\n isToday ? `(${this.labelToday})` : null\n ]\n .filter(identity)\n .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 key: dIndex\n },\n [$btn]\n )\n })\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 return h(\n 'div',\n {\n staticClass: 'row no-gutters',\n key: week[0].ymd\n },\n $cells\n )\n })\n $gridBody = h(\n 'div',\n {\n // A key is only required on the body if we add in transition support\n staticClass: 'b-calendar-grid-body',\n style: disabled ? { pointerEvents: 'none' } : {}\n // key: this.activeYMD.slice(0, -3)\n },\n $gridBody\n )\n\n const $gridHelp = h(\n 'div',\n {\n staticClass: 'b-calendar-grid-help border-top small text-muted text-center bg-light',\n attrs: {\n id: gridHelpId\n }\n },\n [h('div', { staticClass: 'small' }, this.labelHelp)]\n )\n\n const $grid = h(\n 'div',\n {\n staticClass: 'b-calendar-grid form-control h-auto text-center',\n attrs: {\n id: gridId,\n role: 'application',\n tabindex: noKeyNav ? '-1' : disabled ? null : '0',\n 'data-month': activeYMD.slice(0, -3), // `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 && !disabled ? 'true' : null,\n 'aria-disabled': disabled ? 'true' : null,\n 'aria-activedescendant': activeId\n },\n on: {\n keydown: this.onKeydownGrid,\n focus: this.setGridFocusFlag,\n blur: this.setGridFocusFlag\n },\n ref: 'grid'\n },\n [$gridCaption, $gridWeekDays, $gridBody, $gridHelp]\n )\n\n // Optional bottom slot\n let $slot = this.normalizeSlot()\n $slot = $slot ? h('footer', { staticClass: 'b-calendar-footer' }, $slot) : h()\n\n const $widget = h(\n 'div',\n {\n staticClass: 'b-calendar-inner',\n style: this.block ? {} : { width: this.width },\n attrs: {\n id: widgetId,\n dir: isRTL ? 'rtl' : 'ltr',\n lang: this.computedLocale || null,\n role: 'group',\n 'aria-disabled': 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': [\n // Should the attr (if present) go last?\n // Or should this attr be a prop?\n this.bvAttrs['aria-describedby'],\n valueId,\n gridHelpId\n ]\n .filter(identity)\n .join(' ')\n },\n on: {\n keydown: this.onKeydownWrapper\n }\n },\n [$header, $nav, $grid, $slot]\n )\n\n // Wrap in an outer div that can be styled\n return h('div', { staticClass: 'b-calendar', class: { 'd-block': this.block } }, [$widget])\n }\n})\n","import { BCalendar } from './calendar'\nimport { pluginFactory } from '../../utils/plugins'\n\nconst CalendarPlugin = /*#__PURE__*/ pluginFactory({\n components: { BCalendar }\n})\n\nexport { CalendarPlugin, BCalendar }\n","import { extend } from '../vue'\nimport { NAME_CARD } from '../constants/components'\nimport { PROP_TYPE_STRING } from '../constants/props'\nimport { makeProp, makePropsConfigurable } from '../utils/props'\n\n// --- Props ---\n\nexport const props = makePropsConfigurable(\n {\n bgVariant: makeProp(PROP_TYPE_STRING),\n borderVariant: makeProp(PROP_TYPE_STRING),\n tag: makeProp(PROP_TYPE_STRING, 'div'),\n textVariant: makeProp(PROP_TYPE_STRING)\n },\n NAME_CARD\n)\n\n// --- Mixin ---\n\n// @vue/component\nexport const cardMixin = extend({\n props\n})\n","import { extend, mergeData } from '../../vue'\nimport { NAME_CARD_TITLE } from '../../constants/components'\nimport { PROP_TYPE_STRING } from '../../constants/props'\nimport { makeProp, makePropsConfigurable } from '../../utils/props'\nimport { toString } from '../../utils/string'\n\n// --- Props ---\n\nexport const props = makePropsConfigurable(\n {\n title: makeProp(PROP_TYPE_STRING),\n titleTag: makeProp(PROP_TYPE_STRING, 'h4')\n },\n NAME_CARD_TITLE\n)\n\n// --- Main component ---\n\n// @vue/component\nexport const BCardTitle = /*#__PURE__*/ extend({\n name: NAME_CARD_TITLE,\n functional: true,\n props,\n render(h, { props, data, children }) {\n return h(\n props.titleTag,\n mergeData(data, {\n staticClass: 'card-title'\n }),\n children || toString(props.title)\n )\n }\n})\n","import { extend, mergeData } from '../../vue'\nimport { NAME_CARD_SUB_TITLE } from '../../constants/components'\nimport { PROP_TYPE_STRING } from '../../constants/props'\nimport { makeProp, makePropsConfigurable } from '../../utils/props'\nimport { toString } from '../../utils/string'\n\n// --- Props ---\n\nexport const props = makePropsConfigurable(\n {\n subTitle: makeProp(PROP_TYPE_STRING),\n subTitleTag: makeProp(PROP_TYPE_STRING, 'h6'),\n subTitleTextVariant: makeProp(PROP_TYPE_STRING, 'muted')\n },\n NAME_CARD_SUB_TITLE\n)\n\n// --- Main component ---\n\n// @vue/component\nexport const BCardSubTitle = /*#__PURE__*/ extend({\n name: NAME_CARD_SUB_TITLE,\n functional: true,\n props,\n render(h, { props, data, children }) {\n return h(\n props.subTitleTag,\n mergeData(data, {\n staticClass: 'card-subtitle',\n class: [props.subTitleTextVariant ? `text-${props.subTitleTextVariant}` : null]\n }),\n children || toString(props.subTitle)\n )\n }\n})\n","import { extend, mergeData } from '../../vue'\nimport { NAME_CARD_BODY } from '../../constants/components'\nimport { PROP_TYPE_ARRAY_OBJECT_STRING, PROP_TYPE_BOOLEAN } from '../../constants/props'\nimport { sortKeys } from '../../utils/object'\nimport {\n copyProps,\n makeProp,\n makePropsConfigurable,\n pluckProps,\n prefixPropName\n} from '../../utils/props'\nimport { props as cardProps } from '../../mixins/card'\nimport { BCardTitle, props as titleProps } from './card-title'\nimport { BCardSubTitle, props as subTitleProps } from './card-sub-title'\n\n// --- Props ---\n\nexport const props = makePropsConfigurable(\n sortKeys({\n ...titleProps,\n ...subTitleProps,\n ...copyProps(cardProps, prefixPropName.bind(null, 'body')),\n bodyClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n overlay: makeProp(PROP_TYPE_BOOLEAN, false)\n }),\n NAME_CARD_BODY\n)\n\n// --- Main component ---\n\n// @vue/component\nexport const BCardBody = /*#__PURE__*/ extend({\n name: NAME_CARD_BODY,\n functional: true,\n props,\n render(h, { props, data, children }) {\n const { bodyBgVariant, bodyBorderVariant, bodyTextVariant } = props\n\n let $title = h()\n if (props.title) {\n $title = h(BCardTitle, { props: pluckProps(titleProps, props) })\n }\n\n let $subTitle = h()\n if (props.subTitle) {\n $subTitle = h(BCardSubTitle, {\n props: pluckProps(subTitleProps, props),\n class: ['mb-2']\n })\n }\n\n return h(\n props.bodyTag,\n mergeData(data, {\n staticClass: 'card-body',\n class: [\n {\n 'card-img-overlay': props.overlay,\n [`bg-${bodyBgVariant}`]: bodyBgVariant,\n [`border-${bodyBorderVariant}`]: bodyBorderVariant,\n [`text-${bodyTextVariant}`]: bodyTextVariant\n },\n props.bodyClass\n ]\n }),\n [$title, $subTitle, children]\n )\n }\n})\n","import { extend, mergeData } from '../../vue'\nimport { NAME_CARD_HEADER } from '../../constants/components'\nimport { PROP_TYPE_ARRAY_OBJECT_STRING, PROP_TYPE_STRING } from '../../constants/props'\nimport { htmlOrText } from '../../utils/html'\nimport { sortKeys } from '../../utils/object'\nimport { copyProps, makeProp, makePropsConfigurable, prefixPropName } from '../../utils/props'\nimport { props as BCardProps } from '../../mixins/card'\n\n// --- Props ---\n\nexport const props = makePropsConfigurable(\n sortKeys({\n ...copyProps(BCardProps, prefixPropName.bind(null, 'header')),\n header: makeProp(PROP_TYPE_STRING),\n headerClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n headerHtml: makeProp(PROP_TYPE_STRING)\n }),\n NAME_CARD_HEADER\n)\n\n// --- Main component ---\n\n// @vue/component\nexport const BCardHeader = /*#__PURE__*/ extend({\n name: NAME_CARD_HEADER,\n functional: true,\n props,\n render(h, { props, data, children }) {\n const { headerBgVariant, headerBorderVariant, headerTextVariant } = props\n\n return h(\n props.headerTag,\n mergeData(data, {\n staticClass: 'card-header',\n class: [\n props.headerClass,\n {\n [`bg-${headerBgVariant}`]: headerBgVariant,\n [`border-${headerBorderVariant}`]: headerBorderVariant,\n [`text-${headerTextVariant}`]: headerTextVariant\n }\n ],\n domProps: children ? {} : htmlOrText(props.headerHtml, props.header)\n }),\n children\n )\n }\n})\n","import { extend, mergeData } from '../../vue'\nimport { NAME_CARD_FOOTER } from '../../constants/components'\nimport { PROP_TYPE_ARRAY_OBJECT_STRING, PROP_TYPE_STRING } from '../../constants/props'\nimport { htmlOrText } from '../../utils/html'\nimport { sortKeys } from '../../utils/object'\nimport { copyProps, makeProp, makePropsConfigurable, prefixPropName } from '../../utils/props'\nimport { props as BCardProps } from '../../mixins/card'\n\n// --- Props ---\n\nexport const props = makePropsConfigurable(\n sortKeys({\n ...copyProps(BCardProps, prefixPropName.bind(null, 'footer')),\n footer: makeProp(PROP_TYPE_STRING),\n footerClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n footerHtml: makeProp(PROP_TYPE_STRING)\n }),\n NAME_CARD_FOOTER\n)\n\n// --- Main component ---\n\n// @vue/component\nexport const BCardFooter = /*#__PURE__*/ extend({\n name: NAME_CARD_FOOTER,\n functional: true,\n props,\n render(h, { props, data, children }) {\n const { footerBgVariant, footerBorderVariant, footerTextVariant } = props\n\n return h(\n props.footerTag,\n mergeData(data, {\n staticClass: 'card-footer',\n class: [\n props.footerClass,\n {\n [`bg-${footerBgVariant}`]: footerBgVariant,\n [`border-${footerBorderVariant}`]: footerBorderVariant,\n [`text-${footerTextVariant}`]: footerTextVariant\n }\n ],\n domProps: children ? {} : htmlOrText(props.footerHtml, props.footer)\n }),\n children\n )\n }\n})\n","import { extend, mergeData } from '../../vue'\nimport { NAME_IMG } from '../../constants/components'\nimport {\n PROP_TYPE_ARRAY_STRING,\n PROP_TYPE_BOOLEAN,\n PROP_TYPE_BOOLEAN_STRING,\n PROP_TYPE_NUMBER_STRING,\n PROP_TYPE_STRING\n} from '../../constants/props'\nimport { concat } from '../../utils/array'\nimport { identity } from '../../utils/identity'\nimport { isString } from '../../utils/inspect'\nimport { toInteger } from '../../utils/number'\nimport { makeProp, makePropsConfigurable } from '../../utils/props'\nimport { toString } from '../../utils/string'\n\n// --- Constants --\n\n// Blank image with fill template\nconst BLANK_TEMPLATE =\n ''\n\n// --- Helper methods ---\n\nconst makeBlankImgSrc = (width, height, color) => {\n const src = encodeURIComponent(\n BLANK_TEMPLATE.replace('%{w}', toString(width))\n .replace('%{h}', toString(height))\n .replace('%{f}', color)\n )\n return `data:image/svg+xml;charset=UTF-8,${src}`\n}\n\n// --- Props ---\n\nexport const props = makePropsConfigurable(\n {\n alt: makeProp(PROP_TYPE_STRING),\n blank: makeProp(PROP_TYPE_BOOLEAN, false),\n blankColor: makeProp(PROP_TYPE_STRING, 'transparent'),\n block: makeProp(PROP_TYPE_BOOLEAN, false),\n center: makeProp(PROP_TYPE_BOOLEAN, false),\n fluid: makeProp(PROP_TYPE_BOOLEAN, false),\n // Gives fluid images class `w-100` to make them grow to fit container\n fluidGrow: makeProp(PROP_TYPE_BOOLEAN, false),\n height: makeProp(PROP_TYPE_NUMBER_STRING),\n left: makeProp(PROP_TYPE_BOOLEAN, false),\n right: makeProp(PROP_TYPE_BOOLEAN, false),\n // Possible values:\n // `false`: no rounding of corners\n // `true`: slightly rounded corners\n // 'top': top corners rounded\n // 'right': right corners rounded\n // 'bottom': bottom corners rounded\n // 'left': left corners rounded\n // 'circle': circle/oval\n // '0': force rounding off\n rounded: makeProp(PROP_TYPE_BOOLEAN_STRING, false),\n sizes: makeProp(PROP_TYPE_ARRAY_STRING),\n src: makeProp(PROP_TYPE_STRING),\n srcset: makeProp(PROP_TYPE_ARRAY_STRING),\n thumbnail: makeProp(PROP_TYPE_BOOLEAN, false),\n width: makeProp(PROP_TYPE_NUMBER_STRING)\n },\n NAME_IMG\n)\n\n// --- Main component ---\n\n// @vue/component\nexport const BImg = /*#__PURE__*/ extend({\n name: NAME_IMG,\n functional: true,\n props,\n render(h, { props, data }) {\n let { alt, src, block, fluidGrow, rounded } = props\n let width = toInteger(props.width) || null\n let height = toInteger(props.height) || null\n let align = null\n let srcset = concat(props.srcset)\n .filter(identity)\n .join(',')\n let sizes = concat(props.sizes)\n .filter(identity)\n .join(',')\n\n if (props.blank) {\n if (!height && width) {\n height = width\n } else if (!width && height) {\n width = height\n }\n if (!width && !height) {\n width = 1\n height = 1\n }\n // Make a blank SVG image\n src = makeBlankImgSrc(width, height, props.blankColor || 'transparent')\n // Disable srcset and sizes\n srcset = null\n sizes = null\n }\n if (props.left) {\n align = 'float-left'\n } else if (props.right) {\n align = 'float-right'\n } else if (props.center) {\n align = 'mx-auto'\n block = true\n }\n\n return h(\n 'img',\n mergeData(data, {\n attrs: {\n src,\n alt,\n width: width ? toString(width) : null,\n height: height ? toString(height) : null,\n srcset: srcset || null,\n sizes: sizes || null\n },\n class: {\n 'img-thumbnail': props.thumbnail,\n 'img-fluid': props.fluid || fluidGrow,\n 'w-100': fluidGrow,\n rounded: rounded === '' || rounded === true,\n [`rounded-${rounded}`]: isString(rounded) && rounded !== '',\n [align]: align,\n 'd-block': block\n }\n })\n )\n }\n})\n","import { extend, mergeData } from '../../vue'\nimport { NAME_CARD_IMG } from '../../constants/components'\nimport { PROP_TYPE_BOOLEAN } from '../../constants/props'\nimport { pick, sortKeys } from '../../utils/object'\nimport { makeProp, makePropsConfigurable } from '../../utils/props'\nimport { props as BImgProps } from '../image/img'\n\n// --- Props ---\n\nexport const props = makePropsConfigurable(\n sortKeys({\n ...pick(BImgProps, ['src', 'alt', 'width', 'height', 'left', 'right']),\n bottom: makeProp(PROP_TYPE_BOOLEAN, false),\n end: makeProp(PROP_TYPE_BOOLEAN, false),\n start: makeProp(PROP_TYPE_BOOLEAN, false),\n top: makeProp(PROP_TYPE_BOOLEAN, false)\n }),\n NAME_CARD_IMG\n)\n\n// --- Main component ---\n\n// @vue/component\nexport const BCardImg = /*#__PURE__*/ extend({\n name: NAME_CARD_IMG,\n functional: true,\n props,\n render(h, { props, data }) {\n const { src, alt, width, height } = props\n\n let baseClass = 'card-img'\n if (props.top) {\n baseClass += '-top'\n } else if (props.right || props.end) {\n baseClass += '-right'\n } else if (props.bottom) {\n baseClass += '-bottom'\n } else if (props.left || props.start) {\n baseClass += '-left'\n }\n\n return h(\n 'img',\n mergeData(data, {\n class: baseClass,\n attrs: { src, alt, width, height }\n })\n )\n }\n})\n","import { extend, mergeData } from '../../vue'\nimport { NAME_CARD } from '../../constants/components'\nimport { PROP_TYPE_BOOLEAN, PROP_TYPE_STRING } from '../../constants/props'\nimport { SLOT_NAME_DEFAULT, SLOT_NAME_FOOTER, SLOT_NAME_HEADER } from '../../constants/slots'\nimport { htmlOrText } from '../../utils/html'\nimport { hasNormalizedSlot, normalizeSlot } from '../../utils/normalize-slot'\nimport { sortKeys } from '../../utils/object'\nimport {\n copyProps,\n makeProp,\n makePropsConfigurable,\n pluckProps,\n prefixPropName,\n unprefixPropName\n} from '../../utils/props'\nimport { props as cardProps } from '../../mixins/card'\nimport { BCardBody, props as BCardBodyProps } from './card-body'\nimport { BCardHeader, props as BCardHeaderProps } from './card-header'\nimport { BCardFooter, props as BCardFooterProps } from './card-footer'\nimport { BCardImg, props as BCardImgProps } from './card-img'\n\n// --- Props ---\n\nconst cardImgProps = copyProps(BCardImgProps, prefixPropName.bind(null, 'img'))\ncardImgProps.imgSrc.required = false\n\nexport const props = makePropsConfigurable(\n sortKeys({\n ...BCardBodyProps,\n ...BCardHeaderProps,\n ...BCardFooterProps,\n ...cardImgProps,\n ...cardProps,\n align: makeProp(PROP_TYPE_STRING),\n noBody: makeProp(PROP_TYPE_BOOLEAN, false)\n }),\n NAME_CARD\n)\n\n// --- Main component ---\n\n// @vue/component\nexport const BCard = /*#__PURE__*/ extend({\n name: NAME_CARD,\n functional: true,\n props,\n render(h, { props, data, slots, scopedSlots }) {\n const {\n imgSrc,\n imgLeft,\n imgRight,\n imgStart,\n imgEnd,\n imgBottom,\n header,\n headerHtml,\n footer,\n footerHtml,\n align,\n textVariant,\n bgVariant,\n borderVariant\n } = props\n const $scopedSlots = scopedSlots || {}\n const $slots = slots()\n const slotScope = {}\n\n let $imgFirst = h()\n let $imgLast = h()\n if (imgSrc) {\n const $img = h(BCardImg, {\n props: pluckProps(cardImgProps, props, unprefixPropName.bind(null, 'img'))\n })\n\n if (imgBottom) {\n $imgLast = $img\n } else {\n $imgFirst = $img\n }\n }\n\n let $header = h()\n const hasHeaderSlot = hasNormalizedSlot(SLOT_NAME_HEADER, $scopedSlots, $slots)\n if (hasHeaderSlot || header || headerHtml) {\n $header = h(\n BCardHeader,\n {\n props: pluckProps(BCardHeaderProps, props),\n domProps: hasHeaderSlot ? {} : htmlOrText(headerHtml, header)\n },\n normalizeSlot(SLOT_NAME_HEADER, slotScope, $scopedSlots, $slots)\n )\n }\n\n let $content = normalizeSlot(SLOT_NAME_DEFAULT, slotScope, $scopedSlots, $slots)\n\n // Wrap content in `` when `noBody` prop set\n if (!props.noBody) {\n $content = h(BCardBody, { props: pluckProps(BCardBodyProps, props) }, $content)\n\n // When the `overlap` prop is set we need to wrap the `` and ``\n // into a relative positioned wrapper to don't distract a potential header or footer\n if (props.overlay && imgSrc) {\n $content = h('div', { staticClass: 'position-relative' }, [$imgFirst, $content, $imgLast])\n // Reset image variables since they are already in the wrapper\n $imgFirst = h()\n $imgLast = h()\n }\n }\n\n let $footer = h()\n const hasFooterSlot = hasNormalizedSlot(SLOT_NAME_FOOTER, $scopedSlots, $slots)\n if (hasFooterSlot || footer || footerHtml) {\n $footer = h(\n BCardFooter,\n {\n props: pluckProps(BCardFooterProps, props),\n domProps: hasHeaderSlot ? {} : htmlOrText(footerHtml, footer)\n },\n normalizeSlot(SLOT_NAME_FOOTER, slotScope, $scopedSlots, $slots)\n )\n }\n\n return h(\n props.tag,\n mergeData(data, {\n staticClass: 'card',\n class: {\n 'flex-row': imgLeft || imgStart,\n 'flex-row-reverse': (imgRight || imgEnd) && !(imgLeft || imgStart),\n [`text-${align}`]: align,\n [`bg-${bgVariant}`]: bgVariant,\n [`border-${borderVariant}`]: borderVariant,\n [`text-${textVariant}`]: textVariant\n }\n }),\n [$imgFirst, $header, $content, $footer, $imgLast]\n )\n }\n})\n","// v-b-visible\n// Private visibility check directive\n// Based on IntersectionObserver\n//\n// Usage:\n// v-b-visibility..=\"\"\n//\n// Value:\n// : method to be called when visibility state changes, receives one arg:\n// true: element is visible\n// false: element is not visible\n// null: IntersectionObserver not supported\n//\n// Modifiers:\n// : a positive decimal value of pixels away from viewport edge\n// before being considered \"visible\". default is 0\n// : keyword 'once', meaning when the element becomes visible and\n// callback is called observation/notification will stop.\n//\n// When used in a render function:\n// export default {\n// directives: { 'b-visible': VBVisible },\n// render(h) {\n// h(\n// 'div',\n// {\n// directives: [\n// { name: 'b-visible', value=this.callback, modifiers: { '123':true, 'once':true } }\n// ]\n// }\n// )\n// }\n\nimport { RX_DIGITS } from '../../constants/regex'\nimport { requestAF } from '../../utils/dom'\nimport { isFunction } from '../../utils/inspect'\nimport { looseEqual } from '../../utils/loose-equal'\nimport { clone, keys } from '../../utils/object'\nimport { nextTick } from '../../vue'\n\nconst OBSERVER_PROP_NAME = '__bv__visibility_observer'\n\nclass VisibilityObserver {\n constructor(el, options) {\n this.el = el\n this.callback = options.callback\n this.margin = options.margin || 0\n this.once = options.once || false\n this.observer = null\n this.visible = undefined\n this.doneOnce = false\n // Create the observer instance (if possible)\n this.createObserver()\n }\n\n createObserver() {\n // Remove any previous observer\n if (this.observer) {\n /* istanbul ignore next */\n this.stop()\n }\n\n // Should only be called once and `callback` prop should be a function\n if (this.doneOnce || !isFunction(this.callback)) {\n /* istanbul ignore next */\n return\n }\n\n // Create the observer instance\n try {\n // Future: Possibly add in other modifiers for left/right/top/bottom\n // offsets, root element reference, and thresholds\n this.observer = new IntersectionObserver(this.handler.bind(this), {\n // `null` = 'viewport'\n root: null,\n // Pixels away from view port to consider \"visible\"\n rootMargin: this.margin,\n // Intersection ratio of el and root (as a value from 0 to 1)\n threshold: 0\n })\n } catch {\n // No IntersectionObserver support, so just stop trying to observe\n this.doneOnce = true\n this.observer = undefined\n this.callback(null)\n return\n }\n\n // Start observing in a `$nextTick()` (to allow DOM to complete rendering)\n /* istanbul ignore next: IntersectionObserver not supported in JSDOM */\n nextTick(() => {\n requestAF(() => {\n // Placed in an `if` just in case we were destroyed before\n // this `requestAnimationFrame` runs\n if (this.observer) {\n this.observer.observe(this.el)\n }\n })\n })\n }\n\n /* istanbul ignore next */\n handler(entries) {\n const entry = entries ? entries[0] : {}\n const isIntersecting = Boolean(entry.isIntersecting || entry.intersectionRatio > 0.0)\n if (isIntersecting !== this.visible) {\n this.visible = isIntersecting\n this.callback(isIntersecting)\n if (this.once && this.visible) {\n this.doneOnce = true\n this.stop()\n }\n }\n }\n\n stop() {\n /* istanbul ignore next */\n this.observer && this.observer.disconnect()\n this.observer = null\n }\n}\n\nconst destroy = el => {\n const observer = el[OBSERVER_PROP_NAME]\n if (observer && observer.stop) {\n observer.stop()\n }\n delete el[OBSERVER_PROP_NAME]\n}\n\nconst bind = (el, { value, modifiers }) => {\n // `value` is the callback function\n const options = {\n margin: '0px',\n once: false,\n callback: value\n }\n // Parse modifiers\n keys(modifiers).forEach(mod => {\n /* istanbul ignore else: Until is switched to use this directive */\n if (RX_DIGITS.test(mod)) {\n options.margin = `${mod}px`\n } else if (mod.toLowerCase() === 'once') {\n options.once = true\n }\n })\n // Destroy any previous observer\n destroy(el)\n // Create new observer\n el[OBSERVER_PROP_NAME] = new VisibilityObserver(el, options)\n // Store the current modifiers on the object (cloned)\n el[OBSERVER_PROP_NAME]._prevModifiers = clone(modifiers)\n}\n\n// When the directive options may have been updated (or element)\nconst componentUpdated = (el, { value, oldValue, modifiers }, vnode) => {\n // Compare value/oldValue and modifiers to see if anything has changed\n // and if so, destroy old observer and create new observer\n /* istanbul ignore next */\n modifiers = clone(modifiers)\n /* istanbul ignore next */\n if (\n el &&\n (value !== oldValue ||\n !el[OBSERVER_PROP_NAME] ||\n !looseEqual(modifiers, el[OBSERVER_PROP_NAME]._prevModifiers))\n ) {\n // Re-bind on element\n bind(el, { value, modifiers }, vnode)\n }\n}\n\n// When directive un-binds from element\nconst unbind = el => {\n // Remove the observer\n destroy(el)\n}\n\n// Export the directive\nexport const VBVisible = {\n bind,\n componentUpdated,\n unbind\n}\n","import { extend } from '../../vue'\nimport { NAME_IMG_LAZY } from '../../constants/components'\nimport { HAS_INTERACTION_OBSERVER_SUPPORT } from '../../constants/env'\nimport { MODEL_EVENT_NAME_PREFIX } from '../../constants/events'\nimport { PROP_TYPE_BOOLEAN, PROP_TYPE_NUMBER_STRING, PROP_TYPE_STRING } from '../../constants/props'\nimport { concat } from '../../utils/array'\nimport { requestAF } from '../../utils/dom'\nimport { identity } from '../../utils/identity'\nimport { toInteger } from '../../utils/number'\nimport { omit } from '../../utils/object'\nimport { makeProp, makePropsConfigurable, pluckProps } from '../../utils/props'\nimport { VBVisible } from '../../directives/visible/visible'\nimport { BImg, props as BImgProps } from './img'\n\n// --- Constants ---\n\nconst MODEL_PROP_NAME_SHOW = 'show'\nconst MODEL_EVENT_NAME_SHOW = MODEL_EVENT_NAME_PREFIX + MODEL_PROP_NAME_SHOW\n\n// --- Props ---\n\nconst imgProps = omit(BImgProps, ['blank'])\n\nexport const props = makePropsConfigurable(\n {\n ...imgProps,\n blankHeight: makeProp(PROP_TYPE_NUMBER_STRING),\n // If `null`, a blank image is generated\n blankSrc: makeProp(PROP_TYPE_STRING, null),\n blankWidth: makeProp(PROP_TYPE_NUMBER_STRING),\n // Distance away from viewport (in pixels)\n // before being considered \"visible\"\n offset: makeProp(PROP_TYPE_NUMBER_STRING, 360),\n [MODEL_PROP_NAME_SHOW]: makeProp(PROP_TYPE_BOOLEAN, false)\n },\n NAME_IMG_LAZY\n)\n\n// --- Main component ---\n\n// @vue/component\nexport const BImgLazy = /*#__PURE__*/ extend({\n name: NAME_IMG_LAZY,\n directives: {\n 'b-visible': VBVisible\n },\n props,\n data() {\n return {\n isShown: this[MODEL_PROP_NAME_SHOW]\n }\n },\n computed: {\n computedSrc() {\n const { blankSrc } = this\n return !blankSrc || this.isShown ? this.src : blankSrc\n },\n computedBlank() {\n return !(this.isShown || this.blankSrc)\n },\n computedWidth() {\n const { width } = this\n return this.isShown ? width : this.blankWidth || width\n },\n computedHeight() {\n const { height } = this\n return this.isShown ? height : this.blankHeight || height\n },\n computedSrcset() {\n const srcset = concat(this.srcset)\n .filter(identity)\n .join(',')\n\n return srcset && (!this.blankSrc || this.isShown) ? srcset : null\n },\n computedSizes() {\n const sizes = concat(this.sizes)\n .filter(identity)\n .join(',')\n\n return sizes && (!this.blankSrc || this.isShown) ? sizes : null\n }\n },\n watch: {\n [MODEL_PROP_NAME_SHOW](newValue, oldValue) {\n if (newValue !== oldValue) {\n // If `IntersectionObserver` support is not available, image is always shown\n const visible = HAS_INTERACTION_OBSERVER_SUPPORT ? newValue : true\n\n this.isShown = visible\n\n // Ensure the show prop is synced (when no `IntersectionObserver`)\n if (newValue !== visible) {\n this.$nextTick(this.updateShowProp)\n }\n }\n },\n isShown(newValue, oldValue) {\n // Update synched show prop\n if (newValue !== oldValue) {\n this.updateShowProp()\n }\n }\n },\n mounted() {\n // If `IntersectionObserver` is not available, image is always shown\n this.$nextTick(() => {\n this.isShown = HAS_INTERACTION_OBSERVER_SUPPORT ? this[MODEL_PROP_NAME_SHOW] : true\n })\n },\n methods: {\n updateShowProp() {\n this.$emit(MODEL_EVENT_NAME_SHOW, this.isShown)\n },\n doShow(visible) {\n // If IntersectionObserver is not supported, the callback\n // will be called with `null` rather than `true` or `false`\n if ((visible || visible === null) && !this.isShown) {\n // In a `requestAF()` to render the `blank` placeholder properly\n // for fast loading images in some browsers (i.e. Firefox)\n requestAF(() => {\n this.isShown = true\n })\n }\n }\n },\n render(h) {\n const directives = []\n if (!this.isShown) {\n // We only add the visible directive if we are not shown\n directives.push({\n // Visible directive will silently do nothing if\n // `IntersectionObserver` is not supported\n name: 'b-visible',\n // Value expects a callback (passed one arg of `visible` = `true` or `false`)\n value: this.doShow,\n modifiers: {\n // Root margin from viewport\n [`${toInteger(this.offset, 0)}`]: true,\n // Once the image is shown, stop observing\n once: true\n }\n })\n }\n\n return h(BImg, {\n directives,\n props: {\n // Passthrough props\n ...pluckProps(imgProps, this.$props),\n // Computed value props\n src: this.computedSrc,\n blank: this.computedBlank,\n width: this.computedWidth,\n height: this.computedHeight,\n srcset: this.computedSrcset,\n sizes: this.computedSizes\n }\n })\n }\n})\n","import { extend, mergeData } from '../../vue'\nimport { NAME_CARD_IMG_LAZY } from '../../constants/components'\nimport { keys, omit, sortKeys } from '../../utils/object'\nimport { makePropsConfigurable } from '../../utils/props'\nimport { props as BImgProps } from '../image/img'\nimport { BImgLazy, props as BImgLazyProps } from '../image/img-lazy'\nimport { props as BCardImgProps } from './card-img'\n\n// --- Props ---\n\nexport const props = makePropsConfigurable(\n sortKeys({\n ...omit(BImgLazyProps, keys(BImgProps)),\n ...omit(BCardImgProps, ['src', 'alt', 'width', 'height'])\n }),\n NAME_CARD_IMG_LAZY\n)\n\n// --- Main component ---\n\n// @vue/component\nexport const BCardImgLazy = /*#__PURE__*/ extend({\n name: NAME_CARD_IMG_LAZY,\n functional: true,\n props,\n render(h, { props, data }) {\n let baseClass = 'card-img'\n if (props.top) {\n baseClass += '-top'\n } else if (props.right || props.end) {\n baseClass += '-right'\n } else if (props.bottom) {\n baseClass += '-bottom'\n } else if (props.left || props.start) {\n baseClass += '-left'\n }\n\n return h(\n BImgLazy,\n mergeData(data, {\n class: [baseClass],\n // Exclude `left` and `right` props before passing to ``\n props: omit(props, ['left', 'right'])\n })\n )\n }\n})\n","import { extend, mergeData } from '../../vue'\nimport { NAME_CARD_TEXT } from '../../constants/components'\nimport { PROP_TYPE_STRING } from '../../constants/props'\nimport { makeProp, makePropsConfigurable } from '../../utils/props'\n\n// --- Props ---\n\nexport const props = makePropsConfigurable(\n {\n textTag: makeProp(PROP_TYPE_STRING, 'p')\n },\n NAME_CARD_TEXT\n)\n\n// --- Main component ---\n\n// @vue/component\nexport const BCardText = /*#__PURE__*/ extend({\n name: NAME_CARD_TEXT,\n functional: true,\n props,\n render(h, { props, data, children }) {\n return h(props.textTag, mergeData(data, { staticClass: 'card-text' }), children)\n }\n})\n","import { extend, mergeData } from '../../vue'\nimport { NAME_CARD_GROUP } from '../../constants/components'\nimport { PROP_TYPE_BOOLEAN, PROP_TYPE_STRING } from '../../constants/props'\nimport { makeProp, makePropsConfigurable } from '../../utils/props'\n\n// --- Props ---\n\nexport const props = makePropsConfigurable(\n {\n columns: makeProp(PROP_TYPE_BOOLEAN, false),\n deck: makeProp(PROP_TYPE_BOOLEAN, false),\n tag: makeProp(PROP_TYPE_STRING, 'div')\n },\n NAME_CARD_GROUP\n)\n\n// --- Main component ---\n\n// @vue/component\nexport const BCardGroup = /*#__PURE__*/ extend({\n name: NAME_CARD_GROUP,\n functional: true,\n props,\n render(h, { props, data, children }) {\n return h(\n props.tag,\n mergeData(data, {\n class: props.deck ? 'card-deck' : props.columns ? 'card-columns' : 'card-group'\n }),\n children\n )\n }\n})\n","import { BCard } from './card'\nimport { BCardHeader } from './card-header'\nimport { BCardBody } from './card-body'\nimport { BCardTitle } from './card-title'\nimport { BCardSubTitle } from './card-sub-title'\nimport { BCardFooter } from './card-footer'\nimport { BCardImg } from './card-img'\nimport { BCardImgLazy } from './card-img-lazy'\nimport { BCardText } from './card-text'\nimport { BCardGroup } from './card-group'\nimport { pluginFactory } from '../../utils/plugins'\n\nconst CardPlugin = /*#__PURE__*/ pluginFactory({\n components: {\n BCard,\n BCardHeader,\n BCardBody,\n BCardTitle,\n BCardSubTitle,\n BCardFooter,\n BCardImg,\n BCardImgLazy,\n BCardText,\n BCardGroup\n }\n})\n\nexport {\n CardPlugin,\n BCard,\n BCardHeader,\n BCardBody,\n BCardTitle,\n BCardSubTitle,\n BCardFooter,\n BCardImg,\n BCardImgLazy,\n BCardText,\n BCardGroup\n}\n","export const noop = () => {}\n","import { MutationObs, isElement } from './dom'\nimport { warnNoMutationObserverSupport } from './warn'\n\n/**\n * Observe a DOM element changes, falls back to eventListener mode\n * @param {Element} el The DOM element to observe\n * @param {Function} callback callback to be called on change\n * @param {object} [options={childList: true, subtree: true}] observe options\n * @see https://stackoverflow.com/questions/3219758\n */\nexport const observeDom = (\n el,\n callback,\n options\n) => /* istanbul ignore next: difficult to test in JSDOM */ {\n // Handle cases where we might be passed a Vue instance\n el = el ? el.$el || el : null\n\n // Early exit when we have no element\n /* istanbul ignore next: difficult to test in JSDOM */\n if (!isElement(el)) {\n return null\n }\n\n // Exit and throw a warning when `MutationObserver` isn't available\n if (warnNoMutationObserverSupport('observeDom')) {\n return null\n }\n\n // Define a new observer\n const obs = new MutationObs(mutations => {\n let changed = false\n\n // A mutation can contain several change records, so we loop\n // through them to see what has changed\n // We break out of the loop early if any \"significant\" change\n // has been detected\n for (let i = 0; i < mutations.length && !changed; i++) {\n // The mutation record\n const mutation = mutations[i]\n // Mutation type\n const type = mutation.type\n // DOM node (could be any DOM node type - HTMLElement, Text, comment, etc.)\n const target = mutation.target\n\n // Detect whether a change happened based on type and target\n if (type === 'characterData' && target.nodeType === Node.TEXT_NODE) {\n // We ignore nodes that are not TEXT (i.e. comments, etc.)\n // as they don't change layout\n changed = true\n } else if (type === 'attributes') {\n changed = true\n } else if (\n type === 'childList' &&\n (mutation.addedNodes.length > 0 || mutation.removedNodes.length > 0)\n ) {\n // This includes HTMLElement and text nodes being\n // added/removed/re-arranged\n changed = true\n }\n }\n\n // We only call the callback if a change that could affect\n // layout/size truly happened\n if (changed) {\n callback()\n }\n })\n\n // Have the observer observe foo for changes in children, etc\n obs.observe(el, { childList: true, subtree: true, ...options })\n\n // We return a reference to the observer so that `obs.disconnect()`\n // can be called if necessary\n // To reduce overhead when the root element is hidden\n return obs\n}\n","import { extend } from '../../vue'\nimport { NAME_CAROUSEL } from '../../constants/components'\nimport { IS_BROWSER, HAS_POINTER_EVENT_SUPPORT, HAS_TOUCH_SUPPORT } from '../../constants/env'\nimport {\n EVENT_NAME_PAUSED,\n EVENT_NAME_SLIDING_END,\n EVENT_NAME_SLIDING_START,\n EVENT_NAME_UNPAUSED,\n EVENT_OPTIONS_NO_CAPTURE\n} from '../../constants/events'\nimport { CODE_ENTER, CODE_LEFT, CODE_RIGHT, CODE_SPACE } from '../../constants/key-codes'\nimport {\n PROP_TYPE_BOOLEAN,\n PROP_TYPE_NUMBER,\n PROP_TYPE_NUMBER_STRING,\n PROP_TYPE_STRING\n} from '../../constants/props'\nimport {\n addClass,\n getActiveElement,\n reflow,\n removeClass,\n requestAF,\n selectAll,\n setAttr\n} from '../../utils/dom'\nimport { eventOn, eventOff, stopEvent } from '../../utils/events'\nimport { isUndefined } from '../../utils/inspect'\nimport { mathAbs, mathFloor, mathMax, mathMin } from '../../utils/math'\nimport { makeModelMixin } from '../../utils/model'\nimport { toInteger } from '../../utils/number'\nimport { noop } from '../../utils/noop'\nimport { sortKeys } from '../../utils/object'\nimport { observeDom } from '../../utils/observe-dom'\nimport { makeProp, makePropsConfigurable } from '../../utils/props'\nimport { idMixin, props as idProps } from '../../mixins/id'\nimport { normalizeSlotMixin } from '../../mixins/normalize-slot'\n\n// --- Constants ---\n\nconst {\n mixin: modelMixin,\n props: modelProps,\n prop: MODEL_PROP_NAME,\n event: MODEL_EVENT_NAME\n} = makeModelMixin('value', {\n type: PROP_TYPE_NUMBER,\n defaultValue: 0\n})\n\n// Slide directional classes\nconst DIRECTION = {\n next: {\n dirClass: 'carousel-item-left',\n overlayClass: 'carousel-item-next'\n },\n prev: {\n dirClass: 'carousel-item-right',\n overlayClass: 'carousel-item-prev'\n }\n}\n\n// Fallback Transition duration (with a little buffer) in ms\nconst TRANS_DURATION = 600 + 50\n\n// Time for mouse compat events to fire after touch\nconst TOUCH_EVENT_COMPAT_WAIT = 500\n\n// Number of pixels to consider touch move a swipe\nconst SWIPE_THRESHOLD = 40\n\n// PointerEvent pointer types\nconst PointerType = {\n TOUCH: 'touch',\n PEN: 'pen'\n}\n\n// Transition Event names\nconst TransitionEndEvents = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'otransitionend oTransitionEnd',\n transition: 'transitionend'\n}\n\n// --- Helper methods ---\n\n// Return the browser specific transitionEnd event name\nconst getTransitionEndEvent = el => {\n for (const name in TransitionEndEvents) {\n if (!isUndefined(el.style[name])) {\n return TransitionEndEvents[name]\n }\n }\n // Fallback\n /* istanbul ignore next */\n return null\n}\n\n// --- Props ---\n\nexport const props = makePropsConfigurable(\n sortKeys({\n ...idProps,\n ...modelProps,\n background: makeProp(PROP_TYPE_STRING),\n controls: makeProp(PROP_TYPE_BOOLEAN, false),\n // Enable cross-fade animation instead of slide animation\n fade: makeProp(PROP_TYPE_BOOLEAN, false),\n // Sniffed by carousel-slide\n imgHeight: makeProp(PROP_TYPE_NUMBER_STRING),\n // Sniffed by carousel-slide\n imgWidth: makeProp(PROP_TYPE_NUMBER_STRING),\n indicators: makeProp(PROP_TYPE_BOOLEAN, false),\n interval: makeProp(PROP_TYPE_NUMBER, 5000),\n labelGotoSlide: makeProp(PROP_TYPE_STRING, 'Goto slide'),\n labelIndicators: makeProp(PROP_TYPE_STRING, 'Select a slide to display'),\n labelNext: makeProp(PROP_TYPE_STRING, 'Next slide'),\n labelPrev: makeProp(PROP_TYPE_STRING, 'Previous slide'),\n // Disable slide/fade animation\n noAnimation: makeProp(PROP_TYPE_BOOLEAN, false),\n // Disable pause on hover\n noHoverPause: makeProp(PROP_TYPE_BOOLEAN, false),\n // Sniffed by carousel-slide\n noTouch: makeProp(PROP_TYPE_BOOLEAN, false),\n // Disable wrapping/looping when start/end is reached\n noWrap: makeProp(PROP_TYPE_BOOLEAN, false)\n }),\n NAME_CAROUSEL\n)\n\n// --- Main component ---\n\n// @vue/component\nexport const BCarousel = /*#__PURE__*/ extend({\n name: NAME_CAROUSEL,\n mixins: [idMixin, modelMixin, normalizeSlotMixin],\n provide() {\n return { getBvCarousel: () => this }\n },\n props,\n data() {\n return {\n index: this[MODEL_PROP_NAME] || 0,\n isSliding: false,\n transitionEndEvent: null,\n slides: [],\n direction: null,\n isPaused: !(toInteger(this.interval, 0) > 0),\n // Touch event handling values\n touchStartX: 0,\n touchDeltaX: 0\n }\n },\n computed: {\n numSlides() {\n return this.slides.length\n }\n },\n watch: {\n [MODEL_PROP_NAME](newValue, oldValue) {\n if (newValue !== oldValue) {\n this.setSlide(toInteger(newValue, 0))\n }\n },\n interval(newValue, oldValue) {\n /* istanbul ignore next */\n if (newValue === oldValue) {\n return\n }\n if (!newValue) {\n // Pausing slide show\n this.pause(false)\n } else {\n // Restarting or Changing interval\n this.pause(true)\n this.start(false)\n }\n },\n isPaused(newValue, oldValue) {\n if (newValue !== oldValue) {\n this.$emit(newValue ? EVENT_NAME_PAUSED : EVENT_NAME_UNPAUSED)\n }\n },\n index(to, from) {\n /* istanbul ignore next */\n if (to === from || this.isSliding) {\n return\n }\n this.doSlide(to, from)\n }\n },\n created() {\n // Create private non-reactive props\n this.$_interval = null\n this.$_animationTimeout = null\n this.$_touchTimeout = null\n this.$_observer = null\n // Set initial paused state\n this.isPaused = !(toInteger(this.interval, 0) > 0)\n },\n mounted() {\n // Cache current browser transitionend event name\n this.transitionEndEvent = getTransitionEndEvent(this.$el) || null\n // Get all slides\n this.updateSlides()\n // Observe child changes so we can update slide list\n this.setObserver(true)\n },\n beforeDestroy() {\n this.clearInterval()\n this.clearAnimationTimeout()\n this.clearTouchTimeout()\n this.setObserver(false)\n },\n methods: {\n clearInterval() {\n clearInterval(this.$_interval)\n this.$_interval = null\n },\n clearAnimationTimeout() {\n clearTimeout(this.$_animationTimeout)\n this.$_animationTimeout = null\n },\n clearTouchTimeout() {\n clearTimeout(this.$_touchTimeout)\n this.$_touchTimeout = null\n },\n setObserver(on = false) {\n this.$_observer && this.$_observer.disconnect()\n this.$_observer = null\n if (on) {\n this.$_observer = observeDom(this.$refs.inner, this.updateSlides.bind(this), {\n subtree: false,\n childList: true,\n attributes: true,\n attributeFilter: ['id']\n })\n }\n },\n // Set slide\n setSlide(slide, direction = null) {\n // Don't animate when page is not visible\n /* istanbul ignore if: difficult to test */\n if (IS_BROWSER && document.visibilityState && document.hidden) {\n return\n }\n const noWrap = this.noWrap\n const numSlides = this.numSlides\n // Make sure we have an integer (you never know!)\n slide = mathFloor(slide)\n // Don't do anything if nothing to slide to\n if (numSlides === 0) {\n return\n }\n // Don't change slide while transitioning, wait until transition is done\n if (this.isSliding) {\n // Schedule slide after sliding complete\n this.$once(EVENT_NAME_SLIDING_END, () => {\n // Wrap in `requestAF()` to allow the slide to properly finish to avoid glitching\n requestAF(() => this.setSlide(slide, direction))\n })\n return\n }\n this.direction = direction\n // Set new slide index\n // Wrap around if necessary (if no-wrap not enabled)\n this.index =\n slide >= numSlides\n ? noWrap\n ? numSlides - 1\n : 0\n : slide < 0\n ? noWrap\n ? 0\n : numSlides - 1\n : slide\n // Ensure the v-model is synched up if no-wrap is enabled\n // and user tried to slide pass either ends\n if (noWrap && this.index !== slide && this.index !== this[MODEL_PROP_NAME]) {\n this.$emit(MODEL_EVENT_NAME, this.index)\n }\n },\n // Previous slide\n prev() {\n this.setSlide(this.index - 1, 'prev')\n },\n // Next slide\n next() {\n this.setSlide(this.index + 1, 'next')\n },\n // Pause auto rotation\n pause(event) {\n if (!event) {\n this.isPaused = true\n }\n this.clearInterval()\n },\n // Start auto rotate slides\n start(event) {\n if (!event) {\n this.isPaused = false\n }\n /* istanbul ignore next: most likely will never happen, but just in case */\n this.clearInterval()\n // Don't start if no interval, or less than 2 slides\n if (this.interval && this.numSlides > 1) {\n this.$_interval = setInterval(this.next, mathMax(1000, this.interval))\n }\n },\n // Restart auto rotate slides when focus/hover leaves the carousel\n /* istanbul ignore next */\n restart() {\n if (!this.$el.contains(getActiveElement())) {\n this.start()\n }\n },\n doSlide(to, from) {\n const isCycling = Boolean(this.interval)\n // Determine sliding direction\n const direction = this.calcDirection(this.direction, from, to)\n const overlayClass = direction.overlayClass\n const dirClass = direction.dirClass\n // Determine current and next slides\n const currentSlide = this.slides[from]\n const nextSlide = this.slides[to]\n // Don't do anything if there aren't any slides to slide to\n if (!currentSlide || !nextSlide) {\n /* istanbul ignore next */\n return\n }\n // Start animating\n this.isSliding = true\n if (isCycling) {\n this.pause(false)\n }\n this.$emit(EVENT_NAME_SLIDING_START, to)\n // Update v-model\n this.$emit(MODEL_EVENT_NAME, this.index)\n if (this.noAnimation) {\n addClass(nextSlide, 'active')\n removeClass(currentSlide, 'active')\n this.isSliding = false\n // Notify ourselves that we're done sliding (slid)\n this.$nextTick(() => this.$emit(EVENT_NAME_SLIDING_END, to))\n } else {\n addClass(nextSlide, overlayClass)\n // Trigger a reflow of next slide\n reflow(nextSlide)\n addClass(currentSlide, dirClass)\n addClass(nextSlide, dirClass)\n // Transition End handler\n let called = false\n /* istanbul ignore next: difficult to test */\n const onceTransEnd = () => {\n if (called) {\n return\n }\n called = true\n /* istanbul ignore if: transition events cant be tested in JSDOM */\n if (this.transitionEndEvent) {\n const events = this.transitionEndEvent.split(/\\s+/)\n events.forEach(event =>\n eventOff(nextSlide, event, onceTransEnd, EVENT_OPTIONS_NO_CAPTURE)\n )\n }\n this.clearAnimationTimeout()\n removeClass(nextSlide, dirClass)\n removeClass(nextSlide, overlayClass)\n addClass(nextSlide, 'active')\n removeClass(currentSlide, 'active')\n removeClass(currentSlide, dirClass)\n removeClass(currentSlide, overlayClass)\n setAttr(currentSlide, 'aria-current', 'false')\n setAttr(nextSlide, 'aria-current', 'true')\n setAttr(currentSlide, 'aria-hidden', 'true')\n setAttr(nextSlide, 'aria-hidden', 'false')\n this.isSliding = false\n this.direction = null\n // Notify ourselves that we're done sliding (slid)\n this.$nextTick(() => this.$emit(EVENT_NAME_SLIDING_END, to))\n }\n // Set up transitionend handler\n /* istanbul ignore if: transition events cant be tested in JSDOM */\n if (this.transitionEndEvent) {\n const events = this.transitionEndEvent.split(/\\s+/)\n events.forEach(event => eventOn(nextSlide, event, onceTransEnd, EVENT_OPTIONS_NO_CAPTURE))\n }\n // Fallback to setTimeout()\n this.$_animationTimeout = setTimeout(onceTransEnd, TRANS_DURATION)\n }\n if (isCycling) {\n this.start(false)\n }\n },\n // Update slide list\n updateSlides() {\n this.pause(true)\n // Get all slides as DOM elements\n this.slides = selectAll('.carousel-item', this.$refs.inner)\n const numSlides = this.slides.length\n // Keep slide number in range\n const index = mathMax(0, mathMin(mathFloor(this.index), numSlides - 1))\n this.slides.forEach((slide, idx) => {\n const n = idx + 1\n if (idx === index) {\n addClass(slide, 'active')\n setAttr(slide, 'aria-current', 'true')\n } else {\n removeClass(slide, 'active')\n setAttr(slide, 'aria-current', 'false')\n }\n setAttr(slide, 'aria-posinset', String(n))\n setAttr(slide, 'aria-setsize', String(numSlides))\n })\n // Set slide as active\n this.setSlide(index)\n this.start(this.isPaused)\n },\n calcDirection(direction = null, curIndex = 0, nextIndex = 0) {\n if (!direction) {\n return nextIndex > curIndex ? DIRECTION.next : DIRECTION.prev\n }\n return DIRECTION[direction]\n },\n handleClick(event, fn) {\n const keyCode = event.keyCode\n if (event.type === 'click' || keyCode === CODE_SPACE || keyCode === CODE_ENTER) {\n stopEvent(event)\n fn()\n }\n },\n /* istanbul ignore next: JSDOM doesn't support touch events */\n handleSwipe() {\n const absDeltaX = mathAbs(this.touchDeltaX)\n if (absDeltaX <= SWIPE_THRESHOLD) {\n return\n }\n const direction = absDeltaX / this.touchDeltaX\n // Reset touch delta X\n // https://github.com/twbs/bootstrap/pull/28558\n this.touchDeltaX = 0\n if (direction > 0) {\n // Swipe left\n this.prev()\n } else if (direction < 0) {\n // Swipe right\n this.next()\n }\n },\n /* istanbul ignore next: JSDOM doesn't support touch events */\n touchStart(event) {\n if (HAS_POINTER_EVENT_SUPPORT && PointerType[event.pointerType.toUpperCase()]) {\n this.touchStartX = event.clientX\n } else if (!HAS_POINTER_EVENT_SUPPORT) {\n this.touchStartX = event.touches[0].clientX\n }\n },\n /* istanbul ignore next: JSDOM doesn't support touch events */\n touchMove(event) {\n // Ensure swiping with one touch and not pinching\n if (event.touches && event.touches.length > 1) {\n this.touchDeltaX = 0\n } else {\n this.touchDeltaX = event.touches[0].clientX - this.touchStartX\n }\n },\n /* istanbul ignore next: JSDOM doesn't support touch events */\n touchEnd(event) {\n if (HAS_POINTER_EVENT_SUPPORT && PointerType[event.pointerType.toUpperCase()]) {\n this.touchDeltaX = event.clientX - this.touchStartX\n }\n this.handleSwipe()\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n this.pause(false)\n this.clearTouchTimeout()\n this.$_touchTimeout = setTimeout(\n this.start,\n TOUCH_EVENT_COMPAT_WAIT + mathMax(1000, this.interval)\n )\n }\n },\n render(h) {\n const {\n indicators,\n background,\n noAnimation,\n noHoverPause,\n noTouch,\n index,\n isSliding,\n pause,\n restart,\n touchStart,\n touchEnd\n } = this\n const idInner = this.safeId('__BV_inner_')\n\n // Wrapper for slides\n const $inner = h(\n 'div',\n {\n staticClass: 'carousel-inner',\n attrs: {\n id: idInner,\n role: 'list'\n },\n ref: 'inner'\n },\n [this.normalizeSlot()]\n )\n\n // Prev and next controls\n let $controls = h()\n if (this.controls) {\n const makeControl = (direction, label, handler) => {\n const handlerWrapper = event => {\n /* istanbul ignore next */\n if (!isSliding) {\n this.handleClick(event, handler)\n } else {\n stopEvent(event, { propagation: false })\n }\n }\n\n return h(\n 'a',\n {\n staticClass: `carousel-control-${direction}`,\n attrs: {\n href: '#',\n role: 'button',\n 'aria-controls': idInner,\n 'aria-disabled': isSliding ? 'true' : null\n },\n on: {\n click: handlerWrapper,\n keydown: handlerWrapper\n }\n },\n [\n h('span', {\n staticClass: `carousel-control-${direction}-icon`,\n attrs: { 'aria-hidden': 'true' }\n }),\n h('span', { class: 'sr-only' }, [label])\n ]\n )\n }\n\n $controls = [\n makeControl('prev', this.labelPrev, this.prev),\n makeControl('next', this.labelNext, this.next)\n ]\n }\n\n // Indicators\n const $indicators = h(\n 'ol',\n {\n staticClass: 'carousel-indicators',\n directives: [{ name: 'show', value: indicators }],\n attrs: {\n id: this.safeId('__BV_indicators_'),\n 'aria-hidden': indicators ? 'false' : 'true',\n 'aria-label': this.labelIndicators,\n 'aria-owns': idInner\n }\n },\n this.slides.map((slide, i) => {\n const handler = event => {\n this.handleClick(event, () => {\n this.setSlide(i)\n })\n }\n\n return h('li', {\n class: { active: i === index },\n attrs: {\n role: 'button',\n id: this.safeId(`__BV_indicator_${i + 1}_`),\n tabindex: indicators ? '0' : '-1',\n 'aria-current': i === index ? 'true' : 'false',\n 'aria-label': `${this.labelGotoSlide} ${i + 1}`,\n 'aria-describedby': slide.id || null,\n 'aria-controls': idInner\n },\n on: {\n click: handler,\n keydown: handler\n },\n key: `slide_${i}`\n })\n })\n )\n\n const on = {\n mouseenter: noHoverPause ? noop : pause,\n mouseleave: noHoverPause ? noop : restart,\n focusin: pause,\n focusout: restart,\n keydown: event => {\n /* istanbul ignore next */\n if (/input|textarea/i.test(event.target.tagName)) {\n return\n }\n const { keyCode } = event\n if (keyCode === CODE_LEFT || keyCode === CODE_RIGHT) {\n stopEvent(event)\n this[keyCode === CODE_LEFT ? 'prev' : 'next']()\n }\n }\n }\n // Touch support event handlers for environment\n if (HAS_TOUCH_SUPPORT && !noTouch) {\n // Attach appropriate listeners (prepend event name with '&' for passive mode)\n /* istanbul ignore next: JSDOM doesn't support touch events */\n if (HAS_POINTER_EVENT_SUPPORT) {\n on['&pointerdown'] = touchStart\n on['&pointerup'] = touchEnd\n } else {\n on['&touchstart'] = touchStart\n on['&touchmove'] = this.touchMove\n on['&touchend'] = touchEnd\n }\n }\n\n // Return the carousel\n return h(\n 'div',\n {\n staticClass: 'carousel',\n class: {\n slide: !noAnimation,\n 'carousel-fade': !noAnimation && this.fade,\n 'pointer-event': HAS_TOUCH_SUPPORT && HAS_POINTER_EVENT_SUPPORT && !noTouch\n },\n style: { background },\n attrs: {\n role: 'region',\n id: this.safeId(),\n 'aria-busy': isSliding ? 'true' : 'false'\n },\n on\n },\n [$inner, $controls, $indicators]\n )\n }\n})\n","import { extend } from '../../vue'\nimport { NAME_CAROUSEL_SLIDE } from '../../constants/components'\nimport { HAS_TOUCH_SUPPORT } from '../../constants/env'\nimport { PROP_TYPE_BOOLEAN, PROP_TYPE_NUMBER_STRING, PROP_TYPE_STRING } from '../../constants/props'\nimport { SLOT_NAME_IMG } from '../../constants/slots'\nimport { stopEvent } from '../../utils/events'\nimport { htmlOrText } from '../../utils/html'\nimport { identity } from '../../utils/identity'\nimport { sortKeys } from '../../utils/object'\nimport { makeProp, makePropsConfigurable, pluckProps, unprefixPropName } from '../../utils/props'\nimport { idMixin, props as idProps } from '../../mixins/id'\nimport { normalizeSlotMixin } from '../../mixins/normalize-slot'\nimport { BImg } from '../image/img'\n\n// --- Props ---\n\nconst imgProps = {\n imgAlt: makeProp(PROP_TYPE_STRING),\n imgBlank: makeProp(PROP_TYPE_BOOLEAN, false),\n imgBlankColor: makeProp(PROP_TYPE_STRING, 'transparent'),\n imgHeight: makeProp(PROP_TYPE_NUMBER_STRING),\n imgSrc: makeProp(PROP_TYPE_STRING),\n imgWidth: makeProp(PROP_TYPE_NUMBER_STRING)\n}\n\nexport const props = makePropsConfigurable(\n sortKeys({\n ...idProps,\n ...imgProps,\n background: makeProp(PROP_TYPE_STRING),\n caption: makeProp(PROP_TYPE_STRING),\n captionHtml: makeProp(PROP_TYPE_STRING),\n captionTag: makeProp(PROP_TYPE_STRING, 'h3'),\n contentTag: makeProp(PROP_TYPE_STRING, 'div'),\n contentVisibleUp: makeProp(PROP_TYPE_STRING),\n text: makeProp(PROP_TYPE_STRING),\n textHtml: makeProp(PROP_TYPE_STRING),\n textTag: makeProp(PROP_TYPE_STRING, 'p')\n }),\n NAME_CAROUSEL_SLIDE\n)\n\n// --- Main component ---\n\n// @vue/component\nexport const BCarouselSlide = /*#__PURE__*/ extend({\n name: NAME_CAROUSEL_SLIDE,\n mixins: [idMixin, normalizeSlotMixin],\n inject: {\n getBvCarousel: {\n // Explicitly disable touch if not a child of carousel\n default: () => () => ({ noTouch: true })\n }\n },\n props,\n computed: {\n bvCarousel() {\n return this.getBvCarousel()\n },\n contentClasses() {\n return [\n this.contentVisibleUp ? 'd-none' : '',\n this.contentVisibleUp ? `d-${this.contentVisibleUp}-block` : ''\n ]\n },\n computedWidth() {\n // Use local width, or try parent width\n return this.imgWidth || this.bvCarousel.imgWidth || null\n },\n computedHeight() {\n // Use local height, or try parent height\n return this.imgHeight || this.bvCarousel.imgHeight || null\n }\n },\n render(h) {\n let $img = this.normalizeSlot(SLOT_NAME_IMG)\n if (!$img && (this.imgSrc || this.imgBlank)) {\n const on = {}\n // Touch support event handler\n /* istanbul ignore if: difficult to test in JSDOM */\n if (!this.bvCarousel.noTouch && HAS_TOUCH_SUPPORT) {\n on.dragstart = event => stopEvent(event, { propagation: false })\n }\n\n $img = h(BImg, {\n props: {\n ...pluckProps(imgProps, this.$props, unprefixPropName.bind(null, 'img')),\n width: this.computedWidth,\n height: this.computedHeight,\n fluidGrow: true,\n block: true\n },\n on\n })\n }\n\n const $contentChildren = [\n // Caption\n this.caption || this.captionHtml\n ? h(this.captionTag, { domProps: htmlOrText(this.captionHtml, this.caption) })\n : false,\n // Text\n this.text || this.textHtml\n ? h(this.textTag, { domProps: htmlOrText(this.textHtml, this.text) })\n : false,\n // Children\n this.normalizeSlot() || false\n ]\n\n let $content = h()\n if ($contentChildren.some(identity)) {\n $content = h(\n this.contentTag,\n {\n staticClass: 'carousel-caption',\n class: this.contentClasses\n },\n $contentChildren.map($child => $child || h())\n )\n }\n\n return h(\n 'div',\n {\n staticClass: 'carousel-item',\n style: { background: this.background || this.bvCarousel.background || null },\n attrs: { id: this.safeId(), role: 'listitem' }\n },\n [$img, $content]\n )\n }\n})\n","import { BCarousel } from './carousel'\nimport { BCarouselSlide } from './carousel-slide'\nimport { pluginFactory } from '../../utils/plugins'\n\nconst CarouselPlugin = /*#__PURE*/ pluginFactory({\n components: {\n BCarousel,\n BCarouselSlide\n }\n})\n\nexport { CarouselPlugin, BCarousel, BCarouselSlide }\n","export const CLASS_NAME_SHOW = 'show'\nexport const CLASS_NAME_FADE = 'fade'\n","// Generic collapse transion helper component\n//\n// Note:\n// Applies the classes `collapse`, `show` and `collapsing`\n// during the enter/leave transition phases only\n// Although it appears that Vue may be leaving the classes\n// in-place after the transition completes\nimport { extend, mergeData } from '../../../vue'\nimport { NAME_COLLAPSE_HELPER } from '../../../constants/components'\nimport { PROP_TYPE_BOOLEAN } from '../../../constants/props'\nimport { getBCR, reflow, removeStyle, requestAF, setStyle } from '../../../utils/dom'\nimport { makeProp } from '../../../utils/props'\n\n// --- Helper methods ---\n\n// Transition event handler helpers\nconst onEnter = el => {\n setStyle(el, 'height', 0)\n // In a `requestAF()` for `appear` to work\n requestAF(() => {\n reflow(el)\n setStyle(el, 'height', `${el.scrollHeight}px`)\n })\n}\n\nconst onAfterEnter = el => {\n removeStyle(el, 'height')\n}\n\nconst onLeave = el => {\n setStyle(el, 'height', 'auto')\n setStyle(el, 'display', 'block')\n setStyle(el, 'height', `${getBCR(el).height}px`)\n reflow(el)\n setStyle(el, 'height', 0)\n}\n\nconst onAfterLeave = el => {\n removeStyle(el, 'height')\n}\n\n// --- Constants ---\n\n// Default transition props\n// `appear` will use the enter classes\nconst TRANSITION_PROPS = {\n css: true,\n enterClass: '',\n enterActiveClass: 'collapsing',\n enterToClass: 'collapse show',\n leaveClass: 'collapse show',\n leaveActiveClass: 'collapsing',\n leaveToClass: 'collapse'\n}\n\n// Default transition handlers\n// `appear` will use the enter handlers\nconst TRANSITION_HANDLERS = {\n enter: onEnter,\n afterEnter: onAfterEnter,\n leave: onLeave,\n afterLeave: onAfterLeave\n}\n\n// --- Main component ---\n\nexport const props = {\n // // If `true` (and `visible` is `true` on mount), animate initially visible\n appear: makeProp(PROP_TYPE_BOOLEAN, false)\n}\n\n// --- Main component ---\n\n// @vue/component\nexport const BVCollapse = /*#__PURE__*/ extend({\n name: NAME_COLLAPSE_HELPER,\n functional: true,\n props,\n render(h, { props, data, children }) {\n return h(\n 'transition',\n // We merge in the `appear` prop last\n mergeData(data, { props: TRANSITION_PROPS, on: TRANSITION_HANDLERS }, { props }),\n // Note: `` supports a single root element only\n children\n )\n }\n})\n","import { extend } from '../../vue'\nimport { NAME_COLLAPSE } from '../../constants/components'\nimport { CLASS_NAME_SHOW } from '../../constants/classes'\nimport { IS_BROWSER } from '../../constants/env'\nimport {\n EVENT_NAME_HIDDEN,\n EVENT_NAME_HIDE,\n EVENT_NAME_SHOW,\n EVENT_NAME_SHOWN,\n EVENT_OPTIONS_NO_CAPTURE\n} from '../../constants/events'\nimport { PROP_TYPE_BOOLEAN, PROP_TYPE_STRING } from '../../constants/props'\nimport { SLOT_NAME_DEFAULT } from '../../constants/slots'\nimport { addClass, hasClass, removeClass, closest, matches, getCS } from '../../utils/dom'\nimport { getRootActionEventName, getRootEventName, eventOnOff } from '../../utils/events'\nimport { makeModelMixin } from '../../utils/model'\nimport { sortKeys } from '../../utils/object'\nimport { makeProp, makePropsConfigurable } from '../../utils/props'\nimport { idMixin, props as idProps } from '../../mixins/id'\nimport { listenOnRootMixin } from '../../mixins/listen-on-root'\nimport { normalizeSlotMixin } from '../../mixins/normalize-slot'\nimport { BVCollapse } from './helpers/bv-collapse'\n\n// --- Constants ---\n\nconst ROOT_ACTION_EVENT_NAME_TOGGLE = getRootActionEventName(NAME_COLLAPSE, 'toggle')\nconst ROOT_ACTION_EVENT_NAME_REQUEST_STATE = getRootActionEventName(NAME_COLLAPSE, 'request-state')\n\nconst ROOT_EVENT_NAME_ACCORDION = getRootEventName(NAME_COLLAPSE, 'accordion')\nconst ROOT_EVENT_NAME_STATE = getRootEventName(NAME_COLLAPSE, 'state')\nconst ROOT_EVENT_NAME_SYNC_STATE = getRootEventName(NAME_COLLAPSE, 'sync-state')\n\nconst {\n mixin: modelMixin,\n props: modelProps,\n prop: MODEL_PROP_NAME,\n event: MODEL_EVENT_NAME\n} = makeModelMixin('visible', { type: PROP_TYPE_BOOLEAN, defaultValue: false })\n\n// --- Props ---\n\nexport const props = makePropsConfigurable(\n sortKeys({\n ...idProps,\n ...modelProps,\n // If `true` (and `visible` is `true` on mount), animate initially visible\n accordion: makeProp(PROP_TYPE_STRING),\n appear: makeProp(PROP_TYPE_BOOLEAN, false),\n isNav: makeProp(PROP_TYPE_BOOLEAN, false),\n tag: makeProp(PROP_TYPE_STRING, 'div')\n }),\n NAME_COLLAPSE\n)\n\n// --- Main component ---\n\n// @vue/component\nexport const BCollapse = /*#__PURE__*/ extend({\n name: NAME_COLLAPSE,\n mixins: [idMixin, modelMixin, normalizeSlotMixin, listenOnRootMixin],\n props,\n data() {\n return {\n show: this[MODEL_PROP_NAME],\n transitioning: false\n }\n },\n computed: {\n classObject() {\n const { transitioning } = this\n\n return {\n 'navbar-collapse': this.isNav,\n collapse: !transitioning,\n show: this.show && !transitioning\n }\n },\n slotScope() {\n return {\n visible: this.show,\n close: () => {\n this.show = false\n }\n }\n }\n },\n watch: {\n [MODEL_PROP_NAME](newValue) {\n if (newValue !== this.show) {\n this.show = newValue\n }\n },\n show(newValue, oldValue) {\n if (newValue !== oldValue) {\n this.emitState()\n }\n }\n },\n created() {\n this.show = this[MODEL_PROP_NAME]\n },\n mounted() {\n this.show = this[MODEL_PROP_NAME]\n // Listen for toggle events to open/close us\n this.listenOnRoot(ROOT_ACTION_EVENT_NAME_TOGGLE, this.handleToggleEvent)\n // Listen to other collapses for accordion events\n this.listenOnRoot(ROOT_EVENT_NAME_ACCORDION, this.handleAccordionEvent)\n if (this.isNav) {\n // Set up handlers\n this.setWindowEvents(true)\n this.handleResize()\n }\n this.$nextTick(() => {\n this.emitState()\n })\n // Listen for \"Sync state\" requests from `v-b-toggle`\n this.listenOnRoot(ROOT_ACTION_EVENT_NAME_REQUEST_STATE, id => {\n if (id === this.safeId()) {\n this.$nextTick(this.emitSync)\n }\n })\n },\n updated() {\n // Emit a private event every time this component updates to ensure\n // the toggle button is in sync with the collapse's state\n // It is emitted regardless if the visible state changes\n this.emitSync()\n },\n /* istanbul ignore next */\n deactivated() {\n if (this.isNav) {\n this.setWindowEvents(false)\n }\n },\n /* istanbul ignore next */\n activated() {\n if (this.isNav) {\n this.setWindowEvents(true)\n }\n this.emitSync()\n },\n beforeDestroy() {\n // Trigger state emit if needed\n this.show = false\n if (this.isNav && IS_BROWSER) {\n this.setWindowEvents(false)\n }\n },\n methods: {\n setWindowEvents(on) {\n eventOnOff(on, window, 'resize', this.handleResize, EVENT_OPTIONS_NO_CAPTURE)\n eventOnOff(on, window, 'orientationchange', this.handleResize, EVENT_OPTIONS_NO_CAPTURE)\n },\n toggle() {\n this.show = !this.show\n },\n onEnter() {\n this.transitioning = true\n // This should be moved out so we can add cancellable events\n this.$emit(EVENT_NAME_SHOW)\n },\n onAfterEnter() {\n this.transitioning = false\n this.$emit(EVENT_NAME_SHOWN)\n },\n onLeave() {\n this.transitioning = true\n // This should be moved out so we can add cancellable events\n this.$emit(EVENT_NAME_HIDE)\n },\n onAfterLeave() {\n this.transitioning = false\n this.$emit(EVENT_NAME_HIDDEN)\n },\n emitState() {\n const { show, accordion } = this\n const id = this.safeId()\n\n this.$emit(MODEL_EVENT_NAME, show)\n\n // Let `v-b-toggle` know the state of this collapse\n this.emitOnRoot(ROOT_EVENT_NAME_STATE, id, show)\n if (accordion && show) {\n // Tell the other collapses in this accordion to close\n this.emitOnRoot(ROOT_EVENT_NAME_ACCORDION, id, accordion)\n }\n },\n emitSync() {\n // Emit a private event every time this component updates to ensure\n // the toggle button is in sync with the collapse's state\n // It is emitted regardless if the visible state changes\n this.emitOnRoot(ROOT_EVENT_NAME_SYNC_STATE, this.safeId(), this.show)\n },\n checkDisplayBlock() {\n // Check to see if the collapse has `display: block !important` set\n // We can't set `display: none` directly on `this.$el`, as it would\n // trigger a new transition to start (or cancel a current one)\n const { $el } = this\n const restore = hasClass($el, CLASS_NAME_SHOW)\n removeClass($el, CLASS_NAME_SHOW)\n const isBlock = getCS($el).display === 'block'\n if (restore) {\n addClass($el, CLASS_NAME_SHOW)\n }\n return isBlock\n },\n clickHandler(event) {\n const { target: el } = event\n // If we are in a nav/navbar, close the collapse when non-disabled link clicked\n /* istanbul ignore next: can't test `getComputedStyle()` in JSDOM */\n if (!this.isNav || !el || getCS(this.$el).display !== 'block') {\n return\n }\n // Only close the collapse if it is not forced to be `display: block !important`\n if (\n (matches(el, '.nav-link,.dropdown-item') || closest('.nav-link,.dropdown-item', el)) &&\n !this.checkDisplayBlock()\n ) {\n this.show = false\n }\n },\n handleToggleEvent(id) {\n if (id === this.safeId()) {\n this.toggle()\n }\n },\n handleAccordionEvent(openedId, openAccordion) {\n const { accordion, show } = this\n if (!accordion || accordion !== openAccordion) {\n return\n }\n const isThis = openedId === this.safeId()\n // Open this collapse if not shown or\n // close this collapse if shown\n if ((isThis && !show) || (!isThis && show)) {\n this.toggle()\n }\n },\n handleResize() {\n // Handler for orientation/resize to set collapsed state in nav/navbar\n this.show = getCS(this.$el).display === 'block'\n }\n },\n render(h) {\n const { appear } = this\n\n const $content = h(\n this.tag,\n {\n class: this.classObject,\n directives: [{ name: 'show', value: this.show }],\n attrs: { id: this.safeId() },\n on: { click: this.clickHandler }\n },\n this.normalizeSlot(SLOT_NAME_DEFAULT, this.slotScope)\n )\n\n return h(\n BVCollapse,\n {\n props: { appear },\n on: {\n enter: this.onEnter,\n afterEnter: this.onAfterEnter,\n leave: this.onLeave,\n afterLeave: this.onAfterLeave\n }\n },\n [$content]\n )\n }\n})\n","import { isVue3 } from '../vue'\n\nexport const getInstanceFromDirective = (vnode, bindings) =>\n isVue3 ? bindings.instance : vnode.context\n","import { NAME_COLLAPSE } from '../../constants/components'\nimport { IS_BROWSER } from '../../constants/env'\nimport { EVENT_OPTIONS_PASSIVE } from '../../constants/events'\nimport { CODE_ENTER, CODE_SPACE } from '../../constants/key-codes'\nimport { RX_HASH, RX_HASH_ID, RX_SPACE_SPLIT } from '../../constants/regex'\nimport { arrayIncludes, concat } from '../../utils/array'\nimport { getInstanceFromDirective } from '../../utils/get-instance-from-directive'\nimport {\n addClass,\n getAttr,\n hasAttr,\n isDisabled,\n isTag,\n removeAttr,\n removeClass,\n removeStyle,\n requestAF,\n setAttr,\n setStyle\n} from '../../utils/dom'\nimport { getRootActionEventName, getRootEventName, eventOn, eventOff } from '../../utils/events'\nimport { isString } from '../../utils/inspect'\nimport { looseEqual } from '../../utils/loose-equal'\nimport { keys } from '../../utils/object'\nimport { getEventRoot } from '../../utils/get-event-root'\n\n// --- Constants ---\n\n// Classes to apply to trigger element\nconst CLASS_BV_TOGGLE_COLLAPSED = 'collapsed'\nconst CLASS_BV_TOGGLE_NOT_COLLAPSED = 'not-collapsed'\n\n// Property key for handler storage\nconst BV_BASE = '__BV_toggle'\n// Root event listener property (Function)\nconst BV_TOGGLE_ROOT_HANDLER = `${BV_BASE}_HANDLER__`\n// Trigger element click handler property (Function)\nconst BV_TOGGLE_CLICK_HANDLER = `${BV_BASE}_CLICK__`\n// Target visibility state property (Boolean)\nconst BV_TOGGLE_STATE = `${BV_BASE}_STATE__`\n// Target ID list property (Array)\nconst BV_TOGGLE_TARGETS = `${BV_BASE}_TARGETS__`\n\n// Commonly used strings\nconst STRING_FALSE = 'false'\nconst STRING_TRUE = 'true'\n\n// Commonly used attribute names\nconst ATTR_ARIA_CONTROLS = 'aria-controls'\nconst ATTR_ARIA_EXPANDED = 'aria-expanded'\nconst ATTR_ROLE = 'role'\nconst ATTR_TABINDEX = 'tabindex'\n\n// Commonly used style properties\nconst STYLE_OVERFLOW_ANCHOR = 'overflow-anchor'\n\n// Emitted control event for collapse (emitted to collapse)\nconst ROOT_ACTION_EVENT_NAME_TOGGLE = getRootActionEventName(NAME_COLLAPSE, 'toggle')\n\n// Listen to event for toggle state update (emitted by collapse)\nconst ROOT_EVENT_NAME_STATE = getRootEventName(NAME_COLLAPSE, 'state')\n\n// Private event emitted on `$root` to ensure the toggle state is always synced\n// Gets emitted even if the state of b-collapse has not changed\n// This event is NOT to be documented as people should not be using it\nconst ROOT_EVENT_NAME_SYNC_STATE = getRootEventName(NAME_COLLAPSE, 'sync-state')\n\n// Private event we send to collapse to request state update sync event\nconst ROOT_ACTION_EVENT_NAME_REQUEST_STATE = getRootActionEventName(NAME_COLLAPSE, 'request-state')\n\nconst KEYDOWN_KEY_CODES = [CODE_ENTER, CODE_SPACE]\n\n// --- Helper methods ---\n\nconst isNonStandardTag = el => !arrayIncludes(['button', 'a'], el.tagName.toLowerCase())\n\nconst getTargets = ({ modifiers, arg, value }, el) => {\n // Any modifiers are considered target IDs\n const targets = keys(modifiers || {})\n\n // If value is a string, split out individual targets (if space delimited)\n value = isString(value) ? value.split(RX_SPACE_SPLIT) : value\n\n // Support target ID as link href (`href=\"#id\"`)\n if (isTag(el.tagName, 'a')) {\n const href = getAttr(el, 'href') || ''\n if (RX_HASH_ID.test(href)) {\n targets.push(href.replace(RX_HASH, ''))\n }\n }\n\n // Add ID from `arg` (if provided), and support value\n // as a single string ID or an array of string IDs\n // If `value` is not an array or string, then it gets filtered out\n concat(arg, value).forEach(t => isString(t) && targets.push(t))\n\n // Return only unique and truthy target IDs\n return targets.filter((t, index, arr) => t && arr.indexOf(t) === index)\n}\n\nconst removeClickListener = el => {\n const handler = el[BV_TOGGLE_CLICK_HANDLER]\n if (handler) {\n eventOff(el, 'click', handler, EVENT_OPTIONS_PASSIVE)\n eventOff(el, 'keydown', handler, EVENT_OPTIONS_PASSIVE)\n }\n el[BV_TOGGLE_CLICK_HANDLER] = null\n}\n\nconst addClickListener = (el, instance) => {\n removeClickListener(el)\n if (instance) {\n const handler = event => {\n if (\n !(event.type === 'keydown' && !arrayIncludes(KEYDOWN_KEY_CODES, event.keyCode)) &&\n !isDisabled(el)\n ) {\n const targets = el[BV_TOGGLE_TARGETS] || []\n targets.forEach(target => {\n getEventRoot(instance).$emit(ROOT_ACTION_EVENT_NAME_TOGGLE, target)\n })\n }\n }\n el[BV_TOGGLE_CLICK_HANDLER] = handler\n eventOn(el, 'click', handler, EVENT_OPTIONS_PASSIVE)\n if (isNonStandardTag(el)) {\n eventOn(el, 'keydown', handler, EVENT_OPTIONS_PASSIVE)\n }\n }\n}\n\nconst removeRootListeners = (el, instance) => {\n if (el[BV_TOGGLE_ROOT_HANDLER] && instance) {\n getEventRoot(instance).$off(\n [ROOT_EVENT_NAME_STATE, ROOT_EVENT_NAME_SYNC_STATE],\n el[BV_TOGGLE_ROOT_HANDLER]\n )\n }\n el[BV_TOGGLE_ROOT_HANDLER] = null\n}\n\nconst addRootListeners = (el, instance) => {\n removeRootListeners(el, instance)\n if (instance) {\n const handler = (id, state) => {\n // `state` will be `true` if target is expanded\n if (arrayIncludes(el[BV_TOGGLE_TARGETS] || [], id)) {\n // Set/Clear 'collapsed' visibility class state\n el[BV_TOGGLE_STATE] = state\n // Set `aria-expanded` and class state on trigger element\n setToggleState(el, state)\n }\n }\n el[BV_TOGGLE_ROOT_HANDLER] = handler\n // Listen for toggle state changes (public) and sync (private)\n getEventRoot(instance).$on([ROOT_EVENT_NAME_STATE, ROOT_EVENT_NAME_SYNC_STATE], handler)\n }\n}\n\nconst setToggleState = (el, state) => {\n // State refers to the visibility of the collapse/sidebar\n if (state) {\n removeClass(el, CLASS_BV_TOGGLE_COLLAPSED)\n addClass(el, CLASS_BV_TOGGLE_NOT_COLLAPSED)\n setAttr(el, ATTR_ARIA_EXPANDED, STRING_TRUE)\n } else {\n removeClass(el, CLASS_BV_TOGGLE_NOT_COLLAPSED)\n addClass(el, CLASS_BV_TOGGLE_COLLAPSED)\n setAttr(el, ATTR_ARIA_EXPANDED, STRING_FALSE)\n }\n}\n\n// Reset and remove a property from the provided element\nconst resetProp = (el, prop) => {\n el[prop] = null\n delete el[prop]\n}\n\n// Handle directive updates\nconst handleUpdate = (el, binding, vnode) => {\n /* istanbul ignore next: should never happen */\n if (!IS_BROWSER || !getInstanceFromDirective(vnode, binding)) {\n return\n }\n\n // If element is not a button or link, we add `role=\"button\"`\n // and `tabindex=\"0\"` for accessibility reasons\n if (isNonStandardTag(el)) {\n if (!hasAttr(el, ATTR_ROLE)) {\n setAttr(el, ATTR_ROLE, 'button')\n }\n if (!hasAttr(el, ATTR_TABINDEX)) {\n setAttr(el, ATTR_TABINDEX, '0')\n }\n }\n\n // Ensure the collapse class and `aria-*` attributes persist\n // after element is updated (either by parent re-rendering\n // or changes to this element or its contents)\n setToggleState(el, el[BV_TOGGLE_STATE])\n\n // Parse list of target IDs\n const targets = getTargets(binding, el)\n\n // Ensure the `aria-controls` hasn't been overwritten\n // or removed when vnode updates\n // Also ensure to set `overflow-anchor` to `none` to prevent\n // the browser's scroll anchoring behavior\n /* istanbul ignore else */\n if (targets.length > 0) {\n setAttr(el, ATTR_ARIA_CONTROLS, targets.join(' '))\n setStyle(el, STYLE_OVERFLOW_ANCHOR, 'none')\n } else {\n removeAttr(el, ATTR_ARIA_CONTROLS)\n removeStyle(el, STYLE_OVERFLOW_ANCHOR)\n }\n\n // Add/Update our click listener(s)\n // Wrap in a `requestAF()` to allow any previous\n // click handling to occur first\n requestAF(() => {\n addClickListener(el, getInstanceFromDirective(vnode, binding))\n })\n\n // If targets array has changed, update\n if (!looseEqual(targets, el[BV_TOGGLE_TARGETS])) {\n // Update targets array to element storage\n el[BV_TOGGLE_TARGETS] = targets\n // Ensure `aria-controls` is up to date\n // Request a state update from targets so that we can\n // ensure expanded state is correct (in most cases)\n targets.forEach(target => {\n getEventRoot(getInstanceFromDirective(vnode, binding)).$emit(\n ROOT_ACTION_EVENT_NAME_REQUEST_STATE,\n target\n )\n })\n }\n}\n\n/*\n * Export our directive\n */\nexport const VBToggle = {\n bind(el, binding, vnode) {\n // State is initially collapsed until we receive a state event\n el[BV_TOGGLE_STATE] = false\n // Assume no targets initially\n el[BV_TOGGLE_TARGETS] = []\n // Add our root listeners\n addRootListeners(el, getInstanceFromDirective(vnode, binding))\n // Initial update of trigger\n handleUpdate(el, binding, vnode)\n },\n componentUpdated: handleUpdate,\n updated: handleUpdate,\n unbind(el, binding, vnode) {\n removeClickListener(el)\n // Remove our $root listener\n removeRootListeners(el, getInstanceFromDirective(vnode, binding))\n // Reset custom props\n resetProp(el, BV_TOGGLE_ROOT_HANDLER)\n resetProp(el, BV_TOGGLE_CLICK_HANDLER)\n resetProp(el, BV_TOGGLE_STATE)\n resetProp(el, BV_TOGGLE_TARGETS)\n // Reset classes/attrs/styles\n removeClass(el, CLASS_BV_TOGGLE_COLLAPSED)\n removeClass(el, CLASS_BV_TOGGLE_NOT_COLLAPSED)\n removeAttr(el, ATTR_ARIA_EXPANDED)\n removeAttr(el, ATTR_ARIA_CONTROLS)\n removeAttr(el, ATTR_ROLE)\n removeStyle(el, STYLE_OVERFLOW_ANCHOR)\n }\n}\n","import { VBToggle } from './toggle'\nimport { pluginFactory } from '../../utils/plugins'\n\nconst VBTogglePlugin = /*#__PURE__*/ pluginFactory({\n directives: { VBToggle }\n})\n\nexport { VBTogglePlugin, VBToggle }\n","import { BCollapse } from './collapse'\nimport { VBTogglePlugin } from '../../directives/toggle'\nimport { pluginFactory } from '../../utils/plugins'\n\nconst CollapsePlugin = /*#__PURE__*/ pluginFactory({\n components: { BCollapse },\n plugins: { VBTogglePlugin }\n})\n\nexport { CollapsePlugin, BCollapse }\n","/**!\n * @fileOverview Kickass library to create and place poppers near their reference elements.\n * @version 1.16.1\n * @license\n * Copyright (c) 2016 Federico Zivolo and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && typeof navigator !== 'undefined';\n\nvar timeoutDuration = function () {\n var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\n for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n return 1;\n }\n }\n return 0;\n}();\n\nfunction microtaskDebounce(fn) {\n var called = false;\n return function () {\n if (called) {\n return;\n }\n called = true;\n window.Promise.resolve().then(function () {\n called = false;\n fn();\n });\n };\n}\n\nfunction taskDebounce(fn) {\n var scheduled = false;\n return function () {\n if (!scheduled) {\n scheduled = true;\n setTimeout(function () {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\nvar supportsMicroTasks = isBrowser && window.Promise;\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nvar debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;\n\n/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nfunction isFunction(functionToCheck) {\n var getType = {};\n return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n}\n\n/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nfunction getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n var window = element.ownerDocument.defaultView;\n var css = window.getComputedStyle(element, null);\n return property ? css[property] : css;\n}\n\n/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nfunction getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n}\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nfunction getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element) {\n return document.body;\n }\n\n switch (element.nodeName) {\n case 'HTML':\n case 'BODY':\n return element.ownerDocument.body;\n case '#document':\n return element.body;\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n\n var _getStyleComputedProp = getStyleComputedProperty(element),\n overflow = _getStyleComputedProp.overflow,\n overflowX = _getStyleComputedProp.overflowX,\n overflowY = _getStyleComputedProp.overflowY;\n\n if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n\n return getScrollParent(getParentNode(element));\n}\n\n/**\n * Returns the reference node of the reference object, or the reference object itself.\n * @method\n * @memberof Popper.Utils\n * @param {Element|Object} reference - the reference element (the popper will be relative to this)\n * @returns {Element} parent\n */\nfunction getReferenceNode(reference) {\n return reference && reference.referenceNode ? reference.referenceNode : reference;\n}\n\nvar isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\nvar isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);\n\n/**\n * Determines if the browser is Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @param {Number} version to check\n * @returns {Boolean} isIE\n */\nfunction isIE(version) {\n if (version === 11) {\n return isIE11;\n }\n if (version === 10) {\n return isIE10;\n }\n return isIE11 || isIE10;\n}\n\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nfunction getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n\n var noOffsetParent = isIE(10) ? document.body : null;\n\n // NOTE: 1 DOM access here\n var offsetParent = element.offsetParent || null;\n // Skip hidden elements which don't have an offsetParent\n while (offsetParent === noOffsetParent && element.nextElementSibling) {\n offsetParent = (element = element.nextElementSibling).offsetParent;\n }\n\n var nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return element ? element.ownerDocument.documentElement : document.documentElement;\n }\n\n // .offsetParent will return the closest TH, TD or TABLE in case\n // no offsetParent is present, I hate this job...\n if (['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') {\n return getOffsetParent(offsetParent);\n }\n\n return offsetParent;\n}\n\nfunction isOffsetContainer(element) {\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY') {\n return false;\n }\n return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;\n}\n\n/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nfunction getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nfunction findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return document.documentElement;\n }\n\n // Here we make sure to give as \"start\" the element that comes first in the DOM\n var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;\n var start = order ? element1 : element2;\n var end = order ? element2 : element1;\n\n // Get common ancestor container\n var range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n var commonAncestorContainer = range.commonAncestorContainer;\n\n // Both nodes are inside #document\n\n if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n return getOffsetParent(commonAncestorContainer);\n }\n\n // one of the nodes is inside shadowDOM, find which one\n var element1root = getRoot(element1);\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n\n/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nfunction getScroll(element) {\n var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';\n\n var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n var html = element.ownerDocument.documentElement;\n var scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nfunction includeScroll(rect, element) {\n var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n var modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n}\n\n/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nfunction getBordersSize(styles, axis) {\n var sideA = axis === 'x' ? 'Left' : 'Top';\n var sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return parseFloat(styles['border' + sideA + 'Width']) + parseFloat(styles['border' + sideB + 'Width']);\n}\n\nfunction getSize(axis, body, html, computedStyle) {\n return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? parseInt(html['offset' + axis]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')]) : 0);\n}\n\nfunction getWindowSizes(document) {\n var body = document.body;\n var html = document.documentElement;\n var computedStyle = isIE(10) && getComputedStyle(html);\n\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle)\n };\n}\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\n\n\n\n\nvar defineProperty = function (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\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\n/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nfunction getClientRect(offsets) {\n return _extends({}, offsets, {\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height\n });\n}\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nfunction getBoundingClientRect(element) {\n var rect = {};\n\n // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n try {\n if (isIE(10)) {\n rect = element.getBoundingClientRect();\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n } else {\n rect = element.getBoundingClientRect();\n }\n } catch (e) {}\n\n var result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top\n };\n\n // subtract scrollbar size from sizes\n var sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {};\n var width = sizes.width || element.clientWidth || result.width;\n var height = sizes.height || element.clientHeight || result.height;\n\n var horizScrollbar = element.offsetWidth - width;\n var vertScrollbar = element.offsetHeight - height;\n\n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n if (horizScrollbar || vertScrollbar) {\n var styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n\nfunction getOffsetRectRelativeToArbitraryNode(children, parent) {\n var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var isIE10 = isIE(10);\n var isHTML = parent.nodeName === 'HTML';\n var childrenRect = getBoundingClientRect(children);\n var parentRect = getBoundingClientRect(parent);\n var scrollParent = getScrollParent(children);\n\n var styles = getStyleComputedProperty(parent);\n var borderTopWidth = parseFloat(styles.borderTopWidth);\n var borderLeftWidth = parseFloat(styles.borderLeftWidth);\n\n // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n if (fixedPosition && isHTML) {\n parentRect.top = Math.max(parentRect.top, 0);\n parentRect.left = Math.max(parentRect.left, 0);\n }\n var offsets = getClientRect({\n top: childrenRect.top - parentRect.top - borderTopWidth,\n left: childrenRect.left - parentRect.left - borderLeftWidth,\n width: childrenRect.width,\n height: childrenRect.height\n });\n offsets.marginTop = 0;\n offsets.marginLeft = 0;\n\n // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n if (!isIE10 && isHTML) {\n var marginTop = parseFloat(styles.marginTop);\n var marginLeft = parseFloat(styles.marginLeft);\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n\nfunction getViewportOffsetRectRelativeToArtbitraryNode(element) {\n var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var html = element.ownerDocument.documentElement;\n var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n var width = Math.max(html.clientWidth, window.innerWidth || 0);\n var height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n var scrollTop = !excludeScroll ? getScroll(html) : 0;\n var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n var offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width: width,\n height: height\n };\n\n return getClientRect(offset);\n}\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nfunction isFixed(element) {\n var nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n var parentNode = getParentNode(element);\n if (!parentNode) {\n return false;\n }\n return isFixed(parentNode);\n}\n\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nfunction getFixedPositionOffsetParent(element) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element || !element.parentElement || isIE()) {\n return document.documentElement;\n }\n var el = element.parentElement;\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n return el || document.documentElement;\n}\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nfunction getBoundaries(popper, reference, padding, boundariesElement) {\n var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n // NOTE: 1 DOM access here\n\n var boundaries = { top: 0, left: 0 };\n var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n\n // Handle viewport case\n if (boundariesElement === 'viewport') {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n } else {\n // Handle other cases based on DOM element used as boundaries\n var boundariesNode = void 0;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(reference));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = popper.ownerDocument.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = popper.ownerDocument.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n var _getWindowSizes = getWindowSizes(popper.ownerDocument),\n height = _getWindowSizes.height,\n width = _getWindowSizes.width;\n\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n\n // Add paddings\n padding = padding || 0;\n var isPaddingNumber = typeof padding === 'number';\n boundaries.left += isPaddingNumber ? padding : padding.left || 0;\n boundaries.top += isPaddingNumber ? padding : padding.top || 0;\n boundaries.right -= isPaddingNumber ? padding : padding.right || 0;\n boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0;\n\n return boundaries;\n}\n\nfunction getArea(_ref) {\n var width = _ref.width,\n height = _ref.height;\n\n return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {\n var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n var boundaries = getBoundaries(popper, reference, padding, boundariesElement);\n\n var rects = {\n top: {\n width: boundaries.width,\n height: refRect.top - boundaries.top\n },\n right: {\n width: boundaries.right - refRect.right,\n height: boundaries.height\n },\n bottom: {\n width: boundaries.width,\n height: boundaries.bottom - refRect.bottom\n },\n left: {\n width: refRect.left - boundaries.left,\n height: boundaries.height\n }\n };\n\n var sortedAreas = Object.keys(rects).map(function (key) {\n return _extends({\n key: key\n }, rects[key], {\n area: getArea(rects[key])\n });\n }).sort(function (a, b) {\n return b.area - a.area;\n });\n\n var filteredAreas = sortedAreas.filter(function (_ref2) {\n var width = _ref2.width,\n height = _ref2.height;\n return width >= popper.clientWidth && height >= popper.clientHeight;\n });\n\n var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;\n\n var variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? '-' + variation : '');\n}\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nfunction getReferenceOffsets(state, popper, reference) {\n var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n\n/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nfunction getOuterSizes(element) {\n var window = element.ownerDocument.defaultView;\n var styles = window.getComputedStyle(element);\n var x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0);\n var y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0);\n var result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x\n };\n return result;\n}\n\n/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nfunction getOppositePlacement(placement) {\n var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nfunction getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n var popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n var popperOffsets = {\n width: popperRect.width,\n height: popperRect.height\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n var isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n var mainSide = isHoriz ? 'top' : 'left';\n var secondarySide = isHoriz ? 'left' : 'top';\n var measurement = isHoriz ? 'height' : 'width';\n var secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n\n/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(function (cur) {\n return cur[prop] === value;\n });\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n var match = find(arr, function (obj) {\n return obj[prop] === value;\n });\n return arr.indexOf(match);\n}\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nfunction runModifiers(modifiers, data, ends) {\n var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(function (modifier) {\n if (modifier['function']) {\n // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.
\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nfunction update() {\n // if popper is destroyed, don't perform any further update\n if (this.state.isDestroyed) {\n return;\n }\n\n var data = {\n instance: this,\n styles: {},\n arrowStyles: {},\n attributes: {},\n flipped: false,\n offsets: {}\n };\n\n // compute reference element offsets\n data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding);\n\n // store the computed placement inside `originalPlacement`\n data.originalPlacement = data.placement;\n\n data.positionFixed = this.options.positionFixed;\n\n // compute the popper offsets\n data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);\n\n data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';\n\n // run the modifiers\n data = runModifiers(this.modifiers, data);\n\n // the first `update` will call `onCreate` callback\n // the other ones will call `onUpdate` callback\n if (!this.state.isCreated) {\n this.state.isCreated = true;\n this.options.onCreate(data);\n } else {\n this.options.onUpdate(data);\n }\n}\n\n/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nfunction isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(function (_ref) {\n var name = _ref.name,\n enabled = _ref.enabled;\n return enabled && name === modifierName;\n });\n}\n\n/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nfunction getSupportedPropertyName(property) {\n var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n var upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (var i = 0; i < prefixes.length; i++) {\n var prefix = prefixes[i];\n var toCheck = prefix ? '' + prefix + upperProp : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n\n/**\n * Destroys the popper.\n * @method\n * @memberof Popper\n */\nfunction destroy() {\n this.state.isDestroyed = true;\n\n // touch DOM only if `applyStyle` modifier is enabled\n if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n this.popper.removeAttribute('x-placement');\n this.popper.style.position = '';\n this.popper.style.top = '';\n this.popper.style.left = '';\n this.popper.style.right = '';\n this.popper.style.bottom = '';\n this.popper.style.willChange = '';\n this.popper.style[getSupportedPropertyName('transform')] = '';\n }\n\n this.disableEventListeners();\n\n // remove the popper if user explicitly asked for the deletion on destroy\n // do not use `remove` because IE11 doesn't support it\n if (this.options.removeOnDestroy) {\n this.popper.parentNode.removeChild(this.popper);\n }\n return this;\n}\n\n/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nfunction getWindow(element) {\n var ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n var isBody = scrollParent.nodeName === 'BODY';\n var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction setupEventListeners(reference, options, state, updateBound) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n var scrollElement = getScrollParent(reference);\n attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\nfunction enableEventListeners() {\n if (!this.state.eventsEnabled) {\n this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);\n }\n}\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(function (target) {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger `onUpdate` callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nfunction disableEventListeners() {\n if (this.state.eventsEnabled) {\n cancelAnimationFrame(this.scheduleUpdate);\n this.state = removeEventListeners(this.reference, this.state);\n }\n}\n\n/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nfunction isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setStyles(element, styles) {\n Object.keys(styles).forEach(function (prop) {\n var unit = '';\n // add unit if the value is numeric and is one of the following\n if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n\n/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function (prop) {\n var value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nfunction applyStyle(data) {\n // any property present in `data.styles` will be applied to the popper,\n // in this way we can make the 3rd party modifiers add custom styles to it\n // Be aware, modifiers could override the properties defined in the previous\n // lines of this modifier!\n setStyles(data.instance.popper, data.styles);\n\n // any property present in `data.attributes` will be applied to the popper,\n // they will be set as HTML attributes of the element\n setAttributes(data.instance.popper, data.attributes);\n\n // if arrowElement is defined and arrowStyles has some properties\n if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n setStyles(data.arrowElement, data.arrowStyles);\n }\n\n return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper\n * @param {Object} options - Popper.js options\n */\nfunction applyStyleOnLoad(reference, popper, options, modifierOptions, state) {\n // compute reference element offsets\n var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding);\n\n popper.setAttribute('x-placement', placement);\n\n // Apply `position` to popper before anything else because\n // without the position applied we can't guarantee correct computations\n setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n return options;\n}\n\n/**\n * @function\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Boolean} shouldRound - If the offsets should be rounded at all\n * @returns {Object} The popper's position offsets rounded\n *\n * The tale of pixel-perfect positioning. It's still not 100% perfect, but as\n * good as it can be within reason.\n * Discussion here: https://github.com/FezVrasta/popper.js/pull/715\n *\n * Low DPI screens cause a popper to be blurry if not using full pixels (Safari\n * as well on High DPI screens).\n *\n * Firefox prefers no rounding for positioning and does not have blurriness on\n * high DPI screens.\n *\n * Only horizontal placement and left/right values need to be considered.\n */\nfunction getRoundedOffsets(data, shouldRound) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n var round = Math.round,\n floor = Math.floor;\n\n var noRound = function noRound(v) {\n return v;\n };\n\n var referenceWidth = round(reference.width);\n var popperWidth = round(popper.width);\n\n var isVertical = ['left', 'right'].indexOf(data.placement) !== -1;\n var isVariation = data.placement.indexOf('-') !== -1;\n var sameWidthParity = referenceWidth % 2 === popperWidth % 2;\n var bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1;\n\n var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthParity ? round : floor;\n var verticalToInteger = !shouldRound ? noRound : round;\n\n return {\n left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left),\n top: verticalToInteger(popper.top),\n bottom: verticalToInteger(popper.bottom),\n right: horizontalToInteger(popper.right)\n };\n}\n\nvar isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent);\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeStyle(data, options) {\n var x = options.x,\n y = options.y;\n var popper = data.offsets.popper;\n\n // Remove this legacy support in Popper.js v2\n\n var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'applyStyle';\n }).gpuAcceleration;\n if (legacyGpuAccelerationOption !== undefined) {\n console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');\n }\n var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration;\n\n var offsetParent = getOffsetParent(data.instance.popper);\n var offsetParentRect = getBoundingClientRect(offsetParent);\n\n // Styles\n var styles = {\n position: popper.position\n };\n\n var offsets = getRoundedOffsets(data, window.devicePixelRatio < 2 || !isFirefox);\n\n var sideA = x === 'bottom' ? 'top' : 'bottom';\n var sideB = y === 'right' ? 'left' : 'right';\n\n // if gpuAcceleration is set to `true` and transform is supported,\n // we use `translate3d` to apply the position to the popper we\n // automatically use the supported prefixed version if needed\n var prefixedProperty = getSupportedPropertyName('transform');\n\n // now, let's make a step back and look at this code closely (wtf?)\n // If the content of the popper grows once it's been positioned, it\n // may happen that the popper gets misplaced because of the new content\n // overflowing its reference element\n // To avoid this problem, we provide two options (x and y), which allow\n // the consumer to define the offset origin.\n // If we position a popper on top of a reference element, we can set\n // `x` to `top` to make the popper grow towards its top instead of\n // its bottom.\n var left = void 0,\n top = void 0;\n if (sideA === 'bottom') {\n // when offsetParent is the positioning is relative to the bottom of the screen (excluding the scrollbar)\n // and not the bottom of the html element\n if (offsetParent.nodeName === 'HTML') {\n top = -offsetParent.clientHeight + offsets.bottom;\n } else {\n top = -offsetParentRect.height + offsets.bottom;\n }\n } else {\n top = offsets.top;\n }\n if (sideB === 'right') {\n if (offsetParent.nodeName === 'HTML') {\n left = -offsetParent.clientWidth + offsets.right;\n } else {\n left = -offsetParentRect.width + offsets.right;\n }\n } else {\n left = offsets.left;\n }\n if (gpuAcceleration && prefixedProperty) {\n styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';\n styles[sideA] = 0;\n styles[sideB] = 0;\n styles.willChange = 'transform';\n } else {\n // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n var invertTop = sideA === 'bottom' ? -1 : 1;\n var invertLeft = sideB === 'right' ? -1 : 1;\n styles[sideA] = top * invertTop;\n styles[sideB] = left * invertLeft;\n styles.willChange = sideA + ', ' + sideB;\n }\n\n // Attributes\n var attributes = {\n 'x-placement': data.placement\n };\n\n // Update `data` attributes, styles and arrowStyles\n data.attributes = _extends({}, attributes, data.attributes);\n data.styles = _extends({}, styles, data.styles);\n data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles);\n\n return data;\n}\n\n/**\n * Helper used to know if the given modifier depends from another one.
\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nfunction isModifierRequired(modifiers, requestingName, requestedName) {\n var requesting = find(modifiers, function (_ref) {\n var name = _ref.name;\n return name === requestingName;\n });\n\n var isRequired = !!requesting && modifiers.some(function (modifier) {\n return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;\n });\n\n if (!isRequired) {\n var _requesting = '`' + requestingName + '`';\n var requested = '`' + requestedName + '`';\n console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');\n }\n return isRequired;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction arrow(data, options) {\n var _data$offsets$arrow;\n\n // arrow depends on keepTogether in order to work\n if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n return data;\n }\n\n var arrowElement = options.element;\n\n // if arrowElement is a string, suppose it's a CSS selector\n if (typeof arrowElement === 'string') {\n arrowElement = data.instance.popper.querySelector(arrowElement);\n\n // if arrowElement is not found, don't run the modifier\n if (!arrowElement) {\n return data;\n }\n } else {\n // if the arrowElement isn't a query selector we must check that the\n // provided DOM node is child of its popper node\n if (!data.instance.popper.contains(arrowElement)) {\n console.warn('WARNING: `arrow.element` must be child of its popper element!');\n return data;\n }\n }\n\n var placement = data.placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n var len = isVertical ? 'height' : 'width';\n var sideCapitalized = isVertical ? 'Top' : 'Left';\n var side = sideCapitalized.toLowerCase();\n var altSide = isVertical ? 'left' : 'top';\n var opSide = isVertical ? 'bottom' : 'right';\n var arrowElementSize = getOuterSizes(arrowElement)[len];\n\n //\n // extends keepTogether behavior making sure the popper and its\n // reference have enough pixels in conjunction\n //\n\n // top/left side\n if (reference[opSide] - arrowElementSize < popper[side]) {\n data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);\n }\n // bottom/right side\n if (reference[side] + arrowElementSize > popper[opSide]) {\n data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];\n }\n data.offsets.popper = getClientRect(data.offsets.popper);\n\n // compute center of the popper\n var center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n // Compute the sideValue using the updated popper offsets\n // take popper margin in account because we don't have this info available\n var css = getStyleComputedProperty(data.instance.popper);\n var popperMarginSide = parseFloat(css['margin' + sideCapitalized]);\n var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width']);\n var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n // prevent arrowElement from being placed not contiguously to its popper\n sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n data.arrowElement = arrowElement;\n data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow);\n\n return data;\n}\n\n/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nfunction getOppositeVariation(variation) {\n if (variation === 'end') {\n return 'start';\n } else if (variation === 'start') {\n return 'end';\n }\n return variation;\n}\n\n/**\n * List of accepted placements to use as values of the `placement` option.
\n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.
\n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-end` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\nvar placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'];\n\n// Get rid of `auto` `auto-start` and `auto-end`\nvar validPlacements = placements.slice(3);\n\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\nfunction clockwise(placement) {\n var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var index = validPlacements.indexOf(placement);\n var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));\n return counter ? arr.reverse() : arr;\n}\n\nvar BEHAVIORS = {\n FLIP: 'flip',\n CLOCKWISE: 'clockwise',\n COUNTERCLOCKWISE: 'counterclockwise'\n};\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction flip(data, options) {\n // if `inner` modifier is enabled, we can't use the `flip` modifier\n if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n return data;\n }\n\n if (data.flipped && data.placement === data.originalPlacement) {\n // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n return data;\n }\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);\n\n var placement = data.placement.split('-')[0];\n var placementOpposite = getOppositePlacement(placement);\n var variation = data.placement.split('-')[1] || '';\n\n var flipOrder = [];\n\n switch (options.behavior) {\n case BEHAVIORS.FLIP:\n flipOrder = [placement, placementOpposite];\n break;\n case BEHAVIORS.CLOCKWISE:\n flipOrder = clockwise(placement);\n break;\n case BEHAVIORS.COUNTERCLOCKWISE:\n flipOrder = clockwise(placement, true);\n break;\n default:\n flipOrder = options.behavior;\n }\n\n flipOrder.forEach(function (step, index) {\n if (placement !== step || flipOrder.length === index + 1) {\n return data;\n }\n\n placement = data.placement.split('-')[0];\n placementOpposite = getOppositePlacement(placement);\n\n var popperOffsets = data.offsets.popper;\n var refOffsets = data.offsets.reference;\n\n // using floor because the reference offsets may contain decimals we are not going to consider here\n var floor = Math.floor;\n var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom);\n\n var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom;\n\n // flip the variation if required\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n\n // flips variation if reference element overflows boundaries\n var flippedVariationByRef = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom);\n\n // flips variation if popper content overflows boundaries\n var flippedVariationByContent = !!options.flipVariationsByContent && (isVertical && variation === 'start' && overflowsRight || isVertical && variation === 'end' && overflowsLeft || !isVertical && variation === 'start' && overflowsBottom || !isVertical && variation === 'end' && overflowsTop);\n\n var flippedVariation = flippedVariationByRef || flippedVariationByContent;\n\n if (overlapsRef || overflowsBoundaries || flippedVariation) {\n // this boolean to detect any flip loop\n data.flipped = true;\n\n if (overlapsRef || overflowsBoundaries) {\n placement = flipOrder[index + 1];\n }\n\n if (flippedVariation) {\n variation = getOppositeVariation(variation);\n }\n\n data.placement = placement + (variation ? '-' + variation : '');\n\n // this object contains `position`, we want to preserve it along with\n // any additional property we may add in the future\n data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));\n\n data = runModifiers(data.instance.modifiers, data, 'flip');\n }\n });\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction keepTogether(data) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var placement = data.placement.split('-')[0];\n var floor = Math.floor;\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n var side = isVertical ? 'right' : 'bottom';\n var opSide = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n if (popper[side] < floor(reference[opSide])) {\n data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];\n }\n if (popper[opSide] > floor(reference[side])) {\n data.offsets.popper[opSide] = floor(reference[side]);\n }\n\n return data;\n}\n\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\nfunction toValue(str, measurement, popperOffsets, referenceOffsets) {\n // separate value from unit\n var split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n var value = +split[1];\n var unit = split[2];\n\n // If it's not a number it's an operator, I guess\n if (!value) {\n return str;\n }\n\n if (unit.indexOf('%') === 0) {\n var element = void 0;\n switch (unit) {\n case '%p':\n element = popperOffsets;\n break;\n case '%':\n case '%r':\n default:\n element = referenceOffsets;\n }\n\n var rect = getClientRect(element);\n return rect[measurement] / 100 * value;\n } else if (unit === 'vh' || unit === 'vw') {\n // if is a vh or vw, we calculate the size based on the viewport\n var size = void 0;\n if (unit === 'vh') {\n size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n } else {\n size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n }\n return size / 100 * value;\n } else {\n // if is an explicit pixel unit, we get rid of the unit and keep the value\n // if is an implicit unit, it's px, and we return just the value\n return value;\n }\n}\n\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\nfunction parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {\n var offsets = [0, 0];\n\n // Use height if placement is left or right and index is 0 otherwise use width\n // in this way the first offset will use an axis and the second one\n // will use the other one\n var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n // Split the offset string to obtain a list of values and operands\n // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n var fragments = offset.split(/(\\+|\\-)/).map(function (frag) {\n return frag.trim();\n });\n\n // Detect if the offset string contains a pair of values or a single one\n // they could be separated by comma or space\n var divider = fragments.indexOf(find(fragments, function (frag) {\n return frag.search(/,|\\s/) !== -1;\n }));\n\n if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');\n }\n\n // If divider is found, we divide the list of values and operands to divide\n // them by ofset X and Y.\n var splitRegex = /\\s*,\\s*|\\s+/;\n var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments];\n\n // Convert the values with units to absolute pixels to allow our computations\n ops = ops.map(function (op, index) {\n // Most of the units rely on the orientation of the popper\n var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';\n var mergeWithPrevious = false;\n return op\n // This aggregates any `+` or `-` sign that aren't considered operators\n // e.g.: 10 + +5 => [10, +, +5]\n .reduce(function (a, b) {\n if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n a[a.length - 1] = b;\n mergeWithPrevious = true;\n return a;\n } else if (mergeWithPrevious) {\n a[a.length - 1] += b;\n mergeWithPrevious = false;\n return a;\n } else {\n return a.concat(b);\n }\n }, [])\n // Here we convert the string values into number values (in px)\n .map(function (str) {\n return toValue(str, measurement, popperOffsets, referenceOffsets);\n });\n });\n\n // Loop trough the offsets arrays and execute the operations\n ops.forEach(function (op, index) {\n op.forEach(function (frag, index2) {\n if (isNumeric(frag)) {\n offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n }\n });\n });\n return offsets;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\nfunction offset(data, _ref) {\n var offset = _ref.offset;\n var placement = data.placement,\n _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var basePlacement = placement.split('-')[0];\n\n var offsets = void 0;\n if (isNumeric(+offset)) {\n offsets = [+offset, 0];\n } else {\n offsets = parseOffset(offset, popper, reference, basePlacement);\n }\n\n if (basePlacement === 'left') {\n popper.top += offsets[0];\n popper.left -= offsets[1];\n } else if (basePlacement === 'right') {\n popper.top += offsets[0];\n popper.left += offsets[1];\n } else if (basePlacement === 'top') {\n popper.left += offsets[0];\n popper.top -= offsets[1];\n } else if (basePlacement === 'bottom') {\n popper.left += offsets[0];\n popper.top += offsets[1];\n }\n\n data.popper = popper;\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction preventOverflow(data, options) {\n var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper);\n\n // If offsetParent is the reference element, we really want to\n // go one step up and use the next offsetParent as reference to\n // avoid to make this modifier completely useless and look like broken\n if (data.instance.reference === boundariesElement) {\n boundariesElement = getOffsetParent(boundariesElement);\n }\n\n // NOTE: DOM access here\n // resets the popper's position so that the document size can be calculated excluding\n // the size of the popper element itself\n var transformProp = getSupportedPropertyName('transform');\n var popperStyles = data.instance.popper.style; // assignment to help minification\n var top = popperStyles.top,\n left = popperStyles.left,\n transform = popperStyles[transformProp];\n\n popperStyles.top = '';\n popperStyles.left = '';\n popperStyles[transformProp] = '';\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);\n\n // NOTE: DOM access here\n // restores the original style properties after the offsets have been computed\n popperStyles.top = top;\n popperStyles.left = left;\n popperStyles[transformProp] = transform;\n\n options.boundaries = boundaries;\n\n var order = options.priority;\n var popper = data.offsets.popper;\n\n var check = {\n primary: function primary(placement) {\n var value = popper[placement];\n if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {\n value = Math.max(popper[placement], boundaries[placement]);\n }\n return defineProperty({}, placement, value);\n },\n secondary: function secondary(placement) {\n var mainSide = placement === 'right' ? 'left' : 'top';\n var value = popper[mainSide];\n if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {\n value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));\n }\n return defineProperty({}, mainSide, value);\n }\n };\n\n order.forEach(function (placement) {\n var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n popper = _extends({}, popper, check[side](placement));\n });\n\n data.offsets.popper = popper;\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction shift(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var shiftvariation = placement.split('-')[1];\n\n // if shift shiftvariation is specified, run the modifier\n if (shiftvariation) {\n var _data$offsets = data.offsets,\n reference = _data$offsets.reference,\n popper = _data$offsets.popper;\n\n var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n var side = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n var shiftOffsets = {\n start: defineProperty({}, side, reference[side]),\n end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])\n };\n\n data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction hide(data) {\n if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n return data;\n }\n\n var refRect = data.offsets.reference;\n var bound = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'preventOverflow';\n }).boundaries;\n\n if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === true) {\n return data;\n }\n\n data.hide = true;\n data.attributes['x-out-of-boundaries'] = '';\n } else {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === false) {\n return data;\n }\n\n data.hide = false;\n data.attributes['x-out-of-boundaries'] = false;\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction inner(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n data.placement = getOppositePlacement(placement);\n data.offsets.popper = getClientRect(popper);\n\n return data;\n}\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.
\n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.
\n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nvar modifiers = {\n /**\n * Modifier used to shift the popper on the start or end of its reference\n * element.
\n * It will read the variation of the `placement` property.
\n * It can be one either `-end` or `-start`.\n * @memberof modifiers\n * @inner\n */\n shift: {\n /** @prop {number} order=100 - Index used to define the order of execution */\n order: 100,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: shift\n },\n\n /**\n * The `offset` modifier can shift your popper on both its axis.\n *\n * It accepts the following units:\n * - `px` or unit-less, interpreted as pixels\n * - `%` or `%r`, percentage relative to the length of the reference element\n * - `%p`, percentage relative to the length of the popper element\n * - `vw`, CSS viewport width unit\n * - `vh`, CSS viewport height unit\n *\n * For length is intended the main axis relative to the placement of the popper.
\n * This means that if the placement is `top` or `bottom`, the length will be the\n * `width`. In case of `left` or `right`, it will be the `height`.\n *\n * You can provide a single value (as `Number` or `String`), or a pair of values\n * as `String` divided by a comma or one (or more) white spaces.
\n * The latter is a deprecated method because it leads to confusion and will be\n * removed in v2.
\n * Additionally, it accepts additions and subtractions between different units.\n * Note that multiplications and divisions aren't supported.\n *\n * Valid examples are:\n * ```\n * 10\n * '10%'\n * '10, 10'\n * '10%, 10'\n * '10 + 10%'\n * '10 - 5vh + 3%'\n * '-10px + 5vh, 5px - 6%'\n * ```\n * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373).\n *\n * @memberof modifiers\n * @inner\n */\n offset: {\n /** @prop {number} order=200 - Index used to define the order of execution */\n order: 200,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: offset,\n /** @prop {Number|String} offset=0\n * The offset value as described in the modifier description\n */\n offset: 0\n },\n\n /**\n * Modifier used to prevent the popper from being positioned outside the boundary.\n *\n * A scenario exists where the reference itself is not within the boundaries.
\n * We can say it has \"escaped the boundaries\" — or just \"escaped\".
\n * In this case we need to decide whether the popper should either:\n *\n * - detach from the reference and remain \"trapped\" in the boundaries, or\n * - if it should ignore the boundary and \"escape with its reference\"\n *\n * When `escapeWithReference` is set to`true` and reference is completely\n * outside its boundaries, the popper will overflow (or completely leave)\n * the boundaries in order to remain attached to the edge of the reference.\n *\n * @memberof modifiers\n * @inner\n */\n preventOverflow: {\n /** @prop {number} order=300 - Index used to define the order of execution */\n order: 300,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: preventOverflow,\n /**\n * @prop {Array} [priority=['left','right','top','bottom']]\n * Popper will try to prevent overflow following these priorities by default,\n * then, it could overflow on the left and on top of the `boundariesElement`\n */\n priority: ['left', 'right', 'top', 'bottom'],\n /**\n * @prop {number} padding=5\n * Amount of pixel used to define a minimum distance between the boundaries\n * and the popper. This makes sure the popper always has a little padding\n * between the edges of its container\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='scrollParent'\n * Boundaries used by the modifier. Can be `scrollParent`, `window`,\n * `viewport` or any DOM element.\n */\n boundariesElement: 'scrollParent'\n },\n\n /**\n * Modifier used to make sure the reference and its popper stay near each other\n * without leaving any gap between the two. Especially useful when the arrow is\n * enabled and you want to ensure that it points to its reference element.\n * It cares only about the first axis. You can still have poppers with margin\n * between the popper and its reference element.\n * @memberof modifiers\n * @inner\n */\n keepTogether: {\n /** @prop {number} order=400 - Index used to define the order of execution */\n order: 400,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: keepTogether\n },\n\n /**\n * This modifier is used to move the `arrowElement` of the popper to make\n * sure it is positioned between the reference element and its popper element.\n * It will read the outer size of the `arrowElement` node to detect how many\n * pixels of conjunction are needed.\n *\n * It has no effect if no `arrowElement` is provided.\n * @memberof modifiers\n * @inner\n */\n arrow: {\n /** @prop {number} order=500 - Index used to define the order of execution */\n order: 500,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: arrow,\n /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n element: '[x-arrow]'\n },\n\n /**\n * Modifier used to flip the popper's placement when it starts to overlap its\n * reference element.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n *\n * **NOTE:** this modifier will interrupt the current update cycle and will\n * restart it if it detects the need to flip the placement.\n * @memberof modifiers\n * @inner\n */\n flip: {\n /** @prop {number} order=600 - Index used to define the order of execution */\n order: 600,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: flip,\n /**\n * @prop {String|Array} behavior='flip'\n * The behavior used to change the popper's placement. It can be one of\n * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n * placements (with optional variations)\n */\n behavior: 'flip',\n /**\n * @prop {number} padding=5\n * The popper will flip if it hits the edges of the `boundariesElement`\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='viewport'\n * The element which will define the boundaries of the popper position.\n * The popper will never be placed outside of the defined boundaries\n * (except if `keepTogether` is enabled)\n */\n boundariesElement: 'viewport',\n /**\n * @prop {Boolean} flipVariations=false\n * The popper will switch placement variation between `-start` and `-end` when\n * the reference element overlaps its boundaries.\n *\n * The original placement should have a set variation.\n */\n flipVariations: false,\n /**\n * @prop {Boolean} flipVariationsByContent=false\n * The popper will switch placement variation between `-start` and `-end` when\n * the popper element overlaps its reference boundaries.\n *\n * The original placement should have a set variation.\n */\n flipVariationsByContent: false\n },\n\n /**\n * Modifier used to make the popper flow toward the inner of the reference element.\n * By default, when this modifier is disabled, the popper will be placed outside\n * the reference element.\n * @memberof modifiers\n * @inner\n */\n inner: {\n /** @prop {number} order=700 - Index used to define the order of execution */\n order: 700,\n /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n enabled: false,\n /** @prop {ModifierFn} */\n fn: inner\n },\n\n /**\n * Modifier used to hide the popper when its reference element is outside of the\n * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n * be used to hide with a CSS selector the popper when its reference is\n * out of boundaries.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n * @memberof modifiers\n * @inner\n */\n hide: {\n /** @prop {number} order=800 - Index used to define the order of execution */\n order: 800,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: hide\n },\n\n /**\n * Computes the style that will be applied to the popper element to gets\n * properly positioned.\n *\n * Note that this modifier will not touch the DOM, it just prepares the styles\n * so that `applyStyle` modifier can apply it. This separation is useful\n * in case you need to replace `applyStyle` with a custom implementation.\n *\n * This modifier has `850` as `order` value to maintain backward compatibility\n * with previous versions of Popper.js. Expect the modifiers ordering method\n * to change in future major versions of the library.\n *\n * @memberof modifiers\n * @inner\n */\n computeStyle: {\n /** @prop {number} order=850 - Index used to define the order of execution */\n order: 850,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: computeStyle,\n /**\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: true,\n /**\n * @prop {string} [x='bottom']\n * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n * Change this if your popper should grow in a direction different from `bottom`\n */\n x: 'bottom',\n /**\n * @prop {string} [x='left']\n * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n * Change this if your popper should grow in a direction different from `right`\n */\n y: 'right'\n },\n\n /**\n * Applies the computed styles to the popper element.\n *\n * All the DOM manipulations are limited to this modifier. This is useful in case\n * you want to integrate Popper.js inside a framework or view library and you\n * want to delegate all the DOM manipulations to it.\n *\n * Note that if you disable this modifier, you must make sure the popper element\n * has its position set to `absolute` before Popper.js can do its work!\n *\n * Just disable this modifier and define your own to achieve the desired effect.\n *\n * @memberof modifiers\n * @inner\n */\n applyStyle: {\n /** @prop {number} order=900 - Index used to define the order of execution */\n order: 900,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: applyStyle,\n /** @prop {Function} */\n onLoad: applyStyleOnLoad,\n /**\n * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: undefined\n }\n};\n\n/**\n * The `dataObject` is an object containing all the information used by Popper.js.\n * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n\n/**\n * Default options provided to Popper.js constructor.
\n * These can be overridden using the `options` argument of Popper.js.
\n * To override an option, simply pass an object with the same\n * structure of the `options` object, as the 3rd argument. For example:\n * ```\n * new Popper(ref, pop, {\n * modifiers: {\n * preventOverflow: { enabled: false }\n * }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\nvar Defaults = {\n /**\n * Popper's placement.\n * @prop {Popper.placements} placement='bottom'\n */\n placement: 'bottom',\n\n /**\n * Set this to true if you want popper to position it self in 'fixed' mode\n * @prop {Boolean} positionFixed=false\n */\n positionFixed: false,\n\n /**\n * Whether events (resize, scroll) are initially enabled.\n * @prop {Boolean} eventsEnabled=true\n */\n eventsEnabled: true,\n\n /**\n * Set to true if you want to automatically remove the popper when\n * you call the `destroy` method.\n * @prop {Boolean} removeOnDestroy=false\n */\n removeOnDestroy: false,\n\n /**\n * Callback called when the popper is created.
\n * By default, it is set to no-op.
\n * Access Popper.js instance with `data.instance`.\n * @prop {onCreate}\n */\n onCreate: function onCreate() {},\n\n /**\n * Callback called when the popper is updated. This callback is not called\n * on the initialization/creation of the popper, but only on subsequent\n * updates.
\n * By default, it is set to no-op.
\n * Access Popper.js instance with `data.instance`.\n * @prop {onUpdate}\n */\n onUpdate: function onUpdate() {},\n\n /**\n * List of modifiers used to modify the offsets before they are applied to the popper.\n * They provide most of the functionalities of Popper.js.\n * @prop {modifiers}\n */\n modifiers: modifiers\n};\n\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n\n// Utils\n// Methods\nvar Popper = function () {\n /**\n * Creates a new Popper.js instance.\n * @class Popper\n * @param {Element|referenceObject} reference - The reference element used to position the popper\n * @param {Element} popper - The HTML / XML element used as the popper\n * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n * @return {Object} instance - The generated Popper.js instance\n */\n function Popper(reference, popper) {\n var _this = this;\n\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n classCallCheck(this, Popper);\n\n this.scheduleUpdate = function () {\n return requestAnimationFrame(_this.update);\n };\n\n // make update() debounced, so that it only runs at most once-per-tick\n this.update = debounce(this.update.bind(this));\n\n // with {} we create a new object with the options inside it\n this.options = _extends({}, Popper.Defaults, options);\n\n // init state\n this.state = {\n isDestroyed: false,\n isCreated: false,\n scrollParents: []\n };\n\n // get reference and popper elements (allow jQuery wrappers)\n this.reference = reference && reference.jquery ? reference[0] : reference;\n this.popper = popper && popper.jquery ? popper[0] : popper;\n\n // Deep merge modifiers options\n this.options.modifiers = {};\n Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) {\n _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});\n });\n\n // Refactoring modifiers' list (Object => Array)\n this.modifiers = Object.keys(this.options.modifiers).map(function (name) {\n return _extends({\n name: name\n }, _this.options.modifiers[name]);\n })\n // sort the modifiers by order\n .sort(function (a, b) {\n return a.order - b.order;\n });\n\n // modifiers have the ability to execute arbitrary code when Popper.js get inited\n // such code is executed in the same order of its modifier\n // they could add new properties to their options configuration\n // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n this.modifiers.forEach(function (modifierOptions) {\n if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);\n }\n });\n\n // fire the first update to position the popper in the right place\n this.update();\n\n var eventsEnabled = this.options.eventsEnabled;\n if (eventsEnabled) {\n // setup event listeners, they will take care of update the position in specific situations\n this.enableEventListeners();\n }\n\n this.state.eventsEnabled = eventsEnabled;\n }\n\n // We can't use class properties because they don't get listed in the\n // class prototype and break stuff like Sinon stubs\n\n\n createClass(Popper, [{\n key: 'update',\n value: function update$$1() {\n return update.call(this);\n }\n }, {\n key: 'destroy',\n value: function destroy$$1() {\n return destroy.call(this);\n }\n }, {\n key: 'enableEventListeners',\n value: function enableEventListeners$$1() {\n return enableEventListeners.call(this);\n }\n }, {\n key: 'disableEventListeners',\n value: function disableEventListeners$$1() {\n return disableEventListeners.call(this);\n }\n\n /**\n * Schedules an update. It will run on the next UI update available.\n * @method scheduleUpdate\n * @memberof Popper\n */\n\n\n /**\n * Collection of utilities useful when writing custom modifiers.\n * Starting from version 1.7, this method is available only if you\n * include `popper-utils.js` before `popper.js`.\n *\n * **DEPRECATION**: This way to access PopperUtils is deprecated\n * and will be removed in v2! Use the PopperUtils module directly instead.\n * Due to the high instability of the methods contained in Utils, we can't\n * guarantee them to follow semver. Use them at your own risk!\n * @static\n * @private\n * @type {Object}\n * @deprecated since version 1.8\n * @member Utils\n * @memberof Popper\n */\n\n }]);\n return Popper;\n}();\n\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.
\n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10.\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n\n\nPopper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\nPopper.placements = placements;\nPopper.Defaults = Defaults;\n\nexport default Popper;\n//# sourceMappingURL=popper.js.map\n","export const PLACEMENT_TOP_START = 'top-start'\nexport const PLACEMENT_TOP_END = 'top-end'\nexport const PLACEMENT_BOTTOM_START = 'bottom-start'\nexport const PLACEMENT_BOTTOM_END = 'bottom-end'\nexport const PLACEMENT_RIGHT_START = 'right-start'\nexport const PLACEMENT_RIGHT_END = 'right-end'\nexport const PLACEMENT_LEFT_START = 'left-start'\nexport const PLACEMENT_LEFT_END = 'left-end'\n","import { assign, defineProperty, defineProperties, readonlyDescriptor } from './object'\n\nexport class BvEvent {\n constructor(type, eventInit = {}) {\n // Start by emulating native Event constructor\n if (!type) {\n /* istanbul ignore next */\n throw new TypeError(\n `Failed to construct '${this.constructor.name}'. 1 argument required, ${\n arguments.length\n } given.`\n )\n }\n\n // Merge defaults first, the eventInit, and the type last\n // so it can't be overwritten\n assign(this, BvEvent.Defaults, this.constructor.Defaults, eventInit, { type })\n\n // Freeze some props as readonly, but leave them enumerable\n defineProperties(this, {\n type: readonlyDescriptor(),\n cancelable: readonlyDescriptor(),\n nativeEvent: readonlyDescriptor(),\n target: readonlyDescriptor(),\n relatedTarget: readonlyDescriptor(),\n vueTarget: readonlyDescriptor(),\n componentId: readonlyDescriptor()\n })\n\n // Create a private variable using closure scoping\n let defaultPrevented = false\n // Recreate preventDefault method. One way setter\n this.preventDefault = function preventDefault() {\n if (this.cancelable) {\n defaultPrevented = true\n }\n }\n\n // Create `defaultPrevented` publicly accessible prop that\n // can only be altered by the preventDefault method\n defineProperty(this, 'defaultPrevented', {\n enumerable: true,\n get() {\n return defaultPrevented\n }\n })\n }\n\n static get Defaults() {\n return {\n type: '',\n cancelable: true,\n nativeEvent: null,\n target: null,\n relatedTarget: null,\n vueTarget: null,\n componentId: null\n }\n }\n}\n","import { extend } from '../vue'\nimport { EVENT_OPTIONS_NO_CAPTURE } from '../constants/events'\nimport { contains } from '../utils/dom'\nimport { eventOn, eventOff } from '../utils/events'\n\n// @vue/component\nexport const clickOutMixin = extend({\n data() {\n return {\n listenForClickOut: false\n }\n },\n watch: {\n listenForClickOut(newValue, oldValue) {\n if (newValue !== oldValue) {\n eventOff(\n this.clickOutElement,\n this.clickOutEventName,\n this._clickOutHandler,\n EVENT_OPTIONS_NO_CAPTURE\n )\n if (newValue) {\n eventOn(\n this.clickOutElement,\n this.clickOutEventName,\n this._clickOutHandler,\n EVENT_OPTIONS_NO_CAPTURE\n )\n }\n }\n }\n },\n beforeCreate() {\n // Declare non-reactive properties\n this.clickOutElement = null\n this.clickOutEventName = null\n },\n mounted() {\n if (!this.clickOutElement) {\n this.clickOutElement = document\n }\n if (!this.clickOutEventName) {\n this.clickOutEventName = 'click'\n }\n if (this.listenForClickOut) {\n eventOn(\n this.clickOutElement,\n this.clickOutEventName,\n this._clickOutHandler,\n EVENT_OPTIONS_NO_CAPTURE\n )\n }\n },\n beforeDestroy() {\n eventOff(\n this.clickOutElement,\n this.clickOutEventName,\n this._clickOutHandler,\n EVENT_OPTIONS_NO_CAPTURE\n )\n },\n methods: {\n isClickOut(event) {\n return !contains(this.$el, event.target)\n },\n _clickOutHandler(event) {\n if (this.clickOutHandler && this.isClickOut(event)) {\n this.clickOutHandler(event)\n }\n }\n }\n})\n","import { extend } from '../vue'\nimport { EVENT_OPTIONS_NO_CAPTURE } from '../constants/events'\nimport { eventOn, eventOff } from '../utils/events'\n\n// @vue/component\nexport const focusInMixin = extend({\n data() {\n return {\n listenForFocusIn: false\n }\n },\n watch: {\n listenForFocusIn(newValue, oldValue) {\n if (newValue !== oldValue) {\n eventOff(this.focusInElement, 'focusin', this._focusInHandler, EVENT_OPTIONS_NO_CAPTURE)\n if (newValue) {\n eventOn(this.focusInElement, 'focusin', this._focusInHandler, EVENT_OPTIONS_NO_CAPTURE)\n }\n }\n }\n },\n beforeCreate() {\n // Declare non-reactive properties\n this.focusInElement = null\n },\n mounted() {\n if (!this.focusInElement) {\n this.focusInElement = document\n }\n if (this.listenForFocusIn) {\n eventOn(this.focusInElement, 'focusin', this._focusInHandler, EVENT_OPTIONS_NO_CAPTURE)\n }\n },\n beforeDestroy() {\n eventOff(this.focusInElement, 'focusin', this._focusInHandler, EVENT_OPTIONS_NO_CAPTURE)\n },\n methods: {\n _focusInHandler(event) {\n if (this.focusInHandler) {\n this.focusInHandler(event)\n }\n }\n }\n})\n","import { isVue3 } from '../vue'\n\nlet registry = null\nif (isVue3) {\n registry = new WeakMap()\n}\n\nexport const registerElementToInstance = (element, instance) => {\n if (!isVue3) {\n return\n }\n\n registry.set(element, instance)\n}\n\nexport const removeElementToInstance = element => {\n if (!isVue3) {\n return\n }\n\n registry.delete(element)\n}\n\nexport const getInstanceFromElement = element => {\n if (!isVue3) {\n return element.__vue__\n }\n\n let currentElement = element\n\n while (currentElement) {\n if (registry.has(currentElement)) {\n /* istanbul ignore next */\n return registry.get(currentElement)\n }\n currentElement = currentElement.parentNode\n }\n\n return null\n}\n","import Popper from 'popper.js'\nimport { extend } from '../vue'\nimport { NAME_DROPDOWN } from '../constants/components'\nimport { HAS_TOUCH_SUPPORT } from '../constants/env'\nimport {\n EVENT_NAME_CLICK,\n EVENT_NAME_HIDDEN,\n EVENT_NAME_HIDE,\n EVENT_NAME_SHOW,\n EVENT_NAME_SHOWN,\n EVENT_NAME_TOGGLE\n} from '../constants/events'\nimport { CODE_DOWN, CODE_ENTER, CODE_ESC, CODE_SPACE, CODE_UP } from '../constants/key-codes'\nimport {\n PLACEMENT_TOP_START,\n PLACEMENT_TOP_END,\n PLACEMENT_BOTTOM_START,\n PLACEMENT_BOTTOM_END,\n PLACEMENT_RIGHT_START,\n PLACEMENT_LEFT_START\n} from '../constants/popper'\nimport {\n PROP_TYPE_BOOLEAN,\n PROP_TYPE_NUMBER_STRING,\n PROP_TYPE_OBJECT,\n PROP_TYPE_STRING\n} from '../constants/props'\nimport { HTMLElement } from '../constants/safe-types'\nimport { BvEvent } from '../utils/bv-event.class'\nimport { attemptFocus, closest, contains, isVisible, requestAF, selectAll } from '../utils/dom'\nimport { getRootEventName, stopEvent } from '../utils/events'\nimport { isNull } from '../utils/inspect'\nimport { mergeDeep, sortKeys } from '../utils/object'\nimport { makeProp, makePropsConfigurable } from '../utils/props'\nimport { warn } from '../utils/warn'\nimport { clickOutMixin } from './click-out'\nimport { focusInMixin } from './focus-in'\nimport { idMixin, props as idProps } from './id'\nimport { listenOnRootMixin } from './listen-on-root'\nimport {\n registerElementToInstance,\n removeElementToInstance\n} from '../utils/element-to-vue-instance-registry'\n\n// --- Constants ---\n\nconst ROOT_EVENT_NAME_SHOWN = getRootEventName(NAME_DROPDOWN, EVENT_NAME_SHOWN)\nconst ROOT_EVENT_NAME_HIDDEN = getRootEventName(NAME_DROPDOWN, EVENT_NAME_HIDDEN)\n\n// CSS selectors\nconst SELECTOR_FORM_CHILD = '.dropdown form'\nconst SELECTOR_ITEM = ['.dropdown-item', '.b-dropdown-form']\n .map(selector => `${selector}:not(.disabled):not([disabled])`)\n .join(', ')\n\n// --- Helper methods ---\n\n// Return an array of visible items\nconst filterVisibles = els => (els || []).filter(isVisible)\n\n// --- Props ---\n\nexport const props = makePropsConfigurable(\n sortKeys({\n ...idProps,\n // String: `scrollParent`, `window` or `viewport`\n // HTMLElement: HTML Element reference\n boundary: makeProp([HTMLElement, PROP_TYPE_STRING], 'scrollParent'),\n disabled: makeProp(PROP_TYPE_BOOLEAN, false),\n // Place left if possible\n dropleft: makeProp(PROP_TYPE_BOOLEAN, false),\n // Place right if possible\n dropright: makeProp(PROP_TYPE_BOOLEAN, false),\n // Place on top if possible\n dropup: makeProp(PROP_TYPE_BOOLEAN, false),\n // Disable auto-flipping of menu from bottom <=> top\n noFlip: makeProp(PROP_TYPE_BOOLEAN, false),\n // Number of pixels or a CSS unit value to offset menu\n // (i.e. `1px`, `1rem`, etc.)\n offset: makeProp(PROP_TYPE_NUMBER_STRING, 0),\n popperOpts: makeProp(PROP_TYPE_OBJECT, {}),\n // Right align menu (default is left align)\n right: makeProp(PROP_TYPE_BOOLEAN, false)\n }),\n NAME_DROPDOWN\n)\n\n// --- Mixin ---\n\n// @vue/component\nexport const dropdownMixin = extend({\n mixins: [idMixin, listenOnRootMixin, clickOutMixin, focusInMixin],\n provide() {\n return { getBvDropdown: () => this }\n },\n inject: {\n getBvNavbar: { default: () => () => null }\n },\n props,\n data() {\n return {\n visible: false,\n visibleChangePrevented: false\n }\n },\n computed: {\n bvNavbar() {\n return this.getBvNavbar()\n },\n inNavbar() {\n return !isNull(this.bvNavbar)\n },\n toggler() {\n const { toggle } = this.$refs\n return toggle ? toggle.$el || toggle : null\n },\n 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 return ''\n },\n boundaryClass() {\n // Position `static` is needed to allow menu to \"breakout\" of the `scrollParent`\n // boundaries when boundary is anything other than `scrollParent`\n // See: https://github.com/twbs/bootstrap/issues/24251#issuecomment-341413786\n return this.boundary !== 'scrollParent' && !this.inNavbar ? 'position-static' : ''\n },\n hideDelay() {\n return this.inNavbar ? (HAS_TOUCH_SUPPORT ? 300 : 50) : 0\n }\n },\n watch: {\n visible(newValue, oldValue) {\n if (this.visibleChangePrevented) {\n this.visibleChangePrevented = false\n return\n }\n\n if (newValue !== oldValue) {\n const eventName = newValue ? EVENT_NAME_SHOW : EVENT_NAME_HIDE\n const bvEvent = new BvEvent(eventName, {\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(bvEvent)\n if (bvEvent.defaultPrevented) {\n // Reset value and exit if canceled\n this.visibleChangePrevented = true\n this.visible = oldValue\n // Just in case a child element triggered `this.hide(true)`\n this.$off(EVENT_NAME_HIDDEN, this.focusToggler)\n return\n }\n if (newValue) {\n this.showMenu()\n } else {\n this.hideMenu()\n }\n }\n },\n 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() {\n // Create private non-reactive props\n this.$_popper = null\n this.$_hideTimeout = null\n },\n /* istanbul ignore next */\n deactivated() {\n // In case we are inside a ``\n this.visible = false\n this.whileOpenListen(false)\n this.destroyPopper()\n },\n mounted() {\n registerElementToInstance(this.$el, this)\n },\n beforeDestroy() {\n this.visible = false\n this.whileOpenListen(false)\n this.destroyPopper()\n this.clearHideTimeout()\n removeElementToInstance(this.$el)\n },\n methods: {\n // Event emitter\n emitEvent(bvEvent) {\n const { type } = bvEvent\n this.emitOnRoot(getRootEventName(NAME_DROPDOWN, type), bvEvent)\n this.$emit(type, bvEvent)\n },\n showMenu() {\n if (this.disabled) {\n /* istanbul ignore next */\n return\n }\n\n // Only instantiate Popper.js when dropdown is not in ``\n if (!this.inNavbar) {\n if (typeof Popper === 'undefined') {\n /* istanbul ignore next */\n warn('Popper.js not found. Falling back to CSS positioning', NAME_DROPDOWN)\n } else {\n // For dropup with alignment we use the parent element as popper container\n let el = (this.dropup && this.right) || this.split ? this.$el : this.$refs.toggle\n // Make sure we have a reference to an element, not a component!\n el = el.$el || el\n // Instantiate Popper.js\n this.createPopper(el)\n }\n }\n\n // Ensure other menus are closed\n this.emitOnRoot(ROOT_EVENT_NAME_SHOWN, this)\n\n // Enable listeners\n this.whileOpenListen(true)\n\n // Wrap in `$nextTick()` to ensure menu is fully rendered/shown\n this.$nextTick(() => {\n // Focus on the menu container on show\n this.focusMenu()\n // Emit the shown event\n this.$emit(EVENT_NAME_SHOWN)\n })\n },\n hideMenu() {\n this.whileOpenListen(false)\n this.emitOnRoot(ROOT_EVENT_NAME_HIDDEN, this)\n this.$emit(EVENT_NAME_HIDDEN)\n this.destroyPopper()\n },\n 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() {\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() {\n try {\n this.$_popper.scheduleUpdate()\n } catch {}\n },\n clearHideTimeout() {\n clearTimeout(this.$_hideTimeout)\n this.$_hideTimeout = null\n },\n getPopperConfig() {\n let placement = PLACEMENT_BOTTOM_START\n if (this.dropup) {\n placement = this.right ? PLACEMENT_TOP_END : PLACEMENT_TOP_START\n } else if (this.dropright) {\n placement = PLACEMENT_RIGHT_START\n } else if (this.dropleft) {\n placement = PLACEMENT_LEFT_START\n } else if (this.right) {\n placement = PLACEMENT_BOTTOM_END\n }\n const popperConfig = {\n placement,\n modifiers: {\n offset: { offset: this.offset || 0 },\n flip: { enabled: !this.noFlip }\n }\n }\n const boundariesElement = this.boundary\n if (boundariesElement) {\n popperConfig.modifiers.preventOverflow = { boundariesElement }\n }\n return mergeDeep(popperConfig, this.popperOpts || {})\n },\n // Turn listeners on/off while open\n whileOpenListen(isOpen) {\n // Hide the dropdown when clicked outside\n this.listenForClickOut = isOpen\n // Hide the dropdown when it loses focus\n this.listenForFocusIn = isOpen\n // Hide the dropdown when another dropdown is opened\n const method = isOpen ? 'listenOnRoot' : 'listenOffRoot'\n this[method](ROOT_EVENT_NAME_SHOWN, this.rootCloseListener)\n },\n rootCloseListener(vm) {\n if (vm !== this) {\n this.visible = false\n }\n },\n // Public method to show dropdown\n show() {\n if (this.disabled) {\n return\n }\n // Wrap in a `requestAF()` to allow any previous\n // click handling to occur first\n requestAF(() => {\n this.visible = true\n })\n },\n // Public method to hide dropdown\n hide(refocus = false) {\n /* istanbul ignore next */\n if (this.disabled) {\n return\n }\n this.visible = false\n if (refocus) {\n // Child element is closing the dropdown on click\n this.$once(EVENT_NAME_HIDDEN, this.focusToggler)\n }\n },\n // Called only by a button that toggles the menu\n toggle(event) {\n event = event || {}\n // Early exit when not a click event or ENTER, SPACE or DOWN were pressed\n const { type, keyCode } = event\n if (\n type !== 'click' &&\n !(type === 'keydown' && [CODE_ENTER, CODE_SPACE, CODE_DOWN].indexOf(keyCode) !== -1)\n ) {\n /* istanbul ignore next */\n return\n }\n /* istanbul ignore next */\n if (this.disabled) {\n this.visible = false\n return\n }\n this.$emit(EVENT_NAME_TOGGLE, event)\n stopEvent(event)\n // Toggle visibility\n if (this.visible) {\n this.hide(true)\n } else {\n this.show()\n }\n },\n // Mousedown handler for the toggle\n /* istanbul ignore next */\n onMousedown(event) {\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 stopEvent(event, { propagation: false })\n },\n // Called from dropdown menu context\n onKeydown(event) {\n const { keyCode } = event\n if (keyCode === CODE_ESC) {\n // Close on ESC\n this.onEsc(event)\n } else if (keyCode === CODE_DOWN) {\n // Down Arrow\n this.focusNext(event, false)\n } else if (keyCode === CODE_UP) {\n // Up Arrow\n this.focusNext(event, true)\n }\n },\n // If user presses ESC, close the menu\n onEsc(event) {\n if (this.visible) {\n this.visible = false\n stopEvent(event)\n // Return focus to original trigger button\n this.$once(EVENT_NAME_HIDDEN, this.focusToggler)\n }\n },\n // Called only in split button mode, for the split button\n onSplitClick(event) {\n /* istanbul ignore next */\n if (this.disabled) {\n this.visible = false\n return\n }\n this.$emit(EVENT_NAME_CLICK, event)\n },\n // Shared hide handler between click-out and focus-in events\n hideHandler(event) {\n const { target } = event\n if (this.visible && !contains(this.$refs.menu, target) && !contains(this.toggler, target)) {\n this.clearHideTimeout()\n this.$_hideTimeout = setTimeout(() => this.hide(), this.hideDelay)\n }\n },\n // Document click-out listener\n clickOutHandler(event) {\n this.hideHandler(event)\n },\n // Document focus-in listener\n focusInHandler(event) {\n this.hideHandler(event)\n },\n // Keyboard nav\n focusNext(event, up) {\n // Ignore key up/down on form elements\n const { target } = event\n if (!this.visible || (event && closest(SELECTOR_FORM_CHILD, target))) {\n /* istanbul ignore next: should never happen */\n return\n }\n stopEvent(event)\n this.$nextTick(() => {\n const items = this.getItems()\n if (items.length < 1) {\n /* istanbul ignore next: should never happen */\n return\n }\n let index = items.indexOf(target)\n if (up && index > 0) {\n index--\n } else if (!up && index < items.length - 1) {\n index++\n }\n if (index < 0) {\n /* istanbul ignore next: should never happen */\n index = 0\n }\n this.focusItem(index, items)\n })\n },\n focusItem(index, items) {\n const el = items.find((el, i) => i === index)\n attemptFocus(el)\n },\n getItems() {\n // Get all items\n return filterVisibles(selectAll(SELECTOR_ITEM, this.$refs.menu))\n },\n focusMenu() {\n attemptFocus(this.$refs.menu)\n },\n focusToggler() {\n this.$nextTick(() => {\n attemptFocus(this.toggler)\n })\n }\n }\n})\n","import { extend } from '../../vue'\nimport { NAME_DROPDOWN } from '../../constants/components'\nimport {\n PROP_TYPE_ARRAY_OBJECT_STRING,\n PROP_TYPE_BOOLEAN,\n PROP_TYPE_OBJECT,\n PROP_TYPE_OBJECT_STRING,\n PROP_TYPE_STRING\n} from '../../constants/props'\nimport { SLOT_NAME_BUTTON_CONTENT, SLOT_NAME_DEFAULT } from '../../constants/slots'\nimport { arrayIncludes } from '../../utils/array'\nimport { htmlOrText } from '../../utils/html'\nimport { makeProp, makePropsConfigurable } from '../../utils/props'\nimport { toString } from '../../utils/string'\nimport { dropdownMixin, props as dropdownProps } from '../../mixins/dropdown'\nimport { idMixin, props as idProps } from '../../mixins/id'\nimport { normalizeSlotMixin } from '../../mixins/normalize-slot'\nimport { BButton } from '../button/button'\nimport { sortKeys } from '../../utils/object'\n\n// --- Props ---\n\nexport const props = makePropsConfigurable(\n sortKeys({\n ...idProps,\n ...dropdownProps,\n block: makeProp(PROP_TYPE_BOOLEAN, false),\n html: makeProp(PROP_TYPE_STRING),\n // If `true`, only render menu contents when open\n lazy: makeProp(PROP_TYPE_BOOLEAN, false),\n menuClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n noCaret: makeProp(PROP_TYPE_BOOLEAN, false),\n role: makeProp(PROP_TYPE_STRING, 'menu'),\n size: makeProp(PROP_TYPE_STRING),\n split: makeProp(PROP_TYPE_BOOLEAN, false),\n splitButtonType: makeProp(PROP_TYPE_STRING, 'button', value => {\n return arrayIncludes(['button', 'submit', 'reset'], value)\n }),\n splitClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n splitHref: makeProp(PROP_TYPE_STRING),\n splitTo: makeProp(PROP_TYPE_OBJECT_STRING),\n splitVariant: makeProp(PROP_TYPE_STRING),\n text: makeProp(PROP_TYPE_STRING),\n toggleAttrs: makeProp(PROP_TYPE_OBJECT, {}),\n toggleClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n toggleTag: makeProp(PROP_TYPE_STRING, 'button'),\n // TODO: This really should be `toggleLabel`\n toggleText: makeProp(PROP_TYPE_STRING, 'Toggle dropdown'),\n variant: makeProp(PROP_TYPE_STRING, 'secondary')\n }),\n NAME_DROPDOWN\n)\n\n// --- Main component ---\n\n// @vue/component\nexport const BDropdown = /*#__PURE__*/ extend({\n name: NAME_DROPDOWN,\n mixins: [idMixin, dropdownMixin, normalizeSlotMixin],\n props,\n computed: {\n dropdownClasses() {\n const { block, split } = this\n return [\n this.directionClass,\n this.boundaryClass,\n {\n show: this.visible,\n // The 'btn-group' class is required in `split` mode for button alignment\n // It needs also to be applied when `block` is disabled to allow multiple\n // dropdowns to be aligned one line\n 'btn-group': split || !block,\n // When `block` is enabled and we are in `split` mode the 'd-flex' class\n // needs to be applied to allow the buttons to stretch to full width\n 'd-flex': block && split\n }\n ]\n },\n menuClasses() {\n return [\n this.menuClass,\n {\n 'dropdown-menu-right': this.right,\n show: this.visible\n }\n ]\n },\n toggleClasses() {\n const { split } = this\n return [\n this.toggleClass,\n {\n 'dropdown-toggle-split': split,\n 'dropdown-toggle-no-caret': this.noCaret && !split\n }\n ]\n }\n },\n render(h) {\n const { visible, variant, size, block, disabled, split, role, hide, toggle } = this\n const commonProps = { variant, size, block, disabled }\n\n let $buttonChildren = this.normalizeSlot(SLOT_NAME_BUTTON_CONTENT)\n let buttonContentDomProps = this.hasNormalizedSlot(SLOT_NAME_BUTTON_CONTENT)\n ? {}\n : htmlOrText(this.html, this.text)\n\n let $split = h()\n if (split) {\n const { splitTo, splitHref, splitButtonType } = this\n const btnProps = {\n ...commonProps,\n variant: this.splitVariant || variant\n }\n\n // We add these as needed due to issues with\n // defined property with `undefined`/`null` values\n if (splitTo) {\n btnProps.to = splitTo\n } else if (splitHref) {\n btnProps.href = splitHref\n } else if (splitButtonType) {\n btnProps.type = splitButtonType\n }\n\n $split = h(\n BButton,\n {\n class: this.splitClass,\n attrs: { id: this.safeId('_BV_button_') },\n props: btnProps,\n domProps: buttonContentDomProps,\n on: { click: this.onSplitClick },\n ref: 'button'\n },\n $buttonChildren\n )\n\n // Overwrite button content for the toggle when in `split` mode\n $buttonChildren = [h('span', { class: ['sr-only'] }, [this.toggleText])]\n buttonContentDomProps = {}\n }\n const ariaHasPopupRoles = ['menu', 'listbox', 'tree', 'grid', 'dialog']\n\n const $toggle = h(\n BButton,\n {\n staticClass: 'dropdown-toggle',\n class: this.toggleClasses,\n attrs: {\n // Merge in user supplied attributes\n ...this.toggleAttrs,\n // Must have attributes\n id: this.safeId('_BV_toggle_'),\n 'aria-haspopup': ariaHasPopupRoles.includes(role) ? role : 'false',\n 'aria-expanded': toString(visible)\n },\n props: {\n ...commonProps,\n tag: this.toggleTag,\n block: block && !split\n },\n domProps: buttonContentDomProps,\n on: {\n mousedown: this.onMousedown,\n click: toggle,\n keydown: toggle // Handle ENTER, SPACE and DOWN\n },\n ref: 'toggle'\n },\n $buttonChildren\n )\n\n const $menu = h(\n 'ul',\n {\n staticClass: 'dropdown-menu',\n class: this.menuClasses,\n attrs: {\n role,\n tabindex: '-1',\n 'aria-labelledby': this.safeId(split ? '_BV_button_' : '_BV_toggle_')\n },\n on: {\n keydown: this.onKeydown // Handle UP, DOWN and ESC\n },\n ref: 'menu'\n },\n [!this.lazy || visible ? this.normalizeSlot(SLOT_NAME_DEFAULT, { hide }) : h()]\n )\n\n return h(\n 'div',\n {\n staticClass: 'dropdown b-dropdown',\n class: this.dropdownClasses,\n attrs: { id: this.safeId() }\n },\n [$split, $toggle, $menu]\n )\n }\n})\n","import { extend } from '../../vue'\nimport { NAME_DROPDOWN_ITEM } from '../../constants/components'\nimport { EVENT_NAME_CLICK } from '../../constants/events'\nimport { PROP_TYPE_ARRAY_OBJECT_STRING, PROP_TYPE_STRING } from '../../constants/props'\nimport { requestAF } from '../../utils/dom'\nimport { omit, sortKeys } from '../../utils/object'\nimport { makeProp, makePropsConfigurable, pluckProps } from '../../utils/props'\nimport { attrsMixin } from '../../mixins/attrs'\nimport { normalizeSlotMixin } from '../../mixins/normalize-slot'\nimport { BLink, props as BLinkProps } from '../link/link'\n\n// --- Props ---\n\nconst linkProps = omit(BLinkProps, ['event', 'routerTag'])\n\nexport const props = makePropsConfigurable(\n sortKeys({\n ...linkProps,\n linkClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n variant: makeProp(PROP_TYPE_STRING)\n }),\n NAME_DROPDOWN_ITEM\n)\n\n// --- Main component ---\n\n// @vue/component\nexport const BDropdownItem = /*#__PURE__*/ extend({\n name: NAME_DROPDOWN_ITEM,\n mixins: [attrsMixin, normalizeSlotMixin],\n inject: {\n getBvDropdown: { default: () => () => null }\n },\n inheritAttrs: false,\n props,\n computed: {\n bvDropdown() {\n return this.getBvDropdown()\n },\n computedAttrs() {\n return {\n ...this.bvAttrs,\n role: 'menuitem'\n }\n }\n },\n methods: {\n closeDropdown() {\n // Close on next animation frame to allow time to process\n requestAF(() => {\n if (this.bvDropdown) {\n this.bvDropdown.hide(true)\n }\n })\n },\n onClick(event) {\n this.$emit(EVENT_NAME_CLICK, event)\n this.closeDropdown()\n }\n },\n render(h) {\n const { linkClass, variant, active, disabled, onClick, bvAttrs } = this\n\n return h(\n 'li',\n {\n class: bvAttrs.class,\n style: bvAttrs.style,\n attrs: { role: 'presentation' }\n },\n [\n h(\n BLink,\n {\n staticClass: 'dropdown-item',\n class: [linkClass, { [`text-${variant}`]: variant && !(active || disabled) }],\n props: pluckProps(linkProps, this.$props),\n attrs: this.computedAttrs,\n on: { click: onClick },\n ref: 'item'\n },\n this.normalizeSlot()\n )\n ]\n )\n }\n})\n","import { extend } from '../../vue'\nimport { NAME_DROPDOWN_ITEM_BUTTON } from '../../constants/components'\nimport { EVENT_NAME_CLICK } from '../../constants/events'\nimport {\n PROP_TYPE_ARRAY_OBJECT_STRING,\n PROP_TYPE_BOOLEAN,\n PROP_TYPE_STRING\n} from '../../constants/props'\nimport { makeProp, makePropsConfigurable } from '../../utils/props'\nimport { attrsMixin } from '../../mixins/attrs'\nimport { normalizeSlotMixin } from '../../mixins/normalize-slot'\n\n// --- Props ---\n\nexport const props = makePropsConfigurable(\n {\n active: makeProp(PROP_TYPE_BOOLEAN, false),\n activeClass: makeProp(PROP_TYPE_STRING, 'active'),\n buttonClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n disabled: makeProp(PROP_TYPE_BOOLEAN, false),\n variant: makeProp(PROP_TYPE_STRING)\n },\n NAME_DROPDOWN_ITEM_BUTTON\n)\n\n// --- Main component ---\n\n// @vue/component\nexport const BDropdownItemButton = /*#__PURE__*/ extend({\n name: NAME_DROPDOWN_ITEM_BUTTON,\n mixins: [attrsMixin, normalizeSlotMixin],\n inject: {\n getBvDropdown: { default: () => () => null }\n },\n inheritAttrs: false,\n props,\n computed: {\n bvDropdown() {\n return this.getBvDropdown()\n },\n\n computedAttrs() {\n return {\n ...this.bvAttrs,\n role: 'menuitem',\n type: 'button',\n disabled: this.disabled\n }\n }\n },\n methods: {\n closeDropdown() {\n if (this.bvDropdown) {\n this.bvDropdown.hide(true)\n }\n },\n onClick(event) {\n this.$emit(EVENT_NAME_CLICK, event)\n this.closeDropdown()\n }\n },\n render(h) {\n const { active, variant, bvAttrs } = this\n\n return h(\n 'li',\n {\n class: bvAttrs.class,\n style: bvAttrs.style,\n attrs: { role: 'presentation' }\n },\n [\n h(\n 'button',\n {\n staticClass: 'dropdown-item',\n class: [\n this.buttonClass,\n {\n [this.activeClass]: active,\n [`text-${variant}`]: variant && !(active || this.disabled)\n }\n ],\n attrs: this.computedAttrs,\n on: { click: this.onClick },\n ref: 'button'\n },\n this.normalizeSlot()\n )\n ]\n )\n }\n})\n","import { extend, mergeData } from '../../vue'\nimport { NAME_DROPDOWN_HEADER } from '../../constants/components'\nimport { PROP_TYPE_STRING } from '../../constants/props'\nimport { isTag } from '../../utils/dom'\nimport { omit } from '../../utils/object'\nimport { makeProp, makePropsConfigurable } from '../../utils/props'\n\n// --- Props ---\n\nexport const props = makePropsConfigurable(\n {\n id: makeProp(PROP_TYPE_STRING),\n tag: makeProp(PROP_TYPE_STRING, 'header'),\n variant: makeProp(PROP_TYPE_STRING)\n },\n NAME_DROPDOWN_HEADER\n)\n\n// --- Main component ---\n\n// @vue/component\nexport const BDropdownHeader = /*#__PURE__*/ extend({\n name: NAME_DROPDOWN_HEADER,\n functional: true,\n props,\n render(h, { props, data, children }) {\n const { tag, variant } = props\n\n return h('li', mergeData(omit(data, ['attrs']), { attrs: { role: 'presentation' } }), [\n h(\n tag,\n {\n staticClass: 'dropdown-header',\n class: { [`text-${variant}`]: variant },\n attrs: {\n ...(data.attrs || {}),\n id: props.id || null,\n role: isTag(tag, 'header') ? null : 'heading'\n },\n ref: 'header'\n },\n children\n )\n ])\n }\n})\n","import { extend, mergeData } from '../../vue'\nimport { NAME_DROPDOWN_DIVIDER } from '../../constants/components'\nimport { PROP_TYPE_STRING } from '../../constants/props'\nimport { makeProp, makePropsConfigurable } from '../../utils/props'\nimport { omit } from '../../utils/object'\n\n// --- Props ---\n\nexport const props = makePropsConfigurable(\n {\n tag: makeProp(PROP_TYPE_STRING, 'hr')\n },\n NAME_DROPDOWN_DIVIDER\n)\n\n// --- Main component ---\n\n// @vue/component\nexport const BDropdownDivider = /*#__PURE__*/ extend({\n name: NAME_DROPDOWN_DIVIDER,\n functional: true,\n props,\n render(h, { props, data }) {\n return h('li', mergeData(omit(data, ['attrs']), { attrs: { role: 'presentation' } }), [\n h(props.tag, {\n staticClass: 'dropdown-divider',\n attrs: {\n ...(data.attrs || {}),\n role: 'separator',\n 'aria-orientation': 'horizontal'\n },\n ref: 'divider'\n })\n ])\n }\n})\n","import { extend, mergeData } from '../../vue'\nimport { NAME_FORM } from '../../constants/components'\nimport { PROP_TYPE_BOOLEAN, PROP_TYPE_STRING } from '../../constants/props'\nimport { makeProp, makePropsConfigurable } from '../../utils/props'\n\n// --- Props ---\n\nexport const props = makePropsConfigurable(\n {\n id: makeProp(PROP_TYPE_STRING),\n inline: makeProp(PROP_TYPE_BOOLEAN, false),\n novalidate: makeProp(PROP_TYPE_BOOLEAN, false),\n validated: makeProp(PROP_TYPE_BOOLEAN, false)\n },\n NAME_FORM\n)\n\n// --- Main component ---\n\n// @vue/component\nexport const BForm = /*#__PURE__*/ extend({\n name: NAME_FORM,\n functional: true,\n props,\n render(h, { props, data, children }) {\n return h(\n 'form',\n mergeData(data, {\n class: {\n 'form-inline': props.inline,\n 'was-validated': props.validated\n },\n attrs: {\n id: props.id,\n novalidate: props.novalidate\n }\n }),\n children\n )\n }\n})\n","import { extend, mergeData } from '../../vue'\nimport { NAME_DROPDOWN_FORM } from '../../constants/components'\nimport { PROP_TYPE_ARRAY_OBJECT_STRING, PROP_TYPE_BOOLEAN } from '../../constants/props'\nimport { omit, sortKeys } from '../../utils/object'\nimport { makeProp, makePropsConfigurable } from '../../utils/props'\nimport { BForm, props as formControlProps } from '../form/form'\n\n// --- Props ---\n\nexport const props = makePropsConfigurable(\n sortKeys({\n ...formControlProps,\n disabled: makeProp(PROP_TYPE_BOOLEAN, false),\n formClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING)\n }),\n NAME_DROPDOWN_FORM\n)\n\n// --- Main component ---\n\n// @vue/component\nexport const BDropdownForm = /*#__PURE__*/ extend({\n name: NAME_DROPDOWN_FORM,\n functional: true,\n props,\n render(h, { props, data, listeners, children }) {\n return h('li', mergeData(omit(data, ['attrs', 'on']), { attrs: { role: 'presentation' } }), [\n h(\n BForm,\n {\n staticClass: 'b-dropdown-form',\n class: [props.formClass, { disabled: props.disabled }],\n props,\n attrs: {\n ...(data.attrs || {}),\n disabled: props.disabled,\n // Tab index of -1 for keyboard navigation\n tabindex: props.disabled ? null : '-1'\n },\n on: listeners,\n ref: 'form'\n },\n children\n )\n ])\n }\n})\n","import { extend, mergeData } from '../../vue'\nimport { NAME_DROPDOWN_TEXT } from '../../constants/components'\nimport { PROP_TYPE_ARRAY_OBJECT_STRING, PROP_TYPE_STRING } from '../../constants/props'\nimport { omit } from '../../utils/object'\nimport { makeProp, makePropsConfigurable } from '../../utils/props'\n\n// --- Props ---\n\nexport const props = makePropsConfigurable(\n {\n tag: makeProp(PROP_TYPE_STRING, 'p'),\n textClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n variant: makeProp(PROP_TYPE_STRING)\n },\n NAME_DROPDOWN_TEXT\n)\n\n// --- Main component ---\n\n// @vue/component\nexport const BDropdownText = /*#__PURE__*/ extend({\n name: NAME_DROPDOWN_TEXT,\n functional: true,\n props,\n render(h, { props, data, children }) {\n const { tag, textClass, variant } = props\n\n return h('li', mergeData(omit(data, ['attrs']), { attrs: { role: 'presentation' } }), [\n h(\n tag,\n {\n staticClass: 'b-dropdown-text',\n class: [textClass, { [`text-${variant}`]: variant }],\n props,\n attrs: data.attrs || {},\n ref: 'text'\n },\n children\n )\n ])\n }\n})\n","import { extend, mergeData } from '../../vue'\nimport { NAME_DROPDOWN_GROUP } from '../../constants/components'\nimport { PROP_TYPE_ARRAY_OBJECT_STRING, PROP_TYPE_STRING } from '../../constants/props'\nimport { SLOT_NAME_DEFAULT, SLOT_NAME_HEADER } from '../../constants/slots'\nimport { isTag } from '../../utils/dom'\nimport { identity } from '../../utils/identity'\nimport { hasNormalizedSlot, normalizeSlot } from '../../utils/normalize-slot'\nimport { omit } from '../../utils/object'\nimport { makeProp, makePropsConfigurable } from '../../utils/props'\n\n// --- Props ---\n\nexport const props = makePropsConfigurable(\n {\n ariaDescribedby: makeProp(PROP_TYPE_STRING),\n header: makeProp(PROP_TYPE_STRING),\n headerClasses: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n headerTag: makeProp(PROP_TYPE_STRING, 'header'),\n headerVariant: makeProp(PROP_TYPE_STRING),\n id: makeProp(PROP_TYPE_STRING)\n },\n NAME_DROPDOWN_GROUP\n)\n\n// --- Main component ---\n\n// @vue/component\nexport const BDropdownGroup = /*#__PURE__*/ extend({\n name: NAME_DROPDOWN_GROUP,\n functional: true,\n props,\n render(h, { props, data, slots, scopedSlots }) {\n const { id, variant, header, headerTag } = props\n const $slots = slots()\n const $scopedSlots = scopedSlots || {}\n const slotScope = {}\n const headerId = id ? `_bv_${id}_group_dd_header` : null\n\n let $header = h()\n if (hasNormalizedSlot(SLOT_NAME_HEADER, $scopedSlots, $slots) || header) {\n $header = h(\n headerTag,\n {\n staticClass: 'dropdown-header',\n class: [props.headerClasses, { [`text-${variant}`]: variant }],\n attrs: {\n id: headerId,\n role: isTag(headerTag, 'header') ? null : 'heading'\n }\n },\n normalizeSlot(SLOT_NAME_HEADER, slotScope, $scopedSlots, $slots) || header\n )\n }\n\n return h('li', mergeData(omit(data, ['attrs']), { attrs: { role: 'presentation' } }), [\n $header,\n h(\n 'ul',\n {\n staticClass: 'list-unstyled',\n attrs: {\n ...(data.attrs || {}),\n id,\n role: 'group',\n 'aria-describedby':\n [headerId, props.ariaDescribedBy]\n .filter(identity)\n .join(' ')\n .trim() || null\n }\n },\n normalizeSlot(SLOT_NAME_DEFAULT, slotScope, $scopedSlots, $slots)\n )\n ])\n }\n})\n","import { BDropdown } from './dropdown'\nimport { BDropdownItem } from './dropdown-item'\nimport { BDropdownItemButton } from './dropdown-item-button'\nimport { BDropdownHeader } from './dropdown-header'\nimport { BDropdownDivider } from './dropdown-divider'\nimport { BDropdownForm } from './dropdown-form'\nimport { BDropdownText } from './dropdown-text'\nimport { BDropdownGroup } from './dropdown-group'\nimport { pluginFactory } from '../../utils/plugins'\n\nconst DropdownPlugin = /*#__PURE__*/ pluginFactory({\n components: {\n BDropdown,\n BDd: BDropdown,\n BDropdownItem,\n BDdItem: BDropdownItem,\n BDropdownItemButton,\n BDropdownItemBtn: BDropdownItemButton,\n BDdItemButton: BDropdownItemButton,\n BDdItemBtn: BDropdownItemButton,\n BDropdownHeader,\n BDdHeader: BDropdownHeader,\n BDropdownDivider,\n BDdDivider: BDropdownDivider,\n BDropdownForm,\n BDdForm: BDropdownForm,\n BDropdownText,\n BDdText: BDropdownText,\n BDropdownGroup,\n BDdGroup: BDropdownGroup\n }\n})\n\nexport {\n DropdownPlugin,\n BDropdown,\n BDropdownItem,\n BDropdownItemButton,\n BDropdownHeader,\n BDropdownDivider,\n BDropdownForm,\n BDropdownText,\n BDropdownGroup\n}\n","import { extend, mergeData } from '../../vue'\nimport { NAME_EMBED } from '../../constants/components'\nimport { PROP_TYPE_STRING } from '../../constants/props'\nimport { arrayIncludes } from '../../utils/array'\nimport { omit } from '../../utils/object'\nimport { makeProp, makePropsConfigurable } from '../../utils/props'\n\n// --- Constants ---\n\nconst TYPES = ['iframe', 'embed', 'video', 'object', 'img', 'b-img', 'b-img-lazy']\n\n// --- Props ---\n\nexport const props = makePropsConfigurable(\n {\n aspect: makeProp(PROP_TYPE_STRING, '16by9'),\n tag: makeProp(PROP_TYPE_STRING, 'div'),\n type: makeProp(PROP_TYPE_STRING, 'iframe', value => {\n return arrayIncludes(TYPES, value)\n })\n },\n NAME_EMBED\n)\n\n// --- Main component ---\n\n// @vue/component\nexport const BEmbed = /*#__PURE__*/ extend({\n name: NAME_EMBED,\n functional: true,\n props,\n render(h, { props, data, children }) {\n const { aspect } = props\n\n return h(\n props.tag,\n {\n staticClass: 'embed-responsive',\n class: { [`embed-responsive-${aspect}`]: aspect },\n ref: data.ref\n },\n [\n h(\n props.type,\n mergeData(omit(data, ['ref']), { staticClass: 'embed-responsive-item' }),\n children\n )\n ]\n )\n }\n})\n","import { BEmbed } from './embed'\nimport { pluginFactory } from '../../utils/plugins'\n\nconst EmbedPlugin = /*#__PURE__*/ pluginFactory({\n components: { BEmbed }\n})\n\nexport { EmbedPlugin, BEmbed }\n","import { extend } from '../vue'\nimport { PROP_TYPE_ARRAY_OBJECT, PROP_TYPE_STRING } from '../constants/props'\nimport { get } from '../utils/get'\nimport { stripTags } from '../utils/html'\nimport { isArray, isPlainObject, isUndefined } from '../utils/inspect'\nimport { keys } from '../utils/object'\nimport { makeProp, makePropsConfigurable } from '../utils/props'\nimport { warn } from '../utils/warn'\n\n// --- Constants ---\n\nconst OPTIONS_OBJECT_DEPRECATED_MSG =\n 'Setting prop \"options\" to an object is deprecated. Use the array format instead.'\n\n// --- Props ---\n\nexport const props = makePropsConfigurable(\n {\n disabledField: makeProp(PROP_TYPE_STRING, 'disabled'),\n htmlField: makeProp(PROP_TYPE_STRING, 'html'),\n options: makeProp(PROP_TYPE_ARRAY_OBJECT, []),\n textField: makeProp(PROP_TYPE_STRING, 'text'),\n valueField: makeProp(PROP_TYPE_STRING, 'value')\n },\n 'formOptionControls'\n)\n\n// --- Mixin ---\n\n// @vue/component\nexport const formOptionsMixin = extend({\n props,\n computed: {\n formOptions() {\n return this.normalizeOptions(this.options)\n }\n },\n methods: {\n normalizeOption(option, key = null) {\n // When the option is an object, normalize it\n if (isPlainObject(option)) {\n const value = get(option, this.valueField)\n const text = get(option, this.textField)\n return {\n value: isUndefined(value) ? key || text : value,\n text: stripTags(String(isUndefined(text) ? key : text)),\n html: get(option, this.htmlField),\n disabled: Boolean(get(option, this.disabledField))\n }\n }\n // Otherwise create an `