bfg-common 1.3.403 → 1.3.404

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 (62) hide show
  1. package/assets/localization/local_be.json +3 -1
  2. package/assets/localization/local_en.json +3 -1
  3. package/assets/localization/local_hy.json +3 -1
  4. package/assets/localization/local_kk.json +3 -1
  5. package/assets/localization/local_ru.json +3 -1
  6. package/assets/localization/local_zh.json +3 -1
  7. package/components/atoms/loader/Loader.vue +30 -30
  8. package/components/atoms/loader/PreLoader.vue +38 -38
  9. package/components/atoms/switch/Switch.vue +111 -111
  10. package/components/atoms/table/compact/Compact.vue +526 -526
  11. package/components/common/adapterManager/ui/table/Header.vue +93 -93
  12. package/components/common/adapterManager/ui/table/Table.vue +162 -162
  13. package/components/common/context/Context.vue +99 -99
  14. package/components/common/lib/config/states.ts +126 -126
  15. package/components/common/resource/progressBlock/ProgressBlock.vue +142 -142
  16. package/components/common/split/horizontal/Horizontal.vue +70 -70
  17. package/components/common/vm/actions/add/Add.vue +602 -602
  18. package/components/common/vm/actions/clone/Clone.vue +518 -518
  19. package/components/common/vm/actions/common/customizeHardware/CustomizeHardware.vue +273 -273
  20. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardware.vue +697 -697
  21. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetwork.vue +304 -304
  22. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/NewPciDevice.vue +167 -167
  23. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newUsbController/NewUsbController.vue +82 -82
  24. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/Other.vue +32 -32
  25. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCard.vue +182 -182
  26. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/BootOptions.vue +114 -114
  27. package/components/common/vm/actions/common/customizeHardware/vmoptions/generalOptions/GeneralOptions.vue +188 -188
  28. package/components/common/vm/actions/common/customizeHardware/vmoptions/tools/Tools.vue +72 -72
  29. package/components/common/vm/actions/common/select/computeResource/ComputeResource.vue +164 -164
  30. package/components/common/vm/actions/common/select/name/Name.vue +235 -235
  31. package/components/common/vm/actions/common/select/storage/Storage.vue +198 -198
  32. package/components/common/vm/actions/editSettings/EditSettings.vue +316 -316
  33. package/components/common/weekSelect/lib/config/options.ts +10 -10
  34. package/components/common/wizards/datastore/add/Add.vue +436 -436
  35. package/components/common/wizards/datastore/add/lib/config/stepItems.ts +191 -191
  36. package/components/common/wizards/datastore/add/lib/models/interfaces.ts +38 -38
  37. package/components/common/wizards/datastore/add/lib/utils.ts +70 -70
  38. package/components/common/wizards/datastore/add/local/createName/CreateName.vue +160 -160
  39. package/components/common/wizards/datastore/add/nfs/Nfs.vue +112 -112
  40. package/components/common/wizards/datastore/add/nfs/accessibility/Accessibility.vue +104 -104
  41. package/components/common/wizards/datastore/add/nfs/accessibility/tablesView/lib/config/compatibleTable.ts +62 -62
  42. package/components/common/wizards/datastore/add/nfs/accessibility/tablesView/lib/config/hostsTableItems.ts +53 -53
  43. package/components/common/wizards/datastore/add/readyComplete/ReadyComplete.vue +86 -86
  44. package/components/common/wizards/datastore/add/readyComplete/lib/config/propertiesDetails.ts +184 -184
  45. package/components/common/wizards/datastore/add/sharedStorm/deviceSelection/DeviceSelection.vue +459 -459
  46. package/components/common/wizards/datastore/add/types/Types.vue +80 -80
  47. package/components/common/wizards/datastore/add/types/lib/config/typeOptions.ts +49 -49
  48. package/composables/useAppVersion.ts +21 -21
  49. package/composables/useEnvLanguage.ts +20 -20
  50. package/lib/utils/sendTask.ts +72 -72
  51. package/minify.js +146 -146
  52. package/package.json +1 -1
  53. package/plugins/spice-console/spice.console.ts +147 -147
  54. package/public/spice-console/application/codec.js +263 -263
  55. package/public/spice-console/lib/rasterEngine.js +907 -907
  56. package/public/spice-console/network/spicechannel.js +375 -375
  57. package/store/main/lib/interfaces.ts +9 -9
  58. package/store/tasks/actions.ts +133 -133
  59. package/store/tasks/getters.ts +25 -25
  60. package/store/tasks/lib/models/interfaces.ts +18 -18
  61. package/store/tasks/mutations.ts +58 -58
  62. package/store/tasks/state.ts +16 -16
