@gitlab/ui 101.16.0 → 102.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +32 -0
- package/dist/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_details_modal/duo_chat_context_item_details_modal.js +3 -0
- package/dist/vendor/bootstrap-vue/src/components/button/button.js +0 -4
- package/dist/vendor/bootstrap-vue/src/components/nav/nav.js +6 -9
- package/dist/vendor/bootstrap-vue/src/components/tabs/tabs.js +6 -30
- package/dist/vendor/bootstrap-vue/src/index.js +1 -11
- package/dist/vendor/bootstrap-vue/src/mixins/form-radio-check-group.js +2 -16
- package/dist/vendor/bootstrap-vue/src/mixins/form-radio-check.js +14 -104
- package/package.json +1 -2
- package/src/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_details_modal/duo_chat_context_item_details_modal.vue +3 -0
- package/src/vendor/bootstrap-vue/src/components/button/MODIFICATIONS.md +16 -0
- package/src/vendor/bootstrap-vue/src/components/button/README.md +0 -39
- package/src/vendor/bootstrap-vue/src/components/button/button.js +0 -4
- package/src/vendor/bootstrap-vue/src/components/button/button.spec.js +0 -36
- package/src/vendor/bootstrap-vue/src/components/form-checkbox/README.md +3 -174
- package/src/vendor/bootstrap-vue/src/components/form-checkbox/form-checkbox-group.spec.js +0 -117
- package/src/vendor/bootstrap-vue/src/components/form-checkbox/form-checkbox.spec.js +0 -409
- package/src/vendor/bootstrap-vue/src/components/form-radio/README.md +0 -129
- package/src/vendor/bootstrap-vue/src/components/form-radio/form-radio-group.spec.js +0 -112
- package/src/vendor/bootstrap-vue/src/components/form-radio/form-radio.spec.js +0 -365
- package/src/vendor/bootstrap-vue/src/components/nav/README.md +0 -20
- package/src/vendor/bootstrap-vue/src/components/nav/nav.js +7 -9
- package/src/vendor/bootstrap-vue/src/components/nav/nav.spec.js +0 -67
- package/src/vendor/bootstrap-vue/src/components/tabs/README.md +45 -187
- package/src/vendor/bootstrap-vue/src/components/tabs/tabs.js +6 -29
- package/src/vendor/bootstrap-vue/src/components/tabs/tabs.spec.js +0 -58
- package/src/vendor/bootstrap-vue/src/index.js +0 -17
- package/src/vendor/bootstrap-vue/src/mixins/form-radio-check-group.js +3 -20
- package/src/vendor/bootstrap-vue/src/mixins/form-radio-check.js +19 -114
- package/src/vendor/bootstrap-vue/src/utils/config.spec.js +0 -18
- package/dist/index.css +0 -7
- package/dist/index.css.map +0 -1
- package/dist/index.js +0 -115
- package/dist/vendor/bootstrap-vue/src/components/index.js +0 -11
- package/src/index.js +0 -130
- package/src/vendor/bootstrap-vue/src/components/index.js +0 -11
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Tabs
|
|
2
2
|
|
|
3
|
-
> Create a widget of tabbable panes of _local content_. The tabs component is built upon navs
|
|
4
|
-
>
|
|
3
|
+
> Create a widget of tabbable panes of _local content_. The tabs component is built upon navs
|
|
4
|
+
> internally, and provides full keyboard navigation control of the tabs.
|
|
5
5
|
|
|
6
6
|
For navigation based tabs (i.e. tabs that would change the URL), use the
|
|
7
7
|
[nav](?path=/docs/base-nav--docs) component instead.
|
|
@@ -24,75 +24,6 @@ For navigation based tabs (i.e. tabs that would change the URL), use the
|
|
|
24
24
|
or removing `<b-tab>` components (i.e. `v-if` or for loops). The `key` attribute is a special Vue
|
|
25
25
|
attribute, see https://vuejs.org/v2/api/#key.
|
|
26
26
|
|
|
27
|
-
## Cards integration
|
|
28
|
-
|
|
29
|
-
Tabs support integrating with Bootstrap cards. Just add the `card` property to `<b-tabs>` and place
|
|
30
|
-
it inside a `<b-card>` component. Note that you should add the`no-body` prop on the `<b-card>`
|
|
31
|
-
component in order to properly decorate the card header and remove the extra padding introduced by
|
|
32
|
-
`card-body`.
|
|
33
|
-
|
|
34
|
-
```html
|
|
35
|
-
<div>
|
|
36
|
-
<b-card no-body>
|
|
37
|
-
<b-tabs card>
|
|
38
|
-
<b-tab title="Tab 1" active>
|
|
39
|
-
<b-card-text>Tab contents 1</b-card-text>
|
|
40
|
-
</b-tab>
|
|
41
|
-
<b-tab title="Tab 2">
|
|
42
|
-
<b-card-text>Tab contents 2</b-card-text>
|
|
43
|
-
</b-tab>
|
|
44
|
-
</b-tabs>
|
|
45
|
-
</b-card>
|
|
46
|
-
</div>
|
|
47
|
-
|
|
48
|
-
<!-- b-tabs-card.vue -->
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
When `<b-tabs>` is in `card` mode, each `<b-tab>` sub-component will automatically have the
|
|
52
|
-
`card-body` class applied (this class provides the padding around the tab content). To disable the
|
|
53
|
-
`card-body` class, set the `no-body` prop on the `<b-tab>` sub component.
|
|
54
|
-
|
|
55
|
-
```html
|
|
56
|
-
<div>
|
|
57
|
-
<b-card no-body>
|
|
58
|
-
<b-tabs card>
|
|
59
|
-
<b-tab no-body title="Picture 1">
|
|
60
|
-
<b-card-img bottom src="https://picsum.photos/600/200/?image=21" alt="Image 21"></b-card-img>
|
|
61
|
-
<b-card-footer>Picture 1 footer</b-card-footer>
|
|
62
|
-
</b-tab>
|
|
63
|
-
|
|
64
|
-
<b-tab no-body title="Picture 2">
|
|
65
|
-
<b-card-img bottom src="https://picsum.photos/600/200/?image=25" alt="Image 25"></b-card-img>
|
|
66
|
-
<b-card-footer>Picture 2 footer</b-card-footer>
|
|
67
|
-
</b-tab>
|
|
68
|
-
|
|
69
|
-
<b-tab no-body title="Picture 3">
|
|
70
|
-
<b-card-img bottom src="https://picsum.photos/600/200/?image=26" alt="Image 26"></b-card-img>
|
|
71
|
-
<b-card-footer>Picture 3 footer</b-card-footer>
|
|
72
|
-
</b-tab>
|
|
73
|
-
|
|
74
|
-
<b-tab title="Text">
|
|
75
|
-
<b-card-title>This tab does not have the <code>no-body</code> prop set</b-card-title>
|
|
76
|
-
<b-card-text>
|
|
77
|
-
Quis magna Lorem anim amet ipsum do mollit sit cillum voluptate ex nulla tempor. Laborum
|
|
78
|
-
consequat non elit enim exercitation cillum aliqua consequat id aliqua. Esse ex
|
|
79
|
-
consectetur mollit voluptate est in duis laboris ad sit ipsum anim Lorem. Incididunt
|
|
80
|
-
veniam velit elit elit veniam Lorem aliqua quis ullamco deserunt sit enim elit aliqua
|
|
81
|
-
esse irure.
|
|
82
|
-
</b-card-text>
|
|
83
|
-
</b-tab>
|
|
84
|
-
</b-tabs>
|
|
85
|
-
</b-card>
|
|
86
|
-
</div>
|
|
87
|
-
|
|
88
|
-
<!-- b-tabs-card-no-body.vue -->
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
**Note:** Setting the `no-body` prop on `<b-tab>` will have no affect when `<b-tabs>` is not in
|
|
92
|
-
`card` mode (as the `card-body` class is only set when in `card` mode).
|
|
93
|
-
|
|
94
|
-
Refer to the [Cards documentation](?path=/docs/base-card--docs) for more details on card components.
|
|
95
|
-
|
|
96
27
|
## Pills variant
|
|
97
28
|
|
|
98
29
|
Tabs use the `tabs` styling by default. Just add `pills` property to `<b-tabs>` for the pill style
|
|
@@ -100,12 +31,10 @@ variant.
|
|
|
100
31
|
|
|
101
32
|
```html
|
|
102
33
|
<div>
|
|
103
|
-
<b-
|
|
104
|
-
<b-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
</b-tabs>
|
|
108
|
-
</b-card>
|
|
34
|
+
<b-tabs pills>
|
|
35
|
+
<b-tab title="Tab 1" active>Tab contents 1</b-tab>
|
|
36
|
+
<b-tab title="Tab 2">Tab contents 2></b-tab>
|
|
37
|
+
</b-tabs>
|
|
109
38
|
</div>
|
|
110
39
|
|
|
111
40
|
<!-- b-tabs-pills.vue -->
|
|
@@ -173,12 +102,10 @@ Visually move the tab controls to the bottom by setting the prop `end`.
|
|
|
173
102
|
|
|
174
103
|
```html
|
|
175
104
|
<div>
|
|
176
|
-
<b-
|
|
177
|
-
<b-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
</b-tabs>
|
|
181
|
-
</b-card>
|
|
105
|
+
<b-tabs pills end>
|
|
106
|
+
<b-tab title="Tab 1" active>Tab contents 1</b-tab>
|
|
107
|
+
<b-tab title="Tab 2">Tab contents 2</b-tab>
|
|
108
|
+
</b-tabs>
|
|
182
109
|
</div>
|
|
183
110
|
|
|
184
111
|
<!-- b-tabs-bottom.vue -->
|
|
@@ -193,67 +120,6 @@ Visually move the tab controls to the bottom by setting the prop `end`.
|
|
|
193
120
|
tab pane is the same height and fits completely within the visible viewport, otherwise the user
|
|
194
121
|
will need to scroll up to read the start of the tabbed content.
|
|
195
122
|
|
|
196
|
-
## Vertical tabs
|
|
197
|
-
|
|
198
|
-
Have the tab controls placed on the lefthand side by setting the `vertical` prop to `true`. Vertical
|
|
199
|
-
tabs work with or without `card` mode enabled.
|
|
200
|
-
|
|
201
|
-
```html
|
|
202
|
-
<div>
|
|
203
|
-
<b-card no-body>
|
|
204
|
-
<b-tabs pills card vertical>
|
|
205
|
-
<b-tab title="Tab 1" active><b-card-text>Tab contents 1</b-card-text></b-tab>
|
|
206
|
-
<b-tab title="Tab 2"><b-card-text>Tab contents 2</b-card-text></b-tab>
|
|
207
|
-
<b-tab title="Tab 3"><b-card-text>Tab contents 3</b-card-text></b-tab>
|
|
208
|
-
</b-tabs>
|
|
209
|
-
</b-card>
|
|
210
|
-
</div>
|
|
211
|
-
|
|
212
|
-
<!-- b-tabs-vertical.vue -->
|
|
213
|
-
```
|
|
214
|
-
|
|
215
|
-
Visually move the tab controls to the right hand side by setting the `end` prop:
|
|
216
|
-
|
|
217
|
-
```html
|
|
218
|
-
<div>
|
|
219
|
-
<b-card no-body>
|
|
220
|
-
<b-tabs pills card vertical end>
|
|
221
|
-
<b-tab title="Tab 1" active><b-card-text>Tab contents 1</b-card-text></b-tab>
|
|
222
|
-
<b-tab title="Tab 2"><b-card-text>Tab contents 2</b-card-text></b-tab>
|
|
223
|
-
<b-tab title="Tab 3"><b-card-text>Tab contents 3</b-card-text></b-tab>
|
|
224
|
-
</b-tabs>
|
|
225
|
-
</b-card>
|
|
226
|
-
</div>
|
|
227
|
-
|
|
228
|
-
<!-- b-tabs-vertical-end.vue -->
|
|
229
|
-
```
|
|
230
|
-
|
|
231
|
-
The width of the vertical tab controls will expand to fit the width of the tab title. To control the
|
|
232
|
-
width, set a [width utility class](/docs/reference/size-props#sizing-utility-classes) via the prop
|
|
233
|
-
`nav-wrapper-class`. You can use values such as `w-25` (25% width), `w-50` (50% width), etc., or
|
|
234
|
-
column classes such as `col-2`, `col-3`, etc.
|
|
235
|
-
|
|
236
|
-
```html
|
|
237
|
-
<div>
|
|
238
|
-
<b-card no-body>
|
|
239
|
-
<b-tabs pills card vertical nav-wrapper-class="w-50">
|
|
240
|
-
<b-tab title="Tab 1" active><b-card-text>Tab contents 1</b-card-text></b-tab>
|
|
241
|
-
<b-tab title="Tab 2"><b-card-text>Tab contents 2</b-card-text></b-tab>
|
|
242
|
-
<b-tab title="Tab 3"><b-card-text>Tab contents 3</b-card-text></b-tab>
|
|
243
|
-
</b-tabs>
|
|
244
|
-
</b-card>
|
|
245
|
-
</div>
|
|
246
|
-
|
|
247
|
-
<!-- b-tabs-vertical-width.vue -->
|
|
248
|
-
```
|
|
249
|
-
|
|
250
|
-
Vertical placement visually works best with the `pills` variant. When using the default `tabs`
|
|
251
|
-
variant, you may want to provided your own custom styling classes, as Bootstrap v4 CSS assumes the
|
|
252
|
-
tab controls will always be placed on the top of the tabs content.
|
|
253
|
-
|
|
254
|
-
**Note:** _overflowing text may occur if your width is narrower than the tab title. You may need
|
|
255
|
-
additional custom styling._
|
|
256
|
-
|
|
257
123
|
## Active classes
|
|
258
124
|
|
|
259
125
|
To apply classes to the currently active control or tab use the `active-nav-item-class` and
|
|
@@ -348,13 +214,11 @@ need to accommodate your custom classes for this._
|
|
|
348
214
|
```html
|
|
349
215
|
<template>
|
|
350
216
|
<div>
|
|
351
|
-
<b-
|
|
352
|
-
<b-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
</b-tabs>
|
|
357
|
-
</b-card>
|
|
217
|
+
<b-tabs v-model="tabIndex">
|
|
218
|
+
<b-tab title="Tab 1" :title-link-class="linkClass(0)">Tab contents 1</b-tab>
|
|
219
|
+
<b-tab title="Tab 2" :title-link-class="linkClass(1)">Tab contents 2</b-tab>
|
|
220
|
+
<b-tab title="Tab 3" :title-link-class="linkClass(2)">Tab contents 3</b-tab>
|
|
221
|
+
</b-tabs>
|
|
358
222
|
</div>
|
|
359
223
|
</template>
|
|
360
224
|
|
|
@@ -476,18 +340,14 @@ It is recommended to use the `disabled` attribute on the `<b-tab>` component ins
|
|
|
476
340
|
```html
|
|
477
341
|
<template>
|
|
478
342
|
<div>
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
<b-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
<b-tab title="Premium Plan" disabled>Sibzamini!</b-tab>
|
|
488
|
-
<b-tab title="Info">I'm the last tab</b-tab>
|
|
489
|
-
</b-tabs>
|
|
490
|
-
</b-card>
|
|
343
|
+
<b-tabs v-model="tabIndex" small>
|
|
344
|
+
<b-tab title="General">I'm the first fading tab</b-tab>
|
|
345
|
+
<b-tab title="Edit profile">
|
|
346
|
+
I'm the second tab
|
|
347
|
+
</b-tab>
|
|
348
|
+
<b-tab title="Premium Plan" disabled>Sibzamini!</b-tab>
|
|
349
|
+
<b-tab title="Info">I'm the last tab</b-tab>
|
|
350
|
+
</b-tabs>
|
|
491
351
|
|
|
492
352
|
<!-- Control buttons-->
|
|
493
353
|
<div class="text-center">
|
|
@@ -519,30 +379,28 @@ It is recommended to use the `disabled` attribute on the `<b-tab>` component ins
|
|
|
519
379
|
```html
|
|
520
380
|
<template>
|
|
521
381
|
<div>
|
|
522
|
-
<b-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
<
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
<
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
</b-tabs>
|
|
545
|
-
</b-card>
|
|
382
|
+
<b-tabs>
|
|
383
|
+
<!-- Render Tabs, supply a unique `key` to each tab -->
|
|
384
|
+
<b-tab v-for="i in tabs" :key="'dyn-tab-' + i" :title="'Tab ' + i">
|
|
385
|
+
Tab contents {{ i }}
|
|
386
|
+
<b-button size="sm" variant="danger" class="float-right" @click="closeTab(i)">
|
|
387
|
+
Close tab
|
|
388
|
+
</b-button>
|
|
389
|
+
</b-tab>
|
|
390
|
+
|
|
391
|
+
<!-- New Tab Button (Using tabs-end slot) -->
|
|
392
|
+
<template #tabs-end>
|
|
393
|
+
<b-nav-item role="presentation" @click.prevent="newTab" href="#"><b>+</b></b-nav-item>
|
|
394
|
+
</template>
|
|
395
|
+
|
|
396
|
+
<!-- Render this if no tabs -->
|
|
397
|
+
<template #empty>
|
|
398
|
+
<div class="text-center text-muted">
|
|
399
|
+
There are no open tabs<br>
|
|
400
|
+
Open a new tab using the <b>+</b> button above.
|
|
401
|
+
</div>
|
|
402
|
+
</template>
|
|
403
|
+
</b-tabs>
|
|
546
404
|
</div>
|
|
547
405
|
</template>
|
|
548
406
|
|
|
@@ -199,7 +199,6 @@ export const props = makePropsConfigurable(
|
|
|
199
199
|
// Only applied to the currently active `<b-tab>`
|
|
200
200
|
// This prop is sniffed by the `<b-tab>` child
|
|
201
201
|
activeTabClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),
|
|
202
|
-
card: makeProp(PROP_TYPE_BOOLEAN, false),
|
|
203
202
|
contentClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),
|
|
204
203
|
// Synonym for 'bottom'
|
|
205
204
|
end: makeProp(PROP_TYPE_BOOLEAN, false),
|
|
@@ -241,13 +240,6 @@ export const BTabs = /*#__PURE__*/ extend({
|
|
|
241
240
|
fade() {
|
|
242
241
|
// This computed prop is sniffed by the tab child
|
|
243
242
|
return !this.noFade
|
|
244
|
-
},
|
|
245
|
-
localNavClass() {
|
|
246
|
-
const classes = []
|
|
247
|
-
if (this.card && this.vertical) {
|
|
248
|
-
classes.push('card-header', 'h-100', 'border-bottom-0', 'rounded-0')
|
|
249
|
-
}
|
|
250
|
-
return [...classes, this.navClass]
|
|
251
243
|
}
|
|
252
244
|
},
|
|
253
245
|
watch: {
|
|
@@ -539,7 +531,6 @@ export const BTabs = /*#__PURE__*/ extend({
|
|
|
539
531
|
render(h) {
|
|
540
532
|
const {
|
|
541
533
|
align,
|
|
542
|
-
card,
|
|
543
534
|
end,
|
|
544
535
|
fill,
|
|
545
536
|
firstTab,
|
|
@@ -551,8 +542,7 @@ export const BTabs = /*#__PURE__*/ extend({
|
|
|
551
542
|
pills,
|
|
552
543
|
previousTab,
|
|
553
544
|
small,
|
|
554
|
-
tabs: $tabs
|
|
555
|
-
vertical
|
|
545
|
+
tabs: $tabs
|
|
556
546
|
} = this
|
|
557
547
|
|
|
558
548
|
// Currently active tab
|
|
@@ -605,7 +595,7 @@ export const BTabs = /*#__PURE__*/ extend({
|
|
|
605
595
|
let $nav = h(
|
|
606
596
|
BNav,
|
|
607
597
|
{
|
|
608
|
-
class: this.
|
|
598
|
+
class: this.navClass,
|
|
609
599
|
attrs: {
|
|
610
600
|
role: 'tablist',
|
|
611
601
|
id: this.safeId('_BV_tab_controls_')
|
|
@@ -616,9 +606,7 @@ export const BTabs = /*#__PURE__*/ extend({
|
|
|
616
606
|
align,
|
|
617
607
|
tabs: !noNavStyle && !pills,
|
|
618
608
|
pills: !noNavStyle && pills,
|
|
619
|
-
|
|
620
|
-
small,
|
|
621
|
-
cardHeader: card && !vertical
|
|
609
|
+
small
|
|
622
610
|
},
|
|
623
611
|
ref: 'nav'
|
|
624
612
|
},
|
|
@@ -632,14 +620,7 @@ export const BTabs = /*#__PURE__*/ extend({
|
|
|
632
620
|
$nav = h(
|
|
633
621
|
'div',
|
|
634
622
|
{
|
|
635
|
-
class:
|
|
636
|
-
{
|
|
637
|
-
'card-header': card && !vertical && !end,
|
|
638
|
-
'card-footer': card && !vertical && end,
|
|
639
|
-
'col-auto': vertical
|
|
640
|
-
},
|
|
641
|
-
this.navWrapperClass
|
|
642
|
-
],
|
|
623
|
+
class: this.navWrapperClass,
|
|
643
624
|
key: 'bv-tabs-nav'
|
|
644
625
|
},
|
|
645
626
|
[$nav]
|
|
@@ -652,7 +633,7 @@ export const BTabs = /*#__PURE__*/ extend({
|
|
|
652
633
|
$empty = h(
|
|
653
634
|
'div',
|
|
654
635
|
{
|
|
655
|
-
class: ['tab-pane', 'active'
|
|
636
|
+
class: ['tab-pane', 'active'],
|
|
656
637
|
key: 'bv-empty-tab'
|
|
657
638
|
},
|
|
658
639
|
this.normalizeSlot(SLOT_NAME_EMPTY)
|
|
@@ -663,7 +644,7 @@ export const BTabs = /*#__PURE__*/ extend({
|
|
|
663
644
|
'div',
|
|
664
645
|
{
|
|
665
646
|
staticClass: 'tab-content',
|
|
666
|
-
class:
|
|
647
|
+
class: this.contentClass,
|
|
667
648
|
attrs: { id: this.safeId('_BV_tab_container_') },
|
|
668
649
|
key: 'bv-content',
|
|
669
650
|
ref: 'content'
|
|
@@ -676,10 +657,6 @@ export const BTabs = /*#__PURE__*/ extend({
|
|
|
676
657
|
this.tag,
|
|
677
658
|
{
|
|
678
659
|
staticClass: 'tabs',
|
|
679
|
-
class: {
|
|
680
|
-
row: vertical,
|
|
681
|
-
'no-gutters': vertical && card
|
|
682
|
-
},
|
|
683
660
|
attrs: { id: this.safeId() }
|
|
684
661
|
},
|
|
685
662
|
[end ? $content : h(), $nav, end ? h() : $content]
|
|
@@ -32,64 +32,6 @@ describe('tabs', () => {
|
|
|
32
32
|
wrapper.destroy()
|
|
33
33
|
})
|
|
34
34
|
|
|
35
|
-
it('has correct card classes when prop card is true', async () => {
|
|
36
|
-
const wrapper = mount(BTabs, {
|
|
37
|
-
propsData: { card: true },
|
|
38
|
-
slots: {
|
|
39
|
-
default: {
|
|
40
|
-
components: { BTab },
|
|
41
|
-
template: '<div><b-tab /><b-tab /><b-tab /></div>'
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
})
|
|
45
|
-
|
|
46
|
-
await waitNT(wrapper.vm)
|
|
47
|
-
expect(wrapper).toBeDefined()
|
|
48
|
-
|
|
49
|
-
expect(wrapper.element.tagName).toBe('DIV')
|
|
50
|
-
expect(wrapper.classes()).toContain('tabs')
|
|
51
|
-
expect(wrapper.findAll('.card-header').length).toBe(1)
|
|
52
|
-
expect(wrapper.findAll('ul').length).toBe(1)
|
|
53
|
-
expect(wrapper.find('ul').classes()).toContain('nav')
|
|
54
|
-
expect(wrapper.find('ul').classes()).toContain('nav-tabs')
|
|
55
|
-
expect(wrapper.find('ul').classes()).toContain('card-header-tabs')
|
|
56
|
-
|
|
57
|
-
wrapper.destroy()
|
|
58
|
-
})
|
|
59
|
-
|
|
60
|
-
it('has correct card classes when props card and vertical are true', async () => {
|
|
61
|
-
const wrapper = mount(BTabs, {
|
|
62
|
-
propsData: { card: true, vertical: true },
|
|
63
|
-
slots: {
|
|
64
|
-
default: {
|
|
65
|
-
components: { BTab },
|
|
66
|
-
template: '<div><b-tab /><b-tab /><b-tab /></div>'
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
})
|
|
70
|
-
|
|
71
|
-
await waitNT(wrapper.vm)
|
|
72
|
-
expect(wrapper).toBeDefined()
|
|
73
|
-
|
|
74
|
-
expect(wrapper.element.tagName).toBe('DIV')
|
|
75
|
-
expect(wrapper.classes()).toContain('tabs')
|
|
76
|
-
expect(wrapper.classes()).toContain('row')
|
|
77
|
-
expect(wrapper.classes()).toContain('no-gutters')
|
|
78
|
-
expect(wrapper.findAll('.card-header').length).toBe(1)
|
|
79
|
-
expect(wrapper.findAll('ul').length).toBe(1)
|
|
80
|
-
expect(wrapper.find('ul').classes()).toContain('nav')
|
|
81
|
-
expect(wrapper.find('ul').classes()).toContain('nav-tabs')
|
|
82
|
-
expect(wrapper.find('ul').classes()).toContain('card-header')
|
|
83
|
-
expect(wrapper.find('ul').classes()).toContain('flex-column')
|
|
84
|
-
expect(wrapper.find('ul').classes()).toContain('h-100')
|
|
85
|
-
expect(wrapper.find('ul').classes()).toContain('border-bottom-0')
|
|
86
|
-
expect(wrapper.find('ul').classes()).toContain('rounded-0')
|
|
87
|
-
expect(wrapper.findAll('.tab-content.col').length).toBe(1)
|
|
88
|
-
expect(wrapper.findAll('.col-auto').length).toBe(1)
|
|
89
|
-
|
|
90
|
-
wrapper.destroy()
|
|
91
|
-
})
|
|
92
|
-
|
|
93
35
|
it('sets correct tab active for initial value', async () => {
|
|
94
36
|
const tabIndex = 1
|
|
95
37
|
const wrapper = mount(BTabs, {
|
|
@@ -1,31 +1,14 @@
|
|
|
1
|
-
import { installFactory } from './utils/plugins'
|
|
2
|
-
import { componentsPlugin } from './components'
|
|
3
1
|
import { BVConfigPlugin } from './bv-config'
|
|
4
2
|
|
|
5
3
|
const NAME = 'BootstrapVue'
|
|
6
4
|
|
|
7
|
-
// --- BootstrapVue installer ---
|
|
8
|
-
const install = /*#__PURE__*/ installFactory({
|
|
9
|
-
plugins: {
|
|
10
|
-
componentsPlugin
|
|
11
|
-
}
|
|
12
|
-
})
|
|
13
|
-
|
|
14
5
|
// --- BootstrapVue plugin ---
|
|
15
6
|
const BootstrapVue = /*#__PURE__*/ {
|
|
16
|
-
install,
|
|
17
7
|
NAME
|
|
18
8
|
}
|
|
19
9
|
|
|
20
10
|
// --- Named exports for BvConfigPlugin ---
|
|
21
11
|
export {
|
|
22
|
-
// Installer exported in case the consumer does not import `default`
|
|
23
|
-
// as the plugin in CommonJS build (or does not have interop enabled for CommonJS)
|
|
24
|
-
// Both the following will work:
|
|
25
|
-
// BootstrapVue = require('bootstrap-vue')
|
|
26
|
-
// BootstrapVue = require('bootstrap-vue').default
|
|
27
|
-
// Vue.use(BootstrapVue)
|
|
28
|
-
install,
|
|
29
12
|
NAME,
|
|
30
13
|
// BootstrapVue config plugin
|
|
31
14
|
BVConfigPlugin,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { extend } from '../vue'
|
|
2
|
-
import { PROP_TYPE_BOOLEAN, PROP_TYPE_BOOLEAN_STRING
|
|
2
|
+
import { PROP_TYPE_BOOLEAN, PROP_TYPE_BOOLEAN_STRING } from '../constants/props'
|
|
3
3
|
import { SLOT_NAME_FIRST } from '../constants/slots'
|
|
4
4
|
import { htmlOrText } from '../utils/html'
|
|
5
5
|
import { looseEqual } from '../utils/loose-equal'
|
|
@@ -42,10 +42,6 @@ export const props = makePropsConfigurable(
|
|
|
42
42
|
...formStateProps,
|
|
43
43
|
...formCustomProps,
|
|
44
44
|
ariaInvalid: makeProp(PROP_TYPE_BOOLEAN_STRING, false),
|
|
45
|
-
// Only applicable when rendered with button style
|
|
46
|
-
buttonVariant: makeProp(PROP_TYPE_STRING),
|
|
47
|
-
// Render as button style
|
|
48
|
-
buttons: makeProp(PROP_TYPE_BOOLEAN, false),
|
|
49
45
|
stacked: makeProp(PROP_TYPE_BOOLEAN, false),
|
|
50
46
|
validated: makeProp(PROP_TYPE_BOOLEAN, false)
|
|
51
47
|
}),
|
|
@@ -83,22 +79,9 @@ export const formRadioCheckGroupMixin = extend({
|
|
|
83
79
|
return this.name || this.safeId()
|
|
84
80
|
},
|
|
85
81
|
groupClasses() {
|
|
86
|
-
const {
|
|
82
|
+
const { validated } = this
|
|
87
83
|
|
|
88
|
-
|
|
89
|
-
if (this.buttons) {
|
|
90
|
-
classes = [
|
|
91
|
-
classes,
|
|
92
|
-
'btn-group-toggle',
|
|
93
|
-
{
|
|
94
|
-
'btn-group': inline,
|
|
95
|
-
'btn-group-vertical': !inline,
|
|
96
|
-
[`btn-group-${size}`]: size
|
|
97
|
-
}
|
|
98
|
-
]
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
return classes
|
|
84
|
+
return { 'was-validated': validated }
|
|
102
85
|
}
|
|
103
86
|
},
|
|
104
87
|
watch: {
|