bfg-common 1.5.188 → 1.5.190

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.
@@ -2949,6 +2949,7 @@
2949
2949
  "createdHosts": "Створаны хасты",
2950
2950
  "availableZabbixServer": "Даступна на серверы Zabbix",
2951
2951
  "addNew": "Дадаць новы",
2952
+ "addNew2": "Дадаць новы",
2952
2953
  "main": "Асноўны",
2953
2954
  "useIp": "Выкарыстоўвайце IP",
2954
2955
  "ip": "IP",
@@ -3058,7 +3059,11 @@
3058
3059
  "sameFormatAsSource": "Той жа фармат, што і крыніца",
3059
3060
  "thickProvisionLazyZeroed": "Тоўстае выдзяленне з адкладзеным абнуленнем",
3060
3061
  "thickProvisionEagerZeroed": "Тоўстае выдзяленне з неадкладным абнуленнем",
3061
- "thinProvision": "Тонкае выдзяленне"
3062
+ "thinProvision": "Тонкае выдзяленне",
3063
+ "writeThrough": "Скразны запіс",
3064
+ "writeBack": "Адкладзены запіс",
3065
+ "directSync": "Сінхронны прамы запіс",
3066
+ "unsafe": "Небяспечны рэжым"
3062
3067
  },
3063
3068
  "feedback": {
3064
3069
  "additionalDetailsHelp": "Даведка па дадатковых звестках",
@@ -2953,6 +2953,7 @@
2953
2953
  "createdHosts": "Created Hosts",
2954
2954
  "availableZabbixServer": "Available in Zabbix Server",
2955
2955
  "addNew": "Add New",
2956
+ "addNew2": "Add New",
2956
2957
  "main": "Main",
2957
2958
  "useIp": "Use IP",
2958
2959
  "ip": "IP",
@@ -3062,7 +3063,11 @@
3062
3063
  "sameFormatAsSource": "Same Format as source",
3063
3064
  "thickProvisionLazyZeroed": "Thick Provision Lazy Zeroed",
3064
3065
  "thickProvisionEagerZeroed": "Thick Provision Eager Zeroed",
3065
- "thinProvision": "Thin Provision"
3066
+ "thinProvision": "Thin Provision",
3067
+ "writeThrough": "Write Through",
3068
+ "writeBack": "Write Back",
3069
+ "directSync": "Direct Sync",
3070
+ "unsafe": "Unsafe"
3066
3071
  },
3067
3072
  "feedback": {
3068
3073
  "additionalDetailsHelp": "Additional Details Help",
@@ -2953,6 +2953,7 @@
2953
2953
  "createdHosts": "Ստեղծված Հոսթեր",
2954
2954
  "availableZabbixServer": "Հասանելի է Zabbix սերվերում",
2955
2955
  "addNew": "Ավելացնել նոր",
2956
+ "addNew2": "Ավելացնել նորը",
2956
2957
  "main": "Հիմնական",
2957
2958
  "useIp": "Օգտագործվող IP",
2958
2959
  "ip": "IP",
@@ -3062,7 +3063,11 @@
3062
3063
  "sameFormatAsSource": "Նույն ձևաչափը, ինչպես աղբյուրը",
3063
3064
  "thickProvisionLazyZeroed": "Հաստ պահուստ Ծույլ զրոյացում",
3064
3065
  "thickProvisionEagerZeroed": "Անհամբերի ճարպի պաշարը զրոյացվել է",
3065
- "thinProvision": "Նուրբ պատրաստում"
3066
+ "thinProvision": "Նուրբ պատրաստում",
3067
+ "writeThrough": "Ձայնագրման միջոցով",
3068
+ "writeBack": "Ձայնագրման ուշացում",
3069
+ "directSync": "Սինխրոն ուղիղ ձայնագրություն",
3070
+ "unsafe": "Անապահով ռեժիմ"
3066
3071
  },
