@rancher/shell 3.0.0-rc.1 → 3.0.0-rc.2

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 (89) hide show
  1. package/assets/styles/base/_variables.scss +1 -0
  2. package/assets/styles/global/_layout.scss +3 -3
  3. package/assets/styles/global/_select.scss +1 -1
  4. package/assets/styles/global/_tooltip.scss +37 -71
  5. package/components/ActionDropdown.vue +9 -13
  6. package/components/ActionMenu.vue +1 -1
  7. package/components/ButtonDropdown.vue +9 -8
  8. package/components/CruResource.vue +4 -2
  9. package/components/InputOrDisplay.vue +21 -33
  10. package/components/LocaleSelector.vue +1 -1
  11. package/components/Questions/__tests__/Boolean.test.ts +1 -2
  12. package/components/Questions/__tests__/Float.test.ts +1 -2
  13. package/components/Questions/__tests__/Int.test.ts +1 -2
  14. package/components/Questions/__tests__/String.test.ts +1 -2
  15. package/components/Questions/__tests__/Yaml.test.ts +1 -1
  16. package/components/Questions/__tests__/utils/questions-defaults.ts +2 -2
  17. package/components/SideNav.vue +3 -3
  18. package/components/__tests__/CodeMirror.test.ts +91 -94
  19. package/components/__tests__/ConsumptionGauge.test.ts +2 -2
  20. package/components/__tests__/NamespaceFilter.test.ts +10 -7
  21. package/components/auth/AllowedPrincipals.vue +2 -2
  22. package/components/auth/RoleDetailEdit.vue +13 -17
  23. package/components/auth/SelectPrincipal.vue +1 -1
  24. package/components/fleet/FleetStatus.vue +13 -14
  25. package/components/form/ArrayList.vue +1 -1
  26. package/components/form/ArrayListGrouped.vue +18 -5
  27. package/components/form/LabeledSelect.vue +16 -11
  28. package/components/form/Select.vue +17 -1
  29. package/components/form/__tests__/Command.test.ts +6 -5
  30. package/components/form/__tests__/Taints.test.ts +9 -9
  31. package/components/formatter/AppSummaryGraph.vue +1 -1
  32. package/components/formatter/FleetSummaryGraph.vue +1 -1
  33. package/components/formatter/MachineSummaryGraph.vue +1 -1
  34. package/components/formatter/Scale.vue +1 -1
  35. package/components/formatter/Weight.vue +1 -1
  36. package/components/nav/Header.vue +31 -14
  37. package/components/nav/NamespaceFilter.vue +1 -1
  38. package/components/nav/TopLevelMenu.vue +7 -6
  39. package/components/nav/WindowManager/ContainerLogs.vue +1 -1
  40. package/components/nav/WindowManager/ContainerShell.vue +7 -2
  41. package/components/nav/WindowManager/__tests__/ContainerLogs.test.ts +195 -192
  42. package/components/nav/WindowManager/__tests__/ContainerShell.test.ts +23 -19
  43. package/core/plugin-routes.ts +42 -29
  44. package/core/plugins-loader.js +2 -0
  45. package/detail/__tests__/autoscaling.horizontalpodautoscaler.test.ts +16 -8
  46. package/detail/helm.cattle.io.projecthelmchart.vue +26 -27
  47. package/edit/__tests__/namespace.test.ts +7 -9
  48. package/edit/__tests__/service.test.ts +14 -2
  49. package/edit/auth/__tests__/azuread.test.ts +10 -11
  50. package/edit/auth/azuread.vue +1 -1
  51. package/edit/fleet.cattle.io.clustergroup.vue +3 -3
  52. package/edit/management.cattle.io.fleetworkspace.vue +3 -3
  53. package/edit/management.cattle.io.node.vue +3 -2
  54. package/edit/management.cattle.io.podsecurityadmissionconfigurationtemplate.vue +3 -2
  55. package/edit/namespace.vue +3 -1
  56. package/edit/networking.k8s.io.ingress/index.vue +3 -2
  57. package/edit/networking.k8s.io.networkpolicy/index.vue +2 -2
  58. package/edit/node.vue +3 -3
  59. package/edit/persistentvolume/__tests__/persistentvolume.test.ts +9 -4
  60. package/edit/persistentvolume/index.vue +3 -3
  61. package/edit/persistentvolumeclaim.vue +3 -3
  62. package/edit/policy.poddisruptionbudget.vue +3 -3
  63. package/edit/provisioning.cattle.io.cluster/__tests__/Basics.test.ts +5 -6
  64. package/edit/provisioning.cattle.io.cluster/__tests__/rke2.test.ts +13 -6
  65. package/edit/provisioning.cattle.io.cluster/rke2.vue +7 -1
  66. package/edit/provisioning.cattle.io.cluster/tabs/registries/__tests__/RegistryConfigs.test.ts +6 -7
  67. package/edit/service.vue +2 -2
  68. package/edit/serviceaccount.vue +3 -3
  69. package/edit/storage.k8s.io.storageclass/index.vue +3 -3
  70. package/edit/workload/Job.vue +2 -2
  71. package/edit/workload/__tests__/Job.test.ts +5 -5
  72. package/edit/workload/index.vue +2 -2
  73. package/edit/workload/storage/Mount.vue +7 -4
  74. package/edit/workload/storage/__tests__/Mount.test.ts +6 -2
  75. package/edit/workload/storage/index.vue +10 -23
  76. package/initialize/entry-helpers.js +0 -5
  77. package/mixins/page-actions.js +1 -1
  78. package/package.json +1 -1
  79. package/pages/c/_cluster/istio/index.vue +2 -2
  80. package/pages/c/_cluster/longhorn/__tests__/longhorn.index.test.ts +3 -2
  81. package/pages/c/_cluster/monitoring/index.vue +1 -1
  82. package/pages/c/_cluster/uiplugins/__tests__/AddExtensionRepos.test.ts +7 -29
  83. package/rancher-components/LabeledTooltip/LabeledTooltip.vue +1 -0
  84. package/vue.config.js +409 -391
  85. package/plugins/clean-html-directive.js +0 -10
  86. package/plugins/clean-tooltip-directive.js +0 -9
  87. package/plugins/int-number.js +0 -9
  88. package/plugins/positive-int-number.js +0 -9
  89. package/plugins/trim-whitespace.js +0 -10