@@ -1,167 +1,167 @@
1
- <template>
2
- <div class="hardware-pci-device">
3
- <atoms-stack-block
4
- :has-children="true"
5
- :removable="isRemovable"
6
- @remove="onRemovePciDevice"
7
- >
8
- <template #stackBlockKey>
9
- <div
10
- :id="`vm-wizard-toggle-block-pci-device-${props.index}`"
11
- :data-id="`vm-wizard-toggle-block-pci-device-${props.index}`"
12
- class="flex-align-center"
13
- >
14
- <span>{{ label }}</span>
15
- </div>
16
- </template>
17
- <template #stackBlockContent>
18
- <span class="main-label">
19
- {{ selectedLabel }}
20
- </span>
21
- </template>
22
- <template #stackChildren>
23
- <template v-if="props.type === 'new'">
24
- <common-vm-actions-common-customize-hardware-virtual-hardware-new-pci-device-type-selection
25
- v-model="selectedType"
26
- :options="pciDeviceTypeOptions"
27
- :pci-device-index="props.index"
28
- />
29
-
30
- <common-vm-actions-common-customize-hardware-virtual-hardware-new-pci-device-direct-path-io
31
- v-show="selectedType.value === 'direct_path_io'"
32
- v-model="directPathIo"
33
- :pci-device-index="props.index"
34
- :passthrough-devices="props.passthroughDevices"
35
- />
36
- <common-vm-actions-common-customize-hardware-virtual-hardware-new-pci-device-dynamic-direct-path-io
37
- v-show="selectedType.value === 'dynamic_direct_path_io'"
38
- v-model="dynamicDirectPathIo"
39
- :pci-device-index="props.index"
40
- :passthrough-devices="props.passthroughDevices"
41
- />
42
- <common-vm-actions-common-customize-hardware-virtual-hardware-new-pci-device-nvidia-grid
43
- v-show="selectedType.value === 'nvidia_grid'"
44
- v-model="nvidiaGridProfile"
45
- :pci-device-index="props.index"
46
- />
47
- </template>
48
-
49
- <common-vm-actions-common-customize-hardware-virtual-hardware-new-pci-device-note />
50
- </template>
51
- </atoms-stack-block>
52
- </div>
53
- </template>
54
-
55
- <script setup lang="ts">
56
- import type { UI_I_Localization } from '~/lib/models/interfaces'
57
- import type { UI_I_OptionItem } from '~/components/atoms/lib/models/interfaces'
58
- import type { UI_I_SendDataNewPciDevice } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/models/interfaces'
59
- import type { UI_T_PciDeviceType } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/models/types'
60
- import type { UI_I_PciDevice } from '~/lib/models/store/vm/interfaces'
61
- import { pciDeviceTypeOptionsConfig } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/lib/config/options'
62
-
63
- const props = defineProps<{
64
- index: number
65
- pciDevice: UI_I_SendDataNewPciDevice
66
- passthroughDevices: UI_I_PciDevice[]
67
- type: UI_T_PciDeviceType
68
- isEdit: boolean
69
- state?: string | number
70
- // errorValidationFields: UI_I_ErrorValidationField<string>[]
71
- }>()
72
- const emits = defineEmits<{
73
- (event: 'send-data', value: UI_I_SendDataNewPciDevice): void
74
- (event: 'remove'): void
75
- }>()
76
-
77
- const localization = computed<UI_I_Localization>(() => useLocal())
78
-
79
- const isRunning = computed<boolean>(() => {
80
- return props.state === 2
81
- })
82
-
83
- const isRemovable = computed<boolean>(() => {
84
- return !props.isEdit || !isRunning.value
85
- })
86
-
87
- const label = computed<string>(() => {
88
- if (props.type === 'edit')
89
- return `${localization.value.newPciDevice} ${props.index + 1}`
90
-
91
- return `${localization.value.pciDevice} *`
92
- })
93
-
94
- const selectedLabel = computed<string>(() => {
95
- switch (selectedType.value.value) {
96
- case 'direct_path_io':
97
- return `${directPathIo.value.address}|${directPathIo.value.device_name}`
98
- case 'dynamic_direct_path_io':
99
- return dynamicDirectPathIo.value
100
- default:
101
- return nvidiaGridProfile.value
102
- }
103
- })
104
-
105
- const pciDeviceTypeOptions = ref<UI_I_OptionItem[]>(pciDeviceTypeOptionsConfig)
106
- const selectedType = ref<UI_I_OptionItem>(pciDeviceTypeOptionsConfig[0])
107
-
108
- const directPathIo = ref<UI_I_PciDevice>(props.passthroughDevices[0])
109
- const dynamicDirectPathIo = ref<string>('')
110
- const nvidiaGridProfile = ref<string>('')
111
-
112
- watch(
113
- props.pciDevice,
114
- (newValue) => {
115
- // const passthroughDevice = props.passthroughDevices.find(
116
- // (item) => item.address === newValue.address
117
- // )
118
- // passthroughDevice && (directPathIo.value = passthroughDevice) // Todo change
119
- newValue && (directPathIo.value = newValue)
120
- },
121
- { immediate: true }
122
- )
123
-
124
- const sendData = computed<UI_I_SendDataNewPciDevice>(() => {
125
- switch (selectedType.value.value) {
126
- case 'direct_path_io':
127
- return {
128
- address: directPathIo.value.address,
129
- vendor_name: directPathIo.value.vendor_name,
130
- class_name: directPathIo.value.class_name,
131
- device_name: directPathIo.value.device_name,
132
- }
133
- case 'dynamic_direct_path_io':
134
- return {
135
- address: '',
136
- vendor_name: '',
137
- class_name: '',
138
- device_name: '',
139
- }
140
- default:
141
- return {
142
- address: '',
143
- vendor_name: '',
144
- class_name: '',
145
- device_name: '',
146
- }
147
- }
148
- })
149
-
150
- watch(
151
- sendData,
152
- (newValue) => {
153
- emits('send-data', newValue)
154
- },
155
- { immediate: true }
156
- )
157
-
158
- const onRemovePciDevice = (): void => {
159
- emits('remove')
160
- }
161
- </script>
162
-
163
- <style scoped lang="scss">
164
- #network-connect {
165
- margin-right: 4px;
166
- }
167
- </style>
1
+ <template>
2
+ <div class="hardware-pci-device">
3
+ <atoms-stack-block
4
+ :has-children="true"
5
+ :removable="isRemovable"
6
+ @remove="onRemovePciDevice"
7
+ >
8
+ <template #stackBlockKey>
9
+ <div
10
+ :id="`vm-wizard-toggle-block-pci-device-${props.index}`"
11
+ :data-id="`vm-wizard-toggle-block-pci-device-${props.index}`"
12
+ class="flex-align-center"
13
+ >
14
+ <span>{{ label }}</span>
15
+ </div>
16
+ </template>
17
+ <template #stackBlockContent>
18
+ <span class="main-label">
19
+ {{ selectedLabel }}
20
+ </span>
21
+ </template>
22
+ <template #stackChildren>
23
+ <template v-if="props.type === 'new'">
24
+ <common-vm-actions-common-customize-hardware-virtual-hardware-new-pci-device-type-selection
25
+ v-model="selectedType"
26
+ :options="pciDeviceTypeOptions"
27
+ :pci-device-index="props.index"
28
+ />
29
+
30
+ <common-vm-actions-common-customize-hardware-virtual-hardware-new-pci-device-direct-path-io
31
+ v-show="selectedType.value === 'direct_path_io'"
32
+ v-model="directPathIo"
33
+ :pci-device-index="props.index"
34
+ :passthrough-devices="props.passthroughDevices"
35
+ />
36
+ <common-vm-actions-common-customize-hardware-virtual-hardware-new-pci-device-dynamic-direct-path-io
37
+ v-show="selectedType.value === 'dynamic_direct_path_io'"
38
+ v-model="dynamicDirectPathIo"
39
+ :pci-device-index="props.index"
40
+ :passthrough-devices="props.passthroughDevices"
41
+ />
42
+ <common-vm-actions-common-customize-hardware-virtual-hardware-new-pci-device-nvidia-grid
43
+ v-show="selectedType.value === 'nvidia_grid'"
44
+ v-model="nvidiaGridProfile"
45
+ :pci-device-index="props.index"
46
+ />
47
+ </template>
48
+
49
+ <common-vm-actions-common-customize-hardware-virtual-hardware-new-pci-device-note />
50
+ </template>
51
+ </atoms-stack-block>
52
+ </div>
53
+ </template>
54
+
55
+ <script setup lang="ts">
56
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
57
+ import type { UI_I_OptionItem } from '~/components/atoms/lib/models/interfaces'
58
+ import type { UI_I_SendDataNewPciDevice } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/models/interfaces'
59
+ import type { UI_T_PciDeviceType } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/models/types'
60
+ import type { UI_I_PciDevice } from '~/lib/models/store/vm/interfaces'
61
+ import { pciDeviceTypeOptionsConfig } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/lib/config/options'
62
+
63
+ const props = defineProps<{
64
+ index: number
65
+ pciDevice: UI_I_SendDataNewPciDevice
66
+ passthroughDevices: UI_I_PciDevice[]
67
+ type: UI_T_PciDeviceType
68
+ isEdit: boolean
69
+ state?: string | number
70
+ // errorValidationFields: UI_I_ErrorValidationField<string>[]
71
+ }>()
72
+ const emits = defineEmits<{
73
+ (event: 'send-data', value: UI_I_SendDataNewPciDevice): void
74
+ (event: 'remove'): void
75
+ }>()
76
+
77
+ const localization = computed<UI_I_Localization>(() => useLocal())
78
+
79
+ const isRunning = computed<boolean>(() => {
80
+ return props.state === 2
81
+ })
82
+
83
+ const isRemovable = computed<boolean>(() => {
84
+ return !props.isEdit || !isRunning.value
85
+ })
86
+
87
+ const label = computed<string>(() => {
88
+ if (props.type === 'edit')
89
+ return `${localization.value.newPciDevice} ${props.index + 1}`
90
+
91
+ return `${localization.value.pciDevice} *`
92
+ })
93
+
94
+ const selectedLabel = computed<string>(() => {
95
+ switch (selectedType.value.value) {
96
+ case 'direct_path_io':
97
+ return `${directPathIo.value.address}|${directPathIo.value.device_name}`
98
+ case 'dynamic_direct_path_io':
99
+ return dynamicDirectPathIo.value
100
+ default:
101
+ return nvidiaGridProfile.value
102
+ }
103
+ })
104
+
105
+ const pciDeviceTypeOptions = ref<UI_I_OptionItem[]>(pciDeviceTypeOptionsConfig)
106
+ const selectedType = ref<UI_I_OptionItem>(pciDeviceTypeOptionsConfig[0])
107
+
108
+ const directPathIo = ref<UI_I_PciDevice>(props.passthroughDevices[0])
109
+ const dynamicDirectPathIo = ref<string>('')
110
+ const nvidiaGridProfile = ref<string>('')
111
+
112
+ watch(
113
+ props.pciDevice,
114
+ (newValue) => {
115
+ // const passthroughDevice = props.passthroughDevices.find(
116
+ // (item) => item.address === newValue.address
117
+ // )
118
+ // passthroughDevice && (directPathIo.value = passthroughDevice) // Todo change
119
+ newValue && (directPathIo.value = newValue)
120
+ },
121
+ { immediate: true }
122
+ )
123
+
124
+ const sendData = computed<UI_I_SendDataNewPciDevice>(() => {
125
+ switch (selectedType.value.value) {
126
+ case 'direct_path_io':
127
+ return {
128
+ address: directPathIo.value.address,
129
+ vendor_name: directPathIo.value.vendor_name,
130
+ class_name: directPathIo.value.class_name,
131
+ device_name: directPathIo.value.device_name,
132
+ }
133
+ case 'dynamic_direct_path_io':
134
+ return {
135
+ address: '',
136
+ vendor_name: '',
137
+ class_name: '',
138
+ device_name: '',
139
+ }
140
+ default:
141
+ return {
142
+ address: '',
143
+ vendor_name: '',
144
+ class_name: '',
145
+ device_name: '',
146
+ }
147
+ }
148
+ })
149
+
150
+ watch(
151
+ sendData,
152
+ (newValue) => {
153
+ emits('send-data', newValue)
154
+ },
155
+ { immediate: true }
156
+ )
157
+
158
+ const onRemovePciDevice = (): void => {
159
+ emits('remove')
160
+ }
161
+ </script>
162
+
163
+ <style scoped lang="scss">
164
+ #network-connect {
165
+ margin-right: 4px;
166
+ }
167
+ </style>
@@ -1,82 +1,82 @@
1
- <template>
2
- <div class="hardware-usb-controller">
3
- <atoms-stack-block :has-children="false">
4
- <template #stackBlockKey>
5
- <div
6
- id="vm-wizard-toggle-block-usb-controller"
7
- data-id="vm-wizard-toggle-block-usb-controller"
8
- class="flex-align-center"
9
- >
10
- <span>{{ localization.newUsbController }}</span>
11
- </div>
12
- </template>
13
- <template #stackBlockContent>
14
- <div v-if="props.isEdit">
15
- {{ selectedUsbControllerText }}
16
- </div>
17
- <div v-else class="select">
18
- <select
19
- id="usb-controller-select"
20
- v-model="selectedUsbController"
21
- data-id="usb-controller-select"
22
- :disabled="props.isEdit"
23
- @click.stop
24
- >
25
- <option
26
- v-for="(item, key) in usbControllerOptions"
27
- :key="key"
28
- :value="item.value"
29
- >
30
- {{ item.text }}
31
- </option>
32
- </select>
33
- </div>
34
- </template>
35
- </atoms-stack-block>
36
- </div>
37
- </template>
38
-
39
- <script setup lang="ts">
40
- import { UI_I_OptionItem } from '~/components/atoms/lib/models/interfaces'
41
- import { UI_I_Localization } from '~/lib/models/interfaces'
42
- import { usbControllerOptionsConfig } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/newUsbController/lib/config/options'
43
-
44
- const props = withDefaults(
45
- defineProps<{
46
- usbController: string
47
- isEdit: boolean
48
- state?: string | number
49
- }>(),
50
- {
51
- usbController: 'usb2',
52
- }
53
- )
54
- const emits = defineEmits<{
55
- (event: 'send-data', value: string): void
56
- }>()
57
-
58
- const localization = computed<UI_I_Localization>(() => useLocal())
59
-
60
- const usbControllerOptions = ref<UI_I_OptionItem[]>(usbControllerOptionsConfig)
61
- const selectedUsbController = ref<string>(props.usbController)
62
- const selectedUsbControllerText = computed<string>(
63
- () =>
64
- usbControllerOptions.value.find(
65
- (option) => option.value === selectedUsbController.value
66
- )?.text || ''
67
- )
68
-
69
- watch(
70
- selectedUsbController,
71
- (newValue) => {
72
- emits('send-data', newValue)
73
- },
74
- { immediate: true }
75
- )
76
- </script>
77
-
78
- <style scoped lang="scss">
79
- #network-connect {
80
- margin-right: 4px;
81
- }
82
- </style>
1
+ <template>
2
+ <div class="hardware-usb-controller">
3
+ <atoms-stack-block :has-children="false">
4
+ <template #stackBlockKey>
5
+ <div
6
+ id="vm-wizard-toggle-block-usb-controller"
7
+ data-id="vm-wizard-toggle-block-usb-controller"
8
+ class="flex-align-center"
9
+ >
10
+ <span>{{ localization.newUsbController }}</span>
11
+ </div>
12
+ </template>
13
+ <template #stackBlockContent>
14
+ <div v-if="props.isEdit">
15
+ {{ selectedUsbControllerText }}
16
+ </div>
17
+ <div v-else class="select">
18
+ <select
19
+ id="usb-controller-select"
20
+ v-model="selectedUsbController"
21
+ data-id="usb-controller-select"
22
+ :disabled="props.isEdit"
23
+ @click.stop
24
+ >
25
+ <option
26
+ v-for="(item, key) in usbControllerOptions"
27
+ :key="key"
28
+ :value="item.value"
29
+ >
30
+ {{ item.text }}
31
+ </option>
32
+ </select>
33
+ </div>
34
+ </template>
35
+ </atoms-stack-block>
36
+ </div>
37
+ </template>
38
+
39
+ <script setup lang="ts">
40
+ import { UI_I_OptionItem } from '~/components/atoms/lib/models/interfaces'
41
+ import { UI_I_Localization } from '~/lib/models/interfaces'
42
+ import { usbControllerOptionsConfig } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/newUsbController/lib/config/options'
43
+
44
+ const props = withDefaults(
45
+ defineProps<{
46
+ usbController: string
47
+ isEdit: boolean
48
+ state?: string | number
49
+ }>(),
50
+ {
51
+ usbController: 'usb2',
52
+ }
53
+ )
54
+ const emits = defineEmits<{
55
+ (event: 'send-data', value: string): void
56
+ }>()
57
+
58
+ const localization = computed<UI_I_Localization>(() => useLocal())
59
+
60
+ const usbControllerOptions = ref<UI_I_OptionItem[]>(usbControllerOptionsConfig)
61
+ const selectedUsbController = ref<string>(props.usbController)
62
+ const selectedUsbControllerText = computed<string>(
63
+ () =>
64
+ usbControllerOptions.value.find(
65
+ (option) => option.value === selectedUsbController.value
66
+ )?.text || ''
67
+ )
68
+
69
+ watch(
70
+ selectedUsbController,
71
+ (newValue) => {
72
+ emits('send-data', newValue)
73
+ },
74
+ { immediate: true }
75
+ )
76
+ </script>
77
+
78
+ <style scoped lang="scss">
79
+ #network-connect {
80
+ margin-right: 4px;
81
+ }
82
+ </style>
@@ -1,32 +1,32 @@
1
- <template>
2
- <div class="hardware-other">
3
- <atoms-stack-block :has-children="true">
4
- <template #stackBlockKey>
5
- <div
6
- id="vm-wizard-toggle-block-other"
7
- data-id="vm-wizard-toggle-block-other"
8
- >
9
- <span>{{ localization.other }}</span>
10
- </div>
11
- </template>
12
- <template #stackBlockContent>
13
- <span>{{ localization.additionalHardware }}</span>
14
- </template>
15
- <template #stackChildren>
16
- <common-vm-actions-common-customize-hardware-virtual-hardware-other-input-devices />
17
- </template>
18
- </atoms-stack-block>
19
- </div>
20
- </template>
21
-
22
- <script setup lang="ts">
23
- import { UI_I_Localization } from '~/lib/models/interfaces'
24
-
25
- const localization = computed<UI_I_Localization>(() => useLocal())
26
- </script>
27
-
28
- <style scoped lang="scss">
29
- #network-connect {
30
- margin-right: 4px;
31
- }
32
- </style>
1
+ <template>
2
+ <div class="hardware-other">
3
+ <atoms-stack-block :has-children="true">
4
+ <template #stackBlockKey>
5
+ <div
6
+ id="vm-wizard-toggle-block-other"
7
+ data-id="vm-wizard-toggle-block-other"
8
+ >
9
+ <span>{{ localization.other }}</span>
10
+ </div>
11
+ </template>
12
+ <template #stackBlockContent>
13
+ <span>{{ localization.additionalHardware }}</span>
14
+ </template>
15
+ <template #stackChildren>
16
+ <common-vm-actions-common-customize-hardware-virtual-hardware-other-input-devices />
17
+ </template>
18
+ </atoms-stack-block>
19
+ </div>
20
+ </template>
21
+
22
+ <script setup lang="ts">
23
+ import { UI_I_Localization } from '~/lib/models/interfaces'
24
+
25
+ const localization = computed<UI_I_Localization>(() => useLocal())
26
+ </script>
27
+
28
+ <style scoped lang="scss">
29
+ #network-connect {
30
+ margin-right: 4px;
31
+ }
32
+ </style>