diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index fc6b5425aef..5fac9ba76a7 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -24,7 +24,7 @@ jobs:
uses: actions/checkout@v2
- name: Set Node.js version
- uses: actions/setup-node@v2.1.2
+ uses: actions/setup-node@v2.1.3
with:
node-version: ${{ matrix.node }}
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index eb24fe4f135..5fd947f56d7 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -24,7 +24,7 @@ jobs:
uses: actions/checkout@v2
- name: Set Node.js version
- uses: actions/setup-node@v2.1.2
+ uses: actions/setup-node@v2.1.3
with:
node-version: ${{ matrix.node }}
@@ -61,7 +61,7 @@ jobs:
uses: actions/checkout@v2
- name: Set Node.js version
- uses: actions/setup-node@v2.1.2
+ uses: actions/setup-node@v2.1.3
with:
node-version: ${{ matrix.node }}
@@ -98,7 +98,7 @@ jobs:
uses: actions/checkout@v2
- name: Set Node.js version
- uses: actions/setup-node@v2.1.2
+ uses: actions/setup-node@v2.1.3
with:
node-version: ${{ matrix.node }}
diff --git a/CHANGELOG.md b/CHANGELOG.md
index bc73ccdedc5..52fd612fa85 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,27 @@ All notable changes to this project will be documented in this file. See
[standard-version](https://github.com/conventional-changelog/standard-version) for commit
guidelines.
+
+
+## [v2.21.1](https://github.com/bootstrap-vue/bootstrap-vue/compare/v2.21.0...v2.21.1)
+
+Released: 2020-12-16
+
+### Bug Fixes v2.21.1
+
+- **b-badge:** attribute inheritance
+ ([#6217](https://github.com/bootstrap-vue/bootstrap-vue/issues/6217))
+ ([2d31f31](https://github.com/bootstrap-vue/bootstrap-vue/commit/2d31f31909c002faa2a9d8bd8620115ddf8ce603))
+- **b-dropdown:** root events ([#6198](https://github.com/bootstrap-vue/bootstrap-vue/issues/6198))
+ ([6dcd233](https://github.com/bootstrap-vue/bootstrap-vue/commit/6dcd23334f2870220ed5c4d8b30bd556e57c03d5))
+- **b-pagination:** don't set initial page count twice
+ ([#6200](https://github.com/bootstrap-vue/bootstrap-vue/issues/6200))
+ ([d7394e3](https://github.com/bootstrap-vue/bootstrap-vue/commit/d7394e3426e5b06797caef070137ec47b25ef62a))
+- **b-tabs:** restore correct active tab detection logic (closes
+ [#6205](https://github.com/bootstrap-vue/bootstrap-vue/issues/6205))
+ ([#6208](https://github.com/bootstrap-vue/bootstrap-vue/issues/6208))
+ ([6d92a43](https://github.com/bootstrap-vue/bootstrap-vue/commit/6d92a4376c227a02a7c24e19c04e437bb8909c1c))
+
## [v2.21.0](https://github.com/bootstrap-vue/bootstrap-vue/compare/v2.20.1...v2.21.0)
diff --git a/package.json b/package.json
index 6402913981d..e42be362868 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "bootstrap-vue",
- "version": "2.21.0",
+ "version": "2.21.1",
"description": "With more than 85 components, over 45 available plugins, several directives, and 1000+ icons, BootstrapVue provides one of the most comprehensive implementations of the Bootstrap v4 component and grid system available for Vue.js v2.6, complete with extensive and automated WAI-ARIA accessibility markup.",
"main": "dist/bootstrap-vue.common.js",
"web": "dist/bootstrap-vue.js",
@@ -95,8 +95,8 @@
"@babel/core": "^7.12.10",
"@babel/plugin-transform-modules-commonjs": "^7.12.1",
"@babel/plugin-transform-runtime": "^7.12.10",
- "@babel/preset-env": "^7.12.10",
- "@babel/standalone": "^7.12.10",
+ "@babel/preset-env": "^7.12.11",
+ "@babel/standalone": "^7.12.11",
"@nuxt/content": "^1.11.1",
"@nuxtjs/google-analytics": "^2.4.0",
"@nuxtjs/pwa": "^3.3.2",
@@ -126,7 +126,7 @@
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-prettier": "^3.3.0",
"eslint-plugin-promise": "^4.2.1",
- "eslint-plugin-vue": "^7.2.0",
+ "eslint-plugin-vue": "^7.3.0",
"esm": "^3.2.25",
"execa": "^5.0.0",
"highlight.js": "^10.4.1",
@@ -137,13 +137,13 @@
"lint-staged": "^10.5.3",
"loader-utils": "^2.0.0",
"lodash": "^4.17.20",
- "marked": "^1.2.6",
+ "marked": "^1.2.7",
"nuxt": "^2.14.11",
"postcss": "^8.2.1",
"postcss-cli": "^8.3.1",
"prettier": "1.14.3",
"require-context": "^1.1.0",
- "rollup": "^2.35.0",
+ "rollup": "^2.35.1",
"rollup-plugin-babel": "^4.4.0",
"rollup-plugin-commonjs": "^10.1.0",
"rollup-plugin-node-resolve": "^5.2.0",
diff --git a/src/components/badge/badge.js b/src/components/badge/badge.js
index 4be4a60249a..bff564a3fa4 100644
--- a/src/components/badge/badge.js
+++ b/src/components/badge/badge.js
@@ -1,10 +1,9 @@
-import { Vue } from '../../vue'
+import { Vue, mergeData } from '../../vue'
import { NAME_BADGE } from '../../constants/components'
import { PROP_TYPE_BOOLEAN, PROP_TYPE_STRING } from '../../constants/props'
import { omit, sortKeys } from '../../utils/object'
import { makeProp, makePropsConfigurable, pluckProps } from '../../utils/props'
import { isLink } from '../../utils/router'
-import { normalizeSlotMixin } from '../../mixins/normalize-slot'
import { BLink, props as BLinkProps } from '../link/link'
// --- Props ---
@@ -28,28 +27,29 @@ export const props = makePropsConfigurable(
// @vue/component
export const BBadge = /*#__PURE__*/ Vue.extend({
name: NAME_BADGE,
- mixins: [normalizeSlotMixin],
+ functional: true,
props,
- render(h) {
- const { variant, $props } = this
- const link = isLink($props)
- const tag = link ? BLink : this.tag
+ render(h, { props, data, children }) {
+ const { active, disabled } = props
+ const link = isLink(props)
+ const tag = link ? BLink : props.tag
+ const variant = props.variant || 'secondary'
return h(
tag,
- {
+ mergeData(data, {
staticClass: 'badge',
class: [
- variant ? `badge-${variant}` : 'badge-secondary',
+ `badge-${variant}`,
{
- 'badge-pill': this.pill,
- active: this.active,
- disabled: this.disabled
+ 'badge-pill': props.pill,
+ active,
+ disabled
}
],
- props: link ? pluckProps(linkProps, $props) : {}
- },
- this.normalizeSlot()
+ props: link ? pluckProps(linkProps, props) : {}
+ }),
+ children
)
}
})
diff --git a/src/components/form-timepicker/README.md b/src/components/form-timepicker/README.md
index 42d0b41cc74..7a606fcb9c2 100644
--- a/src/components/form-timepicker/README.md
+++ b/src/components/form-timepicker/README.md
@@ -251,7 +251,7 @@ In the following simple example, we are placing the timepicker (button only mode
locale="en"
aria-controls="example-input"
>
-
+
Value: '{{ value }}'
diff --git a/src/components/modal/modal.js b/src/components/modal/modal.js
index fd72a0353c7..90dcb40f529 100644
--- a/src/components/modal/modal.js
+++ b/src/components/modal/modal.js
@@ -588,13 +588,12 @@ export const BModal = /*#__PURE__*/ Vue.extend({
this.emitEvent(this.buildEvent(EVENT_NAME_HIDDEN))
})
},
- // Event emitter
- emitEvent(bvModalEvt) {
- const type = bvModalEvt.type
- // We emit on root first incase a global listener wants to cancel
+ emitEvent(bvEvent) {
+ const { type } = bvEvent
+ // We emit on `$root` first in case a global listener wants to cancel
// the event first before the instance emits its event
- this.emitOnRoot(getRootEventName(NAME_MODAL, type), bvModalEvt, bvModalEvt.componentId)
- this.$emit(type, bvModalEvt)
+ this.emitOnRoot(getRootEventName(NAME_MODAL, type), bvEvent, bvEvent.componentId)
+ this.$emit(type, bvEvent)
},
// UI event handlers
onDialogMousedown() {
diff --git a/src/components/pagination/pagination.js b/src/components/pagination/pagination.js
index eefbe1dee1c..b9ccf2d5a0e 100644
--- a/src/components/pagination/pagination.js
+++ b/src/components/pagination/pagination.js
@@ -49,8 +49,8 @@ export const BPagination = /*#__PURE__*/ Vue.extend({
const result = mathCeil(sanitizeTotalRows(this.totalRows) / sanitizePerPage(this.perPage))
return result < 1 ? 1 : result
},
+ // Used for watching changes to `perPage` and `numberOfPages`
pageSizeNumberOfPages() {
- // Used for watching changes to `perPage` and `numberOfPages`
return {
perPage: sanitizePerPage(this.perPage),
totalRows: sanitizeTotalRows(this.totalRows),
@@ -91,10 +91,6 @@ export const BPagination = /*#__PURE__*/ Vue.extend({
})
}
},
- mounted() {
- // Set the initial page count
- this.localNumberOfPages = this.numberOfPages
- },
methods: {
// These methods are used by the render function
onClick(event, pageNumber) {
diff --git a/src/components/tabs/tabs.js b/src/components/tabs/tabs.js
index cc7faafdc34..665189cd362 100644
--- a/src/components/tabs/tabs.js
+++ b/src/components/tabs/tabs.js
@@ -33,7 +33,7 @@ import {
} from '../../constants/slots'
import { arrayIncludes } from '../../utils/array'
import { BvEvent } from '../../utils/bv-event.class'
-import { attemptFocus, selectAll } from '../../utils/dom'
+import { attemptFocus, selectAll, requestAF } from '../../utils/dom'
import { stopEvent } from '../../utils/events'
import { identity } from '../../utils/identity'
import { isEvent } from '../../utils/inspect'
@@ -280,14 +280,14 @@ export const BTabs = /*#__PURE__*/ Vue.extend({
// Update the v-model
this.$emit(MODEL_EVENT_NAME, index)
},
+ // If tabs added, removed, or re-ordered, we emit a `changed` event
tabs(newValue, oldValue) {
- // If tabs added, removed, or re-ordered, we emit a `changed` event
- // We use `tab._uid` instead of `tab.safeId()`, as the later is changed
- // in a `$nextTick()` if no explicit ID is provided, causing duplicate emits
+ // We use `_uid` instead of `safeId()`, as the later is changed in a `$nextTick()`
+ // if no explicit ID is provided, causing duplicate emits
if (
!looseEqual(
- newValue.map(t => t[COMPONENT_UID_KEY]),
- oldValue.map(t => t[COMPONENT_UID_KEY])
+ newValue.map($tab => $tab[COMPONENT_UID_KEY]),
+ oldValue.map($tab => $tab[COMPONENT_UID_KEY])
)
) {
// In a `$nextTick()` to ensure `currentTab` has been set first
@@ -298,6 +298,9 @@ export const BTabs = /*#__PURE__*/ Vue.extend({
})
}
},
+ // Each `` will register/unregister itself
+ // We use this to detect when tabs are added/removed
+ // to trigger the update of the tabs
registeredTabs() {
this.updateTabs()
}
@@ -332,7 +335,9 @@ export const BTabs = /*#__PURE__*/ Vue.extend({
/* istanbul ignore next: difficult to test mutation observer in JSDOM */
const handler = () => {
this.$nextTick(() => {
- this.updateTabs()
+ requestAF(() => {
+ this.updateTabs()
+ })
})
}
@@ -352,8 +357,9 @@ export const BTabs = /*#__PURE__*/ Vue.extend({
// DOM Order of Tabs
let order = []
+ /* istanbul ignore next: too difficult to test */
if (IS_BROWSER && $tabs.length > 0) {
- // We rely on the DOM when mounted to get the 'true' order of the `` children
+ // We rely on the DOM when mounted to get the "true" order of the `` children
// `querySelectorAll()` always returns elements in document order, regardless of
// order specified in the selector
const selector = $tabs.map($tab => `#${$tab.safeId()}`).join(', ')
@@ -369,29 +375,44 @@ export const BTabs = /*#__PURE__*/ Vue.extend({
updateTabs() {
const $tabs = this.getTabs()
- // Normalize `currentTab`
- let { currentTab } = this
- const $tab = $tabs[currentTab]
- if (!$tab || $tab.disabled) {
- currentTab = $tabs.indexOf(
- $tabs
- .slice()
- .reverse()
- .find($tab => $tab.localActive && !$tab.disabled)
- )
+ // Find last active non-disabled tab in current tabs
+ // We trust tab state over `currentTab`, in case tabs were added/removed/re-ordered
+ let tabIndex = $tabs.indexOf(
+ $tabs
+ .slice()
+ .reverse()
+ .find($tab => $tab.localActive && !$tab.disabled)
+ )
- if (currentTab === -1) {
- currentTab = $tabs.indexOf($tabs.find(notDisabled))
+ // Else try setting to `currentTab`
+ if (tabIndex < 0) {
+ const { currentTab } = this
+ if (currentTab >= $tabs.length) {
+ // Handle last tab being removed, so find the last non-disabled tab
+ tabIndex = $tabs.indexOf(
+ $tabs
+ .slice()
+ .reverse()
+ .find(notDisabled)
+ )
+ } else if ($tabs[currentTab] && !$tabs[currentTab].disabled) {
+ // Current tab is not disabled
+ tabIndex = currentTab
}
}
+ // Else find first non-disabled tab in current tabs
+ if (tabIndex < 0) {
+ tabIndex = $tabs.indexOf($tabs.find(notDisabled))
+ }
+
// Ensure only one tab is active at a time
$tabs.forEach(($tab, index) => {
- $tab.localActive = index === currentTab
+ $tab.localActive = index === tabIndex
})
this.tabs = $tabs
- this.currentTab = currentTab
+ this.currentTab = tabIndex
},
// Find a button that controls a tab, given the tab reference
// Returns the button vm instance
diff --git a/src/components/tabs/tabs.spec.js b/src/components/tabs/tabs.spec.js
index 7e4983e264a..ddedb7b72b6 100644
--- a/src/components/tabs/tabs.spec.js
+++ b/src/components/tabs/tabs.spec.js
@@ -111,18 +111,18 @@ describe('tabs', () => {
await waitNT(wrapper.vm)
- const tabs = wrapper.findComponent(BTabs)
- expect(tabs).toBeDefined()
- expect(tabs.findAllComponents(BTab).length).toBe(3)
+ const $tabs = wrapper.findComponent(BTabs)
+ expect($tabs).toBeDefined()
+ expect($tabs.findAllComponents(BTab).length).toBe(3)
// Expect 2nd tab (index 1) to be active
- expect(tabs.vm.currentTab).toBe(1)
- expect(tabs.vm.tabs[1].localActive).toBe(true)
+ expect($tabs.vm.currentTab).toBe(1)
+ expect($tabs.vm.tabs[1].localActive).toBe(true)
- expect(tabs.emitted('input')).toBeDefined()
- expect(tabs.emitted('input').length).toBe(1)
+ expect($tabs.emitted('input')).toBeDefined()
+ expect($tabs.emitted('input').length).toBe(1)
// Should emit index of 1 (2nd tab)
- expect(tabs.emitted('input')[0][0]).toBe(1)
+ expect($tabs.emitted('input')[0][0]).toBe(1)
wrapper.destroy()
})
@@ -142,18 +142,18 @@ describe('tabs', () => {
await waitNT(wrapper.vm)
- const tabs = wrapper.findComponent(BTabs)
- expect(tabs).toBeDefined()
- expect(tabs.findAllComponents(BTab).length).toBe(3)
+ const $tabs = wrapper.findComponent(BTabs)
+ expect($tabs).toBeDefined()
+ expect($tabs.findAllComponents(BTab).length).toBe(3)
// Expect 2nd tab (index 1) to be active
- expect(tabs.vm.currentTab).toBe(1)
- expect(tabs.vm.tabs[1].localActive).toBe(true)
+ expect($tabs.vm.currentTab).toBe(1)
+ expect($tabs.vm.tabs[1].localActive).toBe(true)
- expect(tabs.emitted('input')).toBeDefined()
- expect(tabs.emitted('input').length).toBe(1)
+ expect($tabs.emitted('input')).toBeDefined()
+ expect($tabs.emitted('input').length).toBe(1)
// Should emit index of 1 (2nd tab)
- expect(tabs.emitted('input')[0][0]).toBe(1)
+ expect($tabs.emitted('input')[0][0]).toBe(1)
wrapper.destroy()
})
@@ -172,34 +172,34 @@ describe('tabs', () => {
expect(wrapper).toBeDefined()
await waitNT(wrapper.vm)
- const tabs = wrapper.findComponent(BTabs)
- expect(tabs).toBeDefined()
- expect(tabs.findAllComponents(BTab).length).toBe(3)
+ const $tabs = wrapper.findComponent(BTabs)
+ expect($tabs).toBeDefined()
+ expect($tabs.findAllComponents(BTab).length).toBe(3)
// Expect 2nd tab (index 1) to be active
- expect(tabs.vm.currentTab).toBe(1)
- expect(tabs.findAllComponents(BTab).at(0).vm.localActive).toBe(false)
- expect(tabs.findAllComponents(BTab).at(1).vm.localActive).toBe(true)
- expect(tabs.findAllComponents(BTab).at(2).vm.localActive).toBe(false)
+ expect($tabs.vm.currentTab).toBe(1)
+ expect($tabs.findAllComponents(BTab).at(0).vm.localActive).toBe(false)
+ expect($tabs.findAllComponents(BTab).at(1).vm.localActive).toBe(true)
+ expect($tabs.findAllComponents(BTab).at(2).vm.localActive).toBe(false)
- expect(tabs.emitted('input')).toBeDefined()
- expect(tabs.emitted('input').length).toBe(1)
+ expect($tabs.emitted('input')).toBeDefined()
+ expect($tabs.emitted('input').length).toBe(1)
// Should emit index of 1 (2nd tab)
- expect(tabs.emitted('input')[0][0]).toBe(1)
+ expect($tabs.emitted('input')[0][0]).toBe(1)
// Deactivate current tab (BTab 2, index 1)
- await tabs
+ await $tabs
.findAllComponents(BTab)
.at(1)
.setProps({ active: false })
// Expect last tab (index 2) to be active
- expect(tabs.vm.currentTab).toBe(2)
- expect(tabs.findAllComponents(BTab).at(0).vm.localActive).toBe(false)
- expect(tabs.findAllComponents(BTab).at(1).vm.localActive).toBe(false)
- expect(tabs.findAllComponents(BTab).at(2).vm.localActive).toBe(true)
- expect(tabs.emitted('input').length).toBe(2)
- expect(tabs.emitted('input')[1][0]).toBe(2)
+ expect($tabs.vm.currentTab).toBe(2)
+ expect($tabs.findAllComponents(BTab).at(0).vm.localActive).toBe(false)
+ expect($tabs.findAllComponents(BTab).at(1).vm.localActive).toBe(false)
+ expect($tabs.findAllComponents(BTab).at(2).vm.localActive).toBe(true)
+ expect($tabs.emitted('input').length).toBe(2)
+ expect($tabs.emitted('input')[1][0]).toBe(2)
wrapper.destroy()
})
@@ -218,29 +218,29 @@ describe('tabs', () => {
expect(wrapper).toBeDefined()
await waitNT(wrapper.vm)
- const tabs = wrapper.findComponent(BTabs)
- expect(tabs).toBeDefined()
- expect(tabs.findAllComponents(BTab).length).toBe(3)
+ const $tabs = wrapper.findComponent(BTabs)
+ expect($tabs).toBeDefined()
+ expect($tabs.findAllComponents(BTab).length).toBe(3)
// Expect 1st tab (index 0) to be active
- expect(tabs.vm.currentTab).toBe(0)
- expect(tabs.vm.tabs[0].localActive).toBe(true)
+ expect($tabs.vm.currentTab).toBe(0)
+ expect($tabs.vm.tabs[0].localActive).toBe(true)
// It should not emit an input event as the value is the same
- expect(tabs.emitted('input')).toBeUndefined()
+ expect($tabs.emitted('input')).toBeUndefined()
// Set 2nd BTab to be active
- await tabs.setProps({ value: 1 })
- expect(tabs.vm.currentTab).toBe(1)
- expect(tabs.emitted('input').length).toBe(1)
+ await $tabs.setProps({ value: 1 })
+ expect($tabs.vm.currentTab).toBe(1)
+ expect($tabs.emitted('input').length).toBe(1)
// Should emit index of 1 (2nd tab)
- expect(tabs.emitted('input')[0][0]).toBe(1)
+ expect($tabs.emitted('input')[0][0]).toBe(1)
// Set 3rd BTab to be active
- await tabs.setProps({ value: 2 })
- expect(tabs.vm.currentTab).toBe(2)
- expect(tabs.emitted('input').length).toBe(2)
+ await $tabs.setProps({ value: 2 })
+ expect($tabs.vm.currentTab).toBe(2)
+ expect($tabs.emitted('input').length).toBe(2)
// Should emit index of 2 (3rd tab)
- expect(tabs.emitted('input')[1][0]).toBe(2)
+ expect($tabs.emitted('input')[1][0]).toBe(2)
wrapper.destroy()
})
@@ -259,32 +259,32 @@ describe('tabs', () => {
expect(wrapper).toBeDefined()
await waitNT(wrapper.vm)
- const tabs = wrapper.findComponent(BTabs)
- expect(tabs).toBeDefined()
- expect(tabs.findAllComponents(BTab).length).toBe(3)
+ const $tabs = wrapper.findComponent(BTabs)
+ expect($tabs).toBeDefined()
+ expect($tabs.findAllComponents(BTab).length).toBe(3)
// Expect 1st tab (index 0) to be active
- expect(tabs.vm.currentTab).toBe(0)
- expect(tabs.vm.tabs[0].localActive).toBe(true)
- expect(tabs.emitted('input')).toBeUndefined()
+ expect($tabs.vm.currentTab).toBe(0)
+ expect($tabs.vm.tabs[0].localActive).toBe(true)
+ expect($tabs.emitted('input')).toBeUndefined()
// Try to set 2nd (disabled) BTab to be active
- await tabs.setProps({ value: 1 })
+ await $tabs.setProps({ value: 1 })
// Will try activate next non-disabled tab instead (3rd tab, index 2)
- expect(tabs.vm.currentTab).toBe(2)
- expect(tabs.emitted('input').length).toBe(1)
+ expect($tabs.vm.currentTab).toBe(2)
+ expect($tabs.emitted('input').length).toBe(1)
// Should emit index of 2 (3rd tab)
- expect(tabs.emitted('input')[0][0]).toBe(2)
+ expect($tabs.emitted('input')[0][0]).toBe(2)
// Needed for test since value not bound to actual v-model on App
- await tabs.setProps({ value: 2 })
+ await $tabs.setProps({ value: 2 })
// Try and set 2nd BTab to be active
- await tabs.setProps({ value: 1 })
+ await $tabs.setProps({ value: 1 })
// Will find the previous non-disabled tab (1st tab, index 0)
- expect(tabs.vm.currentTab).toBe(0)
- expect(tabs.emitted('input').length).toBe(2)
+ expect($tabs.vm.currentTab).toBe(0)
+ expect($tabs.emitted('input').length).toBe(2)
// Should emit index of 0 (1st tab)
- expect(tabs.emitted('input')[1][0]).toBe(0)
+ expect($tabs.emitted('input')[1][0]).toBe(0)
wrapper.destroy()
})
@@ -311,41 +311,41 @@ describe('tabs', () => {
expect(wrapper).toBeDefined()
await waitNT(wrapper.vm)
- const tabs = wrapper.findComponent(BTabs)
- expect(tabs).toBeDefined()
- expect(tabs.findAllComponents(BTab).length).toBe(3)
+ const $tabs = wrapper.findComponent(BTabs)
+ expect($tabs).toBeDefined()
+ expect($tabs.findAllComponents(BTab).length).toBe(3)
// Expect 1st tab (index 0) to be active
- expect(tabs.vm.currentTab).toBe(0)
- expect(tabs.vm.tabs[0].localActive).toBe(true)
- expect(tabs.emitted('input')).toBeUndefined()
- expect(tabs.emitted('activate-tab')).toBeUndefined()
+ expect($tabs.vm.currentTab).toBe(0)
+ expect($tabs.vm.tabs[0].localActive).toBe(true)
+ expect($tabs.emitted('input')).toBeUndefined()
+ expect($tabs.emitted('activate-tab')).toBeUndefined()
// Set 2nd BTab to be active
- await tabs.setProps({ value: 1 })
- expect(tabs.vm.currentTab).toBe(1)
- expect(tabs.emitted('input')).toBeDefined()
- expect(tabs.emitted('input').length).toBe(1)
- expect(tabs.emitted('input')[0][0]).toBe(1)
- expect(tabs.emitted('activate-tab')).toBeDefined()
- expect(tabs.emitted('activate-tab').length).toBe(1)
- expect(tabs.emitted('activate-tab')[0][0]).toBe(1)
- expect(tabs.emitted('activate-tab')[0][1]).toBe(0)
- expect(tabs.emitted('activate-tab')[0][2]).toBeDefined()
- expect(tabs.emitted('activate-tab')[0][2].vueTarget).toBe(tabs.vm)
+ await $tabs.setProps({ value: 1 })
+ expect($tabs.vm.currentTab).toBe(1)
+ expect($tabs.emitted('input')).toBeDefined()
+ expect($tabs.emitted('input').length).toBe(1)
+ expect($tabs.emitted('input')[0][0]).toBe(1)
+ expect($tabs.emitted('activate-tab')).toBeDefined()
+ expect($tabs.emitted('activate-tab').length).toBe(1)
+ expect($tabs.emitted('activate-tab')[0][0]).toBe(1)
+ expect($tabs.emitted('activate-tab')[0][1]).toBe(0)
+ expect($tabs.emitted('activate-tab')[0][2]).toBeDefined()
+ expect($tabs.emitted('activate-tab')[0][2].vueTarget).toBe($tabs.vm)
// Attempt to set 3rd BTab to be active
- await tabs.setProps({ value: 2 })
- expect(tabs.vm.currentTab).toBe(1)
- expect(tabs.emitted('input')).toBeDefined()
- expect(tabs.emitted('input').length).toBe(2)
- expect(tabs.emitted('input')[1][0]).toBe(1)
- expect(tabs.emitted('activate-tab').length).toBe(2)
- expect(tabs.emitted('activate-tab')[1][0]).toBe(2)
- expect(tabs.emitted('activate-tab')[1][1]).toBe(1)
- expect(tabs.emitted('activate-tab')[1][2]).toBeDefined()
- expect(tabs.emitted('activate-tab')[1][2].vueTarget).toBe(tabs.vm)
- expect(tabs.emitted('activate-tab')[1][2].defaultPrevented).toBe(true)
+ await $tabs.setProps({ value: 2 })
+ expect($tabs.vm.currentTab).toBe(1)
+ expect($tabs.emitted('input')).toBeDefined()
+ expect($tabs.emitted('input').length).toBe(2)
+ expect($tabs.emitted('input')[1][0]).toBe(1)
+ expect($tabs.emitted('activate-tab').length).toBe(2)
+ expect($tabs.emitted('activate-tab')[1][0]).toBe(2)
+ expect($tabs.emitted('activate-tab')[1][1]).toBe(1)
+ expect($tabs.emitted('activate-tab')[1][2]).toBeDefined()
+ expect($tabs.emitted('activate-tab')[1][2].vueTarget).toBe($tabs.vm)
+ expect($tabs.emitted('activate-tab')[1][2].defaultPrevented).toBe(true)
wrapper.destroy()
})
@@ -364,19 +364,19 @@ describe('tabs', () => {
expect(wrapper).toBeDefined()
await waitNT(wrapper.vm)
- const tabs = wrapper.findComponent(BTabs)
- expect(tabs).toBeDefined()
- expect(tabs.findAllComponents(BTab).length).toBe(3)
+ const $tabs = wrapper.findComponent(BTabs)
+ expect($tabs).toBeDefined()
+ expect($tabs.findAllComponents(BTab).length).toBe(3)
- const tab1 = tabs.findAllComponents(BTab).at(0)
- const tab2 = tabs.findAllComponents(BTab).at(1)
- const tab3 = tabs.findAllComponents(BTab).at(2)
+ const tab1 = $tabs.findAllComponents(BTab).at(0)
+ const tab2 = $tabs.findAllComponents(BTab).at(1)
+ const tab3 = $tabs.findAllComponents(BTab).at(2)
expect(wrapper.findAll('.nav-link')).toBeDefined()
expect(wrapper.findAll('.nav-link').length).toBe(3)
// Expect 1st tab (index 0) to be active
- expect(tabs.vm.currentTab).toBe(0)
+ expect($tabs.vm.currentTab).toBe(0)
expect(tab1.vm.localActive).toBe(true)
expect(tab2.vm.localActive).toBe(false)
expect(tab3.vm.localActive).toBe(false)
@@ -387,7 +387,7 @@ describe('tabs', () => {
.findAll('.nav-link')
.at(1)
.trigger('click')
- expect(tabs.vm.currentTab).toBe(1)
+ expect($tabs.vm.currentTab).toBe(1)
expect(tab1.vm.localActive).toBe(false)
expect(tab2.vm.localActive).toBe(true)
expect(tab3.vm.localActive).toBe(false)
@@ -399,7 +399,7 @@ describe('tabs', () => {
.findAll('.nav-link')
.at(2)
.trigger('click')
- expect(tabs.vm.currentTab).toBe(2)
+ expect($tabs.vm.currentTab).toBe(2)
expect(tab1.vm.localActive).toBe(false)
expect(tab2.vm.localActive).toBe(false)
expect(tab3.vm.localActive).toBe(true)
@@ -411,7 +411,7 @@ describe('tabs', () => {
.findAll('.nav-link')
.at(0)
.trigger('keydown.space')
- expect(tabs.vm.currentTab).toBe(0)
+ expect($tabs.vm.currentTab).toBe(0)
expect(tab1.vm.localActive).toBe(true)
expect(tab2.vm.localActive).toBe(false)
expect(tab3.vm.localActive).toBe(false)
@@ -434,19 +434,19 @@ describe('tabs', () => {
expect(wrapper).toBeDefined()
await waitNT(wrapper.vm)
- const tabs = wrapper.findComponent(BTabs)
- expect(tabs).toBeDefined()
- expect(tabs.findAllComponents(BTab).length).toBe(3)
+ const $tabs = wrapper.findComponent(BTabs)
+ expect($tabs).toBeDefined()
+ expect($tabs.findAllComponents(BTab).length).toBe(3)
- const tab1 = tabs.findAllComponents(BTab).at(0)
- const tab2 = tabs.findAllComponents(BTab).at(1)
- const tab3 = tabs.findAllComponents(BTab).at(2)
+ const tab1 = $tabs.findAllComponents(BTab).at(0)
+ const tab2 = $tabs.findAllComponents(BTab).at(1)
+ const tab3 = $tabs.findAllComponents(BTab).at(2)
expect(wrapper.findAll('.nav-link')).toBeDefined()
expect(wrapper.findAll('.nav-link').length).toBe(3)
// Expect 1st tab (index 0) to be active
- expect(tabs.vm.currentTab).toBe(0)
+ expect($tabs.vm.currentTab).toBe(0)
expect(tab1.vm.localActive).toBe(true)
expect(tab2.vm.localActive).toBe(false)
expect(tab3.vm.localActive).toBe(false)
@@ -457,7 +457,7 @@ describe('tabs', () => {
.findAll('.nav-link')
.at(1)
.trigger('keydown.space')
- expect(tabs.vm.currentTab).toBe(1)
+ expect($tabs.vm.currentTab).toBe(1)
expect(tab1.vm.localActive).toBe(false)
expect(tab2.vm.localActive).toBe(true)
expect(tab3.vm.localActive).toBe(false)
@@ -469,7 +469,7 @@ describe('tabs', () => {
.findAll('.nav-link')
.at(2)
.trigger('keydown.space')
- expect(tabs.vm.currentTab).toBe(2)
+ expect($tabs.vm.currentTab).toBe(2)
expect(tab1.vm.localActive).toBe(false)
expect(tab2.vm.localActive).toBe(false)
expect(tab3.vm.localActive).toBe(true)
@@ -481,7 +481,7 @@ describe('tabs', () => {
.findAll('.nav-link')
.at(0)
.trigger('keydown.space')
- expect(tabs.vm.currentTab).toBe(0)
+ expect($tabs.vm.currentTab).toBe(0)
expect(tab1.vm.localActive).toBe(true)
expect(tab2.vm.localActive).toBe(false)
expect(tab3.vm.localActive).toBe(false)
@@ -504,19 +504,19 @@ describe('tabs', () => {
expect(wrapper).toBeDefined()
await waitNT(wrapper.vm)
- const tabs = wrapper.findComponent(BTabs)
- expect(tabs).toBeDefined()
- expect(tabs.findAllComponents(BTab).length).toBe(3)
+ const $tabs = wrapper.findComponent(BTabs)
+ expect($tabs).toBeDefined()
+ expect($tabs.findAllComponents(BTab).length).toBe(3)
- const tab1 = tabs.findAllComponents(BTab).at(0)
- const tab2 = tabs.findAllComponents(BTab).at(1)
- const tab3 = tabs.findAllComponents(BTab).at(2)
+ const tab1 = $tabs.findAllComponents(BTab).at(0)
+ const tab2 = $tabs.findAllComponents(BTab).at(1)
+ const tab3 = $tabs.findAllComponents(BTab).at(2)
expect(wrapper.findAll('.nav-link')).toBeDefined()
expect(wrapper.findAll('.nav-link').length).toBe(3)
// Expect 1st tab (index 0) to be active
- expect(tabs.vm.currentTab).toBe(0)
+ expect($tabs.vm.currentTab).toBe(0)
expect(tab1.vm.localActive).toBe(true)
expect(tab2.vm.localActive).toBe(false)
expect(tab3.vm.localActive).toBe(false)
@@ -526,7 +526,7 @@ describe('tabs', () => {
.findAllComponents(BLink)
.at(0)
.trigger('keydown.right')
- expect(tabs.vm.currentTab).toBe(1)
+ expect($tabs.vm.currentTab).toBe(1)
expect(tab1.vm.localActive).toBe(false)
expect(tab2.vm.localActive).toBe(true)
expect(tab3.vm.localActive).toBe(false)
@@ -536,7 +536,7 @@ describe('tabs', () => {
.findAllComponents(BLink)
.at(1)
.trigger('keydown.end')
- expect(tabs.vm.currentTab).toBe(2)
+ expect($tabs.vm.currentTab).toBe(2)
expect(tab1.vm.localActive).toBe(false)
expect(tab2.vm.localActive).toBe(false)
expect(tab3.vm.localActive).toBe(true)
@@ -546,7 +546,7 @@ describe('tabs', () => {
.findAllComponents(BLink)
.at(2)
.trigger('keydown.left')
- expect(tabs.vm.currentTab).toBe(1)
+ expect($tabs.vm.currentTab).toBe(1)
expect(tab1.vm.localActive).toBe(false)
expect(tab2.vm.localActive).toBe(true)
expect(tab3.vm.localActive).toBe(false)
@@ -556,7 +556,7 @@ describe('tabs', () => {
.findAllComponents(BLink)
.at(1)
.trigger('keydown.home')
- expect(tabs.vm.currentTab).toBe(0)
+ expect($tabs.vm.currentTab).toBe(0)
expect(tab1.vm.localActive).toBe(true)
expect(tab2.vm.localActive).toBe(false)
expect(tab3.vm.localActive).toBe(false)
@@ -578,16 +578,16 @@ describe('tabs', () => {
expect(wrapper).toBeDefined()
await waitNT(wrapper.vm)
- const tabs = wrapper.findComponent(BTabs)
- expect(tabs).toBeDefined()
- expect(tabs.findAllComponents(BTab).length).toBe(3)
+ const $tabs = wrapper.findComponent(BTabs)
+ expect($tabs).toBeDefined()
+ expect($tabs.findAllComponents(BTab).length).toBe(3)
- const tab1 = tabs.findAllComponents(BTab).at(0)
- const tab2 = tabs.findAllComponents(BTab).at(1)
- const tab3 = tabs.findAllComponents(BTab).at(2)
+ const tab1 = $tabs.findAllComponents(BTab).at(0)
+ const tab2 = $tabs.findAllComponents(BTab).at(1)
+ const tab3 = $tabs.findAllComponents(BTab).at(2)
// Expect 3rd tab (index 2) to be active
- expect(tabs.vm.currentTab).toBe(2)
+ expect($tabs.vm.currentTab).toBe(2)
expect(tab1.vm.localActive).toBe(false)
expect(tab2.vm.localActive).toBe(false)
expect(tab3.vm.localActive).toBe(true)
@@ -596,7 +596,7 @@ describe('tabs', () => {
await tab3.setProps({ disabled: true })
// Expect 1st tab to be active
- expect(tabs.vm.currentTab).toBe(0)
+ expect($tabs.vm.currentTab).toBe(0)
expect(tab1.vm.localActive).toBe(true)
expect(tab2.vm.localActive).toBe(false)
expect(tab3.vm.localActive).toBe(false)
@@ -606,7 +606,7 @@ describe('tabs', () => {
await tab1.setProps({ disabled: true })
// Expect 2nd tab to be active
- expect(tabs.vm.currentTab).toBe(1)
+ expect($tabs.vm.currentTab).toBe(1)
expect(tab1.vm.localActive).toBe(false)
expect(tab2.vm.localActive).toBe(true)
expect(tab3.vm.localActive).toBe(false)
@@ -626,9 +626,9 @@ describe('tabs', () => {
expect(wrapper).toBeDefined()
await waitNT(wrapper.vm)
- const tabs = wrapper.findComponent(BTabs)
- expect(tabs).toBeDefined()
- expect(tabs.findAllComponents(BTab).length).toBe(1)
+ const $tabs = wrapper.findComponent(BTabs)
+ expect($tabs).toBeDefined()
+ expect($tabs.findAllComponents(BTab).length).toBe(1)
// Expect tab button content to be `original`
expect(wrapper.find('.nav-link').text()).toBe('original')
@@ -663,26 +663,26 @@ describe('tabs', () => {
expect(wrapper).toBeDefined()
await waitNT(wrapper.vm)
- const tabs = wrapper.findComponent(BTabs)
- expect(tabs).toBeDefined()
- expect(tabs.findAllComponents(BTab).length).toBe(3)
+ const $tabs = wrapper.findComponent(BTabs)
+ expect($tabs).toBeDefined()
+ expect($tabs.findAllComponents(BTab).length).toBe(3)
const getNavItemByTab = tab => wrapper.find(`#${tab.$el.id}___BV_tab_button__`)
// Expect 1st tab (index 0) to be active
- expect(tabs.vm.currentTab).toBe(0)
- expect(tabs.vm.tabs[0].localActive).toBe(true)
+ expect($tabs.vm.currentTab).toBe(0)
+ expect($tabs.vm.tabs[0].localActive).toBe(true)
// Expect 1st tabs nav item to have "active-nav-item-class" applied
- expect(getNavItemByTab(tabs.vm.tabs[0]).classes(activeNavItemClass)).toBe(true)
+ expect(getNavItemByTab($tabs.vm.tabs[0]).classes(activeNavItemClass)).toBe(true)
// Set 2nd tab to be active
- tabs.setProps({ value: 1 })
+ $tabs.setProps({ value: 1 })
await waitNT(wrapper.vm)
- expect(tabs.vm.currentTab).toBe(1)
+ expect($tabs.vm.currentTab).toBe(1)
// Expect 2nd tabs nav item to have "active-nav-item-class" applied
- expect(getNavItemByTab(tabs.vm.tabs[1]).classes(activeNavItemClass)).toBe(true)
+ expect(getNavItemByTab($tabs.vm.tabs[1]).classes(activeNavItemClass)).toBe(true)
// Expect 1st tabs nav item to don't have "active-nav-item-class" applied anymore
- expect(getNavItemByTab(tabs.vm.tabs[0]).classes(activeNavItemClass)).toBe(false)
+ expect(getNavItemByTab($tabs.vm.tabs[0]).classes(activeNavItemClass)).toBe(false)
wrapper.destroy()
})
@@ -702,23 +702,69 @@ describe('tabs', () => {
expect(wrapper).toBeDefined()
await waitNT(wrapper.vm)
- const tabs = wrapper.findComponent(BTabs)
- expect(tabs).toBeDefined()
- expect(tabs.findAllComponents(BTab).length).toBe(3)
+ const $tabs = wrapper.findComponent(BTabs)
+ expect($tabs).toBeDefined()
+ expect($tabs.findAllComponents(BTab).length).toBe(3)
// Expect 1st tab (index 0) to be active
- expect(tabs.vm.currentTab).toBe(0)
- expect(tabs.vm.tabs[0].localActive).toBe(true)
+ expect($tabs.vm.currentTab).toBe(0)
+ expect($tabs.vm.tabs[0].localActive).toBe(true)
// Expect 1st tab to have "active-tab-class" applied
- expect(tabs.vm.tabs[0].$el.classList.contains(activeTabClass)).toBe(true)
+ expect($tabs.vm.tabs[0].$el.classList.contains(activeTabClass)).toBe(true)
// Set 2nd tab to be active
- await tabs.setProps({ value: 1 })
- expect(tabs.vm.currentTab).toBe(1)
+ await $tabs.setProps({ value: 1 })
+ expect($tabs.vm.currentTab).toBe(1)
// Expect 2nd tab to have "active-tab-class" applied
- expect(tabs.vm.tabs[1].$el.classList.contains(activeTabClass)).toBe(true)
+ expect($tabs.vm.tabs[1].$el.classList.contains(activeTabClass)).toBe(true)
// Expect 1st tab to don't have "active-tab-class" applied anymore
- expect(tabs.vm.tabs[0].$el.classList.contains(activeTabClass)).toBe(false)
+ expect($tabs.vm.tabs[0].$el.classList.contains(activeTabClass)).toBe(false)
+
+ wrapper.destroy()
+ })
+
+ it('emits "changed" event when tabs change', async () => {
+ const App = {
+ props: {
+ tabs: {
+ type: Array,
+ default: () => ['Tab 1', 'Tab 2', 'Tab 3']
+ }
+ },
+ render(h) {
+ return h(BTabs, this.tabs.map(tab => h(BTab, tab)))
+ }
+ }
+ const wrapper = mount(App)
+ expect(wrapper).toBeDefined()
+
+ await waitNT(wrapper.vm)
+
+ const $tabs = wrapper.findComponent(BTabs)
+ expect($tabs).toBeDefined()
+ expect($tabs.findAllComponents(BTab).length).toBe(3)
+ expect($tabs.emitted('changed')).toBeDefined()
+ expect($tabs.emitted('changed').length).toBe(1)
+ expect($tabs.emitted('changed')[0][0].length).toBe(3)
+ expect($tabs.emitted('changed')[0][1].length).toBe(0)
+
+ // Add a tab
+ await wrapper.setProps({ tabs: ['Tab 1', 'Tab 2', 'Tab 3', 'Tab 4'] })
+ await waitNT(wrapper.vm)
+ expect($tabs.findAllComponents(BTab).length).toBe(4)
+ expect($tabs.emitted('changed')).toBeDefined()
+ expect($tabs.emitted('changed').length).toBe(2)
+ expect($tabs.emitted('changed')[1][0].length).toBe(4)
+ expect($tabs.emitted('changed')[1][1].length).toBe(3)
+
+ // Remove a tabs
+ await wrapper.setProps({ tabs: ['Tab 1', 'Tab 2'] })
+ await waitNT(wrapper.vm)
+ expect($tabs.findAllComponents(BTab).length).toBe(2)
+ expect($tabs.emitted('changed')).toBeDefined()
+ expect($tabs.emitted('changed').length).toBe(3)
+ expect($tabs.emitted('changed')[2][0].length).toBe(2)
+ expect($tabs.emitted('changed')[2][1].length).toBe(4)
wrapper.destroy()
})
diff --git a/src/components/tooltip/helpers/bv-tooltip.js b/src/components/tooltip/helpers/bv-tooltip.js
index a2a9c99e458..2fe03791d26 100644
--- a/src/components/tooltip/helpers/bv-tooltip.js
+++ b/src/components/tooltip/helpers/bv-tooltip.js
@@ -63,6 +63,7 @@ import { toInteger } from '../../../utils/number'
import { keys } from '../../../utils/object'
import { warn } from '../../../utils/warn'
import { BvEvent } from '../../../utils/bv-event.class'
+import { listenOnRootMixin } from '../../../mixins/listen-on-root'
import { BVTooltipTemplate } from './bv-tooltip-template'
// --- Constants ---
@@ -138,6 +139,7 @@ const templateData = {
// @vue/component
export const BVTooltip = /*#__PURE__*/ Vue.extend({
name: NAME_TOOLTIP_HELPER,
+ mixins: [listenOnRootMixin],
data() {
return {
// BTooltip/BPopover/VBTooltip/VBPopover will update this data
@@ -681,14 +683,9 @@ export const BVTooltip = /*#__PURE__*/ Vue.extend({
})
},
emitEvent(bvEvent) {
- // Emits a BvEvent on $root and this instance
- const eventName = bvEvent.type
- const $root = this.$root
- if ($root && $root.$emit) {
- // Emit an event on $root
- $root.$emit(getRootEventName(this.templateType, eventName), bvEvent)
- }
- this.$emit(eventName, bvEvent)
+ const { type } = bvEvent
+ this.emitOnRoot(getRootEventName(this.templateType, type), bvEvent)
+ this.$emit(type, bvEvent)
},
// --- Event handler setup methods ---
listen() {
diff --git a/src/mixins/dropdown.js b/src/mixins/dropdown.js
index 865dd278f8d..5d3ab618d34 100644
--- a/src/mixins/dropdown.js
+++ b/src/mixins/dropdown.js
@@ -184,8 +184,8 @@ export const dropdownMixin = Vue.extend({
// Event emitter
emitEvent(bvEvent) {
const { type } = bvEvent
+ this.emitOnRoot(getRootEventName(NAME_DROPDOWN, type), bvEvent)
this.$emit(type, bvEvent)
- this.emitOnRoot(getRootEventName(NAME_DROPDOWN, type))
},
showMenu() {
if (this.disabled) {
diff --git a/yarn.lock b/yarn.lock
index 870a1bd2e69..3f03930380e 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -230,10 +230,15 @@
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2"
integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==
-"@babel/helper-validator-option@^7.12.1":
- version "7.12.1"
- resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.1.tgz#175567380c3e77d60ff98a54bb015fe78f2178d9"
- integrity sha512-YpJabsXlJVWP0USHjnC/AQDTLlZERbON577YUVO/wLpqyj6HAtVYnWaQaN0iUN+1/tWn3c+uKKXjRut5115Y2A==
+"@babel/helper-validator-identifier@^7.12.11":
+ version "7.12.11"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed"
+ integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==
+
+"@babel/helper-validator-option@^7.12.1", "@babel/helper-validator-option@^7.12.11":
+ version "7.12.11"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.11.tgz#d66cb8b7a3e7fe4c6962b32020a131ecf0847f4f"
+ integrity sha512-TBFCyj939mFSdeX7U7DDj32WtzYY7fDcalgq8v3fBZMNOJQNn7nOYzMaUCiPxPYfCup69mtIpqlKgMZLvQ8Xhw==
"@babel/helper-wrap-function@^7.10.4":
version "7.12.3"
@@ -519,10 +524,10 @@
dependencies:
"@babel/helper-plugin-utils" "^7.10.4"
-"@babel/plugin-transform-block-scoping@^7.12.1":
- version "7.12.1"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.1.tgz#f0ee727874b42a208a48a586b84c3d222c2bbef1"
- integrity sha512-zJyAC9sZdE60r1nVQHblcfCj29Dh2Y0DOvlMkcqSo0ckqjiCwNiUezUKw+RjOCwGfpLRwnAeQ2XlLpsnGkvv9w==
+"@babel/plugin-transform-block-scoping@^7.12.11":
+ version "7.12.11"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.11.tgz#83ae92a104dbb93a7d6c6dd1844f351083c46b4f"
+ integrity sha512-atR1Rxc3hM+VPg/NvNvfYw0npQEAcHuJ+MGZnFn6h3bo+1U3BWXMdFMlvVRApBTWKQMX7SOwRJZA5FBF/JQbvA==
dependencies:
"@babel/helper-plugin-utils" "^7.10.4"
@@ -754,16 +759,16 @@
"@babel/helper-create-regexp-features-plugin" "^7.12.1"
"@babel/helper-plugin-utils" "^7.10.4"
-"@babel/preset-env@^7.12.10", "@babel/preset-env@^7.12.7":
- version "7.12.10"
- resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.12.10.tgz#ca981b95f641f2610531bd71948656306905e6ab"
- integrity sha512-Gz9hnBT/tGeTE2DBNDkD7BiWRELZt+8lSysHuDwmYXUIvtwZl0zI+D6mZgXZX0u8YBlLS4tmai9ONNY9tjRgRA==
+"@babel/preset-env@^7.12.11", "@babel/preset-env@^7.12.7":
+ version "7.12.11"
+ resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.12.11.tgz#55d5f7981487365c93dbbc84507b1c7215e857f9"
+ integrity sha512-j8Tb+KKIXKYlDBQyIOy4BLxzv1NUOwlHfZ74rvW+Z0Gp4/cI2IMDPBWAgWceGcE7aep9oL/0K9mlzlMGxA8yNw==
dependencies:
"@babel/compat-data" "^7.12.7"
"@babel/helper-compilation-targets" "^7.12.5"
"@babel/helper-module-imports" "^7.12.5"
"@babel/helper-plugin-utils" "^7.10.4"
- "@babel/helper-validator-option" "^7.12.1"
+ "@babel/helper-validator-option" "^7.12.11"
"@babel/plugin-proposal-async-generator-functions" "^7.12.1"
"@babel/plugin-proposal-class-properties" "^7.12.1"
"@babel/plugin-proposal-dynamic-import" "^7.12.1"
@@ -792,7 +797,7 @@
"@babel/plugin-transform-arrow-functions" "^7.12.1"
"@babel/plugin-transform-async-to-generator" "^7.12.1"
"@babel/plugin-transform-block-scoped-functions" "^7.12.1"
- "@babel/plugin-transform-block-scoping" "^7.12.1"
+ "@babel/plugin-transform-block-scoping" "^7.12.11"
"@babel/plugin-transform-classes" "^7.12.1"
"@babel/plugin-transform-computed-properties" "^7.12.1"
"@babel/plugin-transform-destructuring" "^7.12.1"
@@ -822,7 +827,7 @@
"@babel/plugin-transform-unicode-escapes" "^7.12.1"
"@babel/plugin-transform-unicode-regex" "^7.12.1"
"@babel/preset-modules" "^0.1.3"
- "@babel/types" "^7.12.10"
+ "@babel/types" "^7.12.11"
core-js-compat "^3.8.0"
semver "^5.5.0"
@@ -852,10 +857,10 @@
dependencies:
regenerator-runtime "^0.13.4"
-"@babel/standalone@^7.12.10":
- version "7.12.10"
- resolved "https://registry.yarnpkg.com/@babel/standalone/-/standalone-7.12.10.tgz#f77f6750d0ab88c7c23234dd2d2f3800f170a573"
- integrity sha512-e3sJ7uwwjiGWv7qeATKrP+Mjltr6JEurPh3yR0dBb9ie2YDnKl52lO82f+Ha+HAtyxTHfsPIXwgFmWKsCT2zOQ==
+"@babel/standalone@^7.12.11":
+ version "7.12.11"
+ resolved "https://registry.yarnpkg.com/@babel/standalone/-/standalone-7.12.11.tgz#ed6ec8758995d60ba702af6c39465f9bca18ac99"
+ integrity sha512-z+iFopDt0/8PUB8D0p7+95wYgXisRX6xi64fXCkpIRbkrA0nCf8t4yBBkSQ5YW/o9jPmmNhmX13OqsirloqdKQ==
"@babel/template@^7.10.4", "@babel/template@^7.12.7", "@babel/template@^7.3.3":
version "7.12.7"
@@ -881,12 +886,12 @@
globals "^11.1.0"
lodash "^4.17.19"
-"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.11.0", "@babel/types@^7.12.1", "@babel/types@^7.12.10", "@babel/types@^7.12.5", "@babel/types@^7.12.7", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.7.0":
- version "7.12.10"
- resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.10.tgz#7965e4a7260b26f09c56bcfcb0498af1f6d9b260"
- integrity sha512-sf6wboJV5mGyip2hIpDSKsr80RszPinEFjsHTalMxZAZkoQ2/2yQzxlcFN52SJqsyPfLtPmenL4g2KB3KJXPDw==
+"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.11.0", "@babel/types@^7.12.1", "@babel/types@^7.12.10", "@babel/types@^7.12.11", "@babel/types@^7.12.5", "@babel/types@^7.12.7", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.7.0":
+ version "7.12.11"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.11.tgz#a86e4d71e30a9b6ee102590446c98662589283ce"
+ integrity sha512-ukA9SQtKThINm++CX1CwmliMrE54J6nIYB5XTwL5f/CLFW9owfls+YSU8tVW15RQ2w+a3fSbPjC6HdQNtWZkiA==
dependencies:
- "@babel/helper-validator-identifier" "^7.10.4"
+ "@babel/helper-validator-identifier" "^7.12.11"
lodash "^4.17.19"
to-fast-properties "^2.0.0"
@@ -5570,15 +5575,15 @@ eslint-plugin-promise@^4.2.1:
resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.2.1.tgz#845fd8b2260ad8f82564c1222fce44ad71d9418a"
integrity sha512-VoM09vT7bfA7D+upt+FjeBO5eHIJQBUWki1aPvB+vbNiHS3+oGIJGIeyBtKQTME6UPXXy3vV07OL1tHd3ANuDw==
-eslint-plugin-vue@^7.2.0:
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-7.2.0.tgz#dd8323fe7ca28fe9377ce3f5f6cf17afe2686f2a"
- integrity sha512-4mt0yIv6rBDNtvis/g22a0ozJ12GfcdEzX77u0ICYjKlxOVtGrKGEvo0cbOObHaKDg9a9kJcoaNodqE4TPfS2A==
+eslint-plugin-vue@^7.3.0:
+ version "7.3.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-7.3.0.tgz#0faf0fcf0e1b1052bf800d4dee42d64f50679cb0"
+ integrity sha512-4rc9xrZgwT4aLz3XE6lrHu+FZtDLWennYvtzVvvS81kW9c65U4DUzQQWAFjDCgCFvN6HYWxi7ueEtxZVSB+f0g==
dependencies:
eslint-utils "^2.1.0"
natural-compare "^1.4.0"
semver "^7.3.2"
- vue-eslint-parser "^7.2.0"
+ vue-eslint-parser "^7.3.0"
eslint-scope@^4.0.3:
version "4.0.3"
@@ -8996,10 +9001,10 @@ markdown-table@^2.0.0:
dependencies:
repeat-string "^1.0.0"
-marked@^1.2.6:
- version "1.2.6"
- resolved "https://registry.yarnpkg.com/marked/-/marked-1.2.6.tgz#fa55cf38ab3585005c9fb3c1ebfb3d4590c29fdc"
- integrity sha512-7vVuSEZ8g/HH3hK/BH/+7u/NJj7x9VY4EHzujLDcqAQLiOUeFJYAsfSAyoWtR17lKrx7b08qyIno4lffwrzTaA==
+marked@^1.2.7:
+ version "1.2.7"
+ resolved "https://registry.yarnpkg.com/marked/-/marked-1.2.7.tgz#6e14b595581d2319cdcf033a24caaf41455a01fb"
+ integrity sha512-No11hFYcXr/zkBvL6qFmAp1z6BKY3zqLMHny/JN/ey+al7qwCM2+CMBL9BOgqMxZU36fz4cCWfn2poWIf7QRXA==
md5.js@^1.3.4:
version "1.3.5"
@@ -12242,10 +12247,10 @@ rollup-pluginutils@^2.8.1:
dependencies:
estree-walker "^0.6.1"
-rollup@^2.35.0:
- version "2.35.0"
- resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.35.0.tgz#47b77827b122fbeca6a2c494fb2258db73d04fa9"
- integrity sha512-AkiRsGBlHbP+bnAcOgiCRp6jm0BEGHXJk7TGZ+GpKyTL3EiSv+v+zEHlaB1gy1Ql2zyblBhzo5X346bCL45OAg==
+rollup@^2.35.1:
+ version "2.35.1"
+ resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.35.1.tgz#e6bc8d10893556a638066f89e8c97f422d03968c"
+ integrity sha512-q5KxEyWpprAIcainhVy6HfRttD9kutQpHbeqDTWnqAFNJotiojetK6uqmcydNMymBEtC4I8bCYR+J3mTMqeaUA==
optionalDependencies:
fsevents "~2.1.2"
@@ -14195,10 +14200,10 @@ vue-client-only@^2.0.0:
resolved "https://registry.yarnpkg.com/vue-client-only/-/vue-client-only-2.0.0.tgz#ddad8d675ee02c761a14229f0e440e219de1da1c"
integrity sha512-arhk1wtWAfLsJyxGMoEYhoBowM87/i6HLSG2LH/03Yog6i2d9JEN1peMP0Ceis+/n9DxdenGYZZTxbPPJyHciA==
-vue-eslint-parser@^7.2.0:
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-7.2.0.tgz#1e17ae94ca71e617025e05143c8ac5593aacb6ef"
- integrity sha512-uVcQqe8sUNzdHGcRHMd2Z/hl6qEaWrAmglTKP92Fnq9TYU9un8xsyFgEdFJaXh/1rd7h8Aic1GaiQow5nVneow==
+vue-eslint-parser@^7.3.0:
+ version "7.3.0"
+ resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-7.3.0.tgz#894085839d99d81296fa081d19643733f23d7559"
+ integrity sha512-n5PJKZbyspD0+8LnaZgpEvNCrjQx1DyDHw8JdWwoxhhC+yRip4TAvSDpXGf9SWX6b0umeB5aR61gwUo6NVvFxw==
dependencies:
debug "^4.1.1"
eslint-scope "^5.0.0"