@@ -7,6 +7,7 @@ $max-width: 1440px !default;
7
7
  $min-width: 75% !default;
8
8
  $input-height: 61px;
9
9
  $unlabeled-input-height: 40px;
10
+ $unlabaled-select-padding: 3px 0;
10
11
 
11
12
  $input-padding-lg: 18px;
12
13
  $input-padding-sm: 10px;
@@ -119,15 +119,15 @@ HEADER {
119
119
  }
120
120
 
121
121
  .localeSelector {
122
- :deep(.popover-inner) {
122
+ :deep(.v-popper__inner) {
123
123
  padding: 50px 0;
124
124
  }
125
125
 
126
- :deep(.popover-arrow) {
126
+ :deep(.v-popper__arrow-container) {
127
127
  display: none;
128
128
  }
129
129
 
130
- :deep(.popover:focus) {
130
+ :deep(.v-popper:focus) {
131
131
  outline: 0;
132
132
  }
133
133
 
@@ -142,7 +142,7 @@
142
142
  background-color: var(--input-bg);
143
143
  border-radius: var(--border-radius);
144
144
  color: var(--input-text);
145
- padding: 3px 0;
145
+ padding: $unlabaled-select-padding;
146
146
 
147
147
  .vs--single .vs__selected-options {
148
148
  flex-wrap: nowrap;
@@ -1,4 +1,4 @@
1
- .tooltip {
1
+ .v-popper__popper.v-popper--theme-tooltip {
2
2
  $triangle-size: 8px;
3
3
  $triangle-inner-size: $triangle-size - 1px;
4
4
  $center: calc(50% - #{$triangle-size});
@@ -7,130 +7,105 @@
7
7
  z-index: z-index('tooltip');
8
8
  max-width: 50vw;
9
9
 
10
- .tooltip-inner {
10
+ .v-popper__inner {
11
11
  background: var(--tooltip-bg);
12
12
  color: var(--tooltip-text);
13
13
  border-radius: var(--border-radius);
14
14
  padding: 8px;
15
15
  }
16
16
 
17
- .tooltip-arrow {
17
+ .v-popper__arrow-container {
18
18
  width: 0;
19
19
  height: 0;
20
20
  border: 0 solid transparent;
21
21
  position: absolute;
22
22
  z-index: 1;
23
23
 
24
- &:after {
25
- position: absolute;
24
+ .v-popper__arrow-inner {
26
25
  border: $triangle-inner-size solid transparent;
27
- content: '';
28
26
  }
29
27
  }
30
28
 
31
- &[x-placement^="top"] {
32
- margin-bottom: $triangle-size;
29
+ &[data-popper-placement^="top"] {
30
+ .v-popper__arrow-container {
33
31
 
34
- .tooltip-arrow {
35
- border-width: 5px 5px 0 5px;
36
- bottom: -4px;
37
- }
38
-
39
- margin-bottom: $triangle-size;
40
-
41
- .tooltip-arrow {
42
- bottom: -$triangle-inner-size;
43
-
44
- &:after {
32
+ .v-popper__arrow-outer {
45
33
  border-bottom-width: 0;
46
34
  border-top-color: var(--tooltip-bg);
47
- bottom: 1px;
48
35
  left: -$triangle-inner-size;
49
36
  }
50
37
  }
51
38
  }
52
39
 
53
40
 
54
- &[x-placement^="bottom"] {
55
- margin-top: $triangle-size;
41
+ &[data-popper-placement^="bottom"] {
42
+ .v-popper__arrow-container {
56
43
 
57
- .tooltip-arrow {
58
- top: -$triangle-inner-size;
59
-
60
- &:after {
44
+ .v-popper__arrow-outer {
61
45
  border-top-width: 0;
62
46
  border-bottom-color: var(--tooltip-bg);
63
- top: 1px;
64
47
  left: -$triangle-inner-size;
65
48
  background: transparent;
66
49
  }
67
50
  }
68
51
  }
69
52
 
70
- &[x-placement^="right"] {
71
- margin-left: $triangle-size;
72
-
73
- .tooltip-arrow {
74
- left: -$triangle-inner-size;
53
+ &[data-popper-placement^="right"] {
54
+ .v-popper__arrow-container {
75
55
 
76
- &:after {
77
- border-left-width: 0;
56
+ .v-popper__arrow-outer {
78
57
  border-right-color: var(--tooltip-bg);
79
- left: 1px;
80
58
  top: -$triangle-inner-size;
59
+ border-left-width: 0;
81
60
  }
82
61
  }
83
62
  }
84
63
 
85
- &[x-placement^="left"] {
86
- margin-right: $triangle-size;
64
+ &[data-popper-placement^="left"] {
65
+ .v-popper__arrow-container {
87
66
 
88
- .tooltip-arrow {
89
- right: -$triangle-inner-size;
90
-
91
- &:after {
67
+ .v-popper__arrow-outer {
92
68
  border-right-width: 0;
93
69
  border-left-color: var(--tooltip-bg);
94
- right: 1px;
95
70
  top: -$triangle-inner-size;
96
71
  }
97
72
  }
98
73
  }
99
74
 
100
75
  &.tooltip-warning {
101
- .tooltip-inner {
76
+ .v-popper__inner {
102
77
  background: var(--tooltip-bg-warning);
103
78
  color: var(--tooltip-text-warning);
104
79
  }
105
80
 
106
- &[x-placement^="top"] {
107
- .tooltip-arrow {
108
- &:after {
81
+ &[data-popper-placement^="top"] {
82
+ .v-popper__arrow-container {
83
+ .v-popper__arrow-outer {
109
84
  border-top-color: var(--tooltip-bg-warning);
110
85
  }
111
86
  }
112
87
  }
113
88
 
114
89
 
115
- &[x-placement^="bottom"] {
116
- .tooltip-arrow {
117
- &:after {
90
+ &[data-popper-placement^="bottom"] {
91
+ .v-popper__arrow-container {
92
+ .v-popper__arrow-outer {
118
93
  border-bottom-color: var(--body-bg);
119
94
  }
120
95
  }
121
96
  }
122
97
 
123
- &[x-placement^="right"] {
124
- .tooltip-arrow {
125
- &:after {
98
+ &[data-popper-placement^="right"] {
99
+ .v-popper__arrow-container {
100
+ .v-popper__arrow-outer {
126
101
  border-right-color: var(--tooltip-bg-warning);
127
102
  }
128
103
  }
129
104
  }
130
105
 
131
- &[x-placement^="left"] {
132
- .tooltip-arrow {
133
- &:after {
106
+ &[data-popper-placement^="left"] {
107
+ .v-popper__arrow-container {
108
+ .v-popper__arrow-outer {
134
109
  border-left-color: var(--tooltip-bg-warning);
135
110
  }
136
111
  }
@@ -138,44 +113,35 @@
138
113
  }
139
114
  }
140
115
 
141
- .popover {
116
+ .v-popper__popper {
142
117
  $color: var(--popover-bg);
143
118
  border: 1px solid var(--border);
144
119
  border-radius: var(--border-radius);
145
120
 
146
- .popover-inner {
121
+ .v-popper__inner {
147
122
  background: $color;
148
123
  color: var(--popover-text);
149
124
  padding: 10px;
150
125
  border-radius: var(--border-radius);
151
126
  box-shadow: 0 5px 20px var(--shadow);
127
+ border: none;
152
128
 
153
129
  a {
154
130
  color: var(--popover-text);
155
131
  }
156
132
  }
157
133
 
158
- .popover-arrow {
134
+ .v-popper__arrow-container {
159
135
  border-color: transparent;
160
136
  }
161
-
162
- &[x-placement^="bottom"] {
163
- .popover-arrow {
164
- &:after {
165
- // border-bottom-color: var(--popover-bg);
166
- border-bottom-width: 0;
167
- }
168
- }
169
- }
170
-
171
137
  }
172
138
 
173
- .v-popover {
139
+ .v-popper {
174
140
  display: inline;
175
141
  }
176
142
 
177
- .tooltip,
178
- .popover {
143
+ .v-popper__popper.v-popper--theme-tooltip,
144
+ .v-popper {
179
145
  &[aria-hidden='true'] {
180
146
  // This removes it from the layout of ButtondropDown (so it doesn't render huge for SSR) but
181
147
  // still allows it to maintain it's dimensions for v-tooltip to calculate the appropriate position.
@@ -82,7 +82,7 @@ export default {
82
82
  Button <i class="icon icon-chevron-down" />
83
83
  </button>
84
84
  </slot>
85
- <template #popover>
85
+ <template #popper>
86
86
  <slot name="popover-content" />
87
87
  </template>
88
88
  </v-dropdown>
@@ -123,7 +123,7 @@ export default {
123
123
  $sm-trigger-padding: 10px 10px 10px 10px;
124
124
  $lg-trigger-padding: 18px 10px 10px 10px;
125
125
 
126
- .v-popover {
126
+ .v-popper {
127
127
  .text-right {
128
128
  margin-top: 5px;
129
129
  }
@@ -179,7 +179,7 @@ export default {
179
179
  &>.btn {
180
180
  padding: 15px 35px 15px 15px;
181
181
  }
182
- .v-popover{
182
+ .v-popper{
183
183
  .trigger{
184
184
  position: absolute;
185
185
  top: 0px;
@@ -194,23 +194,19 @@ export default {
194
194
  }
195
195
  }
196
196
  }
197
- .popover {
197
+ .v-popper__popper {
198
198
  border: none;
199
199
  }
200
- .tooltip {
200
+ .v-popper__popper {
201
201
  margin-top: 0px;
202
202
 
203
- &[x-placement^="bottom"] {
204
- .tooltip-arrow {
205
- border-bottom-color: var(--dropdown-border);
206
-
207
- &:after {
208
- border-bottom-color: var(--dropdown-bg);
209
- }
203
+ &[data-popper-placement^="bottom"] {
204
+ .v-popper__arrow-container {
205
+ display: none;
210
206
  }
211
207
  }
212
208
 
213
- .tooltip-inner {
209
+ .v-popper__inner {
214
210
  color: var(--dropdown-text);
215
211
  background-color: var(--dropdown-bg);
216
212
  border: 1px solid var(--dropdown-border);
@@ -258,7 +258,7 @@ export default {
258
258
  <li
259
259
  v-for="(opt, i) in menuOptions"
260
260
  :key="i"
261
- :disabled="opt.disabled"
261
+ :disabled="opt.disabled ? true : null"
262
262
  :class="{divider: opt.divider}"
263
263
  :data-testid="componentTestid + '-' + i + '-item'"
264
264
  @click="execute(opt, $event)"
@@ -181,7 +181,7 @@ export default {
181
181
  :clearable="false"
182
182
  :close-on-select="closeOnSelect"
183
183
  :filterable="false"
184
- :value="buttonLabel"
184
+ :modelValue="buttonLabel"
185
185
  :options="dropdownOptions"
186
186
  :map-keydown="mappedKeys"
187
187
  :get-option-key="
@@ -191,7 +191,7 @@ export default {
191
191
  :selectable="selectable"
192
192
  @search:blur="onBlur"
193
193
  @search:focus="onFocus"
194
- @update:value="$emit('click-action', $event)"
194
+ @update:modelValue="$emit('click-action', $event)"
195
195
  >
196
196
  <template #no-options>
197
197
  <slot name="no-options" />
@@ -211,14 +211,15 @@ export default {
211
211
  <!-- Pass down templates provided by the caller -->
212
212
  <template
213
213
  v-for="(_, slot) of $slots"
214
+ #[slot]="scope"
214
215
  :key="slot"
215
- v-slot:[slot]="scope"
216
216
  >
217
- <slot
218
- v-if="slot !== 'selected-option'"
219
- :name="slot"
220
- v-bind="scope"
221
- />
217
+ <template v-if="slot !== 'selected-option' && typeof $slots[slot] === 'function'">
218
+ <slot
219
+ :name="slot"
220
+ v-bind="scope"
221
+ />
222
+ </template>
222
223
  </template>
223
224
  </v-select>
224
225
  </template>
@@ -598,12 +598,13 @@ export default {
598
598
  <!-- Pass down templates provided by the caller -->
599
599
  <template
600
600
  v-for="(_, slot) of $slots"
601
+ #[slot]="scope"
601
602
  :key="slot"
602
603
  >
603
604
  <template v-if="shouldProvideSlot(slot)">
604
605
  <slot
605
606
  :name="slot"
606
- v-bind="{ ...$slots[slot]() }"
607
+ v-bind="scope"
607
608
  />
608
609
  </template>
609
610
  </template>
@@ -681,12 +682,13 @@ export default {
681
682
  <!-- Pass down templates provided by the caller -->
682
683
  <template
683
684
  v-for="(_, slot) of $slots"
685
+ #[slot]="scope"
684
686
  :key="slot"
685
687
  >
686
688
  <template v-if="shouldProvideSlot(slot)">
687
689
  <slot
688
690
  :name="slot"
689
- v-bind="{ ...$slots[slot]() }"
691
+ v-bind="scope"
690
692
  />
691
693
  </template>
692
694
  </template>
@@ -1,28 +1,9 @@
1
1
  <script>
2
- import { createApp } from 'vue';
2
+ import { h, computed } from 'vue';
3
3
  import { _VIEW } from '@shell/config/query-params';
4
- const vueApp = createApp({});
5
4
 
6
- const component = vueApp.component('InputOrDisplay', {
7
- render(h) {
8
- if (this.isView) {
9
- return h('div',
10
- { attrs: { class: 'label' } },
11
- [
12
- h('div',
13
- { attrs: { class: 'text-label' } },
14
- this.$slots.name ? this.$slots.name : this.name
15
- ),
16
- h('div',
17
- { attrs: { class: 'value' } },
18
- this.$slots.value ? this.$slots.value : this.displayValue
19
- )
20
- ]
21
- );
22
- } else {
23
- return this.$slots.default;
24
- }
25
- },
5
+ export default {
6
+ name: 'InputOrDisplay',
26
7
  props: {
27
8
  name: {
28
9
  type: String,
@@ -37,22 +18,29 @@ const component = vueApp.component('InputOrDisplay', {
37
18
  default: 'edit'
38
19
  }
39
20
  },
40
- computed: {
41
- isView() {
42
- return this.mode === _VIEW;
43
- },
21
+ setup(props, { slots }) {
22
+ const isView = computed(() => props.mode === _VIEW);
44
23
 
45
- displayValue() {
46
- if (Array.isArray(this.value) && this.value.length === 0) {
24
+ const displayValue = computed(() => {
25
+ if (Array.isArray(props.value) && props.value.length === 0) {
47
26
  return '';
48
27
  } else {
49
- return this.value;
28
+ return props.value;
50
29
  }
51
- }
52
- }
53
- });
30
+ });
54
31
 
55
- export default component;
32
+ return () => {
33
+ if (isView.value) {
34
+ return h('div', { class: 'label' }, [
35
+ h('div', { class: 'text-label' }, slots.name ? slots.name : props.name),
36
+ h('div', { class: 'value' }, slots.value ? slots.value : displayValue.value)
37
+ ]);
38
+ } else {
39
+ return slots.default;
40
+ }
41
+ };
42
+ }
43
+ };
56
44
  </script>
57
45
 
58
46
  <style lang="scss" scoped>
@@ -63,7 +63,7 @@ export default {
63
63
  {{ selectedLocaleLabel }}
64
64
  <i class="icon icon-fw icon-sort-down" />
65
65
  </a>
66
- <template #popover>
66
+ <template #popper>
67
67
  <ul
68
68
  class="list-unstyled dropdown"
69
69
  style="margin: -1px;"
@@ -3,7 +3,7 @@ import { mount } from '@vue/test-utils';
3
3
  import { _EDIT } from '@shell/config/query-params';
4
4
  import defaults from './utils/questions-defaults';
5
5
 
6
- describe.skip('(Vue3 Skip) the Boolean Component', () => {
6
+ describe('the Boolean Component', () => {
7
7
  it('input field is present', () => {
8
8
  const wrapper = mount(Questions, {
9
9
  props: {
@@ -25,7 +25,6 @@ describe.skip('(Vue3 Skip) the Boolean Component', () => {
25
25
 
26
26
  const inputFields = wrapper.findAll('[data-testid="boolean-input-var_name"] input[type=checkbox]');
27
27
 
28
- // TODO: UNIT TEST - Default stubs give us a tab stub, rendering no input fields
29
28
  expect(inputFields).toHaveLength(1);
30
29
 
31
30
  const descriptionFields = wrapper.findAll('[data-testid="boolean-description-var_name"]');
@@ -3,7 +3,7 @@ import { mount } from '@vue/test-utils';
3
3
  import { _EDIT } from '@shell/config/query-params';
4
4
  import defaults from './utils/questions-defaults';
5
5
 
6
- describe.skip('(Vue3 Skip) the float Component', () => {
6
+ describe('the float Component', () => {
7
7
  it('input field is present', () => {
8
8
  const wrapper = mount(Questions, {
9
9
  props: {
@@ -25,7 +25,6 @@ describe.skip('(Vue3 Skip) the float Component', () => {
25
25
 
26
26
  const inputFields = wrapper.findAll('[data-testid="float-input-var_name"]');
27
27
 
28
- // TODO: UNIT TEST - Default stubs give us a tab stub, rendering no input fields
29
28
  expect(inputFields).toHaveLength(1);
30
29
 
31
30
  const descriptionFields = wrapper.findAll('[data-testid="float-description-var_name"]');
@@ -3,7 +3,7 @@ import { mount } from '@vue/test-utils';
3
3
  import { _EDIT } from '@shell/config/query-params';
4
4
  import defaults from './utils/questions-defaults';
5
5
 
6
- describe.skip('(Vue3 Skip) the Int Component', () => {
6
+ describe('the Int Component', () => {
7
7
  it('input field is present', () => {
8
8
  const wrapper = mount(Questions, {
9
9
  props: {
@@ -25,7 +25,6 @@ describe.skip('(Vue3 Skip) the Int Component', () => {
25
25
 
26
26
  const inputFields = wrapper.findAll('[data-testid="int-input-var_name"]');
27
27
 
28
- // TODO: UNIT TEST - Default stubs give us a tab stub, rendering no input fields
29
28
  expect(inputFields).toHaveLength(1);
30
29
 
31
30
  const descriptionFields = wrapper.findAll('[data-testid="int-description-var_name"]');
@@ -3,7 +3,7 @@ import { mount } from '@vue/test-utils';
3
3
  import { _EDIT } from '@shell/config/query-params';
4
4
  import defaults from './utils/questions-defaults';
5
5
 
6
- describe.skip('(Vue3 Skip) the String Component', () => {
6
+ describe('the String Component', () => {
7
7
  it('input field is present', () => {
8
8
  const wrapper = mount(Questions, {
9
9
  props: {
@@ -25,7 +25,6 @@ describe.skip('(Vue3 Skip) the String Component', () => {
25
25
 
26
26
  const inputFields = wrapper.findAll('[data-testid="string-input-var_name"]');
27
27
 
28
- // TODO: UNIT TEST - Default stubs give us a tab stub, rendering no input fields
29
28
  expect(inputFields).toHaveLength(1);
30
29
 
31
30
  const descriptionFields = wrapper.findAll('[data-testid="string-description-var_name"]');
@@ -3,7 +3,7 @@ import { mount } from '@vue/test-utils';
3
3
  import { _EDIT } from '@shell/config/query-params';
4
4
  import defaults from './utils/questions-defaults';
5
5
 
6
- describe.skip('(Vue3 Skip) the yaml Component', () => {
6
+ describe('the yaml Component', () => {
7
7
  it('input field is present', () => {
8
8
  const wrapper = mount(Questions, {
9
9
  props: {
@@ -1,7 +1,7 @@
1
1
 
2
2
  const defaultStubs = {
3
- Tab: true,
4
- Tabbed: true,
3
+ Tab: { template: '<span><slot/></span>' },
4
+ Tabbed: false,
5
5
  };
6
6
  const defaultGetters = {
7
7
  currentStore: () => 'current_store',
@@ -439,9 +439,9 @@ export default {
439
439
  <!-- locale selector -->
440
440
  <span v-if="isSingleProduct">
441
441
  <v-dropdown
442
- popover-class="localeSelector"
442
+ popperClass="localeSelector"
443
443
  placement="top"
444
- trigger="click"
444
+ :triggers="['click']"
445
445
  >
446
446
  <a
447
447
  data-testid="locale-selector"
@@ -450,7 +450,7 @@ export default {
450
450
  {{ locale }}
451
451
  </a>
452
452
 
453
- <template #popover>
453
+ <template #popper>
454
454
  <ul
455
455
  class="list-unstyled dropdown"
456
456
  style="margin: -1px;"