3067
3072
  "feedback": {
3068
3073
  "additionalDetailsHelp": "Լրացուցիչ մանրամասներ Օգնություն",
@@ -2952,6 +2952,7 @@
2952
2952
  "createdHosts": "Жасалған хосттар",
2953
2953
  "availableZabbixServer": "Zabbix серверінде қол жетімді",
2954
2954
  "addNew": "Жаңа қосу",
2955
+ "addNew2": "Жаңа қосу",
2955
2956
  "main": "Негізгі",
2956
2957
  "useIp": "IP пайдаланыңыз",
2957
2958
  "ip": "IP",
@@ -3061,7 +3062,11 @@
3061
3062
  "sameFormatAsSource": "Дереккөзбен бірдей пішім",
3062
3063
  "thickProvisionLazyZeroed": "Қалың резерв Жалқау нөлдеу",
3063
3064
  "thickProvisionEagerZeroed": "Шыдамсыз адамның май қоры нөлге дейін қалпына келтірілді",
3064
- "thinProvision": "Жақсы дайындық"
3065
+ "thinProvision": "Жақсы дайындық",
3066
+ "writeThrough": "Жазба арқылы",
3067
+ "writeBack": "Кешіктірілген жазу",
3068
+ "directSync": "Синхронды тікелей жазу",
3069
+ "unsafe": "Қауіпті режим"
3065
3070
  },
3066
3071
  "feedback": {
3067
3072
  "additionalDetailsHelp": "Қосымша мәліметтер анықтамасы",
@@ -1638,7 +1638,7 @@
1638
1638
  "virtualApp": "Виртуальное приложение",
1639
1639
  "virtualDeviceNode": "Узел виртуального устройства",
1640
1640
  "virtualDisk": "Виртуальный диск",
1641
- "virtualFlash": "Виртуальная вспышка",
1641
+ "virtualFlash": " Виртуальный флеш-накопитель",
1642
1642
  "virtualFlashHostSwapCache": "Виртуальный флэш-кэш подкачки хоста",
1643
1643
  "virtualFlashResource": "Виртуальный флэш-ресурс",
1644
1644
  "virtualFlashResourceManagement": "Управление виртуальными флэш-ресурсами",
@@ -2952,6 +2952,7 @@
2952
2952
  "createdHosts": "Созданные хосты",
2953
2953
  "availableZabbixServer": "Доступно на Zabbix сервере",
2954
2954
  "addNew": "Добавить",
2955
+ "addNew2": "Добавить новый",
2955
2956
  "main": "Основной",
2956
2957
  "useIp": "Использовать IP",
2957
2958
  "ip": "IP",
@@ -3061,7 +3062,11 @@
3061
3062
  "sameFormatAsSource": "Тот же формат, что и источник",
3062
3063
  "thickProvisionLazyZeroed": "\"Толстый\" том",
3063
3064
  "thickProvisionEagerZeroed": "\"Толстый\" том с очисткой",
3064
- "thinProvision": "\"Тонкий\" том"
3065
+ "thinProvision": "\"Тонкий\" том",
3066
+ "writeThrough": "Сквозная запись",
3067
+ "writeBack": "Отложенная запись",
3068
+ "directSync": "Синхронная прямая запись",
3069
+ "unsafe": "Небезопасный режим"
3065
3070
  },
3066
3071
  "feedback": {
3067
3072
  "additionalDetailsHelp": "Дополнительная информация Помощь",
@@ -2950,6 +2950,7 @@
2950
2950
  "createdHosts": "创建的主机",
2951
2951
  "availableZabbixServer": "在 Zabbix 服务器中可用",
2952
2952
  "addNew": "添加新内容",
2953
+ "addNew2": "添加新内容",
2953
2954
  "main": "主要的",
2954
2955
  "useIp": "使用IP",
2955
2956
  "ip": "IP",
@@ -3059,7 +3060,11 @@
3059
3060
  "sameFormatAsSource": "与源格式相同",
3060
3061
  "thickProvisionLazyZeroed": "厚储备延迟归零",
3061
3062
  "thickProvisionEagerZeroed": "不耐烦的脂肪供应已归零",
3062
- "thinProvision": "苗条的位置"
3063
+ "thinProvision": "苗条的位置",
3064
+ "writeThrough": "直写式",
3065
+ "writeBack": "延迟录音",
3066
+ "directSync": "同步直接记录",
3067
+ "unsafe": "不安全模式"
3063
3068
  },
