@gitlab/ui 114.1.0 → 114.1.1

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.
Files changed (136) hide show
  1. package/package.json +7 -26
  2. package/CHANGELOG.md +0 -13139
  3. package/src/vendor/bootstrap/LICENSE +0 -11
  4. package/src/vendor/bootstrap-vue/LICENSE +0 -11
  5. package/src/vendor/bootstrap-vue/package.json +0 -144
  6. package/src/vendor/bootstrap-vue/src/components/button/MODIFICATIONS.md +0 -16
  7. package/src/vendor/bootstrap-vue/src/components/button/README.md +0 -240
  8. package/src/vendor/bootstrap-vue/src/components/button/button-close.spec.js +0 -210
  9. package/src/vendor/bootstrap-vue/src/components/button/button.spec.js +0 -349
  10. package/src/vendor/bootstrap-vue/src/components/button/package.json +0 -105
  11. package/src/vendor/bootstrap-vue/src/components/dropdown/README.md +0 -730
  12. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-divider.spec.js +0 -58
  13. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-form.spec.js +0 -110
  14. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-group.spec.js +0 -94
  15. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-header.spec.js +0 -73
  16. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-item-button.spec.js +0 -117
  17. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-item.spec.js +0 -147
  18. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-text.spec.js +0 -59
  19. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown.spec.js +0 -1121
  20. package/src/vendor/bootstrap-vue/src/components/dropdown/package.json +0 -368
  21. package/src/vendor/bootstrap-vue/src/components/form/README.md +0 -365
  22. package/src/vendor/bootstrap-vue/src/components/form/form-invalid-feedback.spec.js +0 -170
  23. package/src/vendor/bootstrap-vue/src/components/form/form-text.spec.js +0 -93
  24. package/src/vendor/bootstrap-vue/src/components/form/form-valid-feedback.spec.js +0 -157
  25. package/src/vendor/bootstrap-vue/src/components/form/form.spec.js +0 -97
  26. package/src/vendor/bootstrap-vue/src/components/form/package.json +0 -112
  27. package/src/vendor/bootstrap-vue/src/components/form-checkbox/README.md +0 -691
  28. package/src/vendor/bootstrap-vue/src/components/form-checkbox/form-checkbox-group.spec.js +0 -525
  29. package/src/vendor/bootstrap-vue/src/components/form-checkbox/form-checkbox.spec.js +0 -922
  30. package/src/vendor/bootstrap-vue/src/components/form-checkbox/package.json +0 -172
  31. package/src/vendor/bootstrap-vue/src/components/form-group/README.md +0 -339
  32. package/src/vendor/bootstrap-vue/src/components/form-group/form-group.spec.js +0 -477
  33. package/src/vendor/bootstrap-vue/src/components/form-group/package.json +0 -183
  34. package/src/vendor/bootstrap-vue/src/components/form-radio/README.md +0 -437
  35. package/src/vendor/bootstrap-vue/src/components/form-radio/form-radio-group.spec.js +0 -357
  36. package/src/vendor/bootstrap-vue/src/components/form-radio/form-radio.spec.js +0 -587
  37. package/src/vendor/bootstrap-vue/src/components/form-radio/package.json +0 -162
  38. package/src/vendor/bootstrap-vue/src/components/form-select/README.md +0 -504
  39. package/src/vendor/bootstrap-vue/src/components/form-select/form-select-option-group.spec.js +0 -138
  40. package/src/vendor/bootstrap-vue/src/components/form-select/form-select-option.spec.js +0 -75
  41. package/src/vendor/bootstrap-vue/src/components/form-select/form-select.spec.js +0 -723
  42. package/src/vendor/bootstrap-vue/src/components/form-select/package.json +0 -132
  43. package/src/vendor/bootstrap-vue/src/components/form-textarea/README.md +0 -453
  44. package/src/vendor/bootstrap-vue/src/components/form-textarea/form-textarea.spec.js +0 -1000
  45. package/src/vendor/bootstrap-vue/src/components/form-textarea/package.json +0 -122
  46. package/src/vendor/bootstrap-vue/src/components/layout/README.md +0 -791
  47. package/src/vendor/bootstrap-vue/src/components/layout/col.spec.js +0 -192
  48. package/src/vendor/bootstrap-vue/src/components/layout/form-row.spec.js +0 -45
  49. package/src/vendor/bootstrap-vue/src/components/layout/package.json +0 -99
  50. package/src/vendor/bootstrap-vue/src/components/link/README.md +0 -76
  51. package/src/vendor/bootstrap-vue/src/components/link/link.spec.js +0 -434
  52. package/src/vendor/bootstrap-vue/src/components/link/package.json +0 -57
  53. package/src/vendor/bootstrap-vue/src/components/modal/MODIFICATIONS.md +0 -30
  54. package/src/vendor/bootstrap-vue/src/components/modal/README.md +0 -1067
  55. package/src/vendor/bootstrap-vue/src/components/modal/helpers/bv-modal-event.class.spec.js +0 -82
  56. package/src/vendor/bootstrap-vue/src/components/modal/modal.spec.js +0 -1418
  57. package/src/vendor/bootstrap-vue/src/components/modal/package.json +0 -544
  58. package/src/vendor/bootstrap-vue/src/components/nav/README.md +0 -362
  59. package/src/vendor/bootstrap-vue/src/components/nav/nav-item.spec.js +0 -127
  60. package/src/vendor/bootstrap-vue/src/components/nav/nav.spec.js +0 -177
  61. package/src/vendor/bootstrap-vue/src/components/nav/package.json +0 -73
  62. package/src/vendor/bootstrap-vue/src/components/popover/README.md +0 -919
  63. package/src/vendor/bootstrap-vue/src/components/popover/package.json +0 -261
  64. package/src/vendor/bootstrap-vue/src/components/popover/popover.spec.js +0 -198
  65. package/src/vendor/bootstrap-vue/src/components/table/README.md +0 -3157
  66. package/src/vendor/bootstrap-vue/src/components/table/helpers/default-sort-compare.spec.js +0 -112
  67. package/src/vendor/bootstrap-vue/src/components/table/helpers/normalize-fields.spec.js +0 -93
  68. package/src/vendor/bootstrap-vue/src/components/table/package.json +0 -1763
  69. package/src/vendor/bootstrap-vue/src/components/table/table-busy.spec.js +0 -150
  70. package/src/vendor/bootstrap-vue/src/components/table/table-caption.spec.js +0 -176
  71. package/src/vendor/bootstrap-vue/src/components/table/table-colgroup.spec.js +0 -81
  72. package/src/vendor/bootstrap-vue/src/components/table/table-filtering.spec.js +0 -409
  73. package/src/vendor/bootstrap-vue/src/components/table/table-item-formatter.spec.js +0 -56
  74. package/src/vendor/bootstrap-vue/src/components/table/table-lite.spec.js +0 -682
  75. package/src/vendor/bootstrap-vue/src/components/table/table-pagination.spec.js +0 -133
  76. package/src/vendor/bootstrap-vue/src/components/table/table-primarykey.spec.js +0 -83
  77. package/src/vendor/bootstrap-vue/src/components/table/table-provider.spec.js +0 -411
  78. package/src/vendor/bootstrap-vue/src/components/table/table-row-details.spec.js +0 -459
  79. package/src/vendor/bootstrap-vue/src/components/table/table-selectable.spec.js +0 -1182
  80. package/src/vendor/bootstrap-vue/src/components/table/table-simple.spec.js +0 -206
  81. package/src/vendor/bootstrap-vue/src/components/table/table-sorting.spec.js +0 -858
  82. package/src/vendor/bootstrap-vue/src/components/table/table-sticky-column.spec.js +0 -377
  83. package/src/vendor/bootstrap-vue/src/components/table/table-tbody-bottom-row.spec.js +0 -94
  84. package/src/vendor/bootstrap-vue/src/components/table/table-tbody-row-events.spec.js +0 -529
  85. package/src/vendor/bootstrap-vue/src/components/table/table-tbody-top-row.spec.js +0 -88
  86. package/src/vendor/bootstrap-vue/src/components/table/table-tbody-transition.spec.js +0 -83
  87. package/src/vendor/bootstrap-vue/src/components/table/table-tfoot-custom.spec.js +0 -91
  88. package/src/vendor/bootstrap-vue/src/components/table/table-tfoot-events.spec.js +0 -137
  89. package/src/vendor/bootstrap-vue/src/components/table/table-thead-events.spec.js +0 -155
  90. package/src/vendor/bootstrap-vue/src/components/table/table-thead-top.spec.js +0 -96
  91. package/src/vendor/bootstrap-vue/src/components/table/table.spec.js +0 -692
  92. package/src/vendor/bootstrap-vue/src/components/tabs/README.md +0 -433
  93. package/src/vendor/bootstrap-vue/src/components/tabs/package.json +0 -205
  94. package/src/vendor/bootstrap-vue/src/components/tabs/tab.spec.js +0 -330
  95. package/src/vendor/bootstrap-vue/src/components/tabs/tabs.spec.js +0 -778
  96. package/src/vendor/bootstrap-vue/src/components/toast/README.md +0 -655
  97. package/src/vendor/bootstrap-vue/src/components/toast/helpers/bv-toast.spec.js +0 -117
  98. package/src/vendor/bootstrap-vue/src/components/toast/package.json +0 -184
  99. package/src/vendor/bootstrap-vue/src/components/toast/toast.spec.js +0 -294
  100. package/src/vendor/bootstrap-vue/src/components/toast/toaster.spec.js +0 -77
  101. package/src/vendor/bootstrap-vue/src/components/tooltip/README.md +0 -559
  102. package/src/vendor/bootstrap-vue/src/components/tooltip/package.json +0 -258
  103. package/src/vendor/bootstrap-vue/src/components/tooltip/tooltip.spec.js +0 -1240
  104. package/src/vendor/bootstrap-vue/src/components/transition/package.json +0 -5
  105. package/src/vendor/bootstrap-vue/src/components/transporter/package.json +0 -5
  106. package/src/vendor/bootstrap-vue/src/components/transporter/transporter.spec.js +0 -85
  107. package/src/vendor/bootstrap-vue/src/directives/modal/modal.spec.js +0 -191
  108. package/src/vendor/bootstrap-vue/src/directives/tooltip/README.md +0 -521
  109. package/src/vendor/bootstrap-vue/src/directives/tooltip/package.json +0 -131
  110. package/src/vendor/bootstrap-vue/src/directives/tooltip/tooltip.spec.js +0 -190
  111. package/src/vendor/bootstrap-vue/src/directives/visible/README.md +0 -244
  112. package/src/vendor/bootstrap-vue/src/directives/visible/package.json +0 -24
  113. package/src/vendor/bootstrap-vue/src/mixins/attrs.spec.js +0 -194
  114. package/src/vendor/bootstrap-vue/src/mixins/click-out.spec.js +0 -52
  115. package/src/vendor/bootstrap-vue/src/mixins/focus-in.spec.js +0 -53
  116. package/src/vendor/bootstrap-vue/src/mixins/listen-on-document.spec.js +0 -117
  117. package/src/vendor/bootstrap-vue/src/mixins/listen-on-root.spec.js +0 -77
  118. package/src/vendor/bootstrap-vue/src/mixins/listen-on-window.spec.js +0 -115
  119. package/src/vendor/bootstrap-vue/src/mixins/listeners.spec.js +0 -245
  120. package/src/vendor/bootstrap-vue/src/utils/bv-event.class.spec.js +0 -66
  121. package/src/vendor/bootstrap-vue/src/utils/clone-deep.spec.js +0 -70
  122. package/src/vendor/bootstrap-vue/src/utils/config.spec.js +0 -169
  123. package/src/vendor/bootstrap-vue/src/utils/css-escape.spec.js +0 -82
  124. package/src/vendor/bootstrap-vue/src/utils/dom.spec.js +0 -291
  125. package/src/vendor/bootstrap-vue/src/utils/events.spec.js +0 -41
  126. package/src/vendor/bootstrap-vue/src/utils/get.spec.js +0 -109
  127. package/src/vendor/bootstrap-vue/src/utils/inspect.spec.js +0 -251
  128. package/src/vendor/bootstrap-vue/src/utils/loose-equal.spec.js +0 -203
  129. package/src/vendor/bootstrap-vue/src/utils/normalize-slot.spec.js +0 -63
  130. package/src/vendor/bootstrap-vue/src/utils/number.spec.js +0 -72
  131. package/src/vendor/bootstrap-vue/src/utils/object.spec.js +0 -61
  132. package/src/vendor/bootstrap-vue/src/utils/props.spec.js +0 -112
  133. package/src/vendor/bootstrap-vue/src/utils/router.spec.js +0 -248
  134. package/src/vendor/bootstrap-vue/src/utils/string.spec.js +0 -65
  135. package/src/vendor/bootstrap-vue/src/utils/stringify-object-values.spec.js +0 -47
  136. package/src/vendor/bootstrap-vue/src/utils/warn.spec.js +0 -54
