bfg-common 1.5.753 → 1.5.755

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.
@@ -1,356 +1,448 @@
1
- <template>
2
- <div
3
- :class="[
4
- 'backups-page grid h-inherit p-4 overflow-hidden ',
5
- { 'selected gap-3': props.detailData },
6
- ]"
7
- >
8
- <div class="left-content grid p-4">
9
- <div class="flex justify-between">
10
- <h3 class="title-block font-[500] text-[16px]">
11
- {{ localization.inventoryTabs.backups }} ({{
12
- props.backupsTree.length
13
- }})
14
- </h3>
15
- <ui-button
16
- v-if="props.typeFromRoute === 'vm'"
17
- v-permission="props.createBackupPermission"
18
- test-id="take-backup-btn"
19
- size="md"
20
- @click="emits('set-action', 'createBackup')"
21
- >
22
- <ui-icon name="plus" width="20" height="20" class="mr-2" />
23
- {{ localization.common.createBackup }}...
24
- </ui-button>
25
- </div>
26
- <div
27
- v-if="props.backupsTree.length"
28
- class="backups-tree-content overflow-y-auto my-4 px-2 pb-2"
29
- >
30
- <ui-tree
31
- :is-loading="props.backupsLoading"
32
- :nodes="props.backupsTree"
33
- @select-node="emits('select-node', $event)"
34
- @toggle-node="emits('show-nodes', $event.id)"
35
- @show-context-menu="showContextMenu"
36
- >
37
- <template #content="{ node }">
38
- <div class="flex-align-center">
39
- <span :class="['node-icon', node.iconClassName]"></span>
40
- <span class="node-name text-ellipsis">{{ node.name }}</span>
41
- </div>
42
- </template>
43
- </ui-tree>
44
- </div>
45
- <div v-else class="empty-block grid justify-items-center content-center">
46
- <ui-icon
47
- name="not-found-magnifier"
48
- width="28"
49
- height="28"
50
- color="#9da6ad"
51
- />
52
- <p class="title-block font-[400] text-[16px] mt-2">
53
- {{ localization.common.noBackupsAvailable }}
54
- </p>
55
- <p class="description-block mt-[6px] text-[13px]">
56
- {{ localization.common.noBackupsAvailableDesc }}
57
- </p>
58
- </div>
59
- <ui-button
60
- v-permission="props.deleteAllPermission"
61
- :disabled="!props.backupsTree.length"
62
- :class="[
63
- 'delete-all w-max ml-auto',
64
- { disabled: !props.backupsTree.length },
65
- ]"
66
- test-id="delete-all-backups-btn"
67
- size="md"
68
- variant="text"
69
- is-without-sizes
70
- is-without-height
71
- @click="emits('set-action', 'deleteBackupAll')"
72
- >
73
- <ui-icon name="delete" width="20" height="20" class="mr-2" />
74
- {{ localization.common.deleteAll }}
75
- </ui-button>
76
- </div>
77
- <div
78
- v-if="props.detailData"
79
- class="backups-details overflow-hidden flex-direction-column p-4"
80
- >
81
- <div class="flex justify-between mb-6">
82
- <h3 class="title-block font-[500] text-[16px]">
83
- {{ localization.common.backupDetails }}
84
- </h3>
85
- <div class="details-actions-block flex column-gap-4">
86
- <ui-tooltip
87
- id="restore-backups-btn"
88
- test-id="restore-backups-btn-tooltip"
89
- size="md"
90
- position="bottom"
91
- position-by-tooltip="center"
92
- show-type="variant-1"
93
- >
94
- <template #target>
95
- <div id="restore-backups-btn" class="popped tooltip">
96
- <ui-button
97
- v-permission="props.restoreBackupPermission"
98
- test-id="restore-backups-btn"
99
- size="md"
100
- variant="text"
101
- class="restore-backups-btn"
102
- is-without-sizes
103
- is-without-height
104
- @click="emits('set-action', 'restoreBackup')"
105
- >
106
- <ui-icon name="update" width="20" height="20" />
107
- </ui-button>
108
- </div>
109
- </template>
110
- <template #content>
111
- {{ localization.common.restore }}
112
- </template>
113
- </ui-tooltip>
114
- <div class="border-line"></div>
115
- <ui-tooltip
116
- id="delete-backups-btn"
117
- test-id="delete-backups-btn-tooltip"
118
- size="md"
119
- position="bottom"
120
- position-by-tooltip="center"
121
- show-type="variant-1"
122
- >
123
- <template #target>
124
- <div id="delete-backups-btn" class="popped tooltip">
125
- <ui-button
126
- v-permission="props.deleteBackupPermission"
127
- test-id="delete-backups-btn"
128
- size="md"
129
- variant="text"
130
- class="delete-backups-btn"
131
- is-without-sizes
132
- is-without-height
133
- @click="emits('set-action', 'deleteBackup')"
134
- >
135
- <ui-icon name="delete" width="20" height="20" />
136
- </ui-button>
137
- </div>
138
- </template>
139
- <template #content>
140
- {{ localization.common.delete }}
141
- </template>
142
- </ui-tooltip>
143
- </div>
144
- </div>
145
- <div class="grid row-gap-3 overflow-y-auto">
146
- <ui-info-block
147
- v-for="(item, index) in currentDetailsData"
148
- :key="index"
149
- :data="item"
150
- >
151
- <template v-if="item.labelIcon" #labelBlock>
152
- <div class="info-block-label-content flex items-start">
153
- <ui-icon
154
- v-if="item.labelIcon"
155
- :name="item.labelIcon"
156
- width="20"
157
- height="20"
158
- class="info-label-icon mr-[10px]"
159
- />
160
- <span class="info-label">{{ item.label }}</span>
161
- </div>
162
- </template>
163
- <template #valueBlock>
164
- <span
165
- v-if="item.value === 'empty-description'"
166
- class="empty-description"
167
- >
168
- {{ localization.common.backupHasNoDescriptionYet }}
169
- </span>
170
- </template>
171
- </ui-info-block>
172
- </div>
173
- </div>
174
- </div>
175
-
176
- <common-pages-backups-backups-new-context-menu-view
177
- :show="contextMenuShow"
178
- :context-data="contextMenu"
179
- :restore-backup-permission="props.restoreBackupPermission"
180
- :delete-backup-permission="props.deleteBackupPermission"
181
- @select-action="onSelectContextMenuItem"
182
- />
183
- </template>
184
-
185
- <script setup lang="ts">
186
- import type { UI_I_InfoBlock } from '~/node_modules/bfg-uikit/components/ui/infoBlock/models/interfaces'
187
- import type { UI_I_Localization } from '~/lib/models/interfaces'
188
- import type { UI_I_BackupsTreeNode } from '~/components/common/pages/backups/lib/models/interfaces'
189
- import type {
190
- UI_T_TargetType,
191
- UI_T_BackupActionType,
192
- } from '~/components/common/pages/backups/lib/models/types'
193
- import * as utils from '~/components/common/pages/backups/backupsNew/lib/utils/contextMenu'
194
- import { constructDetails } from '~/components/common/pages/backups/backupsNew/lib/utils/details'
195
-
196
- const props = defineProps<{
197
- backupsTree: UI_I_BackupsTreeNode[]
198
- backupsLoading: boolean
199
- typeFromRoute: UI_T_TargetType
200
- detailData: UI_I_BackupsTreeNode | null
201
- createBackupPermission: string
202
- restoreBackupPermission: string
203
- deleteBackupPermission: string
204
- deleteAllPermission: string
205
- }>()
206
-
207
- const emits = defineEmits<{
208
- (event: 'show-nodes', value: string | number): void
209
- (event: 'set-action', value: UI_T_BackupActionType): void
210
- (event: 'select-node', value: UI_I_BackupsTreeNode): void
211
- }>()
212
-
213
- const localization = computed<UI_I_Localization>(() => useLocal())
214
-
215
- const { showContextMenu, contextMenuShow, contextMenu } = utils.getContextMenu()
216
-
217
- const onSelectContextMenuItem = (actionType: UI_T_BackupActionType): void => {
218
- emits('set-action', actionType)
219
- }
220
-
221
- const currentDetailsData = computed<UI_I_InfoBlock[]>(() =>
222
- constructDetails(localization.value, props.detailData)
223
- )
224
- </script>
225
-
226
- <style>
227
- :root {
228
- --backups-page-inner-block-bg: #ffffff;
229
- --backups-page-title-color: #4d5d69;
230
- --backups-page-tree-border-color: #e9ebed;
231
- --backups-page-details-action-color: #4d5d69;
232
- --backups-page-details-action-hover-color: #213444;
233
- --backups-page-info-block-label-color: #4d5d69;
234
- --backups-page-info-block-value-color: #182531;
235
- }
236
- :root.dark-theme {
237
- --backups-page-inner-block-bg: #334453;
238
- --backups-page-title-color: #e9eaec;
239
- --backups-page-tree-border-color: #e9ebed1f;
240
- --backups-page-details-action-color: #e9eaec;
241
- --backups-page-details-action-hover-color: #ffffff;
242
- --backups-page-info-block-label-color: #e9eaec;
243
- --backups-page-info-block-value-color: #e9eaec;
244
- }
245
- </style>
246
-
247
- <style scoped lang="scss">
248
- .backups-page {
249
- &.selected {
250
- grid-template-columns: repeat(2, calc(50% - 6px));
251
- }
252
-
253
- .title-block {
254
- color: var(--backups-page-title-color);
255
- }
256
-
257
- .left-content {
258
- background-color: var(--backups-page-inner-block-bg);
259
- box-shadow: 0 1px 4px 0 #00000014;
260
- border-radius: 8px;
261
- grid-template-rows: max-content 1fr max-content;
262
-
263
- .backups-tree-content {
264
- border: 1px solid var(--backups-page-tree-border-color);
265
- border-radius: 8px;
266
-
267
- :deep(.tree-content) {
268
- padding-right: 8px;
269
-
270
- .node-wrapper {
271
- border-radius: 4px;
272
-
273
- .node-element {
274
- line-height: 20px;
275
- }
276
- }
277
- }
278
- }
279
-
280
- .empty-block {
281
- .description-block {
282
- color: #9da6ad;
283
- }
284
- }
285
- .delete-all {
286
- &:not(.disabled) {
287
- color: #ea3223;
288
- }
289
- }
290
- }
291
- .backups-details {
292
- background-color: var(--backups-page-inner-block-bg);
293
- box-shadow: 0 1px 4px 0 #00000014;
294
- border-radius: 8px;
295
-
296
- .details-actions-block {
297
- .border-line {
298
- width: 1px;
299
- height: 20px;
300
- background-color: #e9ebeda3;
301
- }
302
- .restore-backups-btn,
303
- .edit-backups-btn {
304
- color: var(--backups-page-details-action-color);
305
-
306
- &:hover {
307
- color: var(--backups-page-details-action-hover-color);
308
- }
309
- }
310
- .delete-backups-btn {
311
- color: #ea3223;
312
- }
313
- }
314
- .info-block-label-content {
315
- .info-label-icon {
316
- color: #9da6ad;
317
- min-width: 20px;
318
- }
319
- .info-label {
320
- margin-top: 2.5px;
321
- color: var(--backups-page-info-block-label-color);
322
- }
323
- }
324
- .empty-description {
325
- color: #9da6ad;
326
- }
327
- :deep(.ui-main-info-block-item-right) {
328
- white-space: unset !important;
329
- max-width: 50%;
330
- }
331
- :deep(.ui-main-info-block-item-right-value-parent) {
332
- white-space: unset !important;
333
- }
334
- :deep(.ui-main-info-block-item-right-value) {
335
- color: var(--backups-page-info-block-value-color);
336
- }
337
- :deep(.ui-main-info-block-item-right-open) {
338
- display: none;
339
- }
340
- }
341
- }
342
-
343
- @media (max-width: 1200px) {
344
- .backups-page {
345
- overflow-y: auto;
346
-
347
- &.selected {
348
- grid-template-columns: 1fr;
349
- }
350
-
351
- .backups-details {
352
- height: max-content;
353
- }
354
- }
355
- }
356
- </style>
1
+ <template>
2
+ <common-pages-backups-backups-new-skeleton v-if="props.backupsLoading" />
3
+ <div
4
+ v-else
5
+ :class="[
6
+ 'backups-page grid h-inherit p-4 overflow-hidden ',
7
+ { 'selected gap-3': props.detailData },
8
+ ]"
9
+ >
10
+ <div class="left-content overflow-auto grid p-4">
11
+ <div class="flex justify-between gap-4 flex-wrap">
12
+ <h3 class="title-block font-[500] text-[16px]">
13
+ {{ localization.inventoryTabs.backups }} ({{
14
+ props.backupsTree.length
15
+ }})
16
+ </h3>
17
+ <ui-button
18
+ v-if="props.typeFromRoute === 'vm'"
19
+ v-permission="props.createBackupPermission"
20
+ test-id="take-backup-btn"
21
+ size="md"
22
+ class="create-backup-button"
23
+ @click="emits('set-action', 'createBackup')"
24
+ >
25
+ <ui-icon name="plus" width="20" height="20" class="mr-2 icon" />
26
+ {{ localization.common.createBackup }}
27
+ </ui-button>
28
+ </div>
29
+ <div
30
+ v-if="props.backupsTree.length"
31
+ class="backups-tree-content overflow-y-auto my-4 px-2 pb-2"
32
+ >
33
+ <ui-tree
34
+ :nodes="props.backupsTree"
35
+ @select-node="emits('select-node', $event)"
36
+ @toggle-node="emits('show-nodes', $event.id)"
37
+ @show-context-menu="showContextMenu"
38
+ >
39
+ <template #content="{ node }">
40
+ <div class="flex-align-center gap-2">
41
+ <span :class="['node-icon', node.iconClassName]"></span>
42
+ <span class="node-name text-ellipsis text-3">{{
43
+ node.name
44
+ }}</span>
45
+ </div>
46
+ </template>
47
+ </ui-tree>
48
+ </div>
49
+ <div v-else class="empty-block grid justify-items-center content-center">
50
+ <ui-icon
51
+ name="not-found-magnifier"
52
+ width="28"
53
+ height="28"
54
+ color="#9da6ad"
55
+ />
56
+ <p class="title-block font-[400] text-[16px] mt-2">
57
+ {{ localization.common.noBackupsAvailable }}
58
+ </p>
59
+ <p class="description-block mt-[6px] text-[13px] text-center">
60
+ {{ localization.common.noBackupsAvailableDesc }}
61
+ </p>
62
+ </div>
63
+ <ui-button
64
+ v-permission="props.deleteAllPermission"
65
+ :disabled="!props.backupsTree.length"
66
+ :class="[
67
+ 'delete-all w-max ml-auto',
68
+ { disabled: !props.backupsTree.length },
69
+ ]"
70
+ test-id="delete-all-backups-btn"
71
+ size="md"
72
+ variant="text"
73
+ is-without-sizes
74
+ is-without-height
75
+ @click="emits('set-action', 'deleteBackupAll')"
76
+ >
77
+ <ui-icon name="delete" width="20" height="20" class="mr-2" />
78
+ {{ localization.common.deleteAll }}
79
+ </ui-button>
80
+ </div>
81
+ <div
82
+ v-if="props.detailData"
83
+ class="backups-details overflow-hidden flex-direction-column p-4"
84
+ >
85
+ <div class="flex justify-between mb-6 gap-4 pr-4 flex-wrap">
86
+ <h3 class="title-block font-[500] text-[16px]">
87
+ {{ localization.common.backupDetails }}
88
+ </h3>
89
+ <div class="details-actions-block flex column-gap-4">
90
+ <ui-tooltip
91
+ id="restore-backups-btn"
92
+ test-id="restore-backups-btn-tooltip"
93
+ size="md"
94
+ position="bottom"
95
+ position-by-tooltip="center"
96
+ show-type="variant-1"
97
+ >
98
+ <template #target>
99
+ <div id="restore-backups-btn" class="popped tooltip">
100
+ <ui-button
101
+ v-permission="props.restoreBackupPermission"
102
+ test-id="restore-backups-btn"
103
+ size="md"
104
+ variant="text"
105
+ class="restore-backups-btn"
106
+ is-without-sizes
107
+ is-without-height
108
+ @click="emits('set-action', 'restoreBackup')"
109
+ >
110
+ <ui-icon name="update" width="20" height="20" />
111
+ </ui-button>
112
+ </div>
113
+ </template>
114
+ <template #content>
115
+ {{ localization.common.restore }}
116
+ </template>
117
+ </ui-tooltip>
118
+ <div class="border-line"></div>
119
+ <ui-tooltip
120
+ id="delete-backups-btn"
121
+ test-id="delete-backups-btn-tooltip"
122
+ size="md"
123
+ position="bottom"
124
+ position-by-tooltip="center"
125
+ show-type="variant-1"
126
+ >
127
+ <template #target>
128
+ <div id="delete-backups-btn" class="popped tooltip">
129
+ <ui-button
130
+ v-permission="props.deleteBackupPermission"
131
+ test-id="delete-backups-btn"
132
+ size="md"
133
+ variant="text"
134
+ class="delete-backups-btn"
135
+ is-without-sizes
136
+ is-without-height
137
+ @click="emits('set-action', 'deleteBackup')"
138
+ >
139
+ <ui-icon name="delete" width="20" height="20" />
140
+ </ui-button>
141
+ </div>
142
+ </template>
143
+ <template #content>
144
+ {{ localization.common.delete }}
145
+ </template>
146
+ </ui-tooltip>
147
+ </div>
148
+ </div>
149
+ <div
150
+ ref="detailsScrollBlock"
151
+ :class="[
152
+ 'grid row-gap-3 pr-4 overflow-y-auto details-scroll-block',
153
+ { 'has-scroll': hasScroll },
154
+ ]"
155
+ >
156
+ <ui-info-block
157
+ v-for="(item, index) in currentDetailsData"
158
+ :key="index"
159
+ :data="item"
160
+ >
161
+ <template v-if="item.labelIcon" #labelBlock>
162
+ <div class="info-block-label-content flex items-start">
163
+ <ui-icon
164
+ v-if="item.labelIcon"
165
+ :name="item.labelIcon"
166
+ :class="[
167
+ 'info-label-icon mr-[10px]',
168
+ `icon-name-${item.labelIcon}`,
169
+ ]"
170
+ width="20"
171
+ height="20"
172
+ />
173
+ <span class="info-label">{{ item.label }}</span>
174
+ </div>
175
+ </template>
176
+ <template #valueBlock>
177
+ <span
178
+ v-if="item.value === 'empty-description'"
179
+ class="empty-description"
180
+ >
181
+ {{ localization.common.backupHasNoDescriptionYet }}
182
+ </span>
183
+ </template>
184
+ </ui-info-block>
185
+ </div>
186
+ </div>
187
+ </div>
188
+
189
+ <common-pages-backups-backups-new-context-menu-view
190
+ :show="contextMenuShow"
191
+ :context-data="contextMenu"
192
+ :restore-backup-permission="props.restoreBackupPermission"
193
+ :delete-backup-permission="props.deleteBackupPermission"
194
+ @select-action="onSelectContextMenuItem"
195
+ />
196
+ </template>
197
+
198
+ <script setup lang="ts">
199
+ import { useElementSize } from '@vueuse/core'
200
+ import type { UI_I_InfoBlock } from '~/node_modules/bfg-uikit/components/ui/infoBlock/models/interfaces'
201
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
202
+ import type { UI_I_BackupsTreeNode } from '~/components/common/pages/backups/lib/models/interfaces'
203
+ import type {
204
+ UI_T_TargetType,
205
+ UI_T_BackupActionType,
206
+ } from '~/components/common/pages/backups/lib/models/types'
207
+ import * as utils from '~/components/common/pages/backups/backupsNew/lib/utils/contextMenu'
208
+ import { constructDetails } from '~/components/common/pages/backups/backupsNew/lib/utils/details'
209
+
210
+ const props = defineProps<{
211
+ backupsTree: UI_I_BackupsTreeNode[]
212
+ backupsLoading: boolean
213
+ typeFromRoute: UI_T_TargetType
214
+ detailData: UI_I_BackupsTreeNode | null
215
+ createBackupPermission: string
216
+ restoreBackupPermission: string
217
+ deleteBackupPermission: string
218
+ deleteAllPermission: string
219
+ }>()
220
+
221
+ const emits = defineEmits<{
222
+ (event: 'show-nodes', value: string | number): void
223
+ (event: 'set-action', value: UI_T_BackupActionType): void
224
+ (event: 'select-node', value: UI_I_BackupsTreeNode): void
225
+ }>()
226
+
227
+ const localization = computed<UI_I_Localization>(() => useLocal())
228
+
229
+ const { showContextMenu, contextMenuShow, contextMenu } = utils.getContextMenu()
230
+
231
+ const onSelectContextMenuItem = (actionType: UI_T_BackupActionType): void => {
232
+ emits('set-action', actionType)
233
+ }
234
+
235
+ const currentDetailsData = computed<UI_I_InfoBlock[]>(() =>
236
+ constructDetails(localization.value, props.detailData)
237
+ )
238
+
239
+ const detailsScrollBlock = ref<HTMLElement | null>(null)
240
+ const { height } = useElementSize(detailsScrollBlock)
241
+ const hasScroll = ref<boolean>(false)
242
+ const checkScroll = (): void => {
243
+ const element = detailsScrollBlock.value
244
+ if (element) {
245
+ hasScroll.value = element.scrollHeight > element.clientHeight
246
+ }
247
+ }
248
+
249
+ watch(height, () => {
250
+ checkScroll()
251
+ })
252
+ </script>
253
+
254
+ <style>
255
+ :root {
256
+ --backups-page-inner-block-bg: #ffffff;
257
+ --backups-page-title-color: #4d5d69;
258
+ --backups-page-tree-border-color: #e9ebed;
259
+ --backups-page-tree-block-bg-color: #ffffff;
260
+ --backups-page-details-action-color: #4d5d69;
261
+ --backups-page-details-action-line-color: #e9ebeda3;
262
+ --backups-page-details-action-hover-color: #213444;
263
+ --backups-page-info-block-label-color: #4d5d69;
264
+ --backups-page-info-block-value-color: #182531;
265
+ }
266
+ :root.dark-theme {
267
+ --backups-page-inner-block-bg: #334453;
268
+ --backups-page-title-color: #e9eaec;
269
+ --backups-page-tree-border-color: #e9ebed1f;
270
+ --backups-page-tree-block-bg-color: #1b2a371f;
271
+ --backups-page-details-action-color: #e9eaec;
272
+ --backups-page-details-action-line-color: #e9ebed1f;
273
+ --backups-page-details-action-hover-color: #ffffff;
274
+ --backups-page-info-block-label-color: #e9eaec;
275
+ --backups-page-info-block-value-color: #e9eaec;
276
+ }
277
+ </style>
278
+
279
+ <style scoped lang="scss">
280
+ .backups-page {
281
+ &.selected {
282
+ grid-template-columns: repeat(2, calc(50% - 6px));
283
+ }
284
+
285
+ .title-block {
286
+ color: var(--backups-page-title-color);
287
+ }
288
+ .create-backup-button {
289
+ white-space: nowrap;
290
+
291
+ .icon {
292
+ min-width: 20px;
293
+ }
294
+ }
295
+
296
+ .left-content {
297
+ background-color: var(--backups-page-inner-block-bg);
298
+ box-shadow: 0 1px 4px 0 #00000014;
299
+ border-radius: 8px;
300
+ grid-template-rows: max-content 1fr max-content;
301
+
302
+ .backups-tree-content {
303
+ border: 1px solid var(--backups-page-tree-border-color);
304
+ border-radius: 8px;
305
+ background-color: var(--backups-page-tree-block-bg-color);
306
+
307
+ :deep(.tree-container) {
308
+ width: max-content;
309
+ min-width: 100%;
310
+
311
+ .tree-content {
312
+ //padding-right: 8px;
313
+
314
+ .node-wrapper {
315
+ border-radius: 4px;
316
+
317
+ .toggle-button-empty {
318
+ display: none;
319
+ }
320
+ .node-element {
321
+ line-height: 20px;
322
+ }
323
+ }
324
+ }
325
+ }
326
+ }
327
+
328
+ .empty-block {
329
+ .description-block {
330
+ color: #9da6ad;
331
+ }
332
+ }
333
+ .delete-all {
334
+ &.disabled {
335
+ color: #bdc3c7;
336
+ }
337
+
338
+ &:not(.disabled) {
339
+ color: #ea3223;
340
+ }
341
+ }
342
+ }
343
+ .backups-details {
344
+ background-color: var(--backups-page-inner-block-bg);
345
+ box-shadow: 0 1px 4px 0 #00000014;
346
+ border-radius: 8px;
347
+ padding-right: 0;
348
+
349
+ .details-actions-block {
350
+ .border-line {
351
+ width: 1px;
352
+ height: 20px;
353
+ background-color: var(--backups-page-details-action-line-color);
354
+ }
355
+ .restore-backups-btn {
356
+ :deep(path) {
357
+ stroke-width: 1.7;
358
+ }
359
+ }
360
+ .restore-backups-btn,
361
+ .edit-backups-btn {
362
+ color: var(--backups-page-details-action-color);
363
+
364
+ &:hover {
365
+ color: var(--backups-page-details-action-hover-color);
366
+ }
367
+ }
368
+ .delete-backups-btn {
369
+ color: #ea3223;
370
+ }
371
+ }
372
+ .details-scroll-block {
373
+ padding-right: 0;
374
+
375
+ &:not(.has-scroll) {
376
+ padding-right: 16px;
377
+ }
378
+ }
379
+ .info-block-label-content {
380
+ .info-label-icon {
381
+ color: #9da6ad;
382
+ min-width: 20px;
383
+
384
+ &.icon-name-vsphere-icon-storage-system-refresh {
385
+ :deep(path) {
386
+ stroke-width: 1.4;
387
+ }
388
+ }
389
+ }
390
+ .info-label {
391
+ margin-top: 1px;
392
+ line-height: 18px;
393
+ color: var(--backups-page-info-block-label-color);
394
+ }
395
+ }
396
+ .empty-description {
397
+ color: #9da6ad;
398
+ margin-top: 1px;
399
+ line-height: 18px;
400
+ text-align: right;
401
+ }
402
+ :deep(.ui-main-info-block-item) {
403
+ grid-column-gap: 10px;
404
+ }
405
+ :deep(.ui-main-info-block-item-right) {
406
+ white-space: unset !important;
407
+ max-width: 50%;
408
+ }
409
+ :deep(.ui-main-info-block-item-right-value-parent) {
410
+ white-space: unset !important;
411
+ }
412
+ :deep(.ui-main-info-block-item-right-value) {
413
+ color: var(--backups-page-info-block-value-color);
414
+ font-size: 13px;
415
+ font-weight: 400;
416
+ line-height: 18px;
417
+ margin-top: 1px;
418
+ }
419
+ :deep(.ui-main-info-block-item-right-open) {
420
+ display: none;
421
+ }
422
+ }
423
+ }
424
+ :root.dark-theme {
425
+ .left-content {
426
+ .delete-all {
427
+ &.disabled {
428
+ opacity: 0.44;
429
+ }
430
+ }
431
+ }
432
+ }
433
+
434
+ @media (max-width: 1200px) {
435
+ .backups-page {
436
+ overflow-y: auto;
437
+
438
+ &.selected {
439
+ grid-template-columns: 1fr;
440
+ grid-template-rows: minmax(189px, 1fr) 1fr;
441
+ }
442
+
443
+ .backups-details {
444
+ height: max-content;
445
+ }
446
+ }
447
+ }
448
+ </style>