bfg-common 1.5.246 → 1.5.248
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/assets/img/icons/icons-sprite-dark-3.svg +227 -227
- package/assets/img/icons/icons-sprite-dark-5.svg +488 -488
- package/assets/img/icons/icons-sprite-light-3.svg +227 -227
- package/assets/img/icons/icons-sprite-light-5.svg +488 -488
- package/assets/localization/local_be.json +15 -4
- package/assets/localization/local_en.json +15 -4
- package/assets/localization/local_hy.json +15 -4
- package/assets/localization/local_kk.json +15 -4
- package/assets/localization/local_ru.json +19 -8
- package/assets/localization/local_zh.json +15 -4
- package/assets/scss/clarity/local_ar.json +2 -2
- package/assets/scss/common/theme.scss +16 -0
- package/components/atoms/stack/StackBlock.vue +185 -185
- package/components/atoms/table/info/lib/models/interfaces.ts +10 -10
- package/components/common/backup/storage/actions/add/New.vue +6 -8
- package/components/common/backup/storage/actions/add/lib/config/createDatastore.ts +1 -1
- package/components/common/backup/storage/actions/add/lib/config/steps.ts +3 -3
- package/components/common/backup/storage/actions/add/steps/common/tooltipInfo/TooltipInfo.vue +94 -0
- package/components/common/backup/storage/actions/add/steps/hostAccessibility/HostAccessibility.vue +16 -18
- package/components/common/backup/storage/actions/add/steps/hostAccessibility/HostAccessibilityNew.vue +2 -7
- package/components/common/backup/storage/actions/add/steps/hostAccessibility/table/new/lib/config/compatibleTable.ts +3 -2
- package/components/common/backup/storage/actions/add/steps/name/Name.vue +1 -0
- package/components/common/backup/storage/actions/add/steps/name/New.vue +3 -16
- package/components/common/backup/storage/actions/add/steps/nameAndConfigure/NameAndConfigure.vue +1 -0
- package/components/common/backup/storage/actions/add/steps/nameAndConfigure/NameAndConfigureNew.vue +25 -73
- package/components/common/backup/storage/actions/add/steps/readyComplete/ReadyCompleteNew.vue +43 -5
- package/components/common/backup/storage/actions/add/steps/readyComplete/lib/config/propertiesDetails.ts +6 -5
- package/components/common/backup/storage/actions/add/steps/typeMode/TypeModeNew.vue +15 -16
- package/components/common/layout/theHeader/feedback/new/additionalDetails/Headline.vue +67 -8
- package/components/common/layout/theHeader/feedback/new/subtitle/Subtitle.vue +72 -8
- package/components/common/pages/tasks/table/Table.vue +7 -15
- package/components/common/pages/tasks/table/errorInfo/ErrorInfo.vue +128 -0
- package/components/common/pages/tasks/table/expandDetails/ExpandDetails.vue +9 -15
- package/components/common/vm/actions/common/customizeHardware/virtualHardware/bus/BusNew.vue +99 -10
- package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaNew.vue +1 -1
- package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/CpuNew.vue +3 -52
- package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/model/ModelNew.vue +151 -32
- package/components/common/vm/actions/common/select/name/New.vue +70 -10
- package/components/common/wizards/datastore/add/New.vue +3 -8
- package/components/common/wizards/datastore/add/steps/common/tooltipInfo/TooltipInfo.vue +93 -0
- package/components/common/wizards/datastore/add/steps/nameAndConfigure/NameAndConfigureNew.vue +6 -17
- package/components/common/wizards/datastore/add/steps/nameAndDevice/NameAndDeviceNew.vue +3 -9
- package/components/common/wizards/datastore/add/steps/typeMode/TypeModeNew.vue +6 -9
- package/package.json +1 -1
- package/components/common/tooltip/Help.vue +0 -132
- package/components/common/tooltip/lib/models/types.ts +0 -1
|
@@ -12,12 +12,9 @@
|
|
|
12
12
|
v-model="formModelLocal.name"
|
|
13
13
|
test-id="name-selection-input"
|
|
14
14
|
:error="nameErrorText"
|
|
15
|
-
@blur="initValidation(true)"
|
|
16
|
-
@input="initValidation(false)"
|
|
17
15
|
/>
|
|
18
16
|
</div>
|
|
19
17
|
</div>
|
|
20
|
-
|
|
21
18
|
</div>
|
|
22
19
|
</template>
|
|
23
20
|
|
|
@@ -31,27 +28,17 @@ import type { UI_I_CreateDatastoreForm } from '~/components/common/backup/storag
|
|
|
31
28
|
|
|
32
29
|
const formModelLocal = defineModel<UI_I_CreateDatastoreForm>({ required: true })
|
|
33
30
|
const props = defineProps<{
|
|
31
|
+
alertMessages: string[]
|
|
34
32
|
messagesFields: UI_I_ArbitraryObject<UI_I_ErrorFields>
|
|
35
33
|
}>()
|
|
36
34
|
|
|
37
35
|
const localization = computed<UI_I_Localization>(() => useLocal())
|
|
38
36
|
|
|
39
|
-
const isInitDatastoreNameValidation = ref<boolean>(false)
|
|
40
|
-
const initValidation = (onlyBlur: boolean): void => {
|
|
41
|
-
onlyBlur && (isInitDatastoreNameValidation.value = true)
|
|
42
|
-
}
|
|
43
37
|
const nameErrorText = computed<string>(() => {
|
|
44
|
-
if (
|
|
45
|
-
props.messagesFields?.name?.field &&
|
|
46
|
-
!formModelLocal.value.name
|
|
47
|
-
) {
|
|
38
|
+
if (!props.alertMessages?.length && props.messagesFields?.name?.field) {
|
|
48
39
|
return props.messagesFields.name.field
|
|
49
40
|
}
|
|
50
|
-
|
|
51
|
-
if (!isInitDatastoreNameValidation.value) return ''
|
|
52
|
-
return !formModelLocal.value.name
|
|
53
|
-
? localization.value.common.specifyDatastoreName
|
|
54
|
-
: ''
|
|
41
|
+
return ''
|
|
55
42
|
})
|
|
56
43
|
</script>
|
|
57
44
|
|
package/components/common/backup/storage/actions/add/steps/nameAndConfigure/NameAndConfigureNew.vue
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
:messages="[localization.common.nameAndConfigurationAlertInfo]"
|
|
7
7
|
type="info"
|
|
8
8
|
class="mb-4"
|
|
9
|
+
size="md"
|
|
9
10
|
@remove="isShowAlertInfo = false"
|
|
10
11
|
/>
|
|
11
12
|
|
|
@@ -23,8 +24,6 @@
|
|
|
23
24
|
is-focused
|
|
24
25
|
:placeholder="localization.common.name"
|
|
25
26
|
:error="nameErrorText"
|
|
26
|
-
@blur="initValidation(true, ['name'])"
|
|
27
|
-
@input="initValidation(false, ['name'])"
|
|
28
27
|
/>
|
|
29
28
|
</div>
|
|
30
29
|
</div>
|
|
@@ -36,14 +35,9 @@
|
|
|
36
35
|
<span class="basics-step-row-title-text">
|
|
37
36
|
{{ localization.common.folder }}
|
|
38
37
|
</span>
|
|
39
|
-
<common-tooltip-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
:title="localization.common.information"
|
|
43
|
-
:help-text="'Specify the folder path - for example, /vols/vol0/datastore-001'"
|
|
44
|
-
dropdown-width="272px"
|
|
45
|
-
dropdown-left
|
|
46
|
-
dropdown-top
|
|
38
|
+
<common-backup-storage-actions-add-steps-common-tooltip-info
|
|
39
|
+
id="backup-storage-tooltip-info-folder"
|
|
40
|
+
:description="localization.backup.specifyFolderPathExample"
|
|
47
41
|
/>
|
|
48
42
|
</div>
|
|
49
43
|
<div class="basics-step-row-content">
|
|
@@ -51,10 +45,8 @@
|
|
|
51
45
|
id="configuration-folder-input"
|
|
52
46
|
v-model="formModelLocal.folder"
|
|
53
47
|
test-id="configuration-folder-input"
|
|
54
|
-
placeholder="
|
|
48
|
+
:placeholder="localization.backup.folderPlaceholder"
|
|
55
49
|
:error="folderErrorText"
|
|
56
|
-
@blur="initValidation(true, ['folder'])"
|
|
57
|
-
@input="initValidation(false, ['folder'])"
|
|
58
50
|
/>
|
|
59
51
|
</div>
|
|
60
52
|
</div>
|
|
@@ -66,14 +58,9 @@
|
|
|
66
58
|
<span class="basics-step-row-title-text">
|
|
67
59
|
{{ localization.common.server }}
|
|
68
60
|
</span>
|
|
69
|
-
<common-tooltip-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
:title="localization.common.information"
|
|
73
|
-
:help-text="'Specify the server address - for example, nas, nas.it.com or 192.168.0.1.'"
|
|
74
|
-
dropdown-width="272px"
|
|
75
|
-
dropdown-left
|
|
76
|
-
dropdown-top
|
|
61
|
+
<common-backup-storage-actions-add-steps-common-tooltip-info
|
|
62
|
+
id="backup-storage-tooltip-info-server"
|
|
63
|
+
:description="localization.backup.specifyServerAddressExample"
|
|
77
64
|
/>
|
|
78
65
|
</div>
|
|
79
66
|
<div class="basics-step-row-content">
|
|
@@ -81,10 +68,8 @@
|
|
|
81
68
|
id="configuration-server-input"
|
|
82
69
|
v-model="formModelLocal.server"
|
|
83
70
|
test-id="configuration-server-input"
|
|
84
|
-
placeholder="
|
|
71
|
+
:placeholder="localization.backup.serverPlaceholder"
|
|
85
72
|
:error="serverErrorText"
|
|
86
|
-
@blur="initValidation(true, ['server'])"
|
|
87
|
-
@input="initValidation(false, ['server'])"
|
|
88
73
|
/>
|
|
89
74
|
</div>
|
|
90
75
|
</div>
|
|
@@ -104,8 +89,6 @@
|
|
|
104
89
|
test-id="configuration-username-input"
|
|
105
90
|
:placeholder="localization.auth.username"
|
|
106
91
|
:error="usernameErrorText"
|
|
107
|
-
@blur="initValidation(true, ['user'])"
|
|
108
|
-
@input="initValidation(false, ['user'])"
|
|
109
92
|
/>
|
|
110
93
|
</div>
|
|
111
94
|
</div>
|
|
@@ -126,8 +109,6 @@
|
|
|
126
109
|
test-id="configuration-password-input"
|
|
127
110
|
:placeholder="localization.auth.password"
|
|
128
111
|
:error="passwordErrorText"
|
|
129
|
-
@blur="initValidation(true, ['password'])"
|
|
130
|
-
@input="initValidation(false, ['password'])"
|
|
131
112
|
/>
|
|
132
113
|
</div>
|
|
133
114
|
</div>
|
|
@@ -138,13 +119,12 @@
|
|
|
138
119
|
import type { UI_I_Localization } from '~/lib/models/interfaces'
|
|
139
120
|
import type { UI_I_WizardStep } from '~/components/atoms/wizard/lib/models/interfaces'
|
|
140
121
|
import type { UI_I_CreateDatastoreForm } from '~/components/common/backup/storage/actions/add/lib/models/interfaces'
|
|
141
|
-
import type { UI_I_InitialValidationFields } from '~/components/common/backup/storage/actions/add/steps/nameAndConfigure/lib/models/interfaces'
|
|
142
|
-
import type { UI_T_InitialValidationFields } from '~/components/common/backup/storage/actions/add/steps/nameAndConfigure/lib/models/types'
|
|
143
122
|
|
|
144
123
|
const formModelLocal = defineModel<UI_I_CreateDatastoreForm>({ required: true })
|
|
145
124
|
const isShowAlertInfo = defineModel<boolean>('alertInfo', { required: true })
|
|
146
125
|
|
|
147
126
|
const props = defineProps<{
|
|
127
|
+
alertMessages: string[]
|
|
148
128
|
messagesFields: UI_I_WizardStep['fields']
|
|
149
129
|
}>()
|
|
150
130
|
const emits = defineEmits<{
|
|
@@ -153,78 +133,50 @@ const emits = defineEmits<{
|
|
|
153
133
|
|
|
154
134
|
const localization = computed<UI_I_Localization>(() => useLocal())
|
|
155
135
|
|
|
156
|
-
const
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
password: false,
|
|
136
|
+
const isEmptyAlertMessages = computed<boolean>(() => {
|
|
137
|
+
return (
|
|
138
|
+
!props.alertMessages?.length ||
|
|
139
|
+
(props.alertMessages && !props.alertMessages.flat().length)
|
|
140
|
+
)
|
|
162
141
|
})
|
|
163
|
-
const initValidation = (
|
|
164
|
-
onlyBlur = false,
|
|
165
|
-
types: UI_T_InitialValidationFields[]
|
|
166
|
-
): void => {
|
|
167
|
-
onlyBlur && types.forEach((type) => (initValidationFields.value[type] = true))
|
|
168
|
-
}
|
|
169
|
-
|
|
170
142
|
/* Validation error text for Name input field */
|
|
171
143
|
const nameErrorText = computed<string>(() => {
|
|
172
|
-
if (props.messagesFields?.name?.field
|
|
144
|
+
if (isEmptyAlertMessages.value && props.messagesFields?.name?.field) {
|
|
173
145
|
return props.messagesFields.name.field
|
|
174
146
|
}
|
|
175
|
-
|
|
176
|
-
if (!initValidationFields.value.name) return ''
|
|
177
|
-
return !formModelLocal.value.name
|
|
178
|
-
? localization.value.common.fieldRequired
|
|
179
|
-
: ''
|
|
147
|
+
return ''
|
|
180
148
|
})
|
|
181
149
|
|
|
182
150
|
/* Validation error text for Folder input field */
|
|
183
151
|
const folderErrorText = computed<string>(() => {
|
|
184
|
-
if (props.messagesFields.folder?.field
|
|
152
|
+
if (isEmptyAlertMessages.value && props.messagesFields.folder?.field) {
|
|
185
153
|
return props.messagesFields.folder.field
|
|
186
154
|
}
|
|
187
|
-
|
|
188
|
-
if (!initValidationFields.value.folder) return ''
|
|
189
|
-
return !formModelLocal.value.folder
|
|
190
|
-
? localization.value.common.fieldRequired
|
|
191
|
-
: ''
|
|
155
|
+
return ''
|
|
192
156
|
})
|
|
193
157
|
|
|
194
158
|
/* Validation error text for Server input field */
|
|
195
159
|
const serverErrorText = computed<string>(() => {
|
|
196
|
-
if (props.messagesFields.server?.field
|
|
160
|
+
if (isEmptyAlertMessages.value && props.messagesFields.server?.field) {
|
|
197
161
|
return props.messagesFields.server.field
|
|
198
162
|
}
|
|
199
|
-
|
|
200
|
-
if (!initValidationFields.value.server) return ''
|
|
201
|
-
return !formModelLocal.value.server
|
|
202
|
-
? localization.value.common.fieldRequired
|
|
203
|
-
: ''
|
|
163
|
+
return ''
|
|
204
164
|
})
|
|
205
165
|
|
|
206
166
|
/* Validation error text for Username input field */
|
|
207
167
|
const usernameErrorText = computed<string>(() => {
|
|
208
|
-
if (props.messagesFields.user?.field
|
|
168
|
+
if (isEmptyAlertMessages.value && props.messagesFields.user?.field) {
|
|
209
169
|
return props.messagesFields.user.field
|
|
210
170
|
}
|
|
211
|
-
|
|
212
|
-
if (!initValidationFields.value.user) return ''
|
|
213
|
-
return !formModelLocal.value.user
|
|
214
|
-
? localization.value.common.fieldRequired
|
|
215
|
-
: ''
|
|
171
|
+
return ''
|
|
216
172
|
})
|
|
217
173
|
|
|
218
174
|
/* Validation error text for Password input field */
|
|
219
175
|
const passwordErrorText = computed<string>(() => {
|
|
220
|
-
if (props.messagesFields.password?.field
|
|
176
|
+
if (isEmptyAlertMessages.value && props.messagesFields.password?.field) {
|
|
221
177
|
return props.messagesFields.password.field
|
|
222
178
|
}
|
|
223
|
-
|
|
224
|
-
if (!initValidationFields.value.password) return ''
|
|
225
|
-
return !formModelLocal.value.password
|
|
226
|
-
? localization.value.common.fieldRequired
|
|
227
|
-
: ''
|
|
179
|
+
return ''
|
|
228
180
|
})
|
|
229
181
|
</script>
|
|
230
182
|
|
package/components/common/backup/storage/actions/add/steps/readyComplete/ReadyCompleteNew.vue
CHANGED
|
@@ -14,7 +14,13 @@
|
|
|
14
14
|
:key="listKey"
|
|
15
15
|
class="details-item"
|
|
16
16
|
>
|
|
17
|
-
<span
|
|
17
|
+
<span
|
|
18
|
+
ref="detailsItemLabel"
|
|
19
|
+
:style="{ width: labelMaxWidth + 'px' }"
|
|
20
|
+
class="details-item-label"
|
|
21
|
+
>
|
|
22
|
+
{{ list.label }}:
|
|
23
|
+
</span>
|
|
18
24
|
|
|
19
25
|
<div class="details-list__col-right">
|
|
20
26
|
<!-- Если value — массив -->
|
|
@@ -27,14 +33,20 @@
|
|
|
27
33
|
:key="itemKey"
|
|
28
34
|
class="details-item-value"
|
|
29
35
|
>
|
|
30
|
-
<span
|
|
36
|
+
<span
|
|
37
|
+
v-if="item.iconClassName"
|
|
38
|
+
:class="['icon', item.iconClassName]"
|
|
39
|
+
></span>
|
|
31
40
|
{{ item.label }}
|
|
32
41
|
</span>
|
|
33
42
|
</div>
|
|
34
43
|
|
|
35
44
|
<!-- Если value — обычная строка -->
|
|
36
45
|
<span v-else class="details-item-value">
|
|
37
|
-
<span
|
|
46
|
+
<span
|
|
47
|
+
v-if="list.iconClassName"
|
|
48
|
+
:class="['icon', list.iconClassName]"
|
|
49
|
+
></span>
|
|
38
50
|
{{ list.value }}
|
|
39
51
|
</span>
|
|
40
52
|
</div>
|
|
@@ -51,17 +63,41 @@ import type { UI_I_DetailsItem } from '~/components/common/details/lib/models/in
|
|
|
51
63
|
const props = defineProps<{
|
|
52
64
|
dataReadyView: UI_I_DetailsItem[]
|
|
53
65
|
}>()
|
|
66
|
+
|
|
67
|
+
const detailsItemLabel = ref([])
|
|
68
|
+
const labelMaxWidth = computed(() => {
|
|
69
|
+
let maxWidth = 0
|
|
70
|
+
for (const key in detailsItemLabel.value) {
|
|
71
|
+
const node = detailsItemLabel.value[key]
|
|
72
|
+
if (node.scrollWidth > maxWidth) maxWidth = node.scrollWidth
|
|
73
|
+
}
|
|
74
|
+
return maxWidth
|
|
75
|
+
})
|
|
54
76
|
</script>
|
|
55
77
|
|
|
78
|
+
<style>
|
|
79
|
+
:root {
|
|
80
|
+
--ready-to-complate-border-color: #e9ebeda3;
|
|
81
|
+
}
|
|
82
|
+
:root.dark-theme {
|
|
83
|
+
--ready-to-complate-border-color: #e9ebed1f;
|
|
84
|
+
}
|
|
85
|
+
</style>
|
|
56
86
|
<style lang="scss" scoped>
|
|
57
87
|
.ready-complete {
|
|
58
88
|
&__section {
|
|
59
89
|
&:not(:last-child) {
|
|
60
|
-
border-
|
|
90
|
+
color: var(--global-border-color);
|
|
91
|
+
border-bottom: 1px solid var(--ready-to-complate-border-color);
|
|
61
92
|
}
|
|
62
93
|
}
|
|
63
94
|
|
|
64
95
|
.details {
|
|
96
|
+
&:last-child {
|
|
97
|
+
.details__list {
|
|
98
|
+
padding-bottom: 16px;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
65
101
|
&__container {
|
|
66
102
|
display: flex;
|
|
67
103
|
flex-direction: column;
|
|
@@ -71,7 +107,7 @@ const props = defineProps<{
|
|
|
71
107
|
color: var(--title-form-first-color);
|
|
72
108
|
font-weight: 500;
|
|
73
109
|
font-size: 14px;
|
|
74
|
-
line-height:
|
|
110
|
+
line-height: 18px;
|
|
75
111
|
margin: 16px 0;
|
|
76
112
|
}
|
|
77
113
|
|
|
@@ -113,6 +149,8 @@ const props = defineProps<{
|
|
|
113
149
|
}
|
|
114
150
|
|
|
115
151
|
.icon {
|
|
152
|
+
min-width: 20px;
|
|
153
|
+
min-height: 20px;
|
|
116
154
|
margin-right: 8px;
|
|
117
155
|
}
|
|
118
156
|
}
|
|
@@ -48,10 +48,11 @@ const localDetailsFunc = (
|
|
|
48
48
|
value: '',
|
|
49
49
|
items: [
|
|
50
50
|
{
|
|
51
|
-
label: localization.common.
|
|
51
|
+
label: localization.common.name,
|
|
52
52
|
value: name,
|
|
53
53
|
items: [],
|
|
54
54
|
testId: 'view-selected-name-in-complete',
|
|
55
|
+
iconClassName: 'vsphere-icon-datastore',
|
|
55
56
|
},
|
|
56
57
|
],
|
|
57
58
|
actions: [],
|
|
@@ -94,7 +95,7 @@ const nfsDetailsFunc = (
|
|
|
94
95
|
value: '',
|
|
95
96
|
items: [
|
|
96
97
|
{
|
|
97
|
-
label: localization.common.
|
|
98
|
+
label: localization.common.name,
|
|
98
99
|
value: name,
|
|
99
100
|
items: [],
|
|
100
101
|
testId: 'view-storage-name-in-complete',
|
|
@@ -140,7 +141,7 @@ const sambaDetailsFunc = (
|
|
|
140
141
|
value: '',
|
|
141
142
|
items: [
|
|
142
143
|
{
|
|
143
|
-
label: localization.common.
|
|
144
|
+
label: localization.common.name,
|
|
144
145
|
value: name,
|
|
145
146
|
items: [],
|
|
146
147
|
testId: 'view-storage-name-in-complete',
|
|
@@ -187,7 +188,7 @@ const sharedStormDetailsFunc = (
|
|
|
187
188
|
value: '',
|
|
188
189
|
items: [
|
|
189
190
|
{
|
|
190
|
-
label: localization.common.
|
|
191
|
+
label: localization.common.name,
|
|
191
192
|
value: name,
|
|
192
193
|
items: [],
|
|
193
194
|
testId: 'view-storage-name-in-complete',
|
|
@@ -201,7 +202,7 @@ const sharedStormDetailsFunc = (
|
|
|
201
202
|
value: '',
|
|
202
203
|
items: [
|
|
203
204
|
{
|
|
204
|
-
label: localization.common.
|
|
205
|
+
label: localization.common.name,
|
|
205
206
|
value: datastore.name,
|
|
206
207
|
items: [],
|
|
207
208
|
testId: 'view-storage-name-in-complete',
|
|
@@ -11,20 +11,15 @@
|
|
|
11
11
|
size="md"
|
|
12
12
|
>
|
|
13
13
|
<template #description>
|
|
14
|
-
<span class="
|
|
14
|
+
<span class="datastore-type__radio-description">
|
|
15
15
|
{{ option.description }}
|
|
16
16
|
</span>
|
|
17
17
|
</template>
|
|
18
18
|
|
|
19
19
|
<template #tooltip>
|
|
20
|
-
<common-tooltip-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
:help-text="option.tooltipContent"
|
|
24
|
-
:title="localization.common.information"
|
|
25
|
-
dropdown-width="272px"
|
|
26
|
-
dropdown-left
|
|
27
|
-
dropdown-top
|
|
20
|
+
<common-backup-storage-actions-add-steps-common-tooltip-info
|
|
21
|
+
:id="option.testId"
|
|
22
|
+
:description="option.tooltipContent"
|
|
28
23
|
/>
|
|
29
24
|
</template>
|
|
30
25
|
</ui-radio>
|
|
@@ -33,16 +28,13 @@
|
|
|
33
28
|
</template>
|
|
34
29
|
|
|
35
30
|
<script lang="ts" setup>
|
|
31
|
+
// TODO this component is duplicate
|
|
36
32
|
import type { UI_I_RadioOption } from '~/components/common/select/radio/lib/models/interfaces'
|
|
37
|
-
import type {UI_I_Localization} from "~/lib/models/interfaces";
|
|
38
33
|
|
|
39
34
|
const datastoreTypeModeLocal = defineModel<number>({ required: true })
|
|
40
35
|
const props = defineProps<{
|
|
41
36
|
options: UI_I_RadioOption[]
|
|
42
37
|
}>()
|
|
43
|
-
|
|
44
|
-
const localization = computed<UI_I_Localization>(() => useLocal())
|
|
45
|
-
|
|
46
38
|
</script>
|
|
47
39
|
|
|
48
40
|
<style>
|
|
@@ -66,9 +58,11 @@ const localization = computed<UI_I_Localization>(() => useLocal())
|
|
|
66
58
|
display: grid;
|
|
67
59
|
grid-template-columns: 1fr 1fr;
|
|
68
60
|
gap: 12px;
|
|
61
|
+
padding-bottom: 16px;
|
|
69
62
|
}
|
|
70
63
|
&-description {
|
|
71
64
|
color: #9da6ad;
|
|
65
|
+
line-height: 18px;
|
|
72
66
|
}
|
|
73
67
|
}
|
|
74
68
|
:deep(input[type='radio']) {
|
|
@@ -76,21 +70,26 @@ const localization = computed<UI_I_Localization>(() => useLocal())
|
|
|
76
70
|
width: 100%;
|
|
77
71
|
height: 100%;
|
|
78
72
|
background-color: var(--select-bg);
|
|
79
|
-
border: 1px solid var(--line-color);
|
|
73
|
+
//border: 1px solid var(--line-color);
|
|
74
|
+
border: none;
|
|
80
75
|
border-radius: 8px;
|
|
81
76
|
padding: 12px;
|
|
77
|
+
transition: box-shadow 0.1s ease-in-out;
|
|
78
|
+
box-shadow: inset 0 0 0 1px var(--line-color);
|
|
82
79
|
}
|
|
83
80
|
|
|
84
81
|
&:not(:checked) {
|
|
85
82
|
& ~ .radio-label:hover {
|
|
86
|
-
border-color: var(--select-border);
|
|
83
|
+
//border-color: var(--select-border);
|
|
84
|
+
box-shadow: inset 0 0 0 1px var(--select-border);
|
|
87
85
|
}
|
|
88
86
|
}
|
|
89
87
|
|
|
90
88
|
&:checked {
|
|
91
89
|
& ~ .radio-label {
|
|
92
90
|
background-color: var(--radio-btn-active-label-bg-color);
|
|
93
|
-
border-color: var(--radio-btn-active-label-border-color);
|
|
91
|
+
//border-color: var(--radio-btn-active-label-border-color);
|
|
92
|
+
box-shadow: inset 0 0 0 1.5px var(--radio-btn-active-label-border-color);
|
|
94
93
|
}
|
|
95
94
|
}
|
|
96
95
|
}
|
|
@@ -3,15 +3,42 @@
|
|
|
3
3
|
<span class="headline__label">
|
|
4
4
|
{{ localization.common.additionalDetails }}
|
|
5
5
|
</span>
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
dropdown-left
|
|
6
|
+
<ui-icon
|
|
7
|
+
id="feedback-additional-details-info-icon"
|
|
8
|
+
:class="['headline__icon pointer', isShowInfo && 'active']"
|
|
9
|
+
name="info"
|
|
10
|
+
width="16"
|
|
11
|
+
height="16"
|
|
12
|
+
@click="isShowInfo = !isShowInfo"
|
|
14
13
|
/>
|
|
14
|
+
<ui-popup-window
|
|
15
|
+
v-model="isShowInfo"
|
|
16
|
+
:elem-id="'feedback-additional-details-info-icon'"
|
|
17
|
+
width="288px"
|
|
18
|
+
is-priority-right-position
|
|
19
|
+
>
|
|
20
|
+
<div class="common-widget-info">
|
|
21
|
+
<div class="flex justify-between">
|
|
22
|
+
<div class="flex">
|
|
23
|
+
<ui-icon-icon3 name="info-2" width="16px" height="16px" />
|
|
24
|
+
<span class="title">
|
|
25
|
+
{{ localization.feedback.additionalDetailsHelp }}
|
|
26
|
+
</span>
|
|
27
|
+
</div>
|
|
28
|
+
<ui-icon
|
|
29
|
+
name="close"
|
|
30
|
+
class="pointer hide-icon"
|
|
31
|
+
width="16px"
|
|
32
|
+
height="16px"
|
|
33
|
+
@click="isShowInfo = false"
|
|
34
|
+
/>
|
|
35
|
+
</div>
|
|
36
|
+
|
|
37
|
+
<div class="common-widget-info-description">
|
|
38
|
+
{{ localization.feedback.additionalDetailsTooltip }}
|
|
39
|
+
</div>
|
|
40
|
+
</div>
|
|
41
|
+
</ui-popup-window>
|
|
15
42
|
</div>
|
|
16
43
|
</template>
|
|
17
44
|
|
|
@@ -20,6 +47,7 @@ import type { UI_I_Localization } from '~/lib/models/interfaces'
|
|
|
20
47
|
|
|
21
48
|
const localization = computed<UI_I_Localization>(() => useLocal())
|
|
22
49
|
|
|
50
|
+
const isShowInfo = ref<boolean>(false)
|
|
23
51
|
</script>
|
|
24
52
|
|
|
25
53
|
<style lang="scss" scoped>
|
|
@@ -28,6 +56,15 @@ const localization = computed<UI_I_Localization>(() => useLocal())
|
|
|
28
56
|
@include flex($align: center);
|
|
29
57
|
margin: 32px 0 16px;
|
|
30
58
|
|
|
59
|
+
&__icon {
|
|
60
|
+
color: var(--feedback-tooltip-trigger-color);
|
|
61
|
+
&:hover {
|
|
62
|
+
color: var(--feedback-tooltip-hover-trigger-color);
|
|
63
|
+
}
|
|
64
|
+
&.active {
|
|
65
|
+
color: var(--feedback-tooltip-acctive-trigger-color);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
31
68
|
&__label {
|
|
32
69
|
line-height: 19.36px;
|
|
33
70
|
font-size: 16px;
|
|
@@ -35,5 +72,27 @@ const localization = computed<UI_I_Localization>(() => useLocal())
|
|
|
35
72
|
color: var(--feedback-text-color);
|
|
36
73
|
margin-right: 8px;
|
|
37
74
|
}
|
|
75
|
+
.common-widget-info {
|
|
76
|
+
padding: 16px;
|
|
77
|
+
.title {
|
|
78
|
+
font-size: 14px;
|
|
79
|
+
font-weight: 500;
|
|
80
|
+
line-height: 16.94px;
|
|
81
|
+
color: var(--feedback-text-color);
|
|
82
|
+
margin-left: 8px;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
.common-widget-info-description {
|
|
86
|
+
font-size: 13px;
|
|
87
|
+
line-height: 15.73px;
|
|
88
|
+
color: var(--feedback-text-color);
|
|
89
|
+
margin-top: 12px;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
svg {
|
|
93
|
+
color: var(--feedback-tooltip-close-color);
|
|
94
|
+
min-width: 16px;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
38
97
|
}
|
|
39
98
|
</style>
|