@@ -1,91 +0,0 @@
1
- import { mount } from '@vue/test-utils'
2
- import { BTable } from './table'
3
-
4
- const testItems = [{ a: 1, b: 2, c: 3 }]
5
- const testFields = [{ key: 'a', label: 'A' }, { key: 'b', label: 'B' }, { key: 'c', label: 'C' }]
6
-
7
- describe('table > custom tfoot slot', () => {
8
- it('should not render tfoot by default', async () => {
9
- const wrapper = mount(BTable, {
10
- propsData: {
11
- fields: testFields,
12
- items: testItems,
13
- footClone: false
14
- }
15
- })
16
- expect(wrapper).toBeDefined()
17
- expect(wrapper.element.tagName).toBe('TABLE')
18
- expect(wrapper.find('thead').exists()).toBe(true)
19
- expect(wrapper.find('tbody').exists()).toBe(true)
20
- expect(wrapper.find('tfoot').exists()).toBe(false)
21
-
22
- wrapper.destroy()
23
- })
24
-
25
- it('should render custom-foot slot inside b-tfoot', async () => {
26
- const wrapper = mount(BTable, {
27
- propsData: {
28
- fields: testFields,
29
- items: testItems,
30
- footClone: false
31
- },
32
- slots: {
33
- 'custom-foot': '<tr><td colspan="3">CUSTOM-FOOTER</td></tr>'
34
- }
35
- })
36
- expect(wrapper).toBeDefined()
37
- expect(wrapper.element.tagName).toBe('TABLE')
38
- expect(wrapper.find('thead').exists()).toBe(true)
39
- expect(wrapper.find('tbody').exists()).toBe(true)
40
- expect(wrapper.find('tfoot').exists()).toBe(true)
41
- expect(wrapper.find('tfoot').text()).toContain('CUSTOM-FOOTER')
42
- expect(wrapper.find('tfoot').classes().length).toBe(0)
43
-
44
- wrapper.destroy()
45
- })
46
-
47
- it('should not render custom-foot slot when foot-clone is true', async () => {
48
- const wrapper = mount(BTable, {
49
- propsData: {
50
- fields: testFields,
51
- items: testItems,
52
- footClone: true
53
- },
54
- slots: {
55
- 'custom-foot': '<tr><td colspan="3">CUSTOM-FOOTER</td></tr>'
56
- }
57
- })
58
- expect(wrapper).toBeDefined()
59
- expect(wrapper.element.tagName).toBe('TABLE')
60
- expect(wrapper.find('thead').exists()).toBe(true)
61
- expect(wrapper.find('tbody').exists()).toBe(true)
62
- expect(wrapper.find('tfoot').exists()).toBe(true)
63
- expect(wrapper.find('tfoot').text()).not.toContain('CUSTOM-FOOTER')
64
-
65
- wrapper.destroy()
66
- })
67
-
68
- it('should have foot-variant on custom-foot slot', async () => {
69
- const wrapper = mount(BTable, {
70
- propsData: {
71
- fields: testFields,
72
- items: testItems,
73
- footClone: false,
74
- footVariant: 'dark'
75
- },
76
- slots: {
77
- 'custom-foot': '<tr><td colspan="3">CUSTOM-FOOTER</td></tr>'
78
- }
79
- })
80
- expect(wrapper).toBeDefined()
81
- expect(wrapper.element.tagName).toBe('TABLE')
82
- expect(wrapper.find('thead').exists()).toBe(true)
83
- expect(wrapper.find('tbody').exists()).toBe(true)
84
- expect(wrapper.find('tfoot').exists()).toBe(true)
85
- expect(wrapper.find('tfoot').text()).toContain('CUSTOM-FOOTER')
86
- expect(wrapper.find('tfoot').classes()).toContain('thead-dark')
87
- expect(wrapper.find('tfoot').classes().length).toBe(1)
88
-
89
- wrapper.destroy()
90
- })
91
- })
@@ -1,137 +0,0 @@
1
- import { mount } from '@vue/test-utils'
2
- import { BTable } from './table'
3
-
4
- const testItems = [{ a: 1, b: 2, c: 3 }]
5
- const testFields = [{ key: 'a', label: 'A' }, { key: 'b', label: 'B' }, { key: 'c', label: 'C' }]
6
-
7
- describe('table > tfoot events', () => {
8
- it('should emit head-clicked event when a head cell is clicked', async () => {
9
- const wrapper = mount(BTable, {
10
- propsData: {
11
- fields: testFields,
12
- items: testItems,
13
- footClone: true
14
- },
15
- listeners: {
16
- // Head-clicked will not be emitted unless there is a
17
- // registered head-clicked listener
18
- 'head-clicked': () => {}
19
- }
20
- })
21
- expect(wrapper).toBeDefined()
22
- const $rows = wrapper.findAll('tfoot > tr')
23
- expect($rows.length).toBe(1)
24
- const $ths = wrapper.findAll('tfoot > tr > th')
25
- expect($ths.length).toBe(testFields.length)
26
- expect(wrapper.emitted('head-clicked')).toBeUndefined()
27
- await $ths.at(0).trigger('click')
28
- expect(wrapper.emitted('head-clicked')).toBeDefined()
29
- expect(wrapper.emitted('head-clicked').length).toBe(1)
30
- expect(wrapper.emitted('head-clicked')[0][0]).toEqual(testFields[0].key) // Field key
31
- expect(wrapper.emitted('head-clicked')[0][1]).toEqual(testFields[0]) // Field definition
32
- expect(wrapper.emitted('head-clicked')[0][2]).toBeInstanceOf(MouseEvent) // Event
33
- expect(wrapper.emitted('head-clicked')[0][3]).toBe(true) // Is footer
34
-
35
- await $ths.at(2).trigger('click')
36
- expect(wrapper.emitted('head-clicked').length).toBe(2)
37
- expect(wrapper.emitted('head-clicked')[1][0]).toEqual(testFields[2].key) // Field key
38
- expect(wrapper.emitted('head-clicked')[1][1]).toEqual(testFields[2]) // Field definition
39
- expect(wrapper.emitted('head-clicked')[1][2]).toBeInstanceOf(MouseEvent) // Event
40
- expect(wrapper.emitted('head-clicked')[1][3]).toBe(true) // Is footer
41
-
42
- wrapper.destroy()
43
- })
44
-
45
- it('should not emit head-clicked event when prop busy is set', async () => {
46
- const wrapper = mount(BTable, {
47
- propsData: {
48
- fields: testFields,
49
- items: testItems,
50
- footClone: true,
51
- busy: true
52
- },
53
- listeners: {
54
- // Head-clicked will not be emitted unless there is a
55
- // registered head-clicked listener
56
- 'head-clicked': () => {}
57
- }
58
- })
59
- expect(wrapper).toBeDefined()
60
- const $ths = wrapper.findAll('tfoot > tr > th')
61
- expect($ths.length).toBe(testFields.length)
62
- expect(wrapper.emitted('head-clicked')).toBeUndefined()
63
- await $ths.at(0).trigger('click')
64
- expect(wrapper.emitted('head-clicked')).toBeUndefined()
65
-
66
- wrapper.destroy()
67
- })
68
-
69
- it('should not emit head-clicked event when vm.localBusy is true', async () => {
70
- const wrapper = mount(BTable, {
71
- propsData: {
72
- fields: testFields,
73
- items: testItems,
74
- footClone: true
75
- },
76
- listeners: {
77
- // Head-clicked will not be emitted unless there is a
78
- // registered head-clicked listener
79
- 'head-clicked': () => {}
80
- }
81
- })
82
- await wrapper.setData({
83
- localBusy: true
84
- })
85
- expect(wrapper).toBeDefined()
86
- const $ths = wrapper.findAll('tfoot > tr > th')
87
- expect($ths.length).toBe(testFields.length)
88
- expect(wrapper.emitted('head-clicked')).toBeUndefined()
89
- await $ths.at(0).trigger('click')
90
- expect(wrapper.emitted('head-clicked')).toBeUndefined()
91
-
92
- wrapper.destroy()
93
- })
94
-
95
- it('should not emit head-clicked event when clicking on a button or other interactive element', async () => {
96
- const wrapper = mount(BTable, {
97
- propsData: {
98
- fields: testFields,
99
- items: testItems,
100
- footClone: true
101
- },
102
- listeners: {
103
- // Head-clicked will not be emitted unless there is a
104
- // registered head-clicked listener
105
- 'head-clicked': () => {}
106
- },
107
- slots: {
108
- // In Vue 2.6x, slots get translated into scopedSlots
109
- 'foot(a)': '<button id="a">button</button>',
110
- 'foot(b)': '<input id="b">',
111
- // Will use `head` slot if foot slot not defined
112
- 'head(c)': '<a href="#" id="c">link</a>'
113
- }
114
- })
115
- expect(wrapper).toBeDefined()
116
- const $ths = wrapper.findAll('tfoot > tr > th')
117
- expect($ths.length).toBe(testFields.length)
118
- expect(wrapper.emitted('head-clicked')).toBeUndefined()
119
-
120
- const $btn = wrapper.find('button[id="a"]')
121
- expect($btn.exists()).toBe(true)
122
- await $btn.trigger('click')
123
- expect(wrapper.emitted('head-clicked')).toBeUndefined()
124
-
125
- const $input = wrapper.find('input[id="b"]')
126
- expect($input.exists()).toBe(true)
127
- await $input.trigger('click')
128
- expect(wrapper.emitted('head-clicked')).toBeUndefined()
129
-
130
- const $link = wrapper.find('a[id="c"]')
131
- expect($link.exists()).toBe(true)
132
- await $link.trigger('click')
133
- expect(wrapper.emitted('head-clicked')).toBeUndefined()
134
-
135
- wrapper.destroy()
136
- })
137
- })
@@ -1,155 +0,0 @@
1
- import { mount } from '@vue/test-utils'
2
- import { isVue3 } from '../../vue'
3
- import { BTable } from './table'
4
-
5
- const testItems = [{ a: 1, b: 2, c: 3 }]
6
- const testFields = [{ key: 'a', label: 'A' }, { key: 'b', label: 'B' }, { key: 'c', label: 'C' }]
7
-
8
- describe('table > thead events', () => {
9
- it('should not emit head-clicked event when a head cell is clicked and no head-clicked listener', async () => {
10
- if (isVue3) {
11
- // We can't track if we have an event listener in vue3 so we skip this test for vue 3
12
- return
13
- }
14
- const wrapper = mount(BTable, {
15
- propsData: {
16
- fields: testFields,
17
- items: testItems
18
- },
19
- listeners: {}
20
- })
21
- expect(wrapper).toBeDefined()
22
- const $rows = wrapper.findAll('thead > tr')
23
- expect($rows.length).toBe(1)
24
- const $ths = wrapper.findAll('thead > tr > th')
25
- expect($ths.length).toBe(testFields.length)
26
- expect(wrapper.emitted('head-clicked')).toBeUndefined()
27
- await $ths.at(0).trigger('click')
28
- expect(wrapper.emitted('head-clicked')).toBeUndefined()
29
- await $ths.at(1).trigger('click')
30
- expect(wrapper.emitted('head-clicked')).toBeUndefined()
31
- await $ths.at(2).trigger('click')
32
- expect(wrapper.emitted('head-clicked')).toBeUndefined()
33
- })
34
-
35
- it('should emit head-clicked event when a head cell is clicked', async () => {
36
- const wrapper = mount(BTable, {
37
- propsData: {
38
- fields: testFields,
39
- items: testItems
40
- },
41
- listeners: {
42
- // Head-clicked will only be emitted if there is a registered listener
43
- 'head-clicked': () => {}
44
- }
45
- })
46
- expect(wrapper).toBeDefined()
47
- const $rows = wrapper.findAll('thead > tr')
48
- expect($rows.length).toBe(1)
49
- const $ths = wrapper.findAll('thead > tr > th')
50
- expect($ths.length).toBe(testFields.length)
51
- expect(wrapper.emitted('head-clicked')).toBeUndefined()
52
- await $ths.at(0).trigger('click')
53
- expect(wrapper.emitted('head-clicked')).toBeDefined()
54
- expect(wrapper.emitted('head-clicked').length).toBe(1)
55
- expect(wrapper.emitted('head-clicked')[0][0]).toEqual(testFields[0].key) // Field key
56
- expect(wrapper.emitted('head-clicked')[0][1]).toEqual(testFields[0]) // Field definition
57
- expect(wrapper.emitted('head-clicked')[0][2]).toBeInstanceOf(MouseEvent) // Event
58
- expect(wrapper.emitted('head-clicked')[0][3]).toBe(false) // Is footer
59
-
60
- await $ths.at(2).trigger('click')
61
- expect(wrapper.emitted('head-clicked').length).toBe(2)
62
- expect(wrapper.emitted('head-clicked')[1][0]).toEqual(testFields[2].key) // Field key
63
- expect(wrapper.emitted('head-clicked')[1][1]).toEqual(testFields[2]) // Field definition
64
- expect(wrapper.emitted('head-clicked')[1][2]).toBeInstanceOf(MouseEvent) // Event
65
- expect(wrapper.emitted('head-clicked')[1][3]).toBe(false) // Is footer
66
-
67
- wrapper.destroy()
68
- })
69
-
70
- it('should not emit head-clicked event when prop busy is set', async () => {
71
- const wrapper = mount(BTable, {
72
- propsData: {
73
- fields: testFields,
74
- items: testItems,
75
- busy: true
76
- },
77
- listeners: {
78
- // Head-clicked will only be emitted if there is a registered listener
79
- 'head-clicked': () => {}
80
- }
81
- })
82
- expect(wrapper).toBeDefined()
83
- const $ths = wrapper.findAll('thead > tr > th')
84
- expect($ths.length).toBe(testFields.length)
85
- expect(wrapper.emitted('head-clicked')).toBeUndefined()
86
- await $ths.at(0).trigger('click')
87
- expect(wrapper.emitted('head-clicked')).toBeUndefined()
88
-
89
- wrapper.destroy()
90
- })
91
-
92
- it('should not emit head-clicked event when vm.localBusy is true', async () => {
93
- const wrapper = mount(BTable, {
94
- propsData: {
95
- fields: testFields,
96
- items: testItems
97
- },
98
- listeners: {
99
- // Head-clicked will only be emitted if there is a registered listener
100
- 'head-clicked': () => {}
101
- }
102
- })
103
- await wrapper.setData({
104
- localBusy: true
105
- })
106
- expect(wrapper).toBeDefined()
107
- const $ths = wrapper.findAll('thead > tr > th')
108
- expect($ths.length).toBe(testFields.length)
109
- expect(wrapper.emitted('head-clicked')).toBeUndefined()
110
- await $ths.at(0).trigger('click')
111
- expect(wrapper.emitted('head-clicked')).toBeUndefined()
112
-
113
- wrapper.destroy()
114
- })
115
-
116
- it('should not emit head-clicked event when clicking on a button or other interactive element', async () => {
117
- const wrapper = mount(BTable, {
118
- propsData: {
119
- fields: testFields,
120
- items: testItems
121
- },
122
- listeners: {
123
- // Head-clicked will only be emitted if there is a registered listener
124
- 'head-clicked': () => {}
125
- },
126
- slots: {
127
- // In Vue 2.6x, slots get translated into scopedSlots
128
- 'head(a)': '<button id="a">button</button>',
129
- 'head(b)': '<input id="b">',
130
- 'head(c)': '<a href="#" id="c">link</a>'
131
- }
132
- })
133
- expect(wrapper).toBeDefined()
134
- const $ths = wrapper.findAll('thead > tr > th')
135
- expect($ths.length).toBe(testFields.length)
136
- expect(wrapper.emitted('head-clicked')).toBeUndefined()
137
-
138
- const $btn = wrapper.find('button[id="a"]')
139
- expect($btn.exists()).toBe(true)
140
- await $btn.trigger('click')
141
- expect(wrapper.emitted('head-clicked')).toBeUndefined()
142
-
143
- const $input = wrapper.find('input[id="b"]')
144
- expect($input.exists()).toBe(true)
145
- await $input.trigger('click')
146
- expect(wrapper.emitted('head-clicked')).toBeUndefined()
147
-
148
- const $link = wrapper.find('a[id="c"]')
149
- expect($link.exists()).toBe(true)
150
- await $link.trigger('click')
151
- expect(wrapper.emitted('head-clicked')).toBeUndefined()
152
-
153
- wrapper.destroy()
154
- })
155
- })
@@ -1,96 +0,0 @@
1
- import { mount } from '@vue/test-utils'
2
- import { normalizeFields } from './helpers/normalize-fields'
3
- import { BTable } from './table'
4
-
5
- const testItems = [{ a: 1, b: 2, c: 3 }, { a: 5, b: 5, c: 6 }, { a: 7, b: 8, c: 9 }]
6
- const testFields = ['a', 'b', 'c']
7
-
8
- describe('table > thead thead-top slot', () => {
9
- it('should not have thead-top row by default', async () => {
10
- const wrapper = mount(BTable, {
11
- propsData: {
12
- fields: testFields,
13
- items: testItems
14
- }
15
- })
16
- expect(wrapper).toBeDefined()
17
- expect(wrapper.element.tagName).toBe('TABLE')
18
- expect(wrapper.find('thead').exists()).toBe(true)
19
- expect(wrapper.findAll('thead > tr').exists()).toBe(true)
20
- expect(wrapper.findAll('thead > tr').length).toBe(1)
21
-
22
- wrapper.destroy()
23
- })
24
-
25
- it('should render named slot `thead-top`', async () => {
26
- const wrapper = mount(BTable, {
27
- propsData: {
28
- fields: testFields,
29
- items: testItems
30
- },
31
- slots: {
32
- 'thead-top': `<tr class="test"><th span="${testFields.length}">foobar</th></tr>`
33
- }
34
- })
35
- expect(wrapper).toBeDefined()
36
- expect(wrapper.element.tagName).toBe('TABLE')
37
- expect(wrapper.find('thead').exists()).toBe(true)
38
- expect(wrapper.findAll('thead > tr').exists()).toBe(true)
39
- expect(wrapper.findAll('thead > tr').length).toBe(2)
40
- expect(
41
- wrapper
42
- .findAll('thead > tr')
43
- .at(0)
44
- .text()
45
- ).toBe('foobar')
46
- expect(
47
- wrapper
48
- .findAll('thead > tr')
49
- .at(0)
50
- .classes()
51
- ).toContain('test')
52
-
53
- wrapper.destroy()
54
- })
55
-
56
- it('should render scoped slot `thead-top`', async () => {
57
- let fields = []
58
- let columns
59
- const wrapper = mount(BTable, {
60
- propsData: {
61
- fields: testFields,
62
- items: testItems
63
- },
64
- scopedSlots: {
65
- 'thead-top': function(scope) {
66
- fields = scope.fields
67
- columns = scope.columns
68
- return this.$createElement('tr', { class: 'test' }, [
69
- this.$createElement('th', { attrs: { span: columns } }, 'foobar')
70
- ])
71
- }
72
- }
73
- })
74
- expect(wrapper).toBeDefined()
75
- expect(wrapper.element.tagName).toBe('TABLE')
76
- expect(wrapper.find('thead').exists()).toBe(true)
77
- expect(columns).toBe(3)
78
- expect(fields).toEqual(normalizeFields(testFields))
79
- expect(wrapper.findAll('thead > tr').exists()).toBe(true)
80
- expect(wrapper.findAll('thead > tr').length).toBe(2)
81
- expect(
82
- wrapper
83
- .findAll('thead > tr')
84
- .at(0)
85
- .text()
86
- ).toBe('foobar')
87
- expect(
88
- wrapper
89
- .findAll('thead > tr')
90
- .at(0)
91
- .classes()
92
- ).toContain('test')
93
-
94
- wrapper.destroy()
95
- })
96
- })