3064
3069
  "feedback": {
3065
3070
  "additionalDetailsHelp": "其他详细信息帮助",
@@ -143,8 +143,10 @@
143
143
 
144
144
  /* Table Action */
145
145
  --table-actions-icon: #4d5d69;
146
- --table-actions-icon-hover: #008fd6;
147
- --table-actions-view: #182531;
146
+ --table-actions-icon-hover: #182531;
147
+ --table-actions-icon-active: #008fd6;
148
+ --table-actions-view: #4d5d69;
149
+ --table-actions-view-hover: #182531;
148
150
  --table-actions-remove: #ea3223;
149
151
  --table-actions-bg-hover: #e9ebed66;
150
152
 
@@ -262,7 +264,7 @@
262
264
  --nav-panel-border-color: #495865;
263
265
 
264
266
  //--gutter-bg-color: #25333d; // for old
265
- --gutter-bg-color: #E9EBED1F; // for new
267
+ --gutter-bg-color: #e9ebed1f; // for new
266
268
  --gutter-hover-bg-color: #495a67;
267
269
  --gutter-active-bg-color: #495a67;
268
270
  --gutter-before-bg: rgba(157, 166, 173, 0.32);
@@ -303,7 +305,9 @@
303
305
  /* Table Action */
304
306
  --table-actions-icon: #e9eaec;
305
307
  --table-actions-icon-hover: #ffffff;
306
- --table-actions-view: #ffffff;
308
+ --table-actions-icon-active: #2ba2de;
309
+ --table-actions-view: #e9eaec;
310
+ --table-actions-view-hover: #ffffff;
307
311
  --table-actions-remove: #ea3223;
308
312
  --table-actions-bg-hover: #e9ebed0f;
309
313
 
@@ -9,6 +9,7 @@
9
9
  :is-open="props.isOpen"
10
10
  :portlet-id="props.portletId"
11
11
  :is-loading="props.isLoading"
12
+ :is-last="props.isLast"
12
13
  @toggle="onTogglePortlet"
13
14
  >
14
15
  <template #portletBody="{ isLoadingBody }">
@@ -166,7 +167,7 @@
166
167
  is-without-sizes
167
168
  @click="onAddNew"
168
169
  >
169
- {{ localization.zabbix.addNew }}...
170
+ {{ localization.zabbix.addNew2 }}...
170
171
  </ui-button>
171
172
  <ui-portlet-skeleton-footer v-else />
172
173
  </div>
@@ -217,6 +218,7 @@ const props = defineProps<{
217
218
  type: UI_I_Dropdown
218
219
  bodyItems: UI_I_DataTableBody[]
219
220
  isLoading: boolean
221
+ isLast: boolean
220
222
  }>()
221
223
 
222
224
  const localization = computed<UI_I_Localization>(() => useLocal())
@@ -492,10 +494,12 @@ const onTogglePortlet = (id: string): void => {
492
494
  cursor: pointer;
493
495
  color: var(--table-actions-icon);
494
496
 
495
- &:hover,
496
- &.selected {
497
+ &:hover {
497
498
  color: var(--table-actions-icon-hover);
498
499
  }
500
+ &.selected {
501
+ color: var(--table-actions-icon-active);
502
+ }
499
503
  }
500
504
 
501
505
  .action-remove {
@@ -543,6 +547,7 @@ const onTogglePortlet = (id: string): void => {
543
547
 
544
548
  &:hover {
545
549
  background: var(--table-actions-bg-hover);
550
+ color: var(--table-actions-view-hover);
546
551
  }
547
552
  }
548
553
 
@@ -551,8 +556,7 @@ const onTogglePortlet = (id: string): void => {
551
556
 
552
557
  :deep(button.ui-btn) {
553
558
  line-height: 16px;
554
- margin-bottom: 11px;
555
- margin-left: 6px;
559
+ margin-bottom: 8px;
556
560
  width: fit-content;
557
561
  }
558
562
  }
@@ -142,4 +142,5 @@ export const skeletonData: UI_I_DataTableSkeleton = {
142
142
  columnsCount: 3,
143
143
  withoutPagination: true,
144
144
  withoutHeader: true,
145
+ withoutFilters: true
145
146
  }
@@ -7,6 +7,7 @@
7
7
  :is-open="props.isOpen"
8
8
  :portlet-id="props.portletId"
9
9
  :is-loading="props.isLoading"
10
+ :is-last="props.isLast"
10
11
  class="tags"
11
12
  test-id="tags-portlet"
12
13
  @toggle="onTogglePortlet"
@@ -26,6 +27,7 @@
26
27
  <template #icon="{ item }">
27
28
  <div class="actions-dropdown-button-container">
28
29
  <span
30
+ v-development="true"
29
31
  :id="`actions-tags-${item.data.row}`"
30
32
  :class="[
31
33
  'icon-container',
@@ -54,7 +56,6 @@
54
56
  <span>{{ localization.common.viewDetails }}</span>
55
57
  </div>
56
58
  <div
57
- v-development="true"
58
59
  class="action-remove"
59
60
  data-id="show-remove-tag-dialog-action"
60
61
  @click="onShowRemoveDialog(item.data.row)"
@@ -138,6 +139,7 @@ const props = defineProps<{
138
139
  selectedItemName: string
139
140
  bodyItems: UI_I_DataTableBody[]
140
141
  isLoading: boolean
142
+ isLast: boolean
141
143
  }>()
142
144
 
143
145
  const emits = defineEmits<{
@@ -363,10 +365,12 @@ const onTogglePortlet = (id: string): void => {
363
365
  cursor: pointer;
364
366
  color: var(--table-actions-icon);
365
367
 
366
- &:hover,
367
- &.selected {
368
+ &:hover {
368
369
  color: var(--table-actions-icon-hover);
369
370
  }
371
+ &.selected {
372
+ color: var(--table-actions-icon-active);
373
+ }
370
374
  }
371
375
 
372
376
  .action-remove {
@@ -407,6 +411,7 @@ const onTogglePortlet = (id: string): void => {
407
411
 
408
412
  &:hover {
409
413
  background: var(--table-actions-bg-hover);
414
+ color: var(--table-actions-view-hover);
410
415
  }
411
416
  }
412
417
 
@@ -415,8 +420,7 @@ const onTogglePortlet = (id: string): void => {
415
420
 
416
421
  :deep(button.ui-btn) {
417
422
  line-height: 16px;
418
- margin-bottom: 11px;
419
- margin-left: 6px;
423
+ margin-bottom: 8px;
420
424
  width: fit-content;
421
425
  }
422
426
  }
@@ -206,4 +206,5 @@ export const skeletonData: UI_I_DataTableSkeleton = {
206
206
  columnsCount: 3,
207
207
  withoutPagination: true,
208
208
  withoutHeader: true,
209
+ withoutFilters: true
209
210
  }
@@ -10,7 +10,10 @@
10
10
  v-if="props.showToggleButton"
11
11
  :class="['panel-toggle', { collapsed: leftPanelCollapsed }]"
12
12
  >
13
- <div v-show="!leftPanelCollapsed">
13
+ <div
14
+ v-show="!leftPanelCollapsed"
15
+ class="left-panel-toggle-content-block"
16
+ >
14
17
  <slot name="toggleContent" />
15
18
  </div>
16
19
  <button
@@ -207,7 +210,7 @@ onUnmounted(() => {
207
210
  :root.is-new-view {
208
211
  --split-horizontal-border-color: #e9ebed;
209
212
  --horizontal-panel-bg-color: #fff;
210
- --trigger-bg-color: #e9ebed;
213
+ --trigger-bg-color: #e9ebeda3;
211
214
  --trigger-color: #213444;
212
215
  --new-gutter-bg-color: #e9ebed;
213
216
  --new-gutter-hover-bg-color: #008fd6;
@@ -1,80 +1,80 @@
1
1
  <template>
2
2
  <div :class="['customize-hardware', themeMode]">
3
3
  <ui-tabs
4
- v-model="selectedNavItem"
5
- :tabs="navItemsLocal"
6
- test-id="vm-wizard-tabs"
7
- type="underline"
8
- class="navigation mx-8"
4
+ v-model="selectedNavItem"
5
+ :tabs="navItemsLocal"
6
+ test-id="vm-wizard-tabs"
7
+ type="underline"
8
+ class="navigation mx-8"
9
9
  />
10
10
  <ui-alert
11
- v-show="props.errors.length"
12
- :messages="props.errors"
13
- status="alert-danger"
14
- test-id="customize-hardware-alert"
15
- class="errors-alert"
16
- @remove="emits('remove-validation-errors')"
11
+ v-show="props.errors.length"
12
+ :messages="props.errors"
13
+ status="alert-danger"
14
+ test-id="customize-hardware-alert"
15
+ class="errors-alert"
16
+ @remove="emits('remove-validation-errors')"
17
17
  />
18
18
 
19
19
  <div v-show="selectedNavItem === 0">
20
20
  <common-vm-actions-common-customize-hardware-virtual-hardware
21
- :vm-name="vmName"
22
- :storage="props.storage"
23
- :max-cpus="props.maxCpus"
24
- :max-memory="props.maxMemory"
25
- :cpu-models="props.cpuModels"
26
- :cpu="props.cpu"
27
- :memory="props.memory"
28
- :is-edit="props.isEdit"
29
- :is-clone="props.isClone"
30
- :state="props.state"
31
- :hard-disks="props.hardDisks"
32
- :cd-dvd-drives="props.cdDvdDrives"
33
- :networks="props.networks"
34
- :networks-table="props.networksTable"
35
- :video-card="props.videoCard"
36
- :usb-controller="props.usbController"
37
- :pci-devices="props.pciDevices"
38
- :nodes="props.nodes"
39
- :files="props.files"
40
- :error-validation-fields="props.errorValidationFields"
41
- :get-datastore-table-func="props.getDatastoreTableFunc"
42
- :datastore="props.datastore"
43
- :vm-cpu-help-text-second="props.vmCpuHelpTextSecond"
44
- :passthrough-devices="props.passthroughDevices"
45
- :mediated-devices="props.mediatedDevices"
46
- :project="props.project"
47
- :guest-machine-type="guestMachineType"
48
- :computeResource="props.computeResource"
49
- @send-data="emits('send-data-virtual-hardware-method', $event)"
50
- @get-storage="emits('get-storage', $event)"
51
- @get-folders-or-files="emits('get-folders-or-files', $event)"
52
- @get-active-device-child="emits('get-active-device-child', $event)"
53
- @show-datastore-child="emits('show-datastore-child', $event)"
54
- @remove-error-by-title="emits('remove-error-by-title', $event)"
55
- @invalid="virtualHardwareInvalid = $event"
56
- @get-networks-table="emits('get-networks-table', $event)"
57
- @get-pci-devices="emits('get-pci-devices')"
21
+ :vm-name="vmName"
22
+ :storage="props.storage"
23
+ :max-cpus="props.maxCpus"
24
+ :max-memory="props.maxMemory"
25
+ :cpu-models="props.cpuModels"
26
+ :cpu="props.cpu"
27
+ :memory="props.memory"
28
+ :is-edit="props.isEdit"
29
+ :is-clone="props.isClone"
30
+ :state="props.state"
31
+ :hard-disks="props.hardDisks"
32
+ :cd-dvd-drives="props.cdDvdDrives"
33
+ :networks="props.networks"
34
+ :networks-table="props.networksTable"
35
+ :video-card="props.videoCard"
36
+ :usb-controller="props.usbController"
37
+ :pci-devices="props.pciDevices"
38
+ :nodes="props.nodes"
39
+ :files="props.files"
40
+ :error-validation-fields="props.errorValidationFields"
41
+ :get-datastore-table-func="props.getDatastoreTableFunc"
42
+ :datastore="props.datastore"
43
+ :vm-cpu-help-text-second="props.vmCpuHelpTextSecond"
44
+ :passthrough-devices="props.passthroughDevices"
45
+ :mediated-devices="props.mediatedDevices"
46
+ :project="props.project"
47
+ :guest-machine-type="guestMachineType"
48
+ :computeResource="props.computeResource"
49
+ @send-data="emits('send-data-virtual-hardware-method', $event)"
50
+ @get-storage="emits('get-storage', $event)"
51
+ @get-folders-or-files="emits('get-folders-or-files', $event)"
52
+ @get-active-device-child="emits('get-active-device-child', $event)"
53
+ @show-datastore-child="emits('show-datastore-child', $event)"
54
+ @remove-error-by-title="emits('remove-error-by-title', $event)"
55
+ @invalid="virtualHardwareInvalid = $event"
56
+ @get-networks-table="emits('get-networks-table', $event)"
57
+ @get-pci-devices="emits('get-pci-devices')"
58
58
  />
59
59
  </div>
60
60
  <div v-show="selectedNavItem === 1">
61
61
  <common-vm-actions-common-customize-hardware-vmoptions
62
- v-model:vm-name="vmName"
63
- v-model:guest-machine-type="guestMachineType"
64
- v-model:guest-os-family="guestOsFamily"
65
- v-model:guest-os-version="guestOsVersion"
66
- :hard-disks="props.hardDisksForBootOptions"
67
- :cd-dvd-drives="props.cdDvdDrivesForBootOptions"
68
- :networks="props.networksForBootOptions"
69
- :options="props.options"
70
- :is-edit="props.isEdit"
71
- :is-clone="props.isClone"
72
- :error-validation-fields="props.errorValidationFields"
73
- :state="props.state"
74
- @change-boot-order="emits('change-boot-order', $event)"
75
- @send-data="emits('send-data-vm-options-method', $event)"
76
- @invalid="vmOptionsInvalid = $event"
77
- @remove-error-by-title="emits('remove-error-by-title', $event)"
62
+ v-model:vm-name="vmName"
63
+ v-model:guest-machine-type="guestMachineType"
64
+ v-model:guest-os-family="guestOsFamily"
65
+ v-model:guest-os-version="guestOsVersion"
66
+ :hard-disks="props.hardDisksForBootOptions"
67
+ :cd-dvd-drives="props.cdDvdDrivesForBootOptions"
68
+ :networks="props.networksForBootOptions"
69
+ :options="props.options"
70
+ :is-edit="props.isEdit"
71
+ :is-clone="props.isClone"
72
+ :error-validation-fields="props.errorValidationFields"
73
+ :state="props.state"
74
+ @change-boot-order="emits('change-boot-order', $event)"
75
+ @send-data="emits('send-data-vm-options-method', $event)"
76
+ @invalid="vmOptionsInvalid = $event"
77
+ @remove-error-by-title="emits('remove-error-by-title', $event)"
78
78
  />
79
79
  </div>
80
80
  </div>
@@ -122,8 +122,8 @@ const selectedNavItem = defineModel<UI_T_SelectedNavItem>('selectedNavItem', {
122
122
  required: true,
123
123
  })
124
124
  const guestMachineType = defineModel<UI_I_OptionItem | null>(
125
- 'guestMachineType',
126
- { required: true }
125
+ 'guestMachineType',
126
+ { required: true }
127
127
  )
128
128
  const vmOptionsInvalid = defineModel<string[]>('vmOptionsInvalid', {
129
129
  required: true,
@@ -177,8 +177,8 @@ const emits = defineEmits<{
177
177
  (event: 'remove-validation-errors'): void
178
178
  (event: 'send-data-vm-options-method', value: UI_I_SendDataVmoptions): void
179
179
  (
180
- event: 'send-data-virtual-hardware-method',
181
- value: UI_I_SendDataVirtualHardware
180
+ event: 'send-data-virtual-hardware-method',
181
+ value: UI_I_SendDataVirtualHardware
182
182
  ): void
183
183
  (event: 'change-boot-order', value: UI_T_ChangeBootOrder): void
184
184
  }>()
@@ -186,7 +186,7 @@ const emits = defineEmits<{
186
186
  const localization = computed<UI_I_Localization>(() => useLocal())
187
187
 
188
188
  const navItemsLocal = computed<UI_I_TabItem[]>(() =>
189
- navItemsNewViewFunc(localization.value)
189
+ navItemsNewViewFunc(localization.value)
190
190
  )
191
191
 
192
192
  const themeMode = useLocalStorage('themeMode')
@@ -228,6 +228,9 @@ const themeMode = useLocalStorage('themeMode')
228
228
  .ui-checkbox-label {
229
229
  min-height: 32px;
230
230
  }
231
+ .drag-drop-item .ui-checkbox-label {
232
+ min-height: auto;
233
+ }
231
234
  }
232
235
  </style>
233
236
  <style lang="scss">
@@ -262,7 +265,7 @@ const themeMode = useLocalStorage('themeMode')
262
265
  border-color: #e9ebed3d;
263
266
  color: #e9eaec;
264
267
  }
265
- .stack-block-expanded {
268
+ .stack-block-expanded > .stack-block-label {
266
269
  .ui-custom-checkbox {
267
270
  background-color: transparent;
268
271
  }
@@ -292,10 +295,10 @@ const themeMode = useLocalStorage('themeMode')
292
295
  border-color: #9da6ad;
293
296
  }
294
297
  &.open {
295
- border-color: #008FD6;
298
+ border-color: #008fd6;
296
299
 
297
300
  .ui-arrow-icon {
298
- color: #008FD6;
301
+ color: #008fd6;
299
302
  }
300
303
  }
301
304
  .ui-arrow-icon {
@@ -322,7 +325,7 @@ const themeMode = useLocalStorage('themeMode')
322
325
  border-color: #d3d6da14;
323
326
  color: #bdc3c770;
324
327
  }
325
- .stack-block-expanded {
328
+ .stack-block-expanded > .stack-block-label {
326
329
  .ui-custom-checkbox {
327
330
  background-color: transparent;
328
331
  }
@@ -240,9 +240,6 @@ const localization = computed<UI_I_Localization>(() => useLocal())
240
240
  .ui-custom-checkbox {
241
241
  background-color: transparent;
242
242
  }
243
- .ui-checkbox-label-text {
244
- color: #e9eaec;
245
- }
246
243
  }
247
244
  }
248
245
  .dark-theme {
@@ -253,9 +250,6 @@ const localization = computed<UI_I_Localization>(() => useLocal())
253
250
  .ui-custom-checkbox {
254
251
  background-color: transparent;
255
252
  }
256
- .ui-checkbox-label-text {
257
- color: #4d5d69;
258
- }
259
253
  }
260
254
  }
261
255
  </style>
@@ -4,9 +4,9 @@ import type {UI_I_OptionItem} from "~/components/atoms/lib/models/interfaces";
4
4
  export const cacheOptionsFunc = (localization: UI_I_Localization): UI_I_OptionItem[] => {
5
5
  return [
6
6
  { text: localization.common.none2, value: 'none' },
7
- { text: localization.common.writeThrough, value: 'writethrough' },
8
- { text: localization.common.writeBack, value: 'writeback' },
9
- { text: localization.common.directSync, value: 'directsync' },
10
- { text: localization.common.unsafe, value: 'unsafe' },
7
+ { text: localization.vmWizard.writeThrough, value: 'writethrough' },
8
+ { text: localization.vmWizard.writeBack, value: 'writeback' },
9
+ { text: localization.vmWizard.directSync, value: 'directsync' },
10
+ { text: localization.vmWizard.unsafe, value: 'unsafe' },
11
11
  ]
12
12
  }
@@ -8,6 +8,7 @@
8
8
  :items="props.bootList"
9
9
  grab-item-key="text"
10
10
  @drop="emits('change-order', $event)"
11
+ @grab="onGrab"
11
12
  >
12
13
  <template
13
14
  v-for="(item, index) in props.bootList"
@@ -26,7 +27,10 @@
26
27
  #[`rightSide${index}`]
27
28
  >
28
29
  <div :class="['device-icon', item.iconClassName]" />
29
- <span>{{ item.text }}</span>
30
+ <span class="device-name">{{ item.text }}</span>
31
+ </template>
32
+ <template #icon v-if="grabedItem">
33
+ <div :class="['device-icon', grabedItem.iconClassName]" />
30
34
  </template>
31
35
  </ui-drag-drop-list>
32
36
  </template>
@@ -46,6 +50,15 @@ const props = defineProps<{
46
50
  const emits = defineEmits<{
47
51
  (event: 'change-order', value: UI_I_DropEvent): void
48
52
  }>()
53
+
54
+ const grabedItem = ref<any>(null)
55
+ const onGrab = (item: any): void => {
56
+ grabedItem.value = item
57
+ }
49
58
  </script>
50
59
 
51
- <style scoped lang="scss"></style>
60
+ <style scoped lang="scss">
61
+ .device-name {
62
+ margin-left: -4px;
63
+ }
64
+ </style>
@@ -25,7 +25,10 @@
25
25
  {{ localization.common.vmName }}
26
26
  </template>
27
27
  <template #stackBlockContent>
28
- <span>{{ vmName }}</span>
28
+ <div class="vm-name-wrap">
29
+ <span class="vsphere-icon-vm"></span>
30
+ <span>{{ vmName }}</span>
31
+ </div>
29
32
  <!-- <span v-if="!props.isEdit">{{ vmName }}</span>-->
30
33
  <!-- <input-->
31
34
  <!-- v-else-->
@@ -12,6 +12,7 @@
12
12
  :label-text="localization.common.enable"
13
13
  test-id="enable-password-input"
14
14
  size="md"
15
+ class="mr-2"
15
16
  @change="emits('set-password-disable')"
16
17
  />
17
18
 
@@ -27,7 +28,13 @@
27
28
  @change="onChangePassword"
28
29
  >
29
30
  <template #icon>
30
- <div class="pointer" @click="onCopyToClipboard">
31
+ <div
32
+ :class="[
33
+ 'copy-icon pointer',
34
+ { disabled: !isEnabledPassword || props.disabled },
35
+ ]"
36
+ @click="onCopyToClipboard"
37
+ >
31
38
  <ui-icon
32
39
  name="copy-to-clipboard"
33
40
  type="input"
@@ -46,7 +53,12 @@
46
53
  class="generate-password-button"
47
54
  @click="emits('generate-password')"
48
55
  >
49
- <ui-icon name="key" width="16" height="16" />
56
+ <ui-icon
57
+ name="key"
58
+ width="16"
59
+ height="16"
60
+ class="generate-password-icon"
61
+ />
50
62
  </ui-button>
51
63
  </div>
52
64
  </template>
@@ -89,8 +101,21 @@ const onCopyToClipboard = (): void => {
89
101
  grid-template-columns: max-content 144px max-content;
90
102
  grid-gap: 8px;
91
103
 
104
+ .copy-icon {
105
+ color: #9da6ad;
106
+
107
+ &.disabled {
108
+ color: #bdc3c770;
109
+ }
110
+ }
92
111
  .generate-password-button {
93
112
  padding: 8px;
113
+
114
+ &:disabled {
115
+ .generate-password-icon {
116
+ color: #e9eaec;
117
+ }
118
+ }
94
119
  }
95
120
  }
96
121
 
@@ -1,48 +1,48 @@
1
- import type { UI_I_ArbitraryObject } from '~/lib/models/interfaces'
2
- export const enumKeyFromValue = (
3
- enumObj: UI_I_ArbitraryObject<string | number>,
4
- value: string
5
- ): string | undefined => {
6
- // Преобразуем enum в массив пар [ключ, значение] и находим нужную пару
7
- const dataFromEnum = Object.entries(enumObj).find(([_, val]) => val === value)
8
-
9
- // Возвращаем ключ, если найдена пара, иначе undefined
10
- return dataFromEnum ? dataFromEnum[0] : undefined
11
- }
12
-
13
- export const extractContentLastSlash = (
14
- inputString: string,
15
- after = false
16
- ): string => {
17
- const regex = after ? /\/([^/]+)\/?$/ : /(.*)\//
18
-
19
- const match = inputString.match(regex)
20
-
21
- return match ? match[1] : ''
22
- }
23
-
24
- export const intToIp = (value: number): string => {
25
- return [
26
- (value >> 24) & 0xff,
27
- (value >> 16) & 0xff,
28
- (value >> 8) & 0xff,
29
- value & 0xff,
30
- ].join('.')
31
- }
32
-
33
- export const ipToUint32 = (ip: string): number => {
34
- const octets = ip.split('.').map(Number)
35
- if (
36
- octets.length !== 4 ||
37
- octets.some((octet) => isNaN(octet) || octet < 0 || octet > 255)
38
- ) {
39
- return 0
40
- }
41
- return (
42
- (((octets[0] << 24) >>> 0) |
43
- (octets[1] << 16) |
44
- (octets[2] << 8) |
45
- octets[3]) >>>
46
- 0
47
- )
48
- }
1
+ import type { UI_I_ArbitraryObject } from '~/lib/models/interfaces'
2
+ export const enumKeyFromValue = (
3
+ enumObj: UI_I_ArbitraryObject<string | number>,
4
+ value: string
5
+ ): string | undefined => {
6
+ // Преобразуем enum в массив пар [ключ, значение] и находим нужную пару
7
+ const dataFromEnum = Object.entries(enumObj).find(([_, val]) => val === value)
8
+
9
+ // Возвращаем ключ, если найдена пара, иначе undefined
10
+ return dataFromEnum ? dataFromEnum[0] : undefined
11
+ }
12
+
13
+ export const extractContentLastSlash = (
14
+ inputString: string,
15
+ after = false
16
+ ): string => {
17
+ const regex = after ? /\/([^/]+)\/?$/ : /(.*)\//
18
+
19
+ const match = inputString.match(regex)
20
+
21
+ return match ? match[1] : ''
22
+ }
23
+
24
+ export const intToIp = (value: number): string => {
25
+ return [
26
+ (value >> 24) & 0xff,
27
+ (value >> 16) & 0xff,
28
+ (value >> 8) & 0xff,
29
+ value & 0xff,
30
+ ].join('.')
31
+ }
32
+
33
+ export const ipToUint32 = (ip: string): number => {
34
+ const octets = ip.split('.').map(Number)
35
+ if (
36
+ octets.length !== 4 ||
37
+ octets.some((octet) => isNaN(octet) || octet < 0 || octet > 255)
38
+ ) {
39
+ return 0
40
+ }
41
+ return (
42
+ (((octets[0] << 24) >>> 0) |
43
+ (octets[1] << 16) |
44
+ (octets[2] << 8) |
45
+ octets[3]) >>>
46
+ 0
47
+ )
48
+ }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "bfg-common",
3
3
  "private": false,
4
- "version": "1.5.188",
4
+ "version": "1.5.190",
5
5
  "scripts": {
6
6
  "build": "nuxt build",
7
7
  "dev": "nuxt dev --port=3002",
@@ -35,7 +35,7 @@
35
35
  "@vueuse/components": "^10.1.2",
36
36
  "date-fns": "^2.29.3",
37
37
  "bfg-nuxt-3-graph": "1.0.25",
38
- "bfg-uikit": "1.0.417",
38
+ "bfg-uikit": "1.0.421",
39
39
  "html2canvas": "^1.4.1",
40
40
  "prettier-eslint": "^15.0.1"
41
